<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Netduino Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/netduino/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/netduino/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Mon, 13 Feb 2017 19:07:04 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Netduino Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/netduino/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Caricare nuovo firmware 4.2 sul Netduino</title>
		<link>https://logicaprogrammabile.it/caricare-nuovo-firmware-42-netduino/</link>
					<comments>https://logicaprogrammabile.it/caricare-nuovo-firmware-42-netduino/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 29 Aug 2012 07:40:33 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[.Net micro framework]]></category>
		<category><![CDATA[Firmware]]></category>
		<category><![CDATA[Netduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3002</guid>

					<description><![CDATA[<p>Come uploadare il firmware compatibile con il .Net micro framework 4.2 sul Netduino Dopo aver caricato il nuovo bootloader sul nostro Netduino non ci resta che caricare il firmware 4.2 per rendere la scheda operativa. Questa operazione deve essere eseguita utilizzando il tools MFdeploy contenuto...</p>
<p>The post <a href="https://logicaprogrammabile.it/caricare-nuovo-firmware-42-netduino/">Caricare nuovo firmware 4.2 sul Netduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come uploadare il firmware compatibile con il .Net micro framework 4.2 sul Netduino</h3>
<p>Dopo aver caricato il <a title="Aggiornare le schede Netduino alla versione 4.2 del .Net MF" href="https://logicaprogrammabile.it/aggiornare-netduino-versione-42-net-micro-framework/">nuovo bootloader sul nostro Netduino</a> non ci resta che caricare il <strong>firmware 4.2</strong> per rendere la scheda operativa. Questa operazione deve essere eseguita utilizzando il tools<strong> MFdeploy</strong> contenuto nella cartella di installazione del <strong>.Net Micro framework 4.2</strong> (che dovete installare precedentemente).<br />
L&#8217;utility si trova, se avete fatto l&#8217;installazione standard, nella cartella C:\Program Files\Microsoft .NET Micro Framework\v4.2\Tools</p>
<p>Una volta avviato MFdeploy, tramite il blocco <strong>Device</strong>, dobbiamo selezionare il Netduino (precedentemente collegato alla porta USB del PC), utilizzando come canale di collegamento la voce USB. Automaticamente otterremmo nella casella di testo adiacente la voce<strong> Netduino_Netduino</strong>. Verifichiamo, utilizzando il pulsante <strong>Ping</strong>, che la comunicazione tra PC e Netduino sia attiva e funzionante.</p>
<p><span id="more-3002"></span></p>
<p>Nel blocco<strong> Image File</strong> clicchiamo sul pulsante<strong> Browse&#8230;</strong> per selezionare sul nostro disco locale, il due file che compongono il firmware (ER_CONFIG, ER_FLASH) da scrivere sul Netduino.<br />
Cliccando sul pulsante <strong>Deploy</strong> avvieremmo la scrittura, l&#8217;operazione richiede qualche minuto.</p>
<p><span style="text-decoration: underline;">Al termine scolleghiamo il Netduino dalla porta USB e ricolleghiamolo dopo qualche istante.</span></p>
<p>Verifichiamo le informazioni del nuovo firmware tramite il menu <strong>Target-&gt;Device Capabilities</strong>, sempre tramite MFdeploy, per accertarci chel&#8217;operazione sia stata eseguita correttamente.</p>
<p>Le immagini seguenti mostrano tutte le fasi descritte precedentemente</p>
<div class="post-content-gallery justify columns3" data-justify="180"></div>
<p>The post <a href="https://logicaprogrammabile.it/caricare-nuovo-firmware-42-netduino/">Caricare nuovo firmware 4.2 sul Netduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/caricare-nuovo-firmware-42-netduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aggiornare le schede Netduino alla versione 4.2 del .Net MF</title>
		<link>https://logicaprogrammabile.it/aggiornare-netduino-versione-42-net-micro-framework/</link>
					<comments>https://logicaprogrammabile.it/aggiornare-netduino-versione-42-net-micro-framework/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 28 Aug 2012 13:44:43 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[.Net micro framework]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[SAM-BA]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2938</guid>

					<description><![CDATA[<p>Come caricare il bootloader e il firmware sul Netduino Con il rilascio della nuova versione del .Net micro framework 4.2 (QFE2) la Secret Labs ha rilasciato un nuovo bootloader e un nuovo firmware per le board Netduino, Netduino Plus e Netduino Mini. Viste le molte...</p>
<p>The post <a href="https://logicaprogrammabile.it/aggiornare-netduino-versione-42-net-micro-framework/">Aggiornare le schede Netduino alla versione 4.2 del .Net MF</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come caricare il bootloader e il firmware sul Netduino</h3>
<p>Con il rilascio della nuova versione del <a href="http://netmf.codeplex.com/releases/view/91594" target="_blank">.Net micro framework 4.2 (QFE2)</a> la <strong>Secret Labs</strong> ha rilasciato un nuovo bootloader e un nuovo firmware per le board <strong>Netduino</strong>, <strong>Netduino Plus</strong> e <strong>Netduino Mini</strong>. Viste le molte novità e migliorie della versione 4.2 consiglio vivamente l&#8217;upgrade delle board.</p>
<p>Le procedure principali sono le seguenti</p>
<ol>
<li>Ricaricare il nuovo bootloader</li>
<li>Ricaricare il nuovo firmware</li>
</ol>
<p>Prima di iniziare dobbiamo scaricare i seguenti software</p>
<ul>
<li><a href="http://forums.netduino.com/index.php?/topic/5115-netduino-firmware-v420/" target="_blank">Firmware 4.2 del Netduino</a> (Contenente anche il nuovo bootloader)</li>
<li><a href="http://forums.netduino.com/index.php?/topic/4-netduino-drivers/" target="_blank">Driver Netduino</a> (Necessario per installare la scheda dop aver caricato il bootloader)</li>
<li><a href="http://netmf.codeplex.com/releases/view/91594" target="_blank">.Net Micro Framework 4.2</a></li>
<li><a href="http://www.atmel.com/tools/ATMELSAM-BAIN-SYSTEMPROGRAMMER.aspx" target="_blank">Atmel SAM-BA versione 2.12 o superiore</a> (Contiene il software ed il driver del chip AT91SAM7X512-ex)</li>
</ul>
<p><span id="more-2938"></span></p>
<p>Installiamo il software<strong> SAM-BA</strong> che useremmo per caricare il bootloader. Di seguito alcuni screen shot dell&#8217;installazione</p>
<div class="post-content-gallery justify columns3" data-justify="180"></div>
<p>Scarichiamo il pacchetto zip contenente il firmware ed il bootloader. Teniamo da parte il file <strong>TinyBooterDecompressor.bin</strong> che caricheremo sul microcontrollore.</p>
<p>Eseguiamo la cancellazione del firmware e del bootloader del <strong>Netduino</strong> utilizzando un filo elettrico che, dal pin 3.3V andrà collegato al piccolo quadrato dorato vicino al pin0.<br />
Alimentiamo per qualche istante il Netduino (tramite USB o alimentazione esterna) tenendo sempre collegato filo sul pad dorato. Togliamo alimentazione. Il nostro dispositivo è ora privo di firmware e di bootloader.</p>
<p>Ricollegando Il Netduino verrà avviata la ricerca <strong>Nuovo Hardware</strong>, annulliamo questa operazione per caricare manualmente i driver del microcontrolloare AT91SAM7X512-ek.</p>
<p>Le seguenti figure mostrano il processo di installazione della scheda</p>
<div class="post-content-gallery justify columns3" data-justify="180"></div>
<p>Una volta che il dispositivo è stato riconosciuto da Windows 7  possiamo caricare il nuovo bootloader.</p>
<p>Clicchiamo sull&#8217;icona SAM-BA v2.12. Nella prima schermata dobbiamo selezionare, alla voce <strong>Select the connection</strong> la porta <strong>COM</strong> dove è collegato il dispositivo, alla voce<strong> Select your board</strong> selezioniamo il chip<strong> AT91SAM7X512-ek</strong>. Clicchiamo sul pulsante <strong>connect</strong>.<br />
Caricata la finestra principale del programma SAM-BA, bisogna, per prima, eseguire due script. Selezioniamo nel blocco <strong>Script</strong> la voce<strong> Boot from flash (GPNVM2)</strong>, clicchiamo sul pulsante <strong>Execute</strong>, successivamente selezioniamo lo script <strong>Enable Flash Access,</strong> clicchiamo sempre su <strong>Execute</strong>.</p>
<p>Ora nel blocco <strong>Download/Upload file</strong>, selezioniamo dalla casella<strong> Send file Name</strong> il file <strong>TinyBooterDecompressor.bin</strong> precedentemente messo da parte sul nostro PC, clicchiamo sul pulsante <strong>Send File</strong>. Dopo qualche istante apparirà una finestra popup per richiedere il <strong>Lock Region</strong>, clicchiamo sul pulsante <strong>NO</strong>.</p>
<p>Se non si verificano errori il bootloader è stato scritto correttamente sul microcontrollore.</p>
<p>Le immagini seguenti mostrano il processo:</p>
<div class="post-content-gallery justify columns3" data-justify="180"></div>
<p>A questo punto scolleghiamo la scheda dalla porta usb per poi ricollegarla dopo qualche istante. Nuovamente verrà avviata l&#8217;installazione nuovo hardware relativa alla scheda Netduino. Seguiamo i passi rappresentati nelle seguenti figure per installare i driver della scheda Netduino:</p>
<div class="post-content-gallery justify columns3" data-justify="180"></div>
<p>Nel prossimo articolo vedremmo come caricare il nuovo firmware.</p>
<p>The post <a href="https://logicaprogrammabile.it/aggiornare-netduino-versione-42-net-micro-framework/">Aggiornare le schede Netduino alla versione 4.2 del .Net MF</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/aggiornare-netduino-versione-42-net-micro-framework/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Calcolare il checksum del tag tramite lettore RFID ID-12 (versione vb.net)</title>
		<link>https://logicaprogrammabile.it/calcolare-il-checksum-tag-lettore-rfid-id12/</link>
					<comments>https://logicaprogrammabile.it/calcolare-il-checksum-tag-lettore-rfid-id12/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 25 Oct 2011 10:29:38 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[Controllo Accessi]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[RFID]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2150</guid>

					<description><![CDATA[<p>Programmare il Netduino con codice vb.net per calcolare il checksum del tag RFID Per chi lavora con vb.net vi allego il codice scritto da Alberto De Luca che gentilmente mi ha concesso per condividerlo con voi. Il listato seguente esegue il calcolo del checksum del...</p>
<p>The post <a href="https://logicaprogrammabile.it/calcolare-il-checksum-tag-lettore-rfid-id12/">Calcolare il checksum del tag tramite lettore RFID ID-12 (versione vb.net)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Programmare il Netduino con codice vb.net per calcolare il checksum del tag RFID</h1>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/04/TagRfid.jpg"><img decoding="async" class="aligncenter size-full wp-image-1029" title="TagRfid" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/TagRfid.jpg" alt="" width="181" height="185" /></a></p>
<p>Per chi lavora con <strong>vb.net</strong> vi allego il codice scritto da <strong>Alberto De Luca</strong> che gentilmente mi ha concesso per condividerlo con voi. Il listato seguente esegue il calcolo del checksum<br />
del tag acquisito con il lettore RFID ID-12 come <a href="https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/" target="_blank">spiegato nell&#8217;articolo precedente</a>.</p>
<p><span id="more-2150"></span></p>
<pre class="lang:vbnet decode:true ">Public Shared Function VerifyCheckSum(b As Byte()) As Boolean

Dim RetValue As Boolean
Dim tag As [Byte]() = New [Byte](9) {}
Dim Hex01 As [Byte], Hex02 As [Byte], Hex03 As [Byte],
Hex04 As [Byte], Hex05 As [Byte], crc As [Byte]

Array.Copy(b, 1, tag, 0, 10)

Dim ValoriAsc As New [String](UTF8Encoding.UTF8.GetChars(tag))

Hex01 = ConvHexToByte(ValoriAsc.Substring(0, 2))
Hex02 = ConvHexToByte(ValoriAsc.Substring(2, 2))
Hex03 = ConvHexToByte(ValoriAsc.Substring(4, 2))
Hex04 = ConvHexToByte(ValoriAsc.Substring(6, 2))
Hex05 = ConvHexToByte(ValoriAsc.Substring(8, 2))

crc = CByte(Hex01 Xor Hex02 Xor Hex03 Xor Hex04 Xor Hex05)

Debug.Print(crc.ToString())

RetValue = (b(0) = &amp;H2 AndAlso b(13) = &amp;HD AndAlso b(14) = &amp;HA AndAlso b(15) = &amp;H3)

Return RetValue

End Function

Private Shared Function ConvHexToByte(Value As String) As Byte

If Value.Length = 2 Then
Dim str1 As [String] = Value.Substring(0, 1)
Dim str2 As [String] = Value.Substring(1, 1)

If str1.ToUpper() = "A" Then
str1 = "10"
End If

If str1.ToUpper() = "B" Then
str1 = "11"
End If

If str1.ToUpper() = "C" Then
str1 = "12"
End If

If str1.ToUpper() = "D" Then
str1 = "13"
End If

If str1.ToUpper() = "E" Then
str1 = "14"
End If

If str1.ToUpper() = "F" Then
str1 = "15"
End If

If str2.ToUpper() = "A" Then
str2 = "10"
End If

If str2.ToUpper() = "B" Then
str2 = "11"
End If

If str2.ToUpper() = "C" Then
str2 = "12"
End If

If str2.ToUpper() = "D" Then
str2 = "13"
End If

If str2.ToUpper() = "E" Then
str2 = "14"
End If

If str2.ToUpper() = "F" Then
str2 = "15"
End If

Dim b1 As [Byte] = [Byte].Parse(str1)
Dim b2 As [Byte] = [Byte].Parse(str2)
Dim cv As [Byte] = CByte(b1 * 16 + b2)

Return cv

End If

Return 0

End Function</pre>
<p>&nbsp;</p>
<p>Potete visitare il blog di <a href="http://community.dotnetwork.it/alberto/Default.aspx" target="_blank">Alberto</a> ed il suo progetto di <a href="http://community.dotnetwork.it/alberto/archive/2011/10/20/netduino-plus-rilevazione-presenze-con-rfid.aspx" target="_blank">Rivelatore presenze con RFID</a>.</p>
<p>The post <a href="https://logicaprogrammabile.it/calcolare-il-checksum-tag-lettore-rfid-id12/">Calcolare il checksum del tag tramite lettore RFID ID-12 (versione vb.net)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/calcolare-il-checksum-tag-lettore-rfid-id12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Semplice classe per utilizzare servomeccanismo</title>
		<link>https://logicaprogrammabile.it/servomeccanismo-semplice-classe/</link>
					<comments>https://logicaprogrammabile.it/servomeccanismo-semplice-classe/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 19 Oct 2011 08:28:54 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[Servo]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2142</guid>

					<description><![CDATA[<p>Classe C# per l&#8217;utilizzo di servomeccanismo con Netduino Per velocizzare lo sviluppo ho scritto una semplicissima classe per rendere semplice l&#8217;utilizzo di un servomeccanismo. In allegato trovate il codice. I metodi esposti sono PosizioneCentrale() -&#62; sposta l&#8217;asse del servo meccanismo nella posizione centrale utilizzando un...</p>
<p>The post <a href="https://logicaprogrammabile.it/servomeccanismo-semplice-classe/">Semplice classe per utilizzare servomeccanismo</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Classe C# per l&#8217;utilizzo di servomeccanismo con Netduino</h1>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/servo.jpg"><img fetchpriority="high" decoding="async" class="aligncenter size-medium wp-image-4815" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/servo-300x225.jpg" alt="servo servomeccanismo" width="300" height="225" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/servo-300x225.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/servo.jpg 500w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Per velocizzare lo sviluppo ho scritto una semplicissima classe per rendere semplice l&#8217;utilizzo di un <a href="https://it.wikipedia.org/wiki/Servomeccanismo" target="_blank">servomeccanismo</a>. In allegato trovate il codice.</p>
<p>I metodi esposti sono</p>
<ul>
<li><strong>PosizioneCentrale()</strong> -&gt; sposta l&#8217;asse del servo meccanismo nella posizione centrale utilizzando un impulso di 1.5ms modificabile tramite la costante POS_CENTRALE</li>
<li><strong>PosizionePiuNovanta()</strong> -&gt; sposta l&#8217;asse del servo meccanismo tutto a destra</li>
<li><strong>PosizioneMenoNovanta()</strong> -&gt; sposta l&#8217;asse del servo meccanismo tutto a sinistra</li>
<li><strong>Posizione(Gradi)</strong> -&gt; Sposta l&#8217;asse del servo meccanismo ad un valore in gradi compreso tra 0° e 180°</li>
<li><strong>Sweep(Cicli)</strong> -&gt; Sposta continuamente, per il numero di cicli specificati, l&#8217;asse del servo meccanismo da 0° a 180° e viceversa</li>
</ul>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Servo.zip">Scarica Servo.cs (3KB)</a></p>
<p>The post <a href="https://logicaprogrammabile.it/servomeccanismo-semplice-classe/">Semplice classe per utilizzare servomeccanismo</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/servomeccanismo-semplice-classe/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Servo SG-5010 come controllarlo con Netduino tramite segnale PWM</title>
		<link>https://logicaprogrammabile.it/netduino-controllare-servo-sg5010/</link>
					<comments>https://logicaprogrammabile.it/netduino-controllare-servo-sg5010/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 18 Oct 2011 08:08:59 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[Duty Cycle]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[PWM]]></category>
		<category><![CDATA[Servo]]></category>
		<category><![CDATA[SG-5010]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2095</guid>

					<description><![CDATA[<p>Utilizzare la classe PWM per controllare un servo 0-180 gradi Il servo meccanismo è un dispositivo capace di eseguire dei movimenti meccanici in funzione del segnale applicato al suo ingresso. Viene utilizzato spesso per eseguire lavori continui, ovvero per controllare meccanismi che non possono essere...</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-controllare-servo-sg5010/">Servo SG-5010 come controllarlo con Netduino tramite segnale PWM</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare la classe PWM per controllare un servo 0-180 gradi</h1>
<p>Il servo meccanismo è un dispositivo capace di eseguire dei movimenti meccanici in funzione del segnale applicato al suo ingresso. Viene utilizzato spesso per eseguire lavori continui, ovvero per controllare meccanismi che non possono essere azionati continuamente da personale umano.  In campo hobbystico viene impegnato per azionamenti a distanza tipici del radio modellismo.</p>
<p style="text-align: center;"><img decoding="async" class="size-full wp-image-2100 aligncenter" title="Servo_SG_5010" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Servo_SG_5010.jpg" alt="Servo meccanismo TowerPro sg-5010" width="396" height="292" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Servo_SG_5010.jpg 396w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/Servo_SG_5010-300x221.jpg 300w" sizes="(max-width: 396px) 100vw, 396px" /></p>
<p><span id="more-2095"></span>Le caratteristiche comuni tra i servo sono principalmente, l&#8217;angolo di rotazione, la velocità di rotazione e la <a href="http://it.wikipedia.org/wiki/Coppia_motrice" target="_blank">coppia motrice</a>.<br />
Il modello <strong>SG-5010</strong> che ho acquistato viene prodotto dalla <a href="http://www.towerpro.com.tw/" target="_blank">TowerPro</a> e le sue caratteristiche tecniche sono elencate nella tabella seguente:</p>
<div align="center">
<table style="width: 383px;" align="center">
<tbody align="center">
<tr>
<td><strong>Segnale di pilotaggio</strong></td>
<td style="text-align: left;">PWM</td>
</tr>
<tr>
<td><strong>Tensione Alimentazione</strong></td>
<td style="text-align: left;">da 4.8Vdc a 6.0 Vdc</td>
</tr>
<tr>
<td><strong>Velocità</strong></td>
<td style="text-align: left;">a 4.8Vdc 0.2  S/60°<br />
a 6.0Vdc 0.16 S/60°</td>
</tr>
<tr>
<td><strong>Coppia</strong></td>
<td style="text-align: left;">a 4.8Vdc 5.5 Kg/cm<br />
a 6.0Vdc 6.5 Kg/cm</td>
</tr>
<tr>
<td><strong>Intervallo di rotazione</strong></td>
<td style="text-align: left;">0 &#8211; 180 gradi</td>
</tr>
<tr>
<td><strong>Peso</strong></td>
<td style="text-align: left;">38g</td>
</tr>
<tr>
<td><strong>Dimensioni</strong></td>
<td style="text-align: left;">40x20x40 mm</td>
</tr>
<tr>
<td><strong>Costo</strong></td>
<td style="text-align: left;">Circa 10 €</td>
</tr>
</tbody>
</table>
</div>
<p>Il suo funzionamento è veramente elementare, tutto si riduce nell&#8217;utilizzo del segnale <a href="http://it.wikipedia.org/wiki/Pulse-width_modulation" target="_blank"><strong>PWM</strong></a> variando il valore di <a title="PWM gestione col Netduino" href="https://logicaprogrammabile.it/netduino-gestione-pwm/">duty cycle</a> tra 1% e 50% .<br />
Per convenienza possiamo alimentare il servo tramite il pin 5Vdc del Netduino, anche se per applicazioni operative consiglio vivamente di alimentare il servo con una tensione esterna, evitando in questo modo di sovraccaricare il Netduino rendendolo instabile.<br />
Il TowerPro Sg-5010 dispone di tre fili con colori che possono essere ambigui infatti il filo marrone deve essere collegato a massa, il filo rosso deve essere collegato alla +5Vdc e il filo arancione va collegato ad un pin PWM del Netduino (Pin 5-6-9-10).</p>
<p>In via generale il segnale PWM tipico deve avere una frequenza di 50Hz (Periodo di 20mS), mentre l&#8217;impulso positivo del segnale deve avere una larghezza compresa tra 1ms e 2ms, infatti per portare l&#8217;asse del servo nella posizione centrale la larghezza dovrà essere di 1.5ms (zero gradi) per portare l&#8217;asse a +90° l&#8217;impulso deve essere largo 2ms mentre per portare l&#8217;asse a -90° l&#8217;impulso dovrà essere largo 1ms.</p>
<p>L&#8217;illustrazione seguente aiuta a capire meglio il funzionamento</p>
<p style="text-align: center;"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2132" title="ServoDutyCycle" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ServoDutyCycle1.gif" alt="Impostazione periodo pwm servo meccanismo" width="564" height="449" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ServoDutyCycle1.gif 564w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/ServoDutyCycle1-300x238.gif 300w" sizes="auto, (max-width: 564px) 100vw, 564px" /></p>
<p>Il codice che andremmo a scrivere dovrà generare un segnale pwm con una frequenza di 50Hz e con un impulso la cui larghezza dovrà variare da 1ms sino a 2ms, questo è possibile utilizzando la classe PWM e il metodo SetPulse(), per maggiori informazioni riguardo questa classe vi consiglio di leggere <a title="PWM gestione col Netduino" href="https://logicaprogrammabile.it/netduino-gestione-pwm/">questo articolo</a></p>
<pre class="lang:c# decode:true ">// Istanzio un oggetto pwm
// Setto il pin 9 come uscita pwm
PWM servo = new PWM(Pins.GPIO_PIN_D9);

while (true)
{
  //imposto una frequenza di circa 50Hz
  //con un impulso di 1.5ms
  //l'asse del servo viene posizionato a 0°
  servo.SetPulse(20000, 1500);
  //attendo 2 secondi
  Thread.Sleep(2000);

  //imposto la frequenza sempre a 50Hz
  //con un impulso di 1ms
  //l'asse del servo si posiziona a -90°
  servo.SetPulse(20000, 1000);
  Thread.Sleep(2000);

  //imposto la frequenza sempre a 50Hz
  //con un impulso di 2ms
  //l'asse del servo si posiziona a +90°
  servo.SetPulse(20000, 2000);
  Thread.Sleep(2000);
}</pre>
<p>&nbsp;</p>
<p>Il codice esegue continuamente, ogni due secondi, la rotazione dell&#8217;asse del servo. Sicuramente i valori di larghezza generati non portano alla rotazione completa dell&#8217;asse del servo, questo perché anche se si ha una certa standardizzazione ci possono essere delle differenze tra i vari modelli.</p>
<p>Quindi sarà necessaria una calibrazione per capire quali sono i valori limite che portano alla rotazione di 180° dell&#8217;asse. Eseguendo il codice precedente potremo vedere se l&#8217;asse compie una manovra di 180° se per esempio non raggiunge i limiti di -90° e +90° possiamo aumentare e diminuire della stessa quantità la larghezza degli impulsi relativa a questi limiti ad esempio portando il valore di 1000 (1ms) a 800 (0.8ms) e il valore di 2000 (2ms) a 2200 (2.2ms).</p>
<p>Tabella riepilogativa</p>
<div align="center">
<table>
<tbody>
<tr>
<td>Gradi Asse Servo</td>
<td>Larghezza impulso</td>
<td>Valore duration da passare alla SetPulse()</td>
</tr>
<tr>
<td style="text-align: center;">0 Gradi</td>
<td style="text-align: center;">1.5ms</td>
<td style="text-align: center;">1500</td>
</tr>
<tr>
<td style="text-align: center;">-90 Gradi</td>
<td style="text-align: center;">1ms</td>
<td style="text-align: center;">1000</td>
</tr>
<tr>
<td style="text-align: center;">+90 Gradi</td>
<td style="text-align: center;">2ms</td>
<td style="text-align: center;">2000</td>
</tr>
</tbody>
</table>
</div>
<p>Col servo in mio possesso ho dovuto cambiare i valori della larghezza dell&#8217;impulso in questo modo</p>
<div align="center">
<table>
<tbody>
<tr>
<td style="text-align: center;" colspan="3">Valori per il mio servo</td>
</tr>
<tr>
<td>Gradi Asse Servo</td>
<td>Larghezza impulso</td>
<td>Valore duration da passare alla SetPulse()</td>
</tr>
<tr>
<td style="text-align: center;">0 Gradi</td>
<td style="text-align: center;">1.5ms</td>
<td style="text-align: center;">1500</td>
</tr>
<tr>
<td style="text-align: center;">-90 Gradi</td>
<td style="text-align: center;">0.6ms</td>
<td style="text-align: center;">600</td>
</tr>
<tr>
<td style="text-align: center;">+90 Gradi</td>
<td style="text-align: center;">2.4ms</td>
<td style="text-align: center;">2400</td>
</tr>
</tbody>
</table>
</div>
<p>In questo modo abbiamo capito quali sono i valori limite per il nostro servo, questo è fondamentale per impostare la larghezza dell&#8217;impulso per spostare l&#8217;asse anche nei valori intermedi.</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-controllare-servo-sg5010/">Servo SG-5010 come controllarlo con Netduino tramite segnale PWM</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/netduino-controllare-servo-sg5010/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Come calcolare il crc del tag con Netduino e lettore RFID ID-12</title>
		<link>https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/</link>
					<comments>https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 13 Oct 2011 16:48:11 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[ID-12]]></category>
		<category><![CDATA[Lettore ID-12]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[RFID]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2080</guid>

					<description><![CDATA[<p>Utilizzare il Netduino per calcolare il crc del tag rfid Nell&#8217;articolo scritto qualche tempo, che mostrava come impiegare un Netduino ed un lettore rfid ID-12 della Innovations, ho descritto solamente la parte che acquisiva l&#8217;id del tag, senza analizzare come calcolare il crc indispensabile per...</p>
<p>The post <a href="https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/">Come calcolare il crc del tag con Netduino e lettore RFID ID-12</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare il Netduino per calcolare il crc del tag rfid</h1>
<p><a title="Netduino gestire lettore RFID ID-12" href="https://logicaprogrammabile.it/netduino-gestire-lettore-id-12/">Nell&#8217;articolo scritto qualche tempo</a>, che mostrava come impiegare un <strong>Netduino</strong> ed un lettore <strong>rfid ID-12</strong> della Innovations, ho descritto solamente la parte che acquisiva l&#8217;id del tag, senza analizzare come calcolare il crc indispensabile per avere la certezza che il dato letto fosse corretto.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1051" title="DataStructureID12" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DataStructureID12.gif" alt="" width="650" height="61" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DataStructureID12.gif 650w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DataStructureID12-300x28.gif 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<p>Riprendo questo argomento su segnalazione di una gentilissima visitatrice <a href="http://community.dotnetwork.it/Sabrina/default.aspx" target="_blank">Sabrina Cosolo</a>, che ringrazio per avermi fatto notare un errore nell&#8217;illustrazione del <a href="http://it.wikipedia.org/wiki/Cyclic_redundancy_check" target="_blank">calcolo del crc</a>, infatti scrissi che i due byte del crc fossero ottenuti ponendo in OR i 10 byte dell&#8217;id del tag.<br />
Questo non è vero in quanto bisogna mettere in XOR i valori esadecimali ottenuti dalla conversione in ASCII dei byte letti dal lettore.</p>
<p><span id="more-2080"></span>Mi spiego meglio impiegando l&#8217;illustrazione seguente</p>
<p style="text-align: center;"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2083" title="Calcolo CRC lettore tag RFFID ID-12" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ID12_CRC.gif" alt="calcolare il crc lettore Innovations ID-12" width="638" height="380" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ID12_CRC.gif 638w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/ID12_CRC-300x178.gif 300w" sizes="auto, (max-width: 638px) 100vw, 638px" /></p>
<p>i 10 byte rappresentano l&#8217;id del tag, mentre i due byte rappresentano il valore di crc. Il calcolo viene eseguito convertendo i singoli byte in valori ASCII, per ottenere 5 valori esadecimali prendendo 2 byte alla volta, come visibile in figura. Eseguendo un calcolo XOR di questi valori esadecimali otteniamo il calore del CRC.</p>
<p>Ora la difficoltà che ho riscontrato è quella di convertire un byte in un valore esadecimale, semplicissimo da fare con il .Net framework ma non altrettanto con la versione micro (non sono riuscito a trovare delle risorse che svolgessero questo compito!), quindi ho scritto un po di codice per arrangiarmi, mi rendo conto che non è il massimo ma diciamo che per questo esempio funziona!!</p>
<p>Ho commentato il codice per spiegare meglio il funzionamento.</p>
<pre class="lang:c# decode:true ">using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

using System.IO.Ports;
using System.Text;

namespace Netduino_ID12Reader
{
public class Program
{
    public static Byte ConvHexToByte(String Value)
    {
      if (Value.Length == 2)
      {
        String str1 = Value.Substring(0, 1);
        String str2 = Value.Substring(1, 1);

        if (str1.ToUpper() == "A")
          str1 = "10";

        if (str1.ToUpper() == "B")
          str1 = "11";

        if (str1.ToUpper() == "C")
          str1 = "12";

        if (str1.ToUpper() == "D")
          str1 = "13";

        if (str1.ToUpper() == "E")
          str1 = "14";

        if (str1.ToUpper() == "F")
          str1 = "15";

        //###########################
        if (str2.ToUpper() == "A")
          str2 = "10";

        if (str2.ToUpper() == "B")
          str2 = "11";

        if (str2.ToUpper() == "C")
          str2 = "12";

        if (str2.ToUpper() == "D")
          str2 = "13";

        if (str2.ToUpper() == "E")
          str2 = "14";

        if (str2.ToUpper() == "F")
          str2 = "15";

        //converto i singoli caratteri in valori byte
        Byte b1 = Byte.Parse(str1);
        Byte b2 = Byte.Parse(str2);
        //onverto i duebyte in un valore hex
        Byte cv = (Byte)(b1 * 16 + b2);

        //Debug.Print(cv.ToString());

        return cv;

      }

      return 0;
    }

    public static void Main()
    {
      SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8);
      OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
      UTF8Encoding asen = new UTF8Encoding();

      //apro la oprta seriale per acquisire i dati dal lettore id-12
      sp.Open();

      while (true)
      {
        Thread.Sleep(200);
        led.Write(false);

        //controllo ciclicamente che arrivino tutti i
        //byte dal lettore
        if (sp.BytesToRead == 16)
        {
          Byte[] b = new Byte[sp.BytesToRead];
          Byte[] tag = new Byte[10];

          Byte Hex01, Hex02, Hex03, Hex04, Hex05, crc;

          //leggo tutti i byte provenienti dal lettore
          sp.Read(b, 0, b.Length);

          //copio i 10 byte dell'ID del tag in un array dedicato
          Array.Copy(b, 1, tag, 0, 10);

          //converto i byte in una stringa ASCII
          String ValoriAsc = new String(UTF8Encoding.UTF8.GetChars(tag));

          //ottengo i valori esadecimali dalla coppia di byte Ascii
          Hex01 = ConvHexToByte(ValoriAsc.Substring(0, 2));
          Hex02 = ConvHexToByte(ValoriAsc.Substring(2, 2));
          Hex03 = ConvHexToByte(ValoriAsc.Substring(4, 2));
          Hex04 = ConvHexToByte(ValoriAsc.Substring(6, 2));
          Hex05 = ConvHexToByte(ValoriAsc.Substring(8, 2));

          //calcolo il crc mettendo in xor i valori hex
          crc = (byte)(Hex01 ^ Hex02 ^ Hex03 ^ Hex04 ^ Hex05);

          //printo il valore di crc
          Debug.Print(crc.ToString());

          if (b[0] == 0x02 &amp;&amp; b[13] == 0xD &amp;&amp; b[14] == 0xA &amp;&amp; b[15] == 0x03)
            led.Write(true);

        }

      }

    }
}
}</pre>
<p>&nbsp;</p>
<p>Il calcolo del crc può risultare utile nel caso di applicazioni dove la certezza di aver letto bene l&#8217;id del tag è fondamentale, come, per esempio in applicazioni come alcune delle applicazioni illustrate <a href="http://it.wikipedia.org/wiki/Radio_Frequency_IDentification#Applicazioni_RFID">nella pagina di wikipedia</a> dedicata al sistema RFID.</p>
<p>Per considerazioni e spiegazioni aggiuntive vi invito a scrivermi nei commenti o tramite mail</p>
<p>al prossimo articolo&#8230;</p>
<p>The post <a href="https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/">Come calcolare il crc del tag con Netduino e lettore RFID ID-12</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pachube, utilizzo con Netduino o Arduino (Introduzione)</title>
		<link>https://logicaprogrammabile.it/pachube-utilizzo-netduino-arduino/</link>
					<comments>https://logicaprogrammabile.it/pachube-utilizzo-netduino-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 28 Jun 2011 14:16:19 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Internet delle cose]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[Pachue]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1681</guid>

					<description><![CDATA[<p>Pachube, come creare un feeds aggiornabile con Netduino o Arduino Pachube è uno dei tanti servizi online che offrono un&#8217;applicazione web aggiornabile tramite dispositivi elettronici come Netduino, Arduino, smartphone, PC o altri sistemi capaci di interagire con Internet. Banalmente possiamo definirlo un &#8220;datalogger on line&#8221;...</p>
<p>The post <a href="https://logicaprogrammabile.it/pachube-utilizzo-netduino-arduino/">Pachube, utilizzo con Netduino o Arduino (Introduzione)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Pachube, come creare un feeds aggiornabile con Netduino o Arduino</h1>
<p>Pachube è uno dei tanti servizi online che offrono un&#8217;applicazione web aggiornabile tramite dispositivi elettronici come Netduino, Arduino, smartphone, PC o altri sistemi capaci di interagire con Internet.<br />
Banalmente possiamo definirlo un &#8220;<a href="http://en.wikipedia.org/wiki/Data_logger" target="_blank">datalogger</a> on line&#8221; capace di registrare dati provenienti dai dispositivi e di creare grafici che ne mostrano l&#8217;andamento nel tempo.<br />
<strong> Pachube</strong> certamente è un buon servizio che dimostra lo sviluppo di applicazioni dell&#8217;<a href="http://it.wikipedia.org/wiki/Internet_delle_cose" target="_blank">Internet delle cose</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1700 size-full" title="logo Pachube" src="https://logicaprogrammabile.it/wp-content/uploads/2011/06/logo.gif" alt="Logo Pachube" width="303" height="94" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/06/logo.gif 303w, https://logicaprogrammabile.it/wp-content/uploads/2011/06/logo-300x93.gif 300w" sizes="auto, (max-width: 303px) 100vw, 303px" /></p>
<p>Anche io ho voluto realizzare la mia applicazione per semplice curiosità e per condividere la mia esperienza.</p>
<p>Iniziamo registrandoci al servizio Pachube. Al momento in cui scrivo sono disponibili tre tipi di piani tariffari, tra cui uno gratuito. La differenza sostanziale tra essi, è il numero di dati che possiamo caricare sul sito e il tempo di memorizzazione degli stessi.<br />
Per una piccola applicazione fortunatamente è sufficiente creare un account gratuito. La registrazione richiede solo pochi dati come il Nome Utente e una casella e-mail valida. Una volta compilati tutti i campi clicchiamo sul pulsante Sign Up, verrà spedita automaticamente una mail contenente il link di attivazione del vostro account. Successivamente l&#8217;attivazione Pachube fornisce una <strong>API Key</strong> che viene utilizzata per autorizzare le nostre applicazioni.</p>
<p><span id="more-1681"></span>Il passo seguente è quello di creare un <strong>feed</strong> per memorizzare i dati inviati da un dispositivo remoto.<br />
Clicchiamo sul link <strong>Create a Feed</strong> dal menu <strong>My Account</strong>. Le informazioni da inserire sono diverse, molto intuitive, che identificano una precisa locazione geografica e il tipo di dispositivo utilizzato.<br />
Prima di salvare <span style="text-decoration: underline;">dobbiamo aggiungere</span> almeno un <strong>datastream</strong>, fondamentale per memorizzare e rappresentare i dati provenienti dal nostro dispositivo.<br />
Clicchiamo su <strong>Add a datastream</strong> per crearne uno. Il campo <strong>ID</strong> serve ad identificare il datastream all&#8217;interno del Feed, può essere un valore numerico o testuale, <strong>Tags</strong> specifica alcune parole chiave descrittive per il datastream, <strong>Units</strong> rappresenta l&#8217;unita di misura per i dati del datastream e <strong>Symbol</strong> rappresenta la dicitura dell&#8217;unità di misura.</p>
<p>I valori realmente necessari per la creazione di un feed sono il suo nome e l&#8217;ID del datastream, gli altri campi possono essere lasciati in bianco ma è comunque <span style="text-decoration: underline;">consigliabile</span> compilarli per dare tutte le informazioni per interpretare i dati e capirne la provenienza.</p>
<p>Salviamo il Feed cliccando sul pulsante <strong>Save</strong>.</p>
<blockquote><p>In questo esempio reale ho creato un Feed che monitorizza il carico della cpu del mio pc, potete osservare i dati recandovi a questo indirizzo http://pachube.com/feeds/28933</p></blockquote>
<p>Pachube aggiorna la finestra mostrando le impostazioni del Feed appena creato. In questa finestra troviamo tre link, JSON, XML e CSV, sotto la voce <strong>Feed Format</strong>. Questi tre formati sono quelli accettati da Pachube per interagire da remoto con il Feed. Quello che preferisco è il formato XML, cliccando sul link viene caricata una nuova finestra che mostra la struttura del file XML. Nella barra degli indirizzi viene mostrato il percorso del file XML.</p>
<p>La documentazione presente sul sito è molto chiara. In questa sezione troviamo il codice XML necessario per aggiornare il Feed (possiamo anche apprendere come leggere, creare e cancellare i Feed da remoto).<br />
Ho modificato il codice XML della guida in base alle impostazioni del Feed e del datastream che ho precedentemente creato:</p>
<pre class="lang:xhtml decode:true ">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;eeml xmlns="http://www.eeml.org/xsd/0.5.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="0.5.1" xsi:schemaLocation="http://www.eeml.org/xsd/0.5.1
http://www.eeml.org/xsd/0.5.1/0.5.1.xsd"&gt;
&lt;environment&gt;

&lt;title&gt;Cpu_Usage&lt;/title&gt;

&lt;status&gt;live&lt;/status&gt;

&lt;description&gt;Monitoraggio Carico CPU&lt;/description&gt;

&lt;tag&gt;Carico Cpu&lt;/tag&gt;
&lt;tag&gt;Monitor&lt;/tag&gt;

&lt;data id="CpuLoad"&gt;
&lt;current_value&gt;10&lt;/current_value&gt;
&lt;max_value&gt;100&lt;/max_value&gt;
&lt;min_value&gt;0&lt;/min_value&gt;
&lt;/data&gt;

&lt;/environment&gt;
&lt;/eeml&gt;
&lt;pre&gt;</pre>
<p>&nbsp;</p>
<p>Prima di creare un applicazione basata su un dispositivo hardware ne ho sviluppato una in C# che permette di testare tutta la procedura per interagire con il Feed.</p>
<p>Il codice si basa sulla classe <strong>WebClient</strong> e permette con alcune righe di codice di eseguire l&#8217;aggiornamento</p>
<pre class="lang:c# decode:true ">String UpdateData1 = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;" +
"&lt;eeml xmlns=\"http://www.eeml.org/xsd/0.5.1\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"version=\"0.5.1\" " +
"xsi:schemaLocation=\"http://www.eeml.org/xsd/0.5.1 " +
"http://www.eeml.org/xsd/0.5.1/0.5.1.xsd\"&gt;&lt;environment&gt;" +
"&lt;status&gt;live&lt;/status&gt;&lt;data id=\"CpuLoad\"&gt;&lt;current_value&gt;";

String UpdateData2 = "&lt;/current_value&gt;&lt;/data&gt;&lt;/environment&gt;&lt;/eeml&gt;";

try
{
String Value = "";
WebClient pachube = new WebClient();

//WebProxy mio_proxy = new WebProxy("Inserire nome proxy", 8080);
//pachube.Proxy = mio_proxy;

pachube.Headers.Add("X-PachubeApiKey", "Inserisci la tua API Key");

//questo codice recupera la percentuale di carico della CPU (testato su win XP)
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2",
 "SELECT * FROM Win32_Processor");

foreach (ManagementObject queryObj in searcher.Get())
{
Value = queryObj["LoadPercentage"].ToString();
}

Byte[] Data = Encoding.UTF8.GetBytes(UpdateData1 + Value + UpdateData2);

pachube.UploadData("Inserisci indirizzo file XML", "PUT", Data);

Console.WriteLine("Aggiornamento eseguito con successo");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}</pre>
<p>&nbsp;</p>
<p>Le prime variabili contengono il codice <strong>XML</strong> che permette di aggiornare il datastream. Ho diviso il listato XML in due parti in modo da inserire, via codice, il dato della variabile <strong>Value</strong> all&#8217;interno dei tag XML <strong>&lt;current_value&gt;&lt;/current_value&gt;</strong>.</p>
<p>Creiamo un&#8217;istanza di oggetto dalla classe <strong>WebClient</strong>, specifichiamo la nostra API key tramite il metodo <strong>Add</strong> della collection <strong>Headers</strong>.<br />
Recuperiamo il valore della percentuale di carico della CPU ed assegnamolo alla variabile <strong>Value</strong>.<br />
Creiamo la stringa XML completa e convertiamola in un array di Byte (necessario per l&#8217;invio tramite WebClient). In fine aggiorniamo il Feed tramite il metodo <strong>UploadData</strong>.<br />
Nel metodo UploadData dobbiamo specificare, come primo parametro, il nome del file .xml relativo al Feed ( recuperabile dai link presenti sotto la voce <strong>Feed Formats</strong>).</p>
<p>Eseguendo questo codice in modo ciclico, ad esempio utilizzando un timer, Pachube realizzerà, con i dati inviati, un grafico sull&#8217;andamento del carico della CPU:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1718 size-medium" title="pachubeGraph" src="https://logicaprogrammabile.it/wp-content/uploads/2011/06/pachubeGraph-300x102.gif" alt="Grafico Pachube" width="300" height="102" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/06/pachubeGraph-300x102.gif 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/06/pachubeGraph.gif 756w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Questi dati vengono memorizzati, nel caso dell&#8217;account free per un mese.</p>
<p>I campi di applicazione di questo servizio sono numerosi, possiamo collegare al pc dei sensori ed inviare i dati ai Feed Pachube e condividerli con la comunità.<br />
Il passo successivo che mi interessa realizzare è il porting di questa applicazione desktop su Netduino o Arduino.</p>
<p>The post <a href="https://logicaprogrammabile.it/pachube-utilizzo-netduino-arduino/">Pachube, utilizzo con Netduino o Arduino (Introduzione)</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/pachube-utilizzo-netduino-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Netduino, linee GPIO configurarle con InputPort e OutputPort</title>
		<link>https://logicaprogrammabile.it/netduino-inputport-outputport-tristateport/</link>
					<comments>https://logicaprogrammabile.it/netduino-inputport-outputport-tristateport/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 13 Jun 2011 08:35:28 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[.Net micro framework]]></category>
		<category><![CDATA[InputPort]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[OutPort]]></category>
		<category><![CDATA[TRiStatePort]]></category>
		<category><![CDATA[Visual C#]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1507</guid>

					<description><![CDATA[<p>InputPort OutputPort come utilizzare e configurare le porte digitali del Netduino Pin digitali La scheda Netduino prende spunto dal progetto Arduino, infatti, la forma della scheda e la disposizione dei connettori è identica a quella di Arduino UNO. I pin digitali sono 14 e possono...</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-inputport-outputport-tristateport/">Netduino, linee GPIO configurarle con InputPort e OutputPort</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>InputPort OutputPort come utilizzare e configurare le porte digitali del Netduino</h1>
<h2>Pin digitali</h2>
<p>La scheda Netduino prende spunto dal progetto Arduino, infatti, la forma della scheda e la disposizione dei connettori è identica a quella di <strong>Arduino UNO</strong>. I pin digitali sono 14 e possono essere configurati via software come ingressi o uscite (InputPort OutputPort). La possibilità di decidere programmaticamente la funzione di ognuno di questi pin permette una elevata flessibilità nell&#8217;adattare Netduino al mondo esterno.</p>
<p>La tensione di lavoro dei pin è di 3.3Vdc ma è possibile lavorare anche con tensioni in ingresso di 5Vdc (TTL). Per quanto riguarda la corrente prelevabile abbiamo valori massimi di 8 mA; i pin 2, 3, e 7 riescono a fornire 16mA massimi.</p>
<p><span style="text-decoration: underline;">I pin sono collegati direttamente al chip Atmel, occorre fare molta attenzione ai collegamenti esterni, un corto circuito o una tensione di sovraccarico potrebbero danneggiare irreparabilmente il microcontrollore.</span></p>
<h2>Configurazione pin in uscita</h2>
<p>Vediamo come configurare un pin digitale in uscita, utilizzando la classe <strong>OutputPort</strong> (Microsoft.SPOT.Hardware.OutputPort). I parametri da passare al costruttore sono l&#8217;identificativo del pin che vogliamo usare come uscita e il suo stato iniziale (Livello logico alto pari a3.3Vdc oppure livello logico basso pari a 0Vdc).<br />
Ecco un esempio che mostra come configurare il pin0 del Netduino come uscita</p>
<pre class="lang:c# decode:true ">//Pin 0 in uscita, inizializzato a livello logico basso
OutputPort pin0 = new OutputPort(Cpu.Pin.GPIO_Pin0, false);</pre>
<p>Se stiamo realizzando un circuito di esempio consiglio di inizializzare la porta in uscita a false (livello logico basso) per evitare di collegare per errore il pin a massa (corto circuito) con conseguente possibile rottura della porta del chip Atmel.<br />
La classe Pins enumera tutte le porte del Netduino disponibili per la configurazione come uscite o ingressi.</p>
<p><span id="more-1507"></span></p>
<p>L&#8217;operazione fondamentale disponibile per il pin è il cambio di livello utilizzando il metodo Write() dell&#8217;oggetto appena istanziato.<br />
Il codice seguente mostra come utilizzare il metodo Write()</p>
<pre class="lang:c# decode:true ">//Mette a livello alto (3.3Vdc) il pin D0
pin0.Write(true);
//Mette a livello basso (0Vdc) il pin D0
pin0.Write(false);
[/csharp]

Sebbene il pin0 sia configurato come uscita, possiamo leggere, tramite il metodo Read(), il livello logico impostato con il metodo Write():

[csharp]
//creo una variabile bool per memorizzare lo stato della porta
Boolean Livello = false;
//Mette a livello alto (3.3Vdc) il pin D0
pin0.Write(true);
//leggo lo stato del livello
Livello = pin0.Read();
//restituisce true
Debug.Print(Livello.ToString());
//Mette a livello basso (0Vdc) il pin D0
pin0.Write(false);
//leggo lo stato del livello
Livello = pin0.Read();
//restituisce false
Debug.Print(Livello.ToString());</pre>
<p>&nbsp;</p>
<p>La proprietà InitialState restituisce lo stato del livello al momento della creazione dell&#8217;oggetto</p>
<pre class="lang:c# decode:true">//creo una variabile bool per memorizzare lo stato della porta
Boolean Livello = false;
//Pin 0 in uscita, inizializzato a livello logico basso
OutputPort pin0 = new OutputPort(Cpu.Pin.GPIO_Pin0, false);
//Mette a livello alto (3.3Vdc) il pin D0
pin0.Write(true);
//leggo lo stato del livello al momento della creazione
//dell'oggetto pin0
Livello = pin0.InitialState;
//restituisce false
Debug.Print(Livello.ToString());</pre>
<p>La proprietà ID fornisce il nome del piedino del microcontrollore Atmel (come definito nel datasheet)</p>
<pre class="lang:c# decode:true ">//Creo un oggetto Pin
Cpu.Pin nomePin;
//Pin 0 in uscita, inizializzato a livello logico basso
OutputPort pin0 = new OutputPort(Cpu.Pin.GPIO_Pin0, false);
//Ottengo il nome del pin riferito al microcontrollore Atmel
nomePin = pin0.Id;
Debug.Print(nomePin.ToString());</pre>
<h2>Configurazione pin in ingresso</h2>
<p>Per accettare segnali in ingresso dobbiamo decidere quali pin utilizzare e configurarli con la classe InputPort (Microsoft.SPOT.Hardware.InputPort). In questo caso i parametri da passare al costruttore sono 3, il primo definisce l&#8217;identificativo del pin da utilizzare come ingresso, il secondo permette di attivare il filtro antirimbalzo (glitch filter) e il terzo permette di attivare l&#8217;eventuale resistenza di pull-up interna al microcontrollore.<br />
Il codice seguente utilizza il pin3 del Netduino come ingresso.</p>
<pre class="lang:c# decode:true ">//Definisco il pin 3 come ingresso, abilito l'antirimbalzo e la reistenza di pullup
InputPort pin3 = new InputPort(Cpu.Pin.GPIO_Pin3, true, Port.ResistorMode.PullUp);</pre>
<p>Il metodo Read() permette di leggere il livello logico presente sul pin di ingresso. Read() restituisce un valore booleano in funzione del livello logico.</p>
<pre class="lang:c# decode:true ">Boolean Livello = false;
//Pin3 in ingresso
InputPort pin3 = new InputPort(Cpu.Pin.GPIO_Pin0, true, Port.ResistorMode.PullUp);
//leggo dal pin3
Livello = pin3.Read();</pre>
<p>Le proprietà esposte dall&#8217;oggetto sono <strong>ID</strong>, <strong>GlitchFilter</strong> e <strong>Resistor</strong></p>
<pre class="lang:c# decode:true ">Boolean Livello = false;
Boolean StatoFiltro= false;
Port.ResistorMode Resistenza;
//Variabile per contenere il nome del pin
Cpu.Pin nomePin;

//nome del pin come indicato nel datasheet del microcontrollore
nomePin = pin3.Id;
Debug.Print(nomePin.ToString());
//stato del filtro antirimbalso
StatoFiltro = pin3.GlitchFilter;
Debug.Print("StatoFiltro " + StatoFiltro.ToString());
//tipo di resistenza selezionato
Resistenza = pin3.Resistor;
Debug.Print("Resistenza " + Resistenza.ToString());</pre>
<p>&nbsp;</p>
<blockquote><p>GlitchFilter</p>
<p>Il filtro antirimbalzo permette di eliminare gli impulsi spurii che si formano nei contatti metallici di un pulsante. All&#8217;atto della chiusura del pulsante il contatto non avviene immediatamente ma esiste un piccolo tempo di assestamento che da luogo a degli impulsi spurii che possono essere interpretati erroneamente dal Netduino. Attivando il filtro, introduciamo un certo ritardo prima di leggere lo stato dell&#8217;ingresso, in questo modo possiamo avere una lettura sicura poichè il contatto meccanico si è ormai stabilizzato.<br />
La figura mostra gli impulsi spurii generati dall&#8217;interruttore:</p>
<p><a href="https://logicaprogrammabile.it/netduino-inputport-outport-tristateport/filter/" rel="attachment wp-att-1541"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1541" title="GlitchFilter" src="https://logicaprogrammabile.it/wp-content/uploads/2011/06/Filter.gif" alt="Filtro antirimbalzo del Netduino" width="307" height="335" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/06/Filter.gif 307w, https://logicaprogrammabile.it/wp-content/uploads/2011/06/Filter-274x300.gif 274w" sizes="auto, (max-width: 307px) 100vw, 307px" /></a></p></blockquote>
<blockquote><p>ResistorMode</p>
<p>Questa proprietà è molto importante perché permette di eseguire delle letture sicure del livello logico in ingresso quando, il circuito esterno, non imposta un riferimento di tensione sul pin. Le resistenze di pull up permettono di forzare un livello logico alto stabile sul pin d&#8217;ingresso. Nel caso del microcontrollore SAM7X possiamo utilizzare solo le resistenze di PullUp, dato che non sono presenti quelle di pull down (Impostando Port.ResistorMode.PullDown otteniamo un eccezione).</p>
<p><a href="https://logicaprogrammabile.it/netduino-inputport-outport-tristateport/pullup/" rel="attachment wp-att-1555"><img loading="lazy" decoding="async" class="aligncenter wp-image-1555 size-full" title="Gestione Resistenza Pull up InputPort OutputPort" src="https://logicaprogrammabile.it/wp-content/uploads/2011/06/PullUp.gif" alt="Impostare le resistenze di Pull-up sul Netduino" width="351" height="524" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/06/PullUp.gif 351w, https://logicaprogrammabile.it/wp-content/uploads/2011/06/PullUp-200x300.gif 200w" sizes="auto, (max-width: 351px) 100vw, 351px" /></a></p></blockquote>
<p>Abbiamo visto che per leggere dai pin dobbiamo richiamare il metodo Read(), quindi se vogliamo tenere sempre sotto controllo lo stato dell&#8217;ingresso è necessario eseguire ciclicamente il metodo Read();  sarebbe comodo un sistema che monitorizzi l&#8217;ingresso in modo da rilevare i cambiamenti di stato. Fortunatamente il Netduino ed il .Net micro framework mettono a disposizione la classe InterruptPort che svolge proprio questa funzionalità.</p>
<h2>Configurazione pin in ingresso con InterruptPort</h2>
<p>La classe InterruptPort permette di utilizzare un pin come ingresso e di eseguire un metodo ogni qualvolta che si verifica un cambiamento di stato su tale pin. Vediamo come configurare un pin in ingresso con la classe InterruptPort</p>
<pre class="lang:c# decode:true ">InterruptPort pin0 = new InterruptPort(Cpu.Pin.GPIO_Pin0, false,
Port.ResistorMode.PullUp,
 Port.InterruptMode.InterruptEdgeBoth);</pre>
<p>Il costruttore è molto simile alla classe InputPort ma in questo caso abbiamo un parametro aggiuntivo che definisce in che modo deve essere generato l&#8217;interrupt per quel pin. Le possibili opzioni sono:</p>
<table>
<tbody>
<tr>
<td><strong> <a id="#Port.InterruptMode.InterruptEdgeBoth"></a> InterruptEdgeBoth</strong></td>
<td>L&#8217;interrupt viene generato sia sul fronte di salita che sul fronte di discesa del segnale in ingresso</td>
</tr>
<tr>
<td><strong>InterruptEdgeHigh</strong></td>
<td>L&#8217;interrupt viene generato solo sul fronte di salita del segnale in ingresso</td>
</tr>
<tr>
<td><strong> <a id="#Port.InterruptMode.InterruptEdgeLevelHigh"></a> InterruptEdgeLevelHigh</strong></td>
<td>L&#8217;interrupt viene generato quando il segnale in ingresso diventa alto</td>
</tr>
<tr>
<td><strong> <a id="#Port.InterruptMode.InterruptEdgeLevelLow"></a> InterruptEdgeLevelLow</strong></td>
<td>L&#8217;interrupt viene generato quando il segnale in ingresso diventa basso</td>
</tr>
<tr>
<td><strong> <a id="#Port.InterruptMode.InterruptEdgeLow"></a> InterruptEdgeLow</strong></td>
<td>L&#8217;interrupt viene generato solo sul fronte di discesa del segnale in ingresso</td>
</tr>
<tr>
<td><strong> <a id="#Port.InterruptMode.InterruptNone"></a> InterruptNone</strong></td>
<td>non viene generato nessun interrupt</td>
</tr>
</tbody>
</table>
<p><a href="https://logicaprogrammabile.it/netduino-inputport-outport-tristateport/interrupt/" rel="attachment wp-att-1584"><img loading="lazy" decoding="async" class="aligncenter wp-image-1584 size-full" title="Gestione Interrupt Netduino InputPort OutputPort" src="https://logicaprogrammabile.it/wp-content/uploads/2011/06/Interrupt.gif" alt="Interrupt segnale in ingresso" width="564" height="311" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/06/Interrupt.gif 564w, https://logicaprogrammabile.it/wp-content/uploads/2011/06/Interrupt-300x165.gif 300w" sizes="auto, (max-width: 564px) 100vw, 564px" /></a></p>
<p>Le opzioni sono diverse e riescono a soddisfare tutte le variazioni di segnale che possono interessare il pin in ingresso.<br />
La parte importante è la possibilità di generare un evento ogni volta che si verifica un&#8217;interrupt. Il codice di esempio mostra come farlo</p>
<pre class="lang:c# decode:true ">public static void Main()
{
//Definisco il pin0 come InterruptPort
//L'interrupt viene generato sul fronte di salita
InterruptPort pin0 = new InterruptPort(Cpu.Pin.GPIO_Pin0, false,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeHigh);
//Creo un evento quando si scatena un interrupt
//Ogni volta che viene generato un evento viene eseguito il metodo EventoPinIngresso
pin0.OnInterrupt += new NativeEventHandler(EventoPinIngresso);

while(true)
{
//eseguo qualcosa
Thread.Sleep(100);
}
}

public static void EventoPinIngresso(uint data1, uint data2, DateTime time)
{
//eseguo qualcosa quando viene generato un interrupt
Debug.Print(data1.ToString());
Debug.Print(data2.ToString());
Debug.Print(time.ToString());
}</pre>
<p>&nbsp;</p>
<p>In questo modo ogni volta che il segnale in ingresso scatena un interrupt, Netduino esegue il codice contenuto in EventoPinIngresso.<br />
La firma del metodo EventoPinIngresso deve contenere due valori <strong>uint</strong> e una <strong>DateTime</strong>. Il primo valore (data1) contiene il numero del pin del microcontrollore, il secondo contiene il livello logico sul pin e il terzo (time) contiene il tempo in cui è stato scatenato l&#8217;evento.<br />
Da notare che la gestione dell&#8217;evento è asincrona e quindi il Netduino continua ad eseguire il codice del ciclo while ed esegue autonomamente il metodo EventoPinIngresso quando si verifica un interrupt.</p>
<p>Questa funzionalità permette di creare codice che reagisce autonomamente agli eventi esterni e fa in modo che il Netduino si adatti meglio alle esigenze progettuali moderne.</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-inputport-outputport-tristateport/">Netduino, linee GPIO configurarle con InputPort e OutputPort</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/netduino-inputport-outputport-tristateport/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Netduino, centralina per impianto di microirrigazione</title>
		<link>https://logicaprogrammabile.it/come-costruire-fai-da-te-centralina-impianto-microirrigazione/</link>
					<comments>https://logicaprogrammabile.it/come-costruire-fai-da-te-centralina-impianto-microirrigazione/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 25 May 2011 08:56:53 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[Impianto idrico]]></category>
		<category><![CDATA[Microirrigazione]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[Orto]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1393</guid>

					<description><![CDATA[<p>Come realizzare centralina di microirrigazione con Netduino Eccoci giunti alla parte più interessante dell&#8217;impianto di microirrigazione proposto negli articoli precedenti. Per il primo prototipo ho deciso di utilizzare il Netduino per eseguire velocemente tutti i test  dell&#8217;impianto e per poter adattare il software alle mie...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-costruire-fai-da-te-centralina-impianto-microirrigazione/">Netduino, centralina per impianto di microirrigazione</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come realizzare centralina di microirrigazione con Netduino</h1>
<p>Eccoci giunti alla parte più interessante dell&#8217;impianto di microirrigazione proposto negli articoli precedenti. Per il primo prototipo ho deciso di utilizzare il Netduino per eseguire velocemente tutti i test  dell&#8217;impianto e per poter adattare il software alle mie esigenze di irrigazione.</p>
<p>Lo schema elettrico del circuito è il seguente</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1494 size-full" title="CentralinaElettronica" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/CentralinaElettronica.gif" alt="Schema elettrico centralina microirrigazione" width="686" height="683" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/CentralinaElettronica.gif 686w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/CentralinaElettronica-150x150.gif 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/CentralinaElettronica-300x298.gif 300w" sizes="auto, (max-width: 686px) 100vw, 686px" /></p>
<p>Il circuito sembra complesso ma molti componenti sono stati utilizzati negli articoli precedenti.<br />
<span id="more-1393"></span>Questo circuito sfrutta maggiormente gli ingressi analogici del Netduino. Sul pin <strong>A0</strong> è collegata la fotoresistenza mentre sul pin <strong>A1 </strong>è collegato il sensore di temperatura. Sia la fotoresistenza che il sensore di temperatura sono alimentati con la <strong>3.3V</strong>.<br />
Gli altri ingressi analogici vengono utilizzati per le tre sonde che verificano l&#8217;umidità del terreno. Ho visto alcuni schemi elettrici che, per misurare la conducibilità del terreno, utilizzando una tensione continua. Questo approccio è molto semplice ma può dare problemi di elettrolisi, e conseguente ossidazione delle sonde poste nel terreno, con conseguente imprecisione della misura.<br />
Per evitare questo problema, possiamo utilizzarne una tensione alternata, in questo caso però dobbiamo successivamente trasformarla in una tensione continua per poterla inviare agli ingressi analogici del Netduino.</p>
<p>Vediamo nel dettaglio il funzionamento della centralina, alcuni argomenti sono stati già esposti e quindi vi rimando alla lettura tramite questi link:</p>
<p>Per il sensore di temperature potete leggere <a title="MCP9700A Netduino e sensore di temperatura analogico" href="https://logicaprogrammabile.it/mcp9700a-netduino-sensore-temperatura-analogico/">questo articolo</a>.<br />
Per il sensore di luminosità tramite fotoresistenza potete fare riferimento a <a title="Usare gli ingressi analogici del Netduino" href="https://logicaprogrammabile.it/netduino-usare-ingressi-analogici/">questo articolo</a>.</p>
<p>La parte nuova da descrivere riguarda il <strong>sensore di umidità</strong>. Come ho detto prima, preferisco alimentare le sonde con un segnale alternato; la soluzione migliore è quella di utilizzare la funzione <strong>PWM</strong> del <strong>Netduino </strong>disponibile sul <strong>pin5</strong>.<br />
Il segnale PWM viene inviato a tre ingressi dell&#8217;integrato 74HC244 (Line Driver) per avere un po più di corrente e disaccoppiare il Netduino delle sonde. Il <strong>duty cycle</strong> del pwm è del 50% e la sua frequenza è di 10Khz, naturalmente questi parametri possono essere variati in base alle esigenze e alla tipologia del terreno.</p>
<p>Quindi, il segnale si propaga nel terreno relativamente alla quantità di acqua presente. L&#8217;altro polo della sonda riceve questo segnale e lo invia al raddrizzatore che provvederà a fornire una tensione continua proporzionale al livello di umidità del terreno.<br />
Il raddrizzatore è composto semplicemente da un diodo e da un condensatore. I diodi contrassegnati con il nome <strong>DP</strong> servono a limitare eventuali extra-tensioni captate dalla sonda.<br />
Il partitore resistivo composto dalle resistenze <strong>R</strong> (da 27Kohm) serve a limitare la tensione sui pin analogici, dato che, il valore massimo applicabile non deve <span style="text-decoration: underline;">essere superiore</span> a 3.3Vdc.</p>
<p>La parte che pilota il solenoide è composta da due relè, questa scelta può sembrare confusa ma penso che sia quella più economica e per capirla, è necessario conoscere  il funzionamento di una elettrovalvola (vedi riquadro)</p>
<blockquote><p>Principalmente esistono due tipi di elettrovalvola, quella monostabile e quella bistabile. L&#8217;elettrovalvola monostabile è alimentata con una tensione alternata mentre quella bistabile con una continua.</p>
<p>Quelle <strong>monostabili </strong>possiedono un posizione stabile che è quella di chiusura della valvola, per aprirla dobbiamo alimentarla costantemente, se l&#8217;alimentazione viene a mancare la valvola ritorna nella sua posizione stabile. Il vantaggio è che se dovesse mancare l&#8217;alimentazione al circuito, mentre l&#8217;irrigazione è in atto, la valvola si chiude e quindi non ci sono problemi di allagamento.<br />
Lo svantaggio è un maggior consumo elettrico poiché le valvole devono essere alimentate per tutto il tempo dell&#8217;irrigazione.</p>
<p>Quelle <strong>bistabili </strong>possiedono due stati stabili, uno per la valvola chiusa e uno per la valvola aperta. Alimentando il solenoide la valvola si apre e rimane aperta anche togliendo l&#8217;alimentazione. Per chiuderla dobbiamo alimentare il solenoide invertendo le polarità, anche in questo caso togliendo l&#8217;alimentazione la valvola rimane chiusa.<br />
Il vantaggio principale e un consumo minimo in termini elettrici, dato che per aprire e chiudere la valvola basta alimentarla per qualche secondo, questo permette di creare automatismi a batteria .<br />
Lo svantaggio è che se succede qualche problema al circuito o all&#8217;alimentazione, mentre la valvola è aperta, questa rimarrà in questo stato creando problemi di allagamento.</p></blockquote>
<p>Nel mio caso, per la realizzazione del circuito, ho utilizzato una piccola basetta mille-fori dove ho alloggiato tutti i componenti del circuito. Per scopi prototipali, potete montare il circuito, anche su una breadboard.</p>
<p>La costruzione delle sonde richiede del comune filo elettrico e due elementi metallici da inserire nel terreno.</p>
<p>Una volta assemblato il circuito e le sonde, possiamo passare allo sviluppo del software. Avendo a disposizione vari input possiamo gestire il nostro <strong>impianto di microirrigazione</strong> adattando diversi algoritmi.</p>
<p>Per una irrigazione efficace dovremmo attivare l&#8217;elettrovalvola nel tardo pomeriggio, quando il sole inizia a tramontare. L&#8217;irrigazione deve avvenire se le sonde indicano una scarsa umidità del terreno. Il sensore di temperature serve per eseguire, ad esempio, una irrigazione aggiuntiva o prolungata, quando le giornate sono più calde.</p>
<p>Comunque sia, l&#8217;algoritmo può variare a seconda delle proprie esigenze, dal tipo di coltura e dalla posizione geografica dell&#8217;orto. Quello che mi interessa ora non è creare un algoritmo perfetto ma spiegare come utilizzare la centralina. Ognuno potrà poi, creare e personalizzare il proprio algoritmo.</p>
<p>La prima cosa da fare è assicurarsi che tutti i sensori del circuito funzionino a dovere. Il codice seguente acquisisce i segnali dagli ingressi analogici.</p>
<blockquote><p>Nota: gli ingressi analogici potrebbero non rispettare la sequenza dello schema elettrico in quanto il prototipo è stato realizzato precedentemente allo schema elettrico</p></blockquote>
<pre class="lang:c# decode:true ">PWM pwmSondeUmidita = new PWM(Pins.GPIO_PIN_D5); //uscita pwm su pin5

AnalogInput SondaTerreno1 = new AnalogInput(Pins.GPIO_PIN_A0);
AnalogInput SondaTerreno2 = new AnalogInput(Pins.GPIO_PIN_A1);
AnalogInput SondaTerreno3 = new AnalogInput(Pins.GPIO_PIN_A2);
AnalogInput FotoSensor = new AnalogInput(Pins.GPIO_PIN_A3);
AnalogInput TempSensor = new AnalogInput(Pins.GPIO_PIN_A4);

//10Khz 50% duty cycle
pwmSondeUmidita.SetPulse(100, 50);

while (true)
{
Debug.Print("SondaTerreno1= " + SondaTerreno1.Read().ToString());
Debug.Print("SondaTerreno2= " + SondaTerreno2.Read().ToString());
Debug.Print("SondaTerreno3= " + SondaTerreno3.Read().ToString());
Debug.Print("SensoreLuce= " + FotoSensor.Read().ToString());
Debug.Print("SensoreTemperatura= " + TempSensor.Read().ToString());

Debug.Print("\n");

//attendo 1 secondo
Thread.Sleep(1000);
}</pre>
<p>&nbsp;</p>
<p>Le sonde <strong>S1</strong>, <strong>S2</strong> ed <strong>S3</strong> devono essere distanziate di qualche decina di centimetri cosi che il segnale di una sonda non interferisca con l&#8217;altra. Per verificarle ho immerso le sonde in 3 bicchieri di acqua diversi.<br />
Nella finestra debug otterremo qualcosa di simile</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1467 size-full" title="Finestra Output" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/Output.png" alt="Dati relativi ai sensori" width="442" height="302" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/Output.png 442w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/Output-300x204.png 300w" sizes="auto, (max-width: 442px) 100vw, 442px" /></p>
<p>Le sonde per il rilevamento dell&#8217;umidità hanno un valore di circa 650-700 quando sono in corto circuito, quando invece non conducono il valore tenderà a 0.<br />
Il sensore di luminosità ha un valore elevato in presenza di forte luce mentre tenderà a 0 in presenza di poca luce.<br />
Il sensore di temperatura ha un valore proporzionale alla temperatura misurata, per ottenere il valore in gradi centigradi vi rimando all&#8217;<a title="MCP9700A Netduino e sensore di temperatura analogico" href="https://logicaprogrammabile.it/mcp9700a-netduino-sensore-temperatura-analogico/">articolo dedicato al sensore</a>.</p>
<p>Eccovi un semplice esempio che può darvi un&#8217;idea di come utilizzare la centralina</p>
<pre class="lang:c# decode:true ">Int32 LumDato = 0;
Int32 TempDato = 0;
Int32 UmSens1Dato = 0;
Int32 UmSens2Dato = 0;
Int32 UmSens3Dato = 0;

Boolean AttivaIrrigazione = false;
Int32 Ciclo = 0;

//Configurazione PWM
PWM pwmSondeUmidita = new PWM(Pins.GPIO_PIN_D5); //uscita pwm su pin5
//Configurazione attuatori (relè)
OutputPort AlimentazioneValvola = new OutputPort(Pins.GPIO_PIN_D7, false);
OutputPort PolarizzazioneValvola = new OutputPort(Pins.GPIO_PIN_D6, false);
//Configuraziobe Ingressi analogici
AnalogInput SondaTerreno1 = new AnalogInput(Pins.GPIO_PIN_A0);
AnalogInput SondaTerreno2 = new AnalogInput(Pins.GPIO_PIN_A1);
AnalogInput SondaTerreno3 = new AnalogInput(Pins.GPIO_PIN_A2);
AnalogInput FotoSensor = new AnalogInput(Pins.GPIO_PIN_A3);
AnalogInput TempSensor = new AnalogInput(Pins.GPIO_PIN_A4);

//10Khz 50% duty cycle
pwmSondeUmidita.SetPulse(100, 50);

while (true)
{
//leggo dal sensore fotosensibile
LumDato = FotoSensor.Read();
//leggo dal sensore 9700a
TempDato = TempSensor.Read();
//leggo dalle sonde
UmSens1Dato = SondaTerreno1.Read();
UmSens2Dato = SondaTerreno2.Read();
UmSens3Dato = SondaTerreno3.Read();

//attendi il tramonto
if (LumDato &lt; 200 &amp;&amp; AttivaIrrigazione == true)
{
//Questa variabile serve per attivare l'irrigazione
//una sola volta dopo che la luminosità scende sotto 200
AttivaIrrigazione = false;

//controllo l'umidità nelle tre sonde
 //Avvia l'irrigazione solo se necessaria (terreno secco)
 if (UmSens1Dato &lt; 300 &amp;&amp; UmSens2Dato &lt; 300 &amp;&amp; UmSens3Dato &lt; 300)
{
//se la temperatura ha un valore elevato irriga
//per un tempo superiore
if (TempDato &gt; 350)
{
//Irrigazione prolungata per alta temperatura

//attivo l'elettrovalvola per un secondo
AlimentazioneValvola.Write(true);
Thread.Sleep(1000);
AlimentazioneValvola.Write(false);

//l'elettrovalvola è attiva
//attendo 40 minuti prima di disattivarla
for (Ciclo = 0; Ciclo &lt;= 2400; Ciclo++)
{
Thread.Sleep(100);
}

//Inverto le polarità del solenoide
//e poi l'alimento per 1 secondo
PolarizzazioneValvola.Write(true);
AlimentazioneValvola.Write(true);
Thread.Sleep(1000);
AlimentazioneValvola.Write(false);
PolarizzazioneValvola.Write(false);
}
else
 {
//Irrigazione Normale
//attivo l'elettrovalvola per un secondo
AlimentazioneValvola.Write(true);
Thread.Sleep(1000);
AlimentazioneValvola.Write(false);

//l'elettrovalvola è attiva
//attendo 15 minuti prima di disattivarla
for (Ciclo = 0; Ciclo &lt;= 900; Ciclo++)
{
Thread.Sleep(1000);
}

//Inverto le polarità del solenoide
//e l'alimento per 1 secondo
PolarizzazioneValvola.Write(true);
AlimentazioneValvola.Write(true);
Thread.Sleep(1000);
AlimentazioneValvola.Write(false);
PolarizzazioneValvola.Write(false);
}
}
}
else if (LumDato &gt; 200)
{
//Rispristina la variabile quando la luminosità
//risale sopra i 200
AttivaIrrigazione = true;
}

Thread.Sleep(500);
}</pre>
<p>&nbsp;</p>
<p>Appena alimentiamo il circuito, Netduino esegue il codice creando gli oggetti per l&#8217;acquisizione dagli ingressi analogici, per generare il segnale pwm e per comandare i due relè, successivamente esegue un ciclo infinito acquisendo i dati dai sensori ogni 500 millisecondi.</p>
<p>Durante il giorno, in presenza di una buona luminosità, il sistema rimane nella fase di acquisizione; appena la luminosità inizia a diminuire, presumibilmente per il calar del sole, il valore acquisito dal pin analogico <strong>A0</strong>, collegato alla fotoresistenza, diminuisce.<br />
Quando questo valore scende sotto la soglia di 200 (variabile in funzione del vostro sistema),  Netduino entra nel primo blocco <strong>if</strong>, dato che, <strong>AttivaIrrigazione</strong> è uguale a True.<br />
Se le tre sonde indicano una bassa umidità del terreno (dato inferiore a 300), Netduino entra nel secondo blocco <strong>if</strong>. A questo punto troviamo un&#8217;altra istruzione <strong>if</strong> che permette di eseguire il codice per attivare l&#8217;elettrovalvola a seconda della temperatura misurata dal sensore 9700a.<br />
Quindi se la temperatura è elevata verrà eseguito il primo blocco <strong>if</strong>, altrimenti verrà eseguito il codice del blocco <strong>else</strong>.<br />
Il codice di questi blocchi è identico, tranne per il ciclo <strong>for </strong>che, per una temperatura elevata, dura maggiormente.</p>
<p>Analizziamo meglio il codice che pilota l&#8217;elettrovalvola</p>
<pre class="lang:c# decode:true ">//Irrigazione Normale
//attivo l'elettrovalvola per un secondo
AlimentazioneValvola.Write(true);
Thread.Sleep(1000);
AlimentazioneValvola.Write(false);

//l'elettrovalvola è attiva
//attendo 15 minuti prima di disattivarla
for (Ciclo = 0; Ciclo &lt;= 900; Ciclo++)
{
Thread.Sleep(1000);
}

//Inverto le polarità del solenoide
//e l'alimento per 1 secondo
PolarizzazioneValvola.Write(true);
AlimentazioneValvola.Write(true);
Thread.Sleep(1000);
AlimentazioneValvola.Write(false);
PolarizzazioneValvola.Write(false);</pre>
<p>&nbsp;</p>
<p>Le istruzioni comandano direttamente i due relè. In condizioni iniziali il <strong>relè2 </strong>permette di alimentare il solenoide per aprire l&#8217;elettrovalvola. Le prime istruzioni attivano il <strong>relè1, </strong>per alimentare per un secondo il solenoide.<br />
Il ciclo <strong>for</strong> serve per creare un ritardo software di diversi minuti (tempo di irrigazione).<br />
Una volta che il ciclo <strong>for</strong> termina, dobbiamo attivare il <strong>relè2</strong> per invertire le polarità di alimentazione del solenoide. Una volta invertite viene attivato il <strong>relè1</strong> per fornire nuovamente tensione al solenoide per circa 1 secondo il quale chiude la valvola, interrompendo l&#8217;irrigazione.<br />
Le ultime istruzioni diseccitano il <strong>relè1</strong> e il <strong>relè2</strong>.</p>
<p>Le illustrazioni seguenti mostrano come avviene la sequenza di azionamento dei relè.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1485 size-full" title="AlimentazioneElettrovalvola" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/AlimentazioneElettrovalvola.gif" alt="Schema di alimentazione elettrovalvola bistabile" width="533" height="446" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/AlimentazioneElettrovalvola.gif 533w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/AlimentazioneElettrovalvola-300x251.gif 300w" sizes="auto, (max-width: 533px) 100vw, 533px" /></p>
<p>Infine la variabile AttivaIrrigazioneviene utilizzata per irrigare una sola volta, altrimenti il ciclo di irrigazione dura finché le sonde S1, S2 ed S3 rilevano una elevata umidità del terreno.</p>
<p>Il codice è molto esemplificativo, serve per dare una linea guida su come utilizzare la centralina. Nulla vieta di utilizzare un algoritmo differente, o di utilizzare codice più efficiente.</p>
<p>Non ci resta che montare il circuito ed andarlo a sperimentare sul campo.</p>
<p>The post <a href="https://logicaprogrammabile.it/come-costruire-fai-da-te-centralina-impianto-microirrigazione/">Netduino, centralina per impianto di microirrigazione</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-costruire-fai-da-te-centralina-impianto-microirrigazione/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Realizzazione impianto microirrigazione per orto</title>
		<link>https://logicaprogrammabile.it/tutorial-realizzarione-impianto-microirrigazione-domestico/</link>
					<comments>https://logicaprogrammabile.it/tutorial-realizzarione-impianto-microirrigazione-domestico/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 15 May 2011 16:54:33 +0000</pubDate>
				<category><![CDATA[Notizie]]></category>
		<category><![CDATA[Autocostruzione]]></category>
		<category><![CDATA[Fai da te]]></category>
		<category><![CDATA[Microirrigazione]]></category>
		<category><![CDATA[Netduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1349</guid>

					<description><![CDATA[<p>Realizzare impianto di microirrigazione fai da te Dopo aver acquistato il materiale necessario alla realizzazione dell&#8217;impianto di microirrigazione sono passato alla pratica con l&#8217;aiuto dei mie familiari. Ho cercato di rispettare lo schema dell&#8217;impianto proposto nel precedente articolo. Per il momento l&#8217;impianto non ha ancora...</p>
<p>The post <a href="https://logicaprogrammabile.it/tutorial-realizzarione-impianto-microirrigazione-domestico/">Realizzazione impianto microirrigazione per orto</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Realizzare impianto di microirrigazione fai da te</h1>
<p>Dopo aver acquistato il materiale necessario alla realizzazione dell&#8217;impianto di <strong>microirrigazione</strong> sono passato alla pratica con l&#8217;aiuto dei mie familiari. Ho cercato di rispettare lo schema dell&#8217;impianto proposto nel <a title="Netduino e irrigazione automatica fai da te (Teoria)" href="https://logicaprogrammabile.it/irrigazione-automatica-netduino/">precedente articolo</a>. Per il momento l&#8217;impianto non ha ancora l&#8217;<strong>elettrovalvola</strong> perché prima vorrei capire quanta corrente assorbe e fare alcuni calcoli per dimensionare la batteria che dovrà garantire una sufficiente autonomia del sistema.</p>
<p>Per motivi logistici non ho potuto documentare la realizzazione dell&#8217;impianto tramite un video. Di seguito alcune foto che illustrano le fasi di realizzazione.</p>
<p>A monte dell&#8217;impianto, ho collegato il filtro, fondamentale per un corretto funzionamento dei gocciolatori.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1352 size-medium" title="Filtro impianto microirrigazione" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0958-225x300.jpg" alt="Filtro per le acque della cisterna" width="225" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0958-225x300.jpg 225w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0958.jpg 375w" sizes="auto, (max-width: 225px) 100vw, 225px" /><span id="more-1349"></span>Il filtro è facilmente accessibile, questo mi permette di eseguire delle manutenzioni regolari come la pulizia dell&#8217;elemento filtrante.<br />
La fase successiva è quella di montare le ale gocciolanti al tubo di mandata principale. Nel mio caso il tubo di mandata è stato realizzato precedentemente per ovvi motivi pratici di assemblaggio delle staffe e foratura del tubo.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1353 size-medium" title="Ala gocciolante" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0968-300x300.jpg" alt="microirrigazione montaggio ala gocciolante al tubo di mandata" width="300" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0968-300x300.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0968-150x150.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0968.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>L&#8217;ala gocciolante è inserita nel portagomma del <strong>microrubinetto</strong> collegato alla presa a staffa del tubo di mandata.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1355 size-medium" title="Inserimento ala Gocciolante" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0980-300x240.jpg" alt="Montaggio dell'ala gocciolante al tubo di mandata" width="300" height="240" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0980-300x240.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0980.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>L&#8217;impianto è composto da 12 tubi di ala gocciolante autocostruita da 16mm</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1356 size-medium" title="DSCF0982" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0982-300x239.jpg" width="300" height="239" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0982-300x239.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0982.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>questo un dettaglio del gocciolatore installato nel tubo di 16mm. In questo caso per motivi illustrativi il gocciolatore è rivolto verso l&#8217;alto ma in fase di irrigazione il gocciolatore deve essere posto in orizzontale.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1354 size-medium" title="Dettaglio gocciolatore" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0972-300x240.jpg" alt="Gocciolatore inserito nel tubo da 16mm" width="300" height="240" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0972-300x240.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0972.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>In prossimità di ogni gocciolatore ho realizzato una piccola buca per creare la sede dove inserire la pianta</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1357 size-medium" title="Creazione sede per pianta" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0985-300x300.jpg" alt="creazione se de in direzione del gocciolatore" width="300" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0985-300x300.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0985-150x150.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0985.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>In ogni sede è stato praticato un foro, in direzione del gocciolatore, per inserire la piantina.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1358 size-medium" title="Creazione foro per allogiamento piantina" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0987-300x300.jpg" alt="Creazione foro per allogiamento piantina" width="300" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0987-300x300.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0987-150x150.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0987.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Ora inseriamo la piantina nel foro e ricopriamo le radici  con un po di terra</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1359 size-medium" title="Inserimento piante nel foro praticato" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0989-300x300.jpg" alt="Inserimento piante nel foro praticato" width="300" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0989-300x300.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0989-150x150.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0989.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Non ci resta che aprire la valvola e collaudare il sistema. Potete osservare come le gocce bagnano una piccola zona del terreno, quella occupata dalle radici della pianta.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1360 size-medium" title="Irrigazione della pianta" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0996-300x300.jpg" alt="Microirrigazione con gocciolatore" width="300" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0996-300x300.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0996-150x150.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DSCF0996.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>E&#8217; consigliabile controllare ogni singolo gocciolatore per verificarne la corretta erogazione. Se qualche gocciolatore ha un flusso superiore agli altri potete intervenire stringendo la sua ghiera. Assicurarsi una omogenea erogazione, è importante per una irrigazione corretta delle piante.</p>
<p>La parte meno <em>nobile</em> del progetto è pronta (a parte l&#8217;installazione della elettrovalvola). Nel prossimo articolo presenterò il circuito della centralina formato da uno shield autocostruito e dal nostro amato <strong>Netduino</strong>.</p>
<p>The post <a href="https://logicaprogrammabile.it/tutorial-realizzarione-impianto-microirrigazione-domestico/">Realizzazione impianto microirrigazione per orto</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/tutorial-realizzarione-impianto-microirrigazione-domestico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
