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 !!!






Il blog mauroalfieri.it ed i suoi contenuti sono distribuiti con Licenza
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.