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.


Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

8 commenti:

  1. Salve non riesco a trovare/scaricare le librerie, mi può aiutare? Grazie.

    RispondiElimina
    Risposte
    1. Ciao scusa se non le ho aggiunte nel post, prova queste, te le elenco:

      https://github.com/adafruit/TinyDHT
      https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
      https://github.com/adafruit/TinyRTCLib
      https://github.com/adafruit/TinyWireM

      Fammi sapere, ciao!


      Elimina
  2. Le altre le ho già quella che mi manca è .

    RispondiElimina
  3. Le altre le ho già quella che mi manca è la Libreria per ridurre la frequenza a 16 MHz a 5 volt.

    RispondiElimina
  4. Le altre le ho già quella che mi manca è la Libreria per ridurre la frequenza a 16 MHz a 5 volt.

    RispondiElimina
  5. hai provato a compilare? che errore ti da?

    RispondiElimina
  6. Ciao Daniele, stavo realizzando questo progetto ma se provo a compilarlo, mi dà questo errore:

    "Sto compilando lo sketch...
    "C:\\Users\\claud\\Documents\\ArduinoData\\packages\\arduino\\tools\\avr-gcc\\4.8.1-arduino5/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=attiny85 -DF_CPU=16500000L -DARDUINO=10813 -DARDUINO_AVR_DIGISPARK -DARDUINO_ARCH_AVR "-IC:\\Users\\claud\\Documents\\ArduinoData\\packages\\digistump\\hardware\\avr\\1.6.7\\cores\\tiny" "-IC:\\Users\\claud\\Documents\\ArduinoData\\packages\\digistump\\hardware\\avr\\1.6.7\\variants\\digispark" "-IC:\\Users\\claud\\Documents\\Arduino\\libraries\\TinyDHT-master" "-IC:\\Users\\claud\\Documents\\Arduino\\libraries\\Arduino-LiquidCrystal-I2C-library-master" "-IC:\\Users\\claud\\Documents\\ArduinoData\\packages\\digistump\\hardware\\avr\\1.6.7\\libraries\\TinyRTClib" "-IC:\\Users\\claud\\Documents\\ArduinoData\\packages\\digistump\\hardware\\avr\\1.6.7\\libraries\\TinyWireM" "-IC:\\Users\\claud\\Documents\\ArduinoData\\packages\\digistump\\hardware\\avr\\1.6.7\\libraries\\Wire" "C:\\Users\\claud\\AppData\\Local\\Temp\\arduino_build_889167\\sketch\\Orologio_digispark.ino.cpp" -o "C:\\Users\\claud\\AppData\\Local\\Temp\\arduino_build_889167\\sketch\\Orologio_digispark.ino.cpp.o"
    C:\Users\claud\Documents\Arduino\Orologio_digispark\Orologio_digispark.ino: In function 'void setup()':
    Orologio_digispark:19:6: error: 'class LiquidCrystal_I2C' has no member named 'init'
    lcd.init(); //inizzializzo il display
    ^
    Più di una libreria trovata per "LiquidCrystal_I2C.h"
    Usata: C:\Users\claud\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
    Non usata: C:\Users\claud\Documents\ArduinoData\packages\digistump\hardware\avr\1.6.7\libraries\DigisparkLCD
    Più di una libreria trovata per "TinyRTClib.h"
    Usata: C:\Users\claud\Documents\ArduinoData\packages\digistump\hardware\avr\1.6.7\libraries\TinyRTClib
    Non usata: C:\Users\claud\Documents\Arduino\libraries\TinyRTCLib-master
    Più di una libreria trovata per "TinyWireM.h"
    Usata: C:\Users\claud\Documents\ArduinoData\packages\digistump\hardware\avr\1.6.7\libraries\TinyWireM
    Non usata: C:\Users\claud\Documents\Arduino\libraries\TinyWireM-master
    Uso la libreria TinyDHT-master alla versione 1.1.0 nella cartella: C:\Users\claud\Documents\Arduino\libraries\TinyDHT-master
    Uso la libreria Arduino-LiquidCrystal-I2C-library-master nella cartella: C:\Users\claud\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master (legacy)
    Uso la libreria TinyRTClib nella cartella: C:\Users\claud\Documents\ArduinoData\packages\digistump\hardware\avr\1.6.7\libraries\TinyRTClib (legacy)
    Uso la libreria TinyWireM alla versione 1.0.0 nella cartella: C:\Users\claud\Documents\ArduinoData\packages\digistump\hardware\avr\1.6.7\libraries\TinyWireM
    Uso la libreria Wire nella cartella: C:\Users\claud\Documents\ArduinoData\packages\digistump\hardware\avr\1.6.7\libraries\Wire (legacy)
    exit status 1
    'class LiquidCrystal_I2C' has no member named 'init' "
    Premetto che ho usato le tue librerie.Se potresti aiutarmi.
    Grazie

    RispondiElimina
  7. Salve, potrebbe inviarmi lo schema? Quello sopra non si vede bene.
    Grazie mille

    RispondiElimina

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

Altri Post