Realizza il tuo orologio con temperatura e umidità con Digispark

Ciao a tutti!

l'articolo di oggi tratta del progetto realizzato dal gentilissimo Tiziano che ha deciso di consentirmi la ricondivisione del suo lavoro.









Il dispositivo realizzato è un orologio/datario, con visualizzazione di temperatura e umidità, basato su Digispark, una piccolissima scheda a microcontrollore Arduino compatibile.Per la data e l'ora è stato utilizzato un modulo RTC con collegamento I2C,
mentre la lettura della temperatura e dell'umidità avviene grazie al modulo DHT 11.


quello che vi posto di seguito è lo sketch da caricare nel microcontrollore, se non sapete come caricarlo o volete maggiori informazioni su questo componente, vi rimando all'articolo introduttivo su Digispark.



Ecco il codice:


  1. #include <TinyDHT.h> // Liberia sensore DHT (umidtà temperatura)
  2. #include <LiquidCrystal_I2C.h> // Libreria Display con protocollo I2C
  3. #include <TinyRTClib.h> // LIbreria del RTC (real time clok)
  4. #include <TinyWireM.h> // Libreria controllo I2C
  5. #include <avr/power.h> // Libreria per ridurre la frequenza a 16 MHz a 5 volt
  6. #define DHTTYPE DHT11 //imposto il modella di DHT
  7. #define TEMPTYPE 0 // imposto la lettura temperatura in gradi celsius
  8. #define DHTPIN 1 // pin dove collego il DHT
  9. DHT dht(DHTPIN, DHTTYPE); // definisco il sensore
  10. RTC_DS1307 RTC; // definisco il tipo di RTC
  11. LiquidCrystal_I2C lcd(0x27,20,4); // definisco il tipo di display (20 colonne x 4 righe)
  12. void setup() {
  13.   if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  14.   dht.begin(); // se la frequenza è 16 MHz e la tensione è 5 volt, inizzializzare DHT
  15.    
  16.  TinyWireM.begin(); // inizzializzo il I2C
  17.  RTC.begin(); // inizzializzo l'RTC
  18.  lcd.init(); //inizzializzo il display
  19.  lcd.backlight(); // accendo il display
  20.  lcd.print("    Vi presento");
  21.  lcd.setCursor(0,1);
  22.  lcd.print("    RoboTittino");
  23.  lcd.setCursor(0,2);
  24.  lcd.print("Umidita' Temperatura");
  25.  lcd.setCursor(0,3);
  26.  lcd.print("     Data Ora");
  27.  delay(4000); // scrivo la frasr di presenazione ed attendo 4 secondi
  28.  lcd.clear(); // cancello il display
  29.  lcd.setCursor(0,3);
  30.  lcd.print("ORA:");
  31.  lcd.setCursor(0,2);
  32.  lcd.print("DATA:"); // nella terza e quate riga scivo "ORA" e "DATA"
  33.  if (! RTC.isrunning()) {
  34.  RTC.adjust(DateTime(__DATE__, __TIME__)); // regolo l'ora del RTC con quella del PC
  35.  }
  36. }
  37. void loop() {
  38.   int8_t h = dht.readHumidity(); // leggo l'umidità
  39.   int16_t t = dht.readTemperature(TEMPTYPE); // leggo la temperatura
  40.   lcd.setCursor(0, 0);
  41.   if ( t == BAD_TEMP || h == BAD_HUM ) { // se non rileva nessun dato
  42.      lcd.print("Collegatre DHT");       //   scrivo messaggio d'errore nella prima riga
  43.   } else {
  44.      lcd.print("Umidita': "); // nella prima riga scrivo "Umidità"
  45.      lcd.setCursor(10,0);
  46.      lcd.print(h); //  nella prima riga nella colonna 10, scrivo l'umidità rilevata
  47.      lcd.setCursor(12, 0);
  48.      lcd.print(" % ");//  nella prima riga nella colonna 12, scrivo il simbolo %
  49.      lcd.setCursor(0, 1);
  50.      lcd.print("Temp:"); // nella seconda riga scrivo "Temmp"
  51.      lcd.setCursor(10, 1);
  52.      lcd.print(t);// nella seconda riga nella colonna 10, scrivo la temperatura rilevata
  53.      lcd.setCursor(13, 1);
  54.      lcd.print("*C");// nella seconda riga nella colonna 13, scrivo il simbolo "*C"
  55.   }
  56.   DateTime now = RTC.now(); // leggo i dati del RTC
  57.   lcd.home();
  58.   lcd.setCursor(7,2);
  59.   if(now.day()<10)
  60.   lcd.print("0");
  61.   lcd.print(now.day(), DEC);
  62.   lcd.print("/");
  63.   if(now.month()<10)
  64.   lcd.print("0");
  65.   lcd.print(now.month(), DEC);
  66.   lcd.print("/");
  67.   lcd.print(now.year(), DEC);
  68.   // nella settima colonna della terza riga scrivo: gg/mm/aaaa
  69.   lcd.setCursor(8,3);
  70.   if(now.hour()<10)
  71.   lcd.print("0");
  72.   lcd.print(now.hour(), DEC);
  73.   lcd.print(":");
  74.   if(now.minute()<10)
  75.   lcd.print("0");
  76.   lcd.print(now.minute(), DEC);
  77.   lcd.print(":");
  78.   if(now.second()<10)
  79.   lcd.print("0");
  80.   lcd.print(now.second(), DEC);
  81.   // nell'ottava colonna della quarta riga scrivo hh:mm:ss
  82.   delay(1000); //attendo un secondo prima di una nuova lettura
  83. }




Questo è lo schema elettrico realizzato con grande pazienza da Tiziano:






Ed ecco la realizzazione fisica del progetto:









Questo è tutto! se avete domande lasciate un commento qui sotto come al solito, oppure contattare Tiziano Bianchettin il realizzatore del progetto e visitate il suo sito.


Segui Daniele Alberti su Google+!

Nessun commento:

Posta un commento

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

Related Posts Plugin for WordPress, Blogger...