beelogger

beelogger-Universal – Option LCD

Hier stellen wir die Option LCD-Modul für den beelogger-Universal vor.

Mit dem von uns gewähltem 2-zeiligen LCD-Display können in den aktiven Mess-/Sende-Zyklen des Systems Messwerte angezeigt werden.
Das LCD-Display wird über einen Schalter mit 5V versorgt. Die Sketcherweiterung überprüft, ob das Modul eingeschaltet ist und zeigt dann die Messwerte an.
Diese Option ist nur als Anregung zu verstehen, daher ist die Beschreibung absichtlich nicht sehr ausführlich.
Die wassergeschütze Ausführung eines Messsystems mit LCD-Modul kann eine besondere Herausforderung sein.

LCD-Display

Ein zweizeiliges LCD-Display mit 16 Stellen, Typ HD44780 / 1602 mit einem I2C-Bus Adapter (TWI/I2C).
Der Anschluss erfolgt über GND, SDA/SCL, und an 5Vsw.
Damit das LCD-Display nicht bei jedem Messzyklus aktiviert wird, bietet der Anschluss von 5Vsw über einen Schalter an.
Der Kontrast des Displays wird über einen Einsteller auf dem Modul fest eingestellt.

Programmcode:

Die unten stehende Sketcherweiterung überprüft, ob das Modul eingeschaltet ist und zeigt die Messwerte Gewicht und Aussentemperatur an.
Achtung: Je nach Ausbaustufe bzw. Sensorausstattung des Systems steht für diese Erweiterung nicht genügend Speicherplatz zur Verfügung.

Das Einschalten/Aktivieren des beelogger erfolgt über den Arbeitsschalter.
Nach Ablauf der üblichen Einschaltzeit des beelogger-Universal wird das Modul automatisch abgeschaltet.
Der Schalter für das LCD-Display sollte im Normalfall ausgeschaltet bleiben, damit bei den zyklischen Messungen nicht unnötig Strom verbraucht wird.
Die notwendige Bibliothek für das LCD ist im aktuellen Bibliothek-Paket enthalten.

/**
@brief Funktion Daten_LCD
setup the LCD and display some data
@param none, uses global data
@return none
*/

// I2C-Adresse des Controller für das LCD-Display
#define LCD_I2C 0x27 // Alternativ auch 0x3F möglich

// Werte für die Korrektur des Gewichts zur Anzeige im Display
const float Kalibriertemperatur = 1.0f; // Temperatur zum Zeitpunkt der Kalibrierung
const float KorrekturwertGrammproGrad = 0.0f; // Korrekturwert zur Temperaturkompensation - '0' für Deaktivierung


//!!!! Anschluß: Gnd (-); VCC (5V); SDA (A4); SCl (A5) !!!!!!
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C Bibliothek einbinden
#include "Wire.h"

void Daten_LCD() {
char data[8];

Wire.beginTransmission(LCD_I2C); // check presence of LCD I2C-Controller
uint8_t error = Wire.endTransmission();
if (error == 0) { // is present
LiquidCrystal_I2C lcd(LCD_I2C, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //
lcd.begin(16, 02); //Das Display wird gestartet und die Größe des Displays wird angegeben(Jeweils 16 Zeichen in 2 Zeilen)
lcd.backlight();//Beleuchtung des Displays einschalten

lcd.setCursor(0, 0); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print(&ID_ID[5]); // show Sketch ID
lcd.print(" ");

// Daten_to_disp: Gewicht erste Waage (ggf. mit Temp.-Korrektur)
float gewicht = Gewicht[0];
if (SensorTemp[Aussenwerte] != No_Val) {
gewicht = gewicht - ((SensorTemp[Aussenwerte] - Kalibriertemperatur) * KorrekturwertGrammproGrad);
}
dtostrf(gewicht, 1, 1, data);
lcd.print(data);

// Daten_to_disp: Temperatur aussen 
lcd.setCursor(0, 1); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
dtostrf(SensorTemp[Aussenwerte], 1, 1, data);
lcd.print("Ta:");
lcd.print(data);

// Daten_to_disp: Temperatur DS3231 
dtostrf(Aux[0], 1, 1, data);
lcd.print(" T:");
lcd.print(data);

delay(15000);
}
else {
debugprintln("no LCD");
}
}

 

Damit der Programmcode im Sketch aufgerufen wird, muss die Funktion Daten_LCD(); in die loop() eingebaut werden.
Dazu die Zeile vor Daten_Senden ergänzen:

...
 Daten_LCD();
 Daten_Senden(ureq);
...