#DHT11Sensor
Explore tagged Tumblr posts
Text
DUINO EDU - DHT11 Sensor & LCD-Display
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 20x2 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.

Schaltung - Grove DHT11 Sensor & LCD-Display am Arduino UNO
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.
Arduino IDE - Voreinstellungen, Speicherort (default)
Arduino IDE - Voreinstellungen, Speicherort (custom) 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.

DHT11 Sensordaten am LCD-Display Nachfolgend das YouTube-Video wo ich dir im Detail erläutere wie das Programm aufgebaut wird. https://youtu.be/dJgfNeRQRo8 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.

Beispiel auf dem RGB LCD-Display mit korrekten Sonderzeichen 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. Grove DHT11 Sensor & LCD-DisplayHerunterladen
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 #include #include 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 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 #include #include #if defined (EDU_LCD_ADRESS) #include 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 ); } Read the full article
0 notes
Text
Arduino UNO R3 und Microsoft Excel Datastreamer: Empfang von DHT11-Sensordaten in Echtzeit

In diesem aufregenden Blogartikel geht es um die kraftvolle Kombination des Arduino UNO R3 und des Microsoft Excel Datastreamer, mit denen du Daten mühelos von deinem Mikrocontroller in Excel übertragen kannst. Du wirst erstaunt sein, wie einfach es ist, die Sensordaten deines DHT11-Sensors vom Arduino UNO R3 per serieller Schnittstelle in Excel zu empfangen. Und das Beste daran? Excel bietet zahlreiche Konfigurationsmöglichkeiten, auf die ich in diesem Artikel detailliert eingehen werde. Du kannst beispielsweise Diagramme erstellen, Daten visualisieren und vieles mehr. Ganz automatisch und ohne großen Aufwand. Also, schnapp dir deinen Arduino, lass uns eintauchen und entdecken, wie du das volle Potenzial des Excel Datastreamers ausschöpfen kannst!

Das Excel Add-in Datastreamer ist auf der offiziellen Seite von Microsoft Willkommen bei Microsoft Datenstreamer-Add-In für Excel ausführlich beschrieben. In diesem Beitrag möchte ich dir eine Zusammenfassung speziell für den Arduino UNO geben und auch zeigen, wie du die empfangenen Daten visualisieren kannst. https://youtu.be/CFC4moe_OLk
Installieren / Aktivieren des Add-ins Datastreamer in Microsoft Excel
Das Add-in ist per Default nicht aktiviert bzw. sichtbar, hier müssen wir über die Optionen zu den Addins (1) navigieren und dort aus der Auswahlliste die "COM Add-ins" (2) markieren und die Schaltfläche "Los.." (3) auswählen. Es sollte nun ein Dialog erscheinen, aus welchem wir wiederum den Haken bei "Microsoft Data Streamer for Excel" (4) setzen, damit nun dieses Add-in aktiviert und angezeigt wird, bestätigen wir die Auswahl mit der Schaltfläche "OK" (5). Es sollte jetzt ein neuer Reiter "Datastreamer" (6) erscheinen.




Wenn wir jetzt eine neue Excel-Mappe erstellen, dann können wir über diesen Reiter eine Verbindung mit dem Mikrocontroller aufbauen und Daten empfangen.

Excel Add-in Datastreamer - Menüleiste Ein Gerät verbinden: dient zum Aufbauen der Datenverbindung zum Mikrocontroller, Datendatei import: importieren einer CSV-Datei, Daten starten: Aufzeichnung der Daten beginnen, diese Schaltfläche wird freigegeben, wenn eine Verbindung zum Mikrocontroller aufgebaut wurde, Daten beenden: Stoppen der Aufzeichnung, Daten aufzeichnen: Aufzeichnung der Daten in eine CSV-Datei beginnen, hier wird zusätzlich eine CSV-Datei mit den Daten beschrieben, Aufzeichnung beenden: Stoppen der Aufzeichnung der Daten in der CSV-Datei, Bildschirm erfassen: einen Screenshot von einem Bereich erfassen, das Bild wird in die Zwischenablage abgelegt, Daten zurücksetzen: alle Daten werden gelöscht, Erweitert: öffnet den Dialog zum Konfigurieren der Schnittstelle
Ein kleines Programm auf dem Arduino zum Senden von Daten
Schreiben wir ein kleines Programm auf dem Arduino, welches die Sensordaten eines DHT11 Sensors liefert. Dem DHT11 Sensor habe ich bereits einige Beiträge auf diesem Blog gewidmet und dir somit bereits gezeigt, wie dieser am Arduino programmiert wird. - Arduino Lektion 6: Sensor DHT11, Temperatur und relative Luftfeuchtigkeit messen - ArduBlock – Arduino UNO mit DHT11 & LCD-Display - Funduino-Cube programmieren #2: DHT11 Sensor & OLED-Display Der DHT11 Sensor liefert dir die Temperatur sowie die relative Luftfeuchtigkeit, somit können wir gleich testen ob das Add-in auch mit mehreren Daten auskommt. Aufbau der Schaltung Die Schaltung ist mit drei Breadboardkabel, ein 400 Pin Breadboard sowie ein DHT11 Sensor am Arduino recht schnell erledigt.

