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