DHT11 e Arduino: Termometro con temperatura minima e massima



Questo progetto è una versione modificata del più semplice termometro / igrometro digitale
L'obiettivo è di ottenere un termometro con indicazione di temperatura minima e massima.
Continuando a leggere potrai realizzarlo anche tu!



Durante la costruzione del termometro ho fatto delle prove con la memoria EEPROM di Arduino, in questo modo sono riuscito a far si che i dati di minima e massima vengano memorizzati fino al reset manuale con un apposito pulsante.
Infatti, se togliamo tensione all'Arduino, i dati rimarranno salvati in memoria e compariranno nuovamente ad una accensione successiva.

Ecco un video che dimostra il funzionamento:



Nel video le temperature sono molto vicine, ma se lo lasciate acceso in una stanza per tutto il giorno potrete vedere l'escursione termica che si verifica.

Questo è il circuito da realizzare:



Questo è lo schema elettrico:



E questo è lo sketch da caricare, sono presenti alcuni commenti per facilitarne la comprensione:


  1. #include <LiquidCrystal.h>
  2. #include <EEPROM.h>
  3. #include "DHT.h"
  4. #define DHTPIN 8
  5. // 8 è il pin di Arduino a cui collego il sensore di temperatura
  6. #define DHTTYPE DHT11
  7. // dht11 è il tipo di sensore che uso
  8. DHT dht(DHTPIN, DHTTYPE);
  9. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  10. // connessione display (pin)
  11. const int reset = 10;
  12. int statoreset = 0;
  13. byte MIN;
  14. byte MAX;
  15. // dichiarazione variabili
  16. void setup() {
  17. lcd.begin(16, 2);
  18. // imposto il tipo di display (colonne, righe)
  19. lcd.print("TEMP ATTUALE");
  20. lcd.setCursor(0,1);
  21. lcd.print("MIN");
  22. lcd.setCursor(9,1);
  23. lcd.print("MAX");
  24. //scrivo sul display i caratteri fissi
  25. pinMode(reset, INPUT);
  26. digitalWrite(10, HIGH);
  27. MIN = EEPROM.read(1);
  28. MAX = EEPROM.read(2);
  29. // MIN e MAX assumono i due valori contenuti nella memoria EEPROM
  30. }
  31. void loop() {
  32. int t = dht.readTemperature();
  33. if (t > MAX)
  34. {MAX = t;
  35. EEPROM.write(2, t);}
  36. // se la temperatura supera il dato MAX allora modifico il dato MAX
  37. // scrivo questo dato anche nella eeprom
  38. if (t < MIN)
  39. {MIN = t;
  40. EEPROM.write(1, t);}
  41. // se la temperatura è minore del dato MIN allora modifico il dato MIN
  42. // scrivo questo dato anche nella eeprom
  43. statoreset = digitalRead (reset);
  44. if( statoreset == LOW)
  45. {MIN = t;
  46. MAX = t;}
  47. // premendo il tasto reset porto MIN e MAX al valore di temp attuale
  48. lcd.setCursor(14, 0);
  49. lcd.print(t);
  50. lcd.setCursor(5, 1);
  51. lcd.print(MIN);
  52. lcd.setCursor(14, 1);
  53. lcd.print(MAX);
  54. // scrittura dati sul display
  55. delay(100);
  56. }

Dato che la libreria "dht.h" non è presente in Arduino, per poter utilizzare lo sketch è necessario scaricarla da qui https://github.com/adafruit/DHT-sensor-library
e inserirla nella cartella "libraries" di Arduino.
Se avete domande chiedete pure, ciao!


Segui Daniele Alberti su Google+

5 commenti:

  1. Ciao Daniele, non ti nascondo che il tuo blog è diventato un punto di riferimento fondamentale per lo studio di arduino e per questo ti ringrazio tantissimo.
    Ho eseguito con grande soddisfazione molti dei tutorial da te pubblicati, ma quello che mi attrae di più è il tutorial sul termometro e ti spiego perchè: sto cercando da tempo di costruire una efficiente incubatrice per uova e da quando ho scoperto arduino ho deciso di sfruttare l'elettronica digitale. In parole povere voglio utilizzare arduino per la realizzazione di un termostato che dovrà essere molto preciso ed al tal fine vorrei utilizzare due sensori LM335Z (10mV/°K) posizionati agli estremi dell'incubatrice (uno in basso ed uno in alto) e quindi utilizzare un valore medio delle due letture rilevate sperando di non aumentare l'errore standard del sensore in questione. Il mio problema è riuscire a stilare un codice che riesca proprio a gestire questi due sensori. Sono perfettamente consapevole di star chiedendo troppo, infatti mi scuso anticipatamente... Grazie mille comunque.

    RispondiElimina
    Risposte
    1. Ciao, intanto grazie mille per i complimenti :)
      Il progetto che vuoi realizzare è molto interessante, ti assicuro che mi metterò al più presto al lavoro :)

      Elimina
  2. Non so come ringraziarti!!!
    Il progetto finale prevede anche la gestione delle letture dei valori dell'umidità, allarmi per segnalare variazioni dannose delle condizioni ( T troppo bassa/alta), voltauova, etc... A poco a poco riuscirò ad assemlare il tutto! Utilizzerò il tuo tutrorial per poter impostare i valaori di temperatura senza dover coollegare arduino al pc. Grazie, grazie, grazie... ;)

    RispondiElimina
    Risposte
    1. Questo è un primo step, è solo un termometro con un lm335, sto facendo delle prove per capire come funziona.
      http://www.danielealberti.it/2014/03/arduino-termometro-kelvin-e-celsius-con.html

      Elimina
  3. Una richiesta da profano.
    Ho letto l'articolo sul termometro a massima e minima e mi ha interessato molto. Io mi occupo di modelazione climatica e vorrei suggerire un progetto o perlomeno avere una risposta im merito. Premetto che ho scarsissime conoscenze di Arduino e sono a livello principiante. Perciò chiedo ai letori del blog un consiglio su ciò che vorrei realizzare. In praticava benissimo un termometro a amssima e minima come quello illustrato, tuttavia i soli valori di temperatura dicono poco e non hanno utilità nella modellazione degli andamenti climatici. Vorrei sapere se con la stessa semplicità si possono registrare gli istanti in cui i due valori TMAX e TMIN si verificano nelle 24 ore. Diciamo che occorrerebbero i due tempi (in secondi o minuti o fraziondi ora) che possiamo indicarecon tmax e tmin. Con la conoscenza di questi soli quattro dati si può costruire la curva oraria delle temperature senza dover fare lunghe misurazioni. So bene che esistono i data logger di diverso tipo ma io vorrei realizzare una cosa molto più immediata. Nei procedimenti analitici esistono diversi algoritmi di analisi armonica per costruire con due tree più armoniche una curva giornaliera di temperatura.Naturalmente trascorse le 24 ore dall'inizio delle misure l'apparato dovrebbe azzerarsi e casomai memorizzare i dati immagazzinati nella memoria. Ho cercato se sul mercato esistono apparechi economici on queste capacità.
    Chiedo a voi esperti se pensate che sia un progetto fattibile.
    Sul Web c'è molto pressapochismo nel'uso dei termometri a massima e minima....e ad esempio non si considerano gli effetti di marittimità e continentalità e nemmeno le correzioni altimetriche della temperatura (ma questo casomai sarebbe un discorso successivo). Io sono disponibile a daretutte le informazioni sulla potenzialità di un apparecchio di questo tipo. Una per tutte il calcolo reale dei cosiddetti "Gradi Giorno" che attualmente hanno solo un riferimento burocratico non realistico. Qualcuno sarebbe interessato al progetto? Vi ringrazio se vorrete rispondermi anche in senso negativo. Eduardo

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Related Posts Plugin for WordPress, Blogger...