Schaltung - DHT11 Sensor am Arduino UNO R3 Den DHT11 Sensor erhältst du in drei Varianten. Wobei ich die bevorzuge, wo der Sensor inkl. der benötigten Schaltung auf einer kleinen Platine gedruckt ist.

Varianten des DHT11 Sensors Programm zum Auslesen der Sensordaten und senden per serieller Schnittstelle Zum Auslesen des Sensors benötigen wir zusätzlich eine Bibliothek, welche wir zunächst installieren müssen. Dieses geht in der Arduino IDE 2.0 über den internen Bibliotheksverwalter (1) in dem wir zunächst nach "adafruit dht11" (2) suchen und dann die Schaltfläche "INSTALL" betätigen. Da ich diese bereits installiert habe, steht bei mir "REMOVE" (3).

Installieren der Bibliothek für den DHT11 Sensor über den Bibliotheksverwalter Wenn die Bibliothek erfolgreich installiert wurde, erscheint der Tag " installed" (4). Jetzt können wir das nachfolgende kleine Programm auf den Mikrocontroller überspielen. Wichtig ist hier, dass die Sensordaten mit einem Komma getrennt sind und die Zeile mit einem Zeilenumbruch endet! #include #include #include #define DHTPIN 2 #define DHTTYPE DHT11 DHT_Unified dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); sensor_t sensor; dht.temperature().getSensor(&sensor); } void loop() { delay(2500); sensors_event_t event; dht.temperature().getEvent(&event); dht.humidity().getEvent(&event); if (isnan(event.temperature) || isnan(event.temperature)) { Serial.println(F("Fehler beim lesen der Daten vom DHT11 Sensor!")); } else { Serial.print(event.temperature); Serial.print(","); Serial.print(event.relative_humidity); Serial.println(""); } } Das Programm habe ich aus den Beispielen zur Bibliothek entnommen und auf das wesentliche eingekürzt! Die Ausgabe ist nun, dass die beiden Sensorwerte für Temperatur & rel. Luftfeuchtigkeit durch ein Komma getrennt auf der seriellen Schnittstelle ausgegeben wird.

Ausgabe der Sensordaten auf der seriellen Schnittstelle Wenn das Programm überspielt wurde und Daten im seriellen Monitor der Arduino IDE erscheinen, müssen wir die IDE beenden, denn es können nicht parallel mehrere Applikationen auf den gleichen COM-Port zugreifen.
Aufzeichnen der Sensordaten vom Arduino mit Excel Datastreamer
Nachdem wir das Add-in installiert / aktiviert und das Programm auf dem Arduino UNO installiert haben, können wir damit starten, die Sensordaten aufzuzeichnen. Jedoch definieren wir zunächst die Spalten (Datenkanäle) und die Anzahl der Datenzeilen. Die Anzahl der Spalten und Datenzeilen konfigurieren wir im Reiter "Einstellungen".

Datastreamer - Einstellungen der Arbeitsmappe Die Beschriftungen der Kanäle (Spalten) können wir im Reiter "Manifest" ändern. Hier wird dir für jeden Kanal eine Zeile angezeigt, in welcher du die Beschriftung sowie die Maßeinheit eintragen kannst.

Datastreamer - Reiter Manifest Wenn die Einstellungen getroffen sind, kann nun über die Schaltfläche "Ein Gerät verbinden" der Mikrocontroller ausgewählt werden. In meinem Fall wurde der Mikrocontroller Funduino UNO als Arduino erkannt, jedoch der Raspberry Pi Pico Klone und der ESP32 wurde nicht korrekt erkannt.

Datastreamer - Aufbauen einer Verbindung zum Mikrocontroller Ich wähle hier den Eintrag "Arduino Uno (COM7)" aus und klicke danach auf die Schaltfläche "Daten starten". Es wird dann sofort begonnen, die Daten in die entsprechenden Spalten einzutragen. Zusätzlich erhalten wir noch ein Zeitstempel.

