Datalogger arduino LCD 2

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.

Datalogger arduino LCD 2

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.

Il primo passo è l’arduino, cuore del progetto e del tuo Datalogger arduino LCD 2:

Datalogger arduino LCD 2

sull’arduino trova posto la datalogging adafruit:

Datalogger arduino LCD 2 adafruit

grazie agli header montati sulla shield puoi inserire a castello la keypad LCD:

Datalogger arduino LCD 2

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

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/datalogger-arduino-lcd-2.html

1 comment

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

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.