Il Datalogger arduino LCD 2 è l’evoluzione del primo datalogger che ho realizzato, la principale differenza rispetto alla versione uno è la sostituzione di due shield con un unica shield della adafruit.
In pratica al poto della RTC Shield e della SD Card shield puoi usare un unica shield della adafruit che si chiama appunto: Datalogging Adafruit il cui scopo è agevlare la realizzazione di progetti come questo.
Le caratteristiche principali ed i test preliminari sul funzionamento della shield puoi leggerli ne mio articolo dedicato al datalogging in questo articolo ti mostro come assemblare in tre semplici passi il progetto Datalogger arduino LCD 2
Assembla le shield del progetto Datalogger arduino LCD 2
L’unica difficoltà di questo progetto è la saldatura degli header alla shield della adafruit che come a vrai visto nell’articolo dedicato ho spstituito con degli header arduino per semplificarmi l’assemblaggio.
Important!
Per agevolare la costruzione del Datalogger arduino LCD 2 ho chiesto al sito robot-domestici di fornire anche il servizio di saldatura degli header, SU RICHIESTA, in modo che la shield della adafruit ti arrivi già pronta per il montaggio.
Il primo passo è l’arduino, cuore del progetto e del tuo Datalogger arduino LCD 2:
sull’arduino trova posto la datalogging adafruit:
grazie agli header montati sulla shield puoi inserire a castello la keypad LCD:
ed infine aggiungere il sensore DHT11 collegandolo al pin A1, come vedi nella figura sopra, il primo a sinistra della fila di contatti presenti sotto il display della keypad LCD.
Per sistemare il sensore DHT11 ho usato un distanziale ( non fornito nel kit ) che mi consente di far ruotare il sensore in modo da averlo perpendicolare al display LCD od orizzontale a tale per disporlo meglio in un eventuale contenitore.
Lo sketch del Datalogger arduino LCD 2
Lo sketch è identico a quello presentato e descritto nella versione uno del display, che riporto:
/* * DATALOGGER TEMPERATURA ED UNMIDITA' LCD Ver.2 * * @author: Alfieri Mauro * Tw: @mauroalfieri * Web: www.mauroalfieri.it */ #include <Wire.h> #include "RTClib.h" #include <SD.h> #include <dht11.h> #include <LiquidCrystal.h> #define CS 10 #define DHT11_PIN 15 #define BUTTON A0 int SELECT[] = {720,760}; int LEFT[] = {480,520}; int RIGTH[] = {0,20}; int UP[] = {120,160}; int DOWN[] = {300,350}; RTC_DS1307 RTC; dht11 DHT; LiquidCrystal lcd(8,9,4,5,6,7); char buffer[50]; char lcdBuffer[16]; File myFile; void setup () { Serial.begin(57600); Serial.print("Initializing SD card..."); pinMode( CS, OUTPUT); lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("DataLogger LCD2"); lcd.setCursor(0,1); lcd.print("mauroalfieri.it"); delay( 3000 ); lcd.clear(); lcd.setCursor(0,0); lcd.print("Init SD Card..."); lcd.setCursor(0,1); if (!SD.begin(CS)) { Serial.println("initialization failed!"); lcd.print("... Failed "); return; } Serial.println("initialization done."); lcd.print("... Ready "); delay( 2000 ); lcd.clear(); Wire.begin(); RTC.begin(); RTC.sqw(0); //0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); RTC.adjust(DateTime(__DATE__, __TIME__)); } } void loop () { DateTime now = RTC.now(); sprintf(lcdBuffer, "%02d/%02d/%04d", now.day(), now.month(), now.year() ); lcd.setCursor(0,0); lcd.print(lcdBuffer); sprintf(lcdBuffer, "%02d:%02d:%02d", now.hour(), now.minute(), now.second() ); lcd.setCursor(0,1); lcd.print(lcdBuffer); if ( now.minute() == 00 || now.minute() == 10 || now.minute() == 20 || now.minute() == 30 || now.minute() == 40 || now.minute() == 50 ) { saveData( now ); } if ( ctrlButton( analogRead( BUTTON ) ) != 0 ) { readSensor( now ); lcd.clear(); } delay( 1000 ); } void readSensor( DateTime now ) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Lettura DHT11"); lcd.setCursor(0,1); // ----------------------------------------------------------------------- int chk; chk = DHT.read(DHT11_PIN); // READ DATA switch (chk){ case DHTLIB_OK: Serial.print("OK,\t"); lcd.print("SUCCESS"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); lcd.print("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); lcd.print("Time out error"); break; default: Serial.print("Unknown error,\t"); lcd.print("Unknown error"); break; } delay(1000); // ----------------------------------------------------------------------- lcd.clear(); lcd.setCursor(0,0); sprintf(lcdBuffer, "%s %02d", "Humidty ", DHT.humidity ); lcd.print(lcdBuffer); lcd.setCursor(0,1); sprintf(lcdBuffer, "%s %02d", "Temperatura ", DHT.temperature ); lcd.print(lcdBuffer); delay( 3000 ); } void saveData( DateTime now ) { int chk; chk = DHT.read(DHT11_PIN); // READ DATA sprintf(buffer, "%02d/%02d/%d %02d:%02d:%02d %d %d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature ); Serial.println( buffer ); myFile = SD.open("dati.log", FILE_WRITE); if (myFile) { myFile.println(buffer); myFile.close(); } else { Serial.println("error opening data.log"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Err SD Write"); } delay(1000); } int ctrlButton( int button ) { if ( SELECT[0] <= button && button <= SELECT[1] ) { return 1; } if ( LEFT[0] <= button && button <= LEFT[1] ) { return 2; } if ( RIGTH[0] <= button && button <= RIGTH[1] ) { return 3; } if ( UP[0] <= button && button <= UP[1] ) { return 4; } if ( DOWN[0] <= button && button <= DOWN[1] ) { return 5; } return 0; }
non descrivo il progetto in quanto trovi tutti i dettagli nell’articolo originale.
Buona realizzazione del Datalogger arduino LCD 2 !!!
1 commento
ciaomida questotipodi erroreArduino: 1.6.12 (Windows 10), Board: “Arduino/Genuino Uno”
C:\Users\Admin\AppData\Local\Temp\arduino_modified_sketch_199026\sketch_nov08f.ino: In function ‘void setup()’:
sketch_nov08f:57: error: ‘class RTC_DS1307’ has no member named ‘sqw’
RTC.sqw(0); //0 Led off – 1 Freq 1Hz – 2 Freq 4096kHz – 3 Freq 8192kHz – 4 Freq 32768kHz
^
Multiple libraries were found for “SPI.h”
Used: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI
Not used: C:\Program Files (x86)\Arduino\libraries\SPI-master
exit status 1
‘class RTC_DS1307’ has no member named ‘sqw’
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.