Aufzeichnen von Daten im Excel Add-in Datastreamer
Visualisieren der Sensordaten in einem Diagramm
Ein weiteres Feature dieser Tabelle ist, dass die Sensordaten fortlaufend geschrieben werden, somit können wir die Daten in einem Diagramm visualisieren und können damit eine live Betrachtung der Daten in einem Diagramm vollziehen. Zunächst warten wir ab, bis alle Zeilen einmalig befüllt sind und danach wählen wir die Spalten und Zeilen aus, um danach ein Diagramm aus diesen Daten zu erzeugen. Hier hat Excel eine Vielzahl von Diagrammen zur Auswahl.
Abschluss
In diesem Beitrag habe ich dir gezeigt, wie man mit dem Excel Add-in Datastreamer Sensordaten vom Arduino UNO empfangen und visualisieren kann. Zusätzlich habe ich dir ein YouTube-Video von meinem Kanal verlinkt, in welchem ich das ganze noch einmal im Detail erläutere. Read the full article
0 notes
Text
Arduino Programmierung: Effiziente Datenverwaltung mit struct

In der Welt der Arduino Programmierung bietet das Schlüsselwort "struct" eine kraftvolle Möglichkeit zur effizienten Datenverwaltung. Anders als Arrays erlaubt ein struct die Gruppierung verschiedener Datentypen unter einem Dach – und das mit variablen, aussagekräftigen Namen. Bevor wir jedoch tiefer in die Vorteile von struct eintauchen, werfen wir einen Blick auf das Problem, dem viele Entwickler gegenüberstehen: Arrays. Diese, obwohl leistungsstark, sind auf einen Datentyp beschränkt und verlangen eine festgelegte Größe. Das Finden spezifischer Daten wird so zu einer Herausforderung.

