Dopo qualche realizzazione pratica con Raspberry Pi, iniziamo a “smanettare” con Arduino.
Il progetto che andiamo a trattare riguarda un semplice termostato “di fortuna” realizzato in non più di 20 minuti utilizzando un Arduino, un display (compatibile HD44780) e un sensore di temperatura/umidità DHT11.
Avevo l’esigenza di accendere e spegnere una caldaia quando la temperatura ambientale scendeva sotto i 17 gradi…non volendo comprare un termostato nuovo…ho recuperato un display e ho cercato di visualizzare sopra tutti i dati rilevati.
Iniziamo con i collegamenti ….
Il display si collega così …
Il sensore si collega così …
Il relè per l’attivazione della caldaia va al pin 13….in questo progetto non e’ connesso perché e’ parte integrante dell’impianto di riscaldamento preesistente….testeremo il funzionamento con il led presente sulla scheda Arduino.
Prima di iniziare a scrivere il codice vi rimando a due pagine dove troverete le librerie per LCD e DHT11
Ecco il codice….realizzato scopiazzando tra i vari esempi già presenti nell’IDE di Arduino:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// carico le librerie #include <LiquidCrystal.h> #include "DHT.h" // definisco il pin del sensore #define DHTPIN 8 // definisco il tipo di sensore #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // definisco a quali pin è connesso il display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // definisco che il pin 13 è quello a cui è connesso il led const int ledPin = 13; void setup() { // setto il tipo di display (colonne, righe) lcd.begin(20, 2); // scrivo sul display le parole fisse lcd.print("Temperatura"); lcd.setCursor(0,1); lcd.print("Umidita'"); lcd.setCursor(16,0); lcd.print("Cald"); pinMode(ledPin, OUTPUT); } void loop() { int t = dht.readTemperature(); int h = dht.readHumidity(); // posiziono il cursore alla colonna 12 e riga 0 lcd.setCursor(12, 0); lcd.print(t); lcd.setCursor(12, 1); lcd.print(h); // setto il limite di temperatura minore o uguale a 17 gradi if (t <= 17) { // digitalWrite(ledPin, HIGH); lcd.setCursor(16, 1); lcd.print("Acc"); } else { // turn LED off: digitalWrite(ledPin, LOW); lcd.setCursor(16, 1); lcd.print("Spe"); } } |
Tutto ciò che trovate dopo le // lo potete eliminare…sono solo commenti per farvi capire cosa succede in quel punto preciso del programma….
Una volta caricato il tutto….compariranno sul display temperatura e umidità dell’ambiente. Se la temperatura e’ inferiore o uguale a 17°C si accenderà il led…e quindi il relè ad esso connesso (tramite un transistor di potenza). Su display comparirà la scritta “Acc” che sta per Acceso.
Superati i 17°C il led si spegne e sul display compare la scritta “Spe”… che sta per spento!
Ecco un video…
Termostato con Arduino e DHT11 from danilo larizza on Vimeo.
Se volete aumentare o diminuire la temperatura di intervento basta modificare il valore nella riga :
|
1 |
<strong><em>if (t <= 17)</em></strong> |
Buon lavoro….



ciao , ho provato a fare il tutto ma compare un errore nella compilazione, potresti ricontrollarlo ?
grazie
Non ho mai programmato (ancora) arduino, ma mi sembra che “lcd.begin(16, 2);” dovrebbe essere “lcd.begin(20, 2);” in quanto il display è da 20 colonne
Ciao
Hai ragione, infatti ho appena modificato.
Ma alla fine come puoi notare funziona lo stesso. Infatti il codice e’ copiato direttamente dal programma Arduino.
Grazie per aver notato l’errore…e per essere stato sul blog
ciao,
uso il dht-11 non su arduino, ma su un altra schedina….
ho rilevato che la temperatura segna giusto, ma l’umidità sta sempre sui 37 38%, il dato che mi da il dht è giusto perchè il crc coincide…..
a voi come funziona il sensore?? si muove l’umidità??
grazie
Ciao luca,
Ne ho un paio e funzionano egregiamente…sia per temperatura che per umiditá…
La tensione che lo alimenta é stabilizzata??
Lasci passare qualche secondo per farlo stabilizzare?
da copia incolla in fase di compilazione mi da errore in : DHT dht(DHTPIN, DHTTYPE); riga 8
error: ‘DHT’ does not name a type
Giacomo devi installare le librerie per il dht.
Cercale su google e segui le istruzioni per installarle
le librerie sono copiate nella cartella ma non c’e verso. puoi indicarmi una guida?
Per vedere se le librerie sono installate bene dovresti avere nella sezione esempi del programma arduino una sezione dhttest con dei programmini per testare il sensore
probabilmente ho la libreria sbagliata!! hai un link da dove scaricarla?
grazie infinite
Usa questa guida
http://playground.arduino.cc/main/DHT11Lib
Ciao,
innanzitutto complimenti per l’ottimo lavoro =), sto facendo un progetto in cui uso un pic 18f4550 e vorrei acquisire i dati dal dht. Menre in arduino è già più o meno tutto pronto con il pic il lavoro è un pò diverso. Le mia domanda è: sul datasheet c’è scritto che il dht comunica in modo seriale- quindi non devo usare una porta analogica sul pic giusto? ; il mio dht è solo il pezzo blu di plastica con i 4 piedini non ha la schedina- cambia qualcosa?
Ciao Alessandro,
si … come dici tu puoi connettere il tutto via digitale (non proprio seriale)…più precisamente Single-Wire Two-Way. Niente uscite analogiche. Se vuoi usare una porta analogica dovresti usare l’LM35 ma ti da solamente la temperatura. Per quanto riguarda la piedinatura….no problem…forse nella schedina c’e’ solo una resistenza…mi sembra tra i pin 1 e 2. magari fai una piccola ricerca e troverai tutto.
Ci sono molti progetti basati su pic…..buona Gooogleata e Buon lavoro
Grazie
, si infatti ho visto … Mi sembra un po’ complicato ma dovrei farcela
dipende da quello che devi fare….procedi un passo alla volta….
buon lavoro