In diesem neuen Beitrag möchte ich dir gerne zeigen, wie du die Sensorwerte des DHT11 Sensors auf einem LCD-Display per DUINO EDU anzeigen lassen kannst.
Dieses kleine Projekt ist der Wunsch des lesers Sieglinde L. welche das Projekt gerne mit der grafischen Entwicklungsumgebung DUINO EDU umsetzen möchte.
Benötigte Ressourcen für dieses Projekt
Wenn du das kleine Projekt nachbauen möchtest, dann benötigst du:
- einen Arduino UNO*,
- ein USB-Datenkabel*,
- ein Grove Connector Shield / Base Shield v2 für den Arduino UNO*,
- ein DHT11 Sensor mit Grove Schnittstelle*,
- ein 20×2 Zeichen LCD-Display (I2C) mit Grove Schnittstelle*,
- zwei Grove Kabel*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau der Schaltung
Die Schaltung ist mit den Grove Anschlüssen sehr einfach und schnell erledigt, denn das LCD-Display wird lediglich in einen I2C und der DHT11 Sensor in ein digitalen Connector gesteckt.
DUINO EDU einrichten / konfigurieren
Bevor wir mit der Entwicklung des Programmes starten können, müssen wir die IDE herunterladen. Wie du dieses machst habe ich dir bereits im Beitrag Arduino Programmierung mit DUINO EDU erläutert.
Bei der Programmierung ist mir jedoch aufgefallen das der eingestellte Pfad für das standardmäßige Speichern von Projekten zu Problemen führt. Dieser Pfad wird auch genutzt um Bibliotheken zu referenzieren.
Meine Lösung dazu war, den Pfad auf einen anderen Ordner innerhalb der IDE DUINO EDU zu legen.
Programmieren in DUINO EDU
Wenn die Entwicklungsumgebung DUINO EDU fertig eingerichtet ist, dann können wir mit der Programmierung beginnen. Eigentlich ist es keine Programmierung im eigentlichen Sinne denn wir klicken eher per Drag’n Drop GUI Elemente zusammen und daraus wird dann der Code generiert welchen wir auf den Mikrocontroller spielen.
Nachfolgend das YouTube-Video wo ich dir im Detail erläutere wie das Programm aufgebaut wird.
Fehlende Punkte in der zweiten Zeile
In der zweiten Zeile vom LCD-Display werden keine Punkte angezeigt.
Das liegt in diesem Fall an der verwendeten Bibliothek. Wenn man die originale Bibliothek von Seeedstudio in der Arduino IDE verwendet, dann werden alle Zeichen auf dem Display korrekt angezeigt.
Das Programm im Detail
In der nachfolgenden Grafik zeige ich dir das kleine Programm mit Kommentaren.
Du benötigst für das Anzeigen der Sensorwerte auf dem LCD-Display recht wenig GUI Elemente, jedoch werden diese Elemente sehr tief ineinander verschachtelt.
Natürlich kannst du auch den Code etwas lesbarer gestalten und die Werte in Variablen auslagern, jedoch macht dieses den Code nicht viel besser.
Den Code kannst du dir auch über nachfolgenden Link als ZIP-Datei herunterladen.
Excurs zum Arduino Code
Schauen wir uns einmal den generierten Code an welcher kompiliert und auf den Mikrocontroller überspielt wird.
Zunächst werden die benötigten Bibliotheken importiert.
#include <Wire.h> #include <rgb_lcd.h> #include <DHT.h>
Danach wird geprüft ob das Feld EDU_LCD_ADRESS vorhanden ist, wenn dieses so ist wird eine Bibliothek für das Display importiert, andernfalls wird eine Bibliothek für ein RGB LCD-Display importiert.
#if defined (EDU_LCD_ADRESS) #include <Duinoedu_LiquidCrystalUp.h> Duinoedu_LiquidCrystalUp monRgb(EDU_LCD_ADRESS, EDU_LCD_COLS, EDU_LCD_ROWS); #else rgb_lcd monRgb; #endif
Im nächsten Schritt wird eine Instanz des DHT Sensor objektes initialisiert mit der zusätzlichen Information das am digitalen Pin D2 ein Sensor angeschlossen ist.
DHT monDHT_pin2(2);
In der Funktion setup wird das Display und die Kommunikation mit dem Sensor gestartet.
void setup(){ monRgb.branch(); monDHT_pin2.brancher(); }
Die Funktion loop wird fortlaufend ausgeführt und liest und schreibt die Sensordaten auf das Display. Die Funktionen dabei sind in französischer Sprache (warum auch immer).
void loop(){ monRgb.placerCurseurEn(0,0); monRgb.ecrire("Temp.:" ); monRgb.ecrire(String(monDHT_pin2.lireTemperature(),2) ); monRgb.placerCurseurEn(1,0); monRgb.ecrire("rel.Luftf.:" ); monRgb.ecrire(String(monDHT_pin2.lireHumidite(),2) ); delay( 2000 ); }
Hier nun der komplette Code:
#include <Wire.h> #include <rgb_lcd.h> #include <DHT.h> #if defined (EDU_LCD_ADRESS) #include <Duinoedu_LiquidCrystalUp.h> Duinoedu_LiquidCrystalUp monRgb(EDU_LCD_ADRESS, EDU_LCD_COLS, EDU_LCD_ROWS); #else rgb_lcd monRgb; #endif DHT monDHT_pin2(2); void setup() { monRgb.branch(); monDHT_pin2.brancher(); } void loop() { monRgb.placerCurseurEn(0,0); monRgb.ecrire("Temp.:" ); monRgb.ecrire(String(monDHT_pin2.lireTemperature(),2) ); monRgb.placerCurseurEn(1,0); monRgb.ecrire("rel.Luftf.:" ); monRgb.ecrire(String(monDHT_pin2.lireHumidite(),2) ); delay( 2000 ); }
Tausend Dank für das super Projekt, endlich mal eine ausführliche Erklärung, vor allem die Kommentare sind super hilfreich. das würde ich allein niemals hinkriegen.
Hoffentlich können viele davon profitieren.