Arduino Programmierung: Effiziente Datenverwaltung mit struct Verkürzt kann man quasi sagen: Ein struct (Abkürzung für "structure") ist in der Welt der Arduino Programmierung, die auf C++ basiert, eine Datenstruktur, die es ermöglicht, verschiedene Datentypen unter einem gemeinsamen Namen zu organisieren und zu gruppieren.
Wie ist ein struct aufgebaut?
Ein struct ist eine Datenstruktur, die es erlaubt, verschiedene Datentypen unter einem gemeinsamen Namen zu gruppieren. Technisch gesehen wird ein struct als benutzerdefiniertes Datentyp betrachtet, der aus einer Sammlung von Datenmitgliedern besteht. Im Gegensatz zu Klassen, haben structs standardmäßig öffentlichen Zugriff auf ihre Datenmitglieder, während Klassen standardmäßig private Zugriffsbereiche haben. struct Sensordaten{ // Datentyp1 variablenname1; // Datentyp2 variablenname2; // ... }; Wir können also für einen Sensor folgendes struct erzeugen. struct Sensordaten{ String typ; float value; };
Wie wird ein struct erzeugt?
Das struct wird behandelt wie eine Variable, d.h. zunächst nennen wir den Datentypen, was in unserem Fall der Name des struct ist und danach einen Namen. Du kannst dann entweder gleich Werte zuweisen oder dieses später in einer Funktion erledigen. Sensordaten temperatur = { "Temperatur", 12.64 }; Wenn du die Initialisierung der Daten des struct später erledigst, dann solltest du sicherstellen, dass dieses vor dem Lesen / verwenden der Daten erfolgt. Es würde dir kein Fehler geworfen werden, sondern du erhältst einfach irgendwelche Daten aus dem Speicher. Sensordaten temperatur; void setup(){ temperatur.type = "Temperatur"; temperatur.value = 12.56; }
Ein Beispiel für den Einsatz eines struct am Arduino
Steigen wir nun mit einem Beispiel ein, ich möchte gerne die Sensordaten eines DHT11 Sensors verwalten. Dieser Sensor liefert die Temperatur, sowie die relative Luftfeuchtigkeit.

Arduino UNO R3 mit DHT11 Sensor Diese Daten wollen wir jetzt in einem struct speichern. Dazu legen wir uns zunächst erstmal die Struktur an. struct Sensordaten { String type; //der Typ (Temperatur, rel. Luftfeuchtigkeit, Luftdruck etc.) String symbol; //das Zeichen/Symbol für die Maßeinheit (°C, %, hPa) float value; //der aktuelle Wert float max; //der maximal gemessene Wert float min; //der minimal gemessene Wert }; Hier der komplette Code zum Auslesen der Temperatur und rel. Luftfeuchtigkeit eines DHT11 Sensors am Arduino UNO R3. //Bibliothek zum kommunizieren mit dem DHT Sensor #include //der Sensor ist am digitalen Pin D5 angeschlossen DHTNEW dht11Sensor(5); //struct für die Verwaltung der Sensordaten struct Sensordaten { String type; String symbol; float value; float max; float min; }; //erzeugen von Feldern für die Sensordaten //des DHT11 Sensors Sensordaten temperatur; Sensordaten luftfeuchte; void setup() { //begin der kommunikation mit 9600 Baud //auf der seriellen Schnittstelle Serial.begin(9600); //definieren der Daten für den Temperaturwert temperatur.type = "Temperatur"; temperatur.symbol = "°C"; temperatur.value = 0; //maximale und minimale Grenze setzen temperatur.max = -999; temperatur.min = 999; //definieren der Daten für //die relative Luftfeuchtigkeit luftfeuchte.type = "rel. Luftfeuchtigkeit"; luftfeuchte.symbol = "%"; luftfeuchte.value = 0; luftfeuchte.max = -999; luftfeuchte.min = 999; } //Funktion zum ausgeben von Sensordaten //auf der seriellen Schnittstelle //Als Parameter wird das struct übergeben. void printValues(Sensordaten data) { Serial.println(data.type); Serial.print("taktueller Wert: "); Serial.print(data.value); Serial.print(data.symbol); Serial.print("t"); Serial.print("(max.: "); Serial.print(data.max); Serial.print(data.symbol); Serial.print(", min.: "); Serial.print(data.min); Serial.print(data.symbol); Serial.print(")"); Serial.println(); } void loop() { //anfordern der Sensordaten dht11Sensor.read(); //behandeln der Werte für die rel. Luftfeuchtigkeit float luftfeuchteValue = dht11Sensor.getHumidity(); luftfeuchte.value = luftfeuchteValue; luftfeuchte.max = max(luftfeuchteValue, luftfeuchte.max); luftfeuchte.min = min(luftfeuchteValue, luftfeuchte.min); //behandeln der Werte für die Temperatur float temperatureValue = dht11Sensor.getTemperature(); temperatur.value = temperatureValue; temperatur.max = max(temperatureValue, temperatur.max); temperatur.min = min(temperatureValue, temperatur.min); //ausgeben der Daten auf der seriellen Schnittstelle printValues(luftfeuchte); printValues(temperatur); //eine kleine Pause von 1,5 Sekunden delay(1500); } Der Code erzeugt eine Ausgabe auf der seriellen Schnittstelle aus welcher wir die aktuellen sowie der maximale und minimale Wert ablesen können.
Beispiel - struct zum speichern von Sensordaten eines DHT11 Sensors am ArduinoHerunterladen
Erkannte Vorteile eines struct
Wenn wir nun auf den Code blicken, erkennen wir zunächst vier eindeutige Vorteile eines struct. Datenorganisation: structs ermöglichen die Gruppierung verschiedener Datentypen unter einem gemeinsamen Namen. Dies fördert die organisierte Strukturierung von Daten, was besonders nützlich ist, wenn verschiedene Informationen zu einem einzigen Konzept gehören. Verbesserte Lesbarkeit: Durch die Verwendung von structs können Daten mit aussagekräftigen Namen versehen werden. Dies verbessert die Lesbarkeit des Codes, da Entwickler auf einen Blick erkennen können, welche Daten ein bestimmtes struct repräsentiert. Einfacher Zugriff: Der Zugriff auf die Mitglieder eines structs erfolgt über die Punkt-Notation, was den Code einfacher und intuitiver macht. Dies erleichtert das Lesen, Schreiben und Verstehen von Daten, insbesondere im Vergleich zu komplexen Indizierungsmechanismen bei Arrays. Flexibilität und Erweiterbarkeit: structs bieten Flexibilität, da sie verschiedene Datentypen enthalten können. Dies ermöglicht die Definition komplexer Datenstrukturen, die leicht erweitert oder angepasst werden können, ohne den gesamten Code umzuschreiben. Dies ist besonders nützlich, wenn neue Daten hinzugefügt werden müssen.
Nachteile eines struct durch die öffentliche, einfache Struktur
Wo Vorteile sind, sind auch Nachteile. Daher ergeben sich aus dem sehr geöffneten Aufbau des struct folgende Nachteile. Keine Methoden: Im Gegensatz zu Klassen in einigen Programmiersprachen können structs keine Methoden enthalten. Das bedeutet, dass du keine Funktionen direkt an ein struct binden kannst. Begrenzte Vererbung: Im Vergleich zu Klassen bieten structs eine begrenzte Vererbungsfähigkeit. Du kannst nur öffentliche Datenmitglieder erben, und es gibt keine Möglichkeit, den Zugriff zu steuern oder Funktionen zu überschreiben. Keine Kontrollmechanismen: structs bieten standardmäßig keinen Schutzmechanismus für ihre Datenmitglieder. Alle Daten sind standardmäßig öffentlich zugänglich, was potenzielle Probleme in Bezug auf Datenintegrität und -sicherheit verursachen kann. Keine Zugriffsmodifikatoren: Anders als bei Klassen, bei denen du private, geschützte und öffentliche Zugriffsmodifikatoren verwenden kannst, haben structs standardmäßig nur öffentlichen Zugriff. Das kann die Kontrolle über den Zugriff auf die Daten beeintr��chtigen. Read the full article
0 notes