<?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>Domotica Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/domotica/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/domotica/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Thu, 18 Mar 2021 10:47:02 +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>Domotica Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/domotica/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Pi ZERO il primo Raspberry PI a 5 dollari</title>
		<link>https://logicaprogrammabile.it/pi-zero-primo-raspberry-pi-5-dollari/</link>
					<comments>https://logicaprogrammabile.it/pi-zero-primo-raspberry-pi-5-dollari/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 02 Dec 2015 16:08:11 +0000</pubDate>
				<category><![CDATA[Notizie]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[raspberry]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=4939</guid>

					<description><![CDATA[<p>Pi Zero il computer più economico della storia La fondazione Raspberry PI (www.raspberrypi.org) ci stupisce nuovamente introducendo la piccola PI ZERO, una nuova scheda dalle dimensioni disarmanti e dal costo di appena 5 dollari. Un piccolo computer (o meglio una piccola scheda madre) che permetterà...</p>
<p>The post <a href="https://logicaprogrammabile.it/pi-zero-primo-raspberry-pi-5-dollari/">Pi ZERO il primo Raspberry PI a 5 dollari</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Pi Zero il computer più economico della storia</h1>
<p>La fondazione <strong>Raspberry PI</strong> (<a href="https://www.raspberrypi.org/" target="_blank">www.raspberrypi.org</a>) ci stupisce nuovamente introducendo la piccola <strong>PI ZERO</strong>, una nuova scheda dalle dimensioni disarmanti e dal costo di appena <strong>5 dollari</strong>. Un piccolo <strong>computer</strong> (o meglio una piccola scheda madre) che permetterà di realizzare una miriade di progetti investendo una cifra irrisoria, ala portata di tutti.<br />
Se qualche anno fa eravamo abituati ad avere in allegato alle riviste di tecnologia un dvd in omaggio piuttosto che piccoli gadget elettronici, oggi sembra incredibile vedere la <strong>PI Zero</strong> allegata alla rivista <a href="https://www.raspberrypi.org/magpi/" target="_blank"><strong>MagPI</strong></a>! Un computer in omaggio allegato alla rivista!</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-4965 size-full" title="Raspberry Pi Zero" src="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPI_Zero.png" alt="Raspberry Pi Zero" width="225" height="225" srcset="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPI_Zero.png 225w, https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPI_Zero-150x150.png 150w" sizes="(max-width: 225px) 100vw, 225px" /></p>
<p>Nonostante il prezzo di lancio di 5 dollari, il SoC utilizzato (Broadcom <strong>BCM2835</strong>) è identico a quella della Raspberry PI Model A+ ma con una frequenza da <strong>1GHz </strong>e una Ram da <strong>512MB</strong>.</p>
<p><span id="more-4939"></span></p>
<p>Per capire meglio la famiglia di schede, ho realizzato una tabella comparativa che mostra quali siano le differenze principali tra i vari modelli, allo scopo di avere un riferimento quando vorremo acquistarne una:</p>

<table id="tablepress-1" class="tablepress tablepress-id-1">
<thead>
<tr class="row-1">
	<td class="column-1"></td><th class="column-2"><img decoding="async" src="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPiZero.png" alt="Raspebrry pi Zero" width="112" height="112" class="aligncenter size-full wp-image-4962" /></th><th class="column-3"><img decoding="async" src="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPiA_plus.png" alt="Raspberry PI A+" width="126" height="107" class="aligncenter size-full wp-image-4959" /></th><th class="column-4"><img loading="lazy" decoding="async" src="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPiModelB-150x101.png" alt="Raspberry PI Model B" width="150" height="101" class="aligncenter size-thumbnail wp-image-4960" /></th><th class="column-5"><img loading="lazy" decoding="async" src="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPiModelB_Plus-150x103.png" alt="Raspberry PI Model B Plus" width="150" height="103" class="aligncenter size-thumbnail wp-image-4961" /></th><th class="column-6"><img loading="lazy" decoding="async" src="https://logicaprogrammabile.it/wp-content/uploads/2015/12/RaspberryPi2-150x101.png" alt="Raspberry PI 2 Model B" width="150" height="101" class="aligncenter size-thumbnail wp-image-4958" /></th>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">Raspberry PI</td><td class="column-2">PI ZERO</td><td class="column-3">Model A+</td><td class="column-4">Model B</td><td class="column-5">Model B+</td><td class="column-6"> 2 Model B</td>
</tr>
<tr class="row-3">
	<td class="column-1">Tipo SoC</td><td class="column-2">Broadcom BCM2835</td><td class="column-3">Broadcom BCM2835</td><td class="column-4">Broadcom BCM2835</td><td class="column-5">Broadcom BCM2835</td><td class="column-6">Broadcom BCM2836</td>
</tr>
<tr class="row-4">
	<td class="column-1">Processore</td><td class="column-2">ARMv11 single core</td><td class="column-3">ARMv6 single core</td><td class="column-4">ARMv6 single core</td><td class="column-5">ARMv6 single core</td><td class="column-6">ARMv7 Quad Core</td>
</tr>
<tr class="row-5">
	<td class="column-1">Frequenza CPU</td><td class="column-2">1GHz</td><td class="column-3">700MHz</td><td class="column-4">700MHz</td><td class="column-5">700MHz</td><td class="column-6">900MHz</td>
</tr>
<tr class="row-6">
	<td class="column-1">Ram</td><td class="column-2">512MB SDRAM</td><td class="column-3">256MB SDRAM</td><td class="column-4">256MB SDRAM</td><td class="column-5">512MB SDRAM</td><td class="column-6">1GB SDRAM</td>
</tr>
<tr class="row-7">
	<td class="column-1">Numero Porte USB</td><td class="column-2">1</td><td class="column-3">1</td><td class="column-4">2</td><td class="column-5">4</td><td class="column-6">4</td>
</tr>
<tr class="row-8">
	<td class="column-1">Porta Ethernet</td><td class="column-2">NO</td><td class="column-3">NO</td><td class="column-4">SI</td><td class="column-5">SI</td><td class="column-6">SI</td>
</tr>
<tr class="row-9">
	<td class="column-1">Numero porte GPIO</td><td class="column-2">40</td><td class="column-3">40</td><td class="column-4">26</td><td class="column-5">40</td><td class="column-6">40</td>
</tr>
</tbody>
</table>

<p>Questa nuova scheda a mio parere si candida per essere <strong>impiegata</strong> principalmente nei progetti elettronici del segmento <strong>domotica</strong> e <strong>IoT</strong> poiché il suo basso assorbimento di energia e le dimensioni contenute (lunghezza 65mm, altezza 30mm, Spessore 5mm) sono certamente una caratteristica peculiare.</p>
<p>La tabella seguente compara i vari assorbimenti tra le schede PI</p>

<table id="tablepress-2" class="tablepress tablepress-id-2">
<thead>
<tr class="row-1">
	<td class="column-1"></td><th class="column-2">Zero</th><th class="column-3">A+</th><th class="column-4">B</th><th class="column-5">B+</th><th class="column-6">2B</th>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">IDLE</td><td class="column-2">100mA</td><td class="column-3">100mA</td><td class="column-4">360mA</td><td class="column-5">200mA</td><td class="column-6">230mA</td>
</tr>
<tr class="row-3">
	<td class="column-1">Riproduzione Video Full HD</td><td class="column-2">140mA</td><td class="column-3">140mA</td><td class="column-4">420mA</td><td class="column-5">240mA</td><td class="column-6">290mA</td>
</tr>
</tbody>
</table>

<p>La <strong>ZERO</strong> ha assorbimenti in linea con la A+, nonostante abbia il processore overcloccato a 1GHz. Per progetti dove l&#8217;alimentazione è un punto critico (circuiti alimentati a batteria) si potrebbe agire sui file di configurazione, della distribuzione <strong>Raspbian</strong>, per diminuire la velocità di clock (test che personalmente  non ho provato).</p>
<p>In conclusione credo che questa scheda sia un ottima opportunità per chi ha intenzione di arricchire il proprio bagaglio tecnico in ambiente Linux e per realizzare progetti con un investimento davvero irrisorio.</p>
<p>The post <a href="https://logicaprogrammabile.it/pi-zero-primo-raspberry-pi-5-dollari/">Pi ZERO il primo Raspberry PI a 5 dollari</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/pi-zero-primo-raspberry-pi-5-dollari/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Webduino scheda relè evitare blocco Arduino UNO</title>
		<link>https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/</link>
					<comments>https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 03 Mar 2014 13:49:37 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=4079</guid>

					<description><![CDATA[<p>Come aggiungere relè al progetto senza bloccare la scheda Molti utenti che hanno realizzato il tutorial Scheda relè remota con Arduino e Webduino, dopo aver constatato il funzionamento del codice hanno poi implementato il codice per la gestione di ulteriori relè. A questo punto si...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/">Webduino scheda relè evitare blocco Arduino UNO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come aggiungere relè al progetto senza bloccare la scheda</h3>
<p>Molti utenti che hanno realizzato il tutorial <a href="https://logicaprogrammabile.it/2012/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a>, dopo aver constatato il funzionamento del codice hanno poi implementato il codice per la <strong>gestione di ulteriori relè</strong>. A questo punto si sono accorti che il codice smette di funzionare e <strong>Arduino UNO</strong> sembra <strong>bloccata</strong>.<br />
Tutto ciò avviene perché aggiungendo istruzioni contenenti stringhe ad un certo punto si arriva a <strong>saturare</strong> la memoria <strong>SRAM</strong>, questo è il motivo per cui la scheda va in blocco. La <strong>mancanza</strong> di memoria <strong>SRAM</strong> di fatto non permette di eseguire le istruzioni del nostro sketch.</p>
<p>Come è possibile <strong>risolvere</strong> il problema senza aumentare la memoria <strong>SRAM</strong>?</p>
<p>Sapiamo che la scheda possiede anche una <strong>memoria EEPROM</strong> da <strong>1KB</strong>, e che tramite la funzione <strong>PROGMEM</strong> possiamo memorizzarci delle stringhe.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2014/03/SchedaRele.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-4869" src="https://logicaprogrammabile.it/wp-content/uploads/2014/03/SchedaRele.jpg" alt="Scheda relè con Arduino UNO e webduino" width="240" height="176" /></a></p>
<p>Anche la libreria <strong>Webduino</strong> permette di <strong>salvare</strong> e richiamare le stringhe dalla memoria <strong>EEPROM</strong>, quindi possiamo usare questa funzionalità per <strong>liberare SRAM</strong> e permettere la normale esecuzione del codice.</p>
<p>Vediamo come modificare una porzione del codice del precedente articolo:</p>
<p>[c]<br />
if(Rele1 == true)<br />
server.print(&#8220;&lt;tr&gt;&lt;td style=\&#8221;color: red;\&#8221;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&#8221;);<br />
else<br />
server.print(&#8220;&lt;tr&gt;&lt;td style=\&#8221;color: black;\&#8221;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&#8221;);<br />
[/c]</p>
<p>utilizzando le funzioni della libreria <a href="https://code.google.com/p/webduino/" target="_blank"><strong>Webduino</strong></a>, per memorizzare le stringhe nella <strong>EEPROM</strong></p>
<p>[c]<br />
//memorizza le stringhe sulla EEPROM<br />
P(str_rele1ON) = &#8220;&lt;tr&gt;&lt;td style=\&#8221;color: red;\&#8221;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&#8221;;<br />
P(str_rele1OFF) = &#8220;&lt;tr&gt;&lt;td style=\&#8221;color: black;\&#8221;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&#8221;;</p>
<p>if(Rele1 == true)<br />
//richiama la stringa dalla eeprom<br />
server.printP(str_rele1ON);<br />
else<br />
//richiama la stringa dalla eeprom<br />
server.printP(str_rele1OFF);<br />
[/c]</p>
<p>il codice precedente fa uso dell&#8217;<strong>istruzione P()</strong> e del <strong>metodo printP()</strong>.</p>
<p><strong>P()</strong> ha il compito di <strong>memorizzare</strong> la <strong>stringa</strong> nella EEPROM proprio come accade con l&#8217;istruzione PROGMEM. per richiamare la stringa è sufficiente <strong>richiamarla</strong> utilizzando il metodo <strong>printP()</strong> dell&#8217;oggetto server.</p>
<p>In definitiva se volete aggiungere più relè è sufficiente modificare il codice del tutorial come nell&#8217;esempio precedente.</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/">Webduino scheda relè evitare blocco Arduino UNO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Pilotare striscia LED RGB</title>
		<link>https://logicaprogrammabile.it/pilotare-striscia-led-rgb-arduino/</link>
					<comments>https://logicaprogrammabile.it/pilotare-striscia-led-rgb-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 01 Mar 2013 12:03:34 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[Led]]></category>
		<category><![CDATA[PWM]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3390</guid>

					<description><![CDATA[<p>Come usare Arduino per pilotare strip led RGB La tecnologia di illuminazione a led si è ormai evoluta ed inizia ad essere presente in modo pronunciato in molti ambienti, dalla casa agli uffici fino ad arrivare all&#8217;illuminazione pubblica (vedi progetto di lampada di cortesia a...</p>
<p>The post <a href="https://logicaprogrammabile.it/pilotare-striscia-led-rgb-arduino/">Pilotare striscia LED RGB</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come usare Arduino per pilotare strip led RGB</h1>
<p>La tecnologia di illuminazione a led si è ormai evoluta ed inizia ad essere presente in modo pronunciato in molti ambienti, dalla casa agli uffici fino ad arrivare all&#8217;illuminazione pubblica (<a href="https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/">vedi progetto di lampada di cortesia a led</a>).</p>
<p>I vantaggi in termini di risparmio energetico sono enormi e la qualità della luce emessa sta raggiungendo un comfort visivo soddisfacente.</p>
<p>Anche nell&#8217;arredamento troviamo soluzioni molto interessanti che vanno dalla lampada da salotto multicolore alle luci di cortesia nei piani cottura oppure alle barre led impermeabili poste nel box doccia.</p>
<p>Vista la nostra passione per l&#8217;auto-costruzione possiamo realizzare un dispositivo basato su Arduino per pilotare una barra led RGB. Per questo tutorial ho usato una Arduino Leonardo e uno spezzone di <a href="http://www.amazon.it/gp/product/B012NOSAOS/ref=as_li_ss_tl?ie=UTF8&amp;camp=3370&amp;creative=24114&amp;creativeASIN=B012NOSAOS&amp;linkCode=as2&amp;tag=logicaprogram-21" target="_blank" rel="nofollow noopener">10 cm di una strip led RGB da un metro</a>. Questo modello viene alimentato a 12Vdc e un modulo assorbe, con tutti i led accesi circa 55mA (quindi un metro assorbe circa 550mA).</p>
<p>Un elemento <strong>RGB</strong> è composto da 3 LED distinti (LED <strong>Rosso</strong>, LED <strong>Verde</strong>, LED <strong>Blu</strong>) disposti in modo da poter interagire tra loro per formare diversi colori complementari.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/02/Strip_LED.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3398" src="https://logicaprogrammabile.it/wp-content/uploads/2013/02/Strip_LED.png" alt="Stril Led RGB da 10 cm" width="527" height="138" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/02/Strip_LED.png 527w, https://logicaprogrammabile.it/wp-content/uploads/2013/02/Strip_LED-300x78.png 300w" sizes="auto, (max-width: 527px) 100vw, 527px" /></a></p>
<p><span id="more-3390"></span></p>
<p>Il modo più semplice per accendere i led è di collegare uno dei pin (B,R,G) verso massa; non è necessario utilizzare delle resistenze per limitare la corrente perché sono già integrate nel circuito.</p>
<p>Vediamo ora come usare Arduino per accendere e spegnere singolarmente i vari led. Il circuito da realizzare è il seguente e si basa su tre transistor PNP tipo BC337.</p>
<figure id="attachment_3402" aria-describedby="caption-attachment-3402" style="width: 563px" class="wp-caption aligncenter"><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/02/Arduino_Leonardo_Strip_LED_RGB.png"><img loading="lazy" decoding="async" class="wp-image-3402 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2013/02/Arduino_Leonardo_Strip_LED_RGB.png" alt="Controllo strip led rbg" width="563" height="539" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/02/Arduino_Leonardo_Strip_LED_RGB.png 563w, https://logicaprogrammabile.it/wp-content/uploads/2013/02/Arduino_Leonardo_Strip_LED_RGB-300x287.png 300w" sizes="auto, (max-width: 563px) 100vw, 563px" /></a><figcaption id="caption-attachment-3402" class="wp-caption-text">Circuito per pilotare strip led rgb</figcaption></figure>
<p>Le basi dei tre transistors sono collegate ai pin 3, 5 e 6 non a caso poiché su questi pin è disponibile anche il segnale PWM che utilizzeremo per andare a pilotare i <strong>led RGB</strong> in modo migliore.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="avrasm">void setup()
{
 //led Rosso
 pinMode(5, OUTPUT);
 //led verde
 pinMode(6, OUTPUT);
 //led blu
 pinMode(3, OUTPUT);
 //init seriale
 Serial.begin(9600);
}

void loop() 
{
 //se arrivano dati...
 if (Serial.available())
 {
  //leggi il carattere in arrivo
  byte data = Serial.read();
  if(data == 'q') //accende il led blu
   digitalWrite(3, HIGH);
  else if (data == 'w') //spegne il led blu
   digitalWrite(3, LOW);
 
  if(data == 'a') //accende il led verde
   digitalWrite(5, HIGH);
  else if (data == 's') //spegne il led verde
   digitalWrite(5, LOW);
  if(data == 'z') //accende il led rosso
   digitalWrite(6, HIGH);
  else if (data == 'x') //spegne il led rosso
   digitalWrite(6, LOW);
 }
}</pre>
<p>Il codice precedente permette di accendere o spegnere i led inviando tramite serial monitor dei caratteri di comando. L&#8217;effetto che otteniamo è una miscelazione dei colori.</p>
<p>Un maggior controllo dei led RGB possiamo ottenerlo utilizzando il segnale PWM generato da Arduino. In questo modo abbiamo la possibilità di creare dissolvenze per creare combinazioni di colori visivamente più interessanti.<br />
Il codice seguente permette di accendere e spegnere il led BLU in modo graduale tramite una dissolvenza:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="avrasm">void setup()
{
 //led Rosso
 pinMode(5, OUTPUT);
 //led verde
 pinMode(6, OUTPUT);
 //led blu
 pinMode(3, OUTPUT);
 //init seriale
 Serial.begin(9600);
}

void loop()
{
 //Aumenta il duty cycle da 100% a 0%
 for(byte sfuma = 0; sfuma &lt; 255; sfuma++)
 {
  analogWrite(3, sfuma);
  delay(40);
 }
 //diminuisci il duty cycle da 100% a 0%
 for(byte sfuma = 255; sfuma &gt; 0; sfuma--)
 {
  analogWrite(3, sfuma);
  delay(40);
 }
}</pre>
<p>Se volessi miscelare i colori potrei scrivere qualcosa del genere</p>
<pre class="EnlighterJSRAW" data-enlighter-language="avrasm">void setup()
{
 //led Rosso
 pinMode(5, OUTPUT);
 //led verde
 pinMode(6, OUTPUT);
 //led blu
 pinMode(3, OUTPUT);
 //init seriale
 Serial.begin(9600);
}

void loop()
{
 //accendo il led rosso
 digitalWrite(6, HIGH);
 //Aumenta il duty cycle da 100% a 0%
 for(byte sfuma = 0; sfuma &lt; 255; sfuma++)
 {
  analogWrite(3, sfuma);
  delay(40);
 }

 //spengo il rosso
 digitalWrite(6, LOW);
 //accendo il verde
 digitalWrite(5, HIGH);
 //diminuisci il duty cycle da 100% a 0%
 for(byte sfuma = 255; sfuma &gt; 0; sfuma--)
 {
  analogWrite(3, sfuma);
  delay(40);
 }
}</pre>
<p>Le combinazioni che possiamo creare sono innumerevoli, potete provare a sperimentare creando effetti luminosi che possono abbellire i vostri ambienti.</p>
<p>The post <a href="https://logicaprogrammabile.it/pilotare-striscia-led-rgb-arduino/">Pilotare striscia LED RGB</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/pilotare-striscia-led-rgb-arduino/feed/</wfw:commentRss>
			<slash:comments>43</slash:comments>
		
		
			</item>
		<item>
		<title>Lampada di cortesia a batteria con ATtiny85</title>
		<link>https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/</link>
					<comments>https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 12 Nov 2012 08:45:18 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[ATtiny85]]></category>
		<category><![CDATA[Domotica]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3135</guid>

					<description><![CDATA[<p>Usare un ATtiny85 per controllare una lampada led a batteria Mi piace realizzare progetti che impiegano dispositivi esistenti che, magari messi da parte per lungo tempo, si rivelano ottimi per costruire nuovi dispositivi. La lampada led a batteria è un oggetto molto comune che si...</p>
<p>The post <a href="https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/">Lampada di cortesia a batteria con ATtiny85</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Usare un ATtiny85 per controllare una lampada led a batteria</h3>
<p>Mi piace realizzare progetti che impiegano dispositivi esistenti che, magari messi da parte per lungo tempo, si rivelano ottimi per costruire nuovi dispositivi.<br />
La lampada led a batteria è un oggetto molto comune che si compra a basso costo nelle bancarelle delle fiere di elettronica. Date le sue dimensioni ridotte è possibile utilizzarla per illuminare tutte quelle piccole aree dove non abbiamo previsto una fonte di illuminazione fissa e dove non abbiamo la possibilità di portare dei cavi elettrici se non tramite opere murarie.</p>
<figure id="attachment_3139" aria-describedby="caption-attachment-3139" style="width: 450px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3139" title="Arduino ATTiny85" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/IMAG0437.jpg" alt="Usare un attiny85 per pilotare lampada led" width="450" height="285" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/IMAG0437.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/IMAG0437-300x190.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /><figcaption id="caption-attachment-3139" class="wp-caption-text">Usare un attiny85 per pilotare lampada led</figcaption></figure>
<p><span id="more-3135"></span></p>
<p>Non potendo tenere accesa la lampada per ore, causa scaricamento repentino della batteria, ho realizzato un piccolo circuito che tramite <a title="Come creare un sistema di allarme con Arduino" href="https://logicaprogrammabile.it/come-creare-sistema-di-allarme-arduino/">un sensore PIR</a> e un relè permetta l&#8217;accensione della lampada solo al passaggio di una persona (o comunque qualsiasi cosa che si muove![tranne mosche e zanzare!]). Adoperando anche una fotoresistenza riesco a gestire l&#8217;accensione solo nelle ore notturne.<br />
Tutto il sistemino è gestito da un parsimonioso <strong>ATtiny85</strong>.</p>
<p>Lo schema del circuito è il seguente:</p>
<figure id="attachment_3145" aria-describedby="caption-attachment-3145" style="width: 541px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3145" title="ATtiny85_LuciAutom" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_LuciAutom.png" alt="Luce cortesia lampada led attiny85" width="541" height="372" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_LuciAutom.png 541w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_LuciAutom-300x206.png 300w" sizes="auto, (max-width: 541px) 100vw, 541px" /><figcaption id="caption-attachment-3145" class="wp-caption-text">Schema elettrico</figcaption></figure>
<p>Le batterie della lampada (che forniscono nel mio caso circa 7Vdc) hanno anche il compito di alimentare il circuito. Il regolatore di tensione <strong>7805</strong> stabilizza e fornisce alimentazione al circuito. L&#8217;<strong>ATtiny85</strong> acquisisce il segnale analogico proveniente dalla <strong>fotoresistenza</strong> e il segnale digitale proveniente dal sensore <strong>PIR</strong>. Tramite il transistor comando un micro relè che cortocircuita l&#8217;interruttore meccanico posto sulla lampada, provocandone l&#8217;accensione.</p>
<p>Il codice che governa l&#8217;<strong>ATtiny85</strong> è il seguente:</p>
<pre class="lang:arduino decode:true">void setup()
{
  //uscita per comandare il rele
  pinMode(0, OUTPUT);
  //ingresso per sensore pir
  pinMode(4, INPUT);
}

void loop()
{
  //leggo il valore analogico proveniente dalla fotoresistenza
  int FotoR = analogRead(3);
  //leggo lo stato del segnale pir
  byte inp = digitalRead(4);

  //se il sensore pi rileva un movimento...
  if (inp == HIGH)
  {
    //controlla se la luce ambiente è insufficiente
    if (FotoR &lt;= 150)
    {
      //attiva il relè pe accendere la lampada led
      digitalWrite(0, HIGH);
      //tieni la lampada accesa per 30 secondi
      Ritardo();
    }
  }
else
  //altrimenti tieni il relè disattivato
  digitalWrite(0, LOW);
}

void Ritardo()
{
  //ritardo di 30 secondi

  for(byte Ciclo = 0; Ciclo &lt;= 30; Ciclo++)
  {
    delay(1000);
  }
}</pre>
<p>Per programmare l&#8217;<strong>ATtiny85</strong> potete usare un <strong>Arduino UNO</strong> come <a href="https://logicaprogrammabile.it/programmare-attiny85-attiny45/">spiegato in questo tutorial</a>. Per chi possiede un programmatore dedicato come quello descritto <a href="https://logicaprogrammabile.it/caricare-sketch-atmega328-programmatore-av/">nel precedente articolo</a> potete usare lo schema seguente per caricare lo sketch nel microcontrollore.</p>
<figure id="attachment_3156" aria-describedby="caption-attachment-3156" style="width: 423px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3156" title="ATtiny85_Programmer" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_Programmer.png" alt="Programmatore usbAsp per attiny85" width="423" height="214" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_Programmer.png 423w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_Programmer-300x151.png 300w" sizes="auto, (max-width: 423px) 100vw, 423px" /><figcaption id="caption-attachment-3156" class="wp-caption-text">Programmate l&#8217;ATtiny85 con L&#8217;USBasp</figcaption></figure>
<p><span style="text-decoration: underline;">Attenzione il connettore da utilizzare dellUSBasp è il J5</span></p>
<p>La lampada del led è costata circa 15€ mentre per i componenti del circuito o speso circa 10-12€.</p>
<p>Per usare il circuito all&#8217;esterno consiglio di utilizzare un buon contenitore, per evitare che umidità o pioggia possano causare rotture o cortocircuiti.</p>
<p>The post <a href="https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/">Lampada di cortesia a batteria con ATtiny85</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Scheda relè remota con Arduino e Webduino</title>
		<link>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/</link>
					<comments>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 07 Nov 2012 16:43:39 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3117</guid>

					<description><![CDATA[<p>Come costruirsi una scheda relè e comandarla tramite Arduino ethernet e Webduino Tra le applicazioni che trovo molto richieste è la scheda relè da gestire tramite smartphone. Utilizzando la libreria Webduino riusciamo a realizzare un dispositivo semplice e funzionale basato su pochi componenti quali Arduino...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come costruirsi una scheda relè e comandarla tramite Arduino ethernet e Webduino</h3>
<p>Tra le applicazioni che trovo molto richieste è la scheda relè da gestire tramite smartphone. Utilizzando la libreria Webduino riusciamo a realizzare un dispositivo semplice e funzionale basato su pochi componenti quali <a href="http://arduino.cc/en/Main/ArduinoBoardEthernet" target="_blank">Arduino Ethernet</a>, dei classici relè, un router wifi (presente ormai nelle nostre abitazioni) e uno smartphone.</p>
<p>La figura seguente illustra il progetto di questo articolo:</p>
<p style="text-align: center;"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3123" title="LogicaSchedaRele" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele.png" alt="Webduino ed Arduino Ethernet Gestione scheda rele" width="620" height="445" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele.png 620w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele-300x215.png 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></p>
<p><span id="more-3117"></span></p>
<p><strong>Arduino Ethernet</strong> è collegato tramite cavo lan al router e permette di gestire i relè collegati ai pin digitali tramite una applicazione web basata sulla libreria <strong>Webduino</strong>. Tramite lo smarthphone o un pc collegato alla rete locale possiamo gestire i relè semplicemente usando un browser web.</p>
<p>Per la parte software ho deciso di usare la libreria <strong>webduino</strong> perché fornisce tutto il necessario per la gestione delle richieste http.</p>
<p>Lo schema elettrico del prototipo che ho realizzato è il seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3124" title="SchedaRele" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele.png" alt="Arduino ethernet scheda rele" width="694" height="342" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele.png 694w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele-300x147.png 300w" sizes="auto, (max-width: 694px) 100vw, 694px" /></p>
<p>Il codice caricato sul dispositivo è disponibile nel seguente listato:</p>
<p>[c]</p>
<p>#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino</p>
<p>//variabili statiche per il mac address e lìip address<br />
static byte mac_Add[] = {<br />
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//cambiare l&#8217;ip in funzione della propria rete<br />
static byte ip_Add[] = {<br />
  192, 168, 0, 220 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);</p>
<p>//Variabili booleane che memorizzano<br />
//lo stato delle uscite collegate ai relè<br />
boolean Rele1 = false;<br />
boolean Rele2 = false;<br />
boolean Rele3 = false;</p>
<p>//=============================================================================<br />
//funzione pagina Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type,<br />
           char *url_param, bool param_complete)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    String s = &quot;&quot;;</p>
<p>     if (param_complete == true)<br />
    {<br />
      s = url_param;</p>
<p>      if ( s == &quot;R1=ON&quot;)<br />
      {<br />
        Rele1 = true;<br />
        digitalWrite(2, HIGH);<br />
      }<br />
      else if ( s == &quot;R1=OFF&quot;)<br />
      {<br />
        Rele1 = false;<br />
        digitalWrite(2, LOW);<br />
      }</p>
<p>      if ( s == &quot;R2=ON&quot;)<br />
      {<br />
        Rele2 = true;<br />
        digitalWrite(3, HIGH);<br />
      }<br />
      else if ( s == &quot;R2=OFF&quot;)<br />
      {<br />
        Rele2 = false;<br />
        digitalWrite(3, LOW);<br />
      }</p>
<p>      if ( s == &quot;R3=ON&quot;)<br />
      {<br />
        Rele3 = true;<br />
        digitalWrite(4, HIGH);<br />
      }<br />
      else if ( s == &quot;R3=OFF&quot;)<br />
      {<br />
        Rele3 = false;<br />
        digitalWrite(4, LOW);<br />
      }<br />
    }</p>
<p>    //gestisco la pagina html in base allo stato delle uscite di Arduino<br />
    P(htmlHead) =<br />
    &quot;&lt;html&gt;&quot;<br />
    &quot;&lt;head&gt;&quot;<br />
    &quot;&lt;title&gt;Arduino Scheda Rele&lt;/title&gt;&quot;<br />
    &quot;&lt;/head&gt;&quot;<br />
    &quot;&lt;body&gt;&quot;;</p>
<p>    server.printP(htmlHead);</p>
<p>    server.print(&quot;&lt;table border=\&quot;1\&quot;&gt;&quot;);<br />
    server.print(&quot;&lt;tr&gt;&lt;td&gt;Stato Rele&lt;/td&gt;&lt;td&gt;Comandi&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele1 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele1 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R1=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R1=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele2 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 2 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 2 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele2 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R2=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R2=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele3 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 3 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 3 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele3 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R3=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R3=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);</p>
<p>  }<br />
}<br />
//=============================================================================</p>
<p>void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);</p>
<p>  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);<br />
  webserver.addCommand(&quot;index.htm&quot;, &amp;Start);</p>
<p>  //avvia il web server<br />
  webserver.begin();</p>
<p>  delay(100);</p>
<p>  //definisci i pin 2 3 4 in uscita<br />
  pinMode(2, OUTPUT);<br />
  pinMode(3, OUTPUT);<br />
  pinMode(4, OUTPUT);</p>
<p>  //inizializza i le uscite<br />
  digitalWrite(2, LOW);<br />
  digitalWrite(3, LOW);<br />
  digitalWrite(4, LOW);</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}</p>
<p>[/c]</p>
<p>Nonostante le numerose righe di codice potete capirne il funzionamento semplicemente leggendo i commenti che lo accompagnano.<br />
L&#8217;interfaccia web per gestire i relè è la seguente:</p>
<p>Cliccando il bottone con la label &#8220;clicca qui&#8221; si ottiene una commutazione dello stato dei pin di uscita di Arduino e l&#8217;aggiornamento della label Stato Rele.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3127" title="SchedaReleWeb" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaReleWeb.png" alt="Interfaccia scheda rele web" width="190" height="131" /></p>
<p>Anche in questo caso con poco si ottengono dispositivi interessanti e utili.</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/feed/</wfw:commentRss>
			<slash:comments>41</slash:comments>
		
		
			</item>
		<item>
		<title>Monitorare fughe di gas con il sensore MQ5</title>
		<link>https://logicaprogrammabile.it/monitorare-fughe-gas-sensore-mq5/</link>
					<comments>https://logicaprogrammabile.it/monitorare-fughe-gas-sensore-mq5/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 14 Nov 2011 12:33:09 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Autocostruzione]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[Gas]]></category>
		<category><![CDATA[MQ5]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2221</guid>

					<description><![CDATA[<p>Utilizzare Arduino per creare un semplice rilevatore di gas (MQ5) Ci affidiamo sempre più alla qualità costruttiva dei materiali delle nostre cucine e bruciatori, e la possibilità di una fuga di gas sembra remota. Col passare del tempo questi componenti potrebbero usurarsi aumentando in qualche...</p>
<p>The post <a href="https://logicaprogrammabile.it/monitorare-fughe-gas-sensore-mq5/">Monitorare fughe di gas con il sensore MQ5</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare Arduino per creare un semplice rilevatore di gas (MQ5)</h1>
<p>Ci affidiamo sempre più alla qualità costruttiva dei materiali delle nostre cucine e bruciatori, e la possibilità di una fuga di gas sembra remota. Col passare del tempo questi componenti potrebbero usurarsi aumentando in qualche modo il rischio di fuoriuscita di gas.<br />
Autocostruirsi un sistema di rilevamento è piuttosto semplice ed economico, dato che, il costo del sensore e tipicamente inferiore ai 10€.<br />
Questi sensori sono stabili, hanno una lunga vita di esercizio, sono molto precisi ed una elevata sensibilità con una risposta molto veloce.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/11/SensoreMQ5.gif"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2225" title="SensoreMQ5" src="https://logicaprogrammabile.it/wp-content/uploads/2011/11/SensoreMQ5.gif" alt="Sensore Gas Modello MQ5" width="302" height="213" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/11/SensoreMQ5.gif 302w, https://logicaprogrammabile.it/wp-content/uploads/2011/11/SensoreMQ5-300x211.gif 300w" sizes="auto, (max-width: 302px) 100vw, 302px" /></a></p>
<p>Il modello <strong>MQ5</strong> che ho acquistato è prodotto dalla <a href="http://english.hwsensor.com/English/index.html" target="_blank">Hanwei Electronics</a>, ed è progettato per rilevare principalmente gas <strong>GPL</strong>, <strong>Metano</strong> e <strong>Idrogeno</strong> ed in misura minore rileva <strong>alcool</strong> e <strong>monossido di carbonio</strong>. Questo sensore è indicato per rilevare il gas comune, utilizzato in ambiente domestico.</p>
<p><span id="more-2221"></span>Lo schema del circuito è il seguente:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/11/RilevatoreGas.gif"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2229" title="RilevatoreGas" src="https://logicaprogrammabile.it/wp-content/uploads/2011/11/RilevatoreGas.gif" alt="Schema elettrico rilevatore di gas" width="598" height="308" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/11/RilevatoreGas.gif 598w, https://logicaprogrammabile.it/wp-content/uploads/2011/11/RilevatoreGas-300x154.gif 300w" sizes="auto, (max-width: 598px) 100vw, 598px" /></a></p>
<p>Il sensore <strong>MQ5</strong> viene alimentato dalla +5Vdc dell&#8217;Arduino anche se, come sempre, consiglio di utilizzare una fonte di energia esterna per evitare di sovraccaricare lo stadio di alimentazione della board.<br />
L&#8217;uscita della sonda è collegata all&#8217;ingresso analogico <strong>A0</strong>, una resistenza da 10Kohm collegata a massa crea un partitore di tensione indispensabile per rilevare le variazioni di tensione generate dal sensore.<br />
Ai pin digitali vengono collegati due led, un cicalino e uno stadio relè che permette di azionare una ventola di estrazione.</p>
<blockquote><p>Il relè deve essere assolutamente di tipo ermetico per avvitare i piccoli archi di corrente che si manifestano durante il contatto delle lamelle del relè.<br />
La ventola invece deve essere di tipo induttivo, priva quindi di spazzole che potrebbero generare, anche in questo caso piccolissimi ma pericolosi archi di corrente.</p></blockquote>
<p>I led collegato al <strong>pin7</strong> viene impiegato per indicare lo stato di preriscaldamento del sensore, necessario all&#8217;avvio per renderlo stabile evitando falsi alarmi. Il led collegato al <strong>pin8</strong>, e il cicalino collegato al <strong>pin9</strong>, vengono utilizzati per rappresentare l&#8217;eventuale allarme.</p>
<p>Il codice per questo circuito è il seguente:</p>
<pre class="lang:arduino decode:true ">int gas = 0;
int PreRiscaldo = 0;

void setup()
{
  Serial.begin(9600);

  pinMode(2, OUTPUT); //Relè-ventola
  pinMode(7, OUTPUT); //Riscaldamento
  pinMode(8, OUTPUT); //Allarme
  pinMode(9, OUTPUT); //Buzzer

  digitalWrite(7, HIGH);
  //attendo 5 minuti per stabilizzare la sonda
  for ( PreRiscaldo = 0; PreRiscaldo &lt; 300; PreRiscaldo++)
  {
    delay(1000);
  }
  digitalWrite(7, LOW);
}

void loop()
{
  //Leggo il valore di tensione generato dalla sonda
  gas = analogRead(0);

  //invio i dati al serial Monitor
  Serial.println(gas, DEC);

  //gestisco le soglie e agisco di conseguenza
  if ( gas &gt; 150)
  {
    //cicalino ON
    analogWrite(9, 100);
    //allarme via led ON
    digitalWrite(8, HIGH);
    //attivo relè
    digitalWrite(2, HIGH);
  }
  else
  {
    //cicalino OFF
    analogWrite(9, 100);
    //allarme via led OFF
    digitalWrite(8, LOW);
    //attivo relè
    digitalWrite(2, LOW);
  }

  //acquisisco i dati ogni 1/2 secondo
  delay(500);
}</pre>
<p>&nbsp;</p>
<p>Nel mio caso la funzione <strong>analogRead(0);</strong> genera un valore (dopo circa 5 minuti di funzionamento) intorno a 90, avvicinando un accendino e aprendo il gas, questo valore schizza a 800-900, provocando l&#8217;azionamento del relè e l&#8217;accensione del Led sul <strong>pin8</strong>.<br />
Potete variare le soglie in base al vostro sensore e alle vostre esigenze di sensibilità.</p>
<p>Per rilevare in maniera efficiente le fughe di gas, il sensore va posizionato in prossimità del pavimento se il gas da rilevare è pesante (Gpl, Propano, Butano) o in prossimità del soffitto se il gas è leggero (vapori di Alcool, Metano, Etanolo).</p>
<blockquote><p><strong>Questo progetto è stato testato in modo prototipale, non è stata fata alcuna verifica reale di funzionamento, il progetto è quindi da utilizzare solo per scopi didattici. Non mi assumo responsabilità (visto il delicato campo di impiego) di nessun tipo derivate dal un funzionamento anomalo del circuito o da incidenti da esso causati.</strong></p></blockquote>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/monitorare-fughe-gas-sensore-mq5/">Monitorare fughe di gas con il sensore MQ5</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/monitorare-fughe-gas-sensore-mq5/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Leggere dagli ingressi analogici da remoto con Arduino</title>
		<link>https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/</link>
					<comments>https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 01 Sep 2011 12:34:08 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[Ingressi Analogici]]></category>
		<category><![CDATA[MCP9700]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1929</guid>

					<description><![CDATA[<p>Utilizzare un webserver per acquisire dati dagli ingressi analogici Continuiamo l&#8217;articolo precedente inserendo nello sketch il codice che permette di campionare segnali analogici per poterli inviarli tramite protocollo http. Utilizzando la funzione analogRead() acquisiamo il valore della tensione presente sul pin analogico, che verrà utilizzato...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/">Leggere dagli ingressi analogici da remoto con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare un webserver per acquisire dati dagli ingressi analogici</h1>
<p>Continuiamo l&#8217;articolo precedente inserendo nello sketch il codice che permette di campionare segnali analogici per poterli inviarli tramite protocollo http.<br />
Utilizzando la funzione <strong>analogRead()</strong> acquisiamo il valore della tensione presente sul pin analogico, che verrà utilizzato per essere inserito nella pagina html da inviare al client. Con alcuni tag html aggiuntivi abbiamo la possibilità di avere un refresh automatico della pagina che ad intervalli regolari interrogherà il server Arduino, ottenendo automaticamente nuovi campionamenti del segnale analogico.<br />
Il circuito seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1936 size-full" title="AnalogRead" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead.gif" alt="Circuito di esempio acquisizione segnale ingresso analogico via lan con http" width="303" height="306" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead.gif 303w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead-150x150.gif 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead-297x300.gif 297w" sizes="auto, (max-width: 303px) 100vw, 303px" /></p>
<p><span id="more-1929"></span>In questo esempio la tensione presente sul pin è fissa, ma nulla vieta l&#8217;inserimento di un potenziometro o meglio di un sensore analogico come la sonda di temperatura mcp9700a.</p>
<p>Il codice dello sketch rimane essenzialmente invariato tranne per l&#8217;inserimento di una variabile per contenere i valori provenienti dalla funzione <strong>analogRead()</strong> e di qualche riga html aggiuntiva per formattare la pagina:</p>
<pre class="lang:arduino decode:true ">if (Data_RX == '\n')
{
//campiono il valore di tensione analogia
//in ingresso sul pin0 ella borad Arduino UNO
analogIn0 = analogRead(0);
//Invio la risposta al client
//invio lo status code
pc_client.println("HTTP/1.1 200 OK");
//imposto il data type
pc_client.println("Content-Type: text/html");
pc_client.println();
//invio codice html
pc_client.print("");
pc_client.print("");
//questo codice html permette di eseguireil refresh automatico
//della pagina html
pc_client.print("");
pc_client.print("");
pc_client.print("

Valore analogico letto dal pin 0");
//inserisco nella pagina html il valore acquisito dal pin analogico
pc_client.print(analogIn0);
pc_client.print("

");
//aspetto 1 ms affinche la risposta giunga al browser del client
delay(1);
//esco dal ciclo while una volta completato l'invio della risposta
break;
}</pre>
<p>&nbsp;</p>
<p>Non serve altro, è veramente semplice inviare via http i dati acquisiti dall&#8217;Arduino.<br />
Possiamo certamente utilizzare anche gli altri ingressi analogici o come nel prossimo esempio leggere lo stato di alcuni pin digitali.<br />
Per impiegare i pin digitali dobbiamo, nel blocco <strong>setup()</strong>,  specificare quali intendiamo utilizzare come ingressi. Per una semplice prova io ho usato il pin6 e il pin7:</p>
<pre class="lang:arduino decode:true ">void setup()
{
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip);
//inizializza l'oggetto server
ArduinoServer.begin();
//definisco i pin6 e pin7 come ingressi
pinMode(6, INPUT);
pinMode(7, INPUT);
}</pre>
<p>&nbsp;</p>
<p>La funzione <strong>digitalRead()</strong> acquisisce il valore dello stato dei pin in esame e lo memorizza in una variabile precedentemente dichiarata. Questo valore viene successivamente inviato al client tramite la pagina html</p>
<pre class="lang:arduino decode:true ">if (Data_RX == '\n')
{
//leggo lo stato dei pin digitali 6 e 7
valPin6 = digitalRead(6);
valPin7 = digitalRead(7);

//campiono il valore di tensione analogia
//in ingresso sul pin0 ella borad Arduino UNO
analogIn0 = analogRead(0);

//Invio la risposta al client
//invio lo status code
pc_client.println("HTTP/1.1 200 OK");
//imposto il data type
pc_client.println("Content-Type: text/html");
pc_client.println();
//invio codice html
pc_client.print("");
pc_client.print("");
//questo codice html permette di eseguireil refresh automatico
//della pagina html
pc_client.print("");
pc_client.print("");
pc_client.print("

Valore analogico letto dal pin 0");
//inserisco nella pagina html il valore acquisito dal pin analogico
pc_client.print(analogIn0);
pc_client.print("

");

//inserisco nella pagina htm lo stato dei pin in ingresso
if(valPin6 == HIGH)
//se il valore è alto
pc_client.print("Stato pin6 = HIGH");
else
//se il valore è basso
pc_client.print("Stato pin6 = LOW");

pc_client.println("
");

if(valPin7 == HIGH)
//se il valore è alto
pc_client.print("Stato pin7 = HIGH");
else
//se il valore è basso
pc_client.print("Stato pin7 = LOW");

pc_client.print("");

//aspetto 1 ms affinche la risposta giunga al browser del client
delay(1);
//esco dal ciclo while una volta completato l'invio della risposta
break;
}</pre>
<p>&nbsp;</p>
<p>Anche questo codice risulta semplice e i commenti che lo accompagnano descrivono bene le varie istruzioni. Dopo aver caricato lo sketch sull&#8217;Arduino ho messo il pin6 alla +5Vdc e il pin 7 a massa ottenendo il risultato seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1944 size-full" title="Html_Result" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/Html_Result.gif" alt="Pagina html generata dal webserver Arduino" width="261" height="101" />Naturalmente i pin 10-11-12-13, sono utilizzati per la comunicazioni SPI con l&#8217;ethernet shield e quindi, non possono essere impiegati per altri scopi senza interferire nella comunicazione stessa.</p>
<p>Vi rimando al prossimo articolo dove vedremo come utilizzare il browser per inviare comandi alla board Arduino, nel frattempo potete sperimentare con le nozioni acquisite per aumentare le vostre capacità nell&#8217;uso della athernet shield.</p>
<p>A presto!</p>
<p>The post <a href="https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/">Leggere dagli ingressi analogici da remoto con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
