Lektion 20/31: Anzeige von Temperatur und Luftfeuchtigkeit vom DHT11 auf dem LCD-Bildschirm
Dieses Tutorial zeigt, wie man einen DHT11-Temperatur- und Luftfeuchtigkeitssensor mit einem I2C-fähigen LCD1602-Display kombiniert, um eine kompakte Umweltüberwachungsstation zu erstellen. Anstatt rohe Sensordaten vom seriellen Monitor zu lesen, lernen Sie, Live-Temperatur- und Luftfeuchtigkeitswerte auf einem 16x2-Zeichendisplay anzuzeigen. Dieses Projekt ist ideal für den Bau einer Desktop-Wetterstation, eines kleinen Gewächshausmonitors oder für die Hinzufügung einer lokalen Anzeige zu jedem Hausautomationsprojekt. Die I2C-Schnittstelle vereinfacht die Verkabelung, was dieses Projekt für Anfänger zugänglich und für erfahrene Maker eine schnelle Ergänzung macht.
Hier sind einige praktische Ideen, was Sie mit diesem Wissen bauen können:
- Eine Desktop-Wetterstation, die die aktuellen Raumkonditionen anzeigt.
- Ein kompaktes Display für ein Reptilien- oder Pflanzen-Terrarium.
- Eine lokale Anzeige für einen Serverraum oder eine Werkstattumgebung.
- Ein Basismodul für ein komplexeres Hausautomationssystem.
Hardware und Komponenten
Um dieses Projekt zu bauen, benötigen Sie die folgenden Komponenten:
- Arduino Uno (oder kompatibles Board)
- LCD1602-Display mit I2C-Schnittstellenmodul
- DHT11-Temperatur- und Luftfeuchtigkeitssensor
- Ein 4,7kΩ- oder 10kΩ-Pull-up-Widerstand (wenn Sie einen nackten DHT11-Sensor verwenden)
- Jumper-Kabel
- Steckbrett (optional, für einfachere Verbindungen)
Verständnis des I2C-LCD1602
Das LCD1602 ist ein übliches Zeichendisplay mit 16 Spalten und 2 Zeilen. Das auf der Rückseite des Displays aufgelötete "I2C"-Modul ist der Schlüssel zu seiner Einfachheit. Dieses Modul wandelt die parallele Schnittstelle des LCDs in eine serielle I2C-Schnittstelle um, die nur zwei Drähte für Daten (SDA und SCL) und zwei für Strom (VCC und GND) benötigt. Dies reduziert drastisch die Anzahl der benötigten Pins auf Ihrem Arduino und lässt mehr für andere Sensoren und Aktoren frei. Das Modul enthält auch ein kleines Potentiometer zur Einstellung des Display-Kontrasts, was entscheidend ist, um sicherzustellen, dass Text sichtbar ist. Die I2C-Adresse des Moduls kann mit den kleinen Lötbrücken (A0, A1, A2) auf der Platine geändert werden, sodass mehrere I2C-Geräte auf demselben Bus koexistieren können.
Verkabelungsanleitung
Verbinden Sie die Komponenten wie im Diagramm unten gezeigt. Das I2C-LCD verwendet die I2C-Pins des Arduinos, während der DHT11-Sensor einen digitalen Pin verwendet.
Für das LCD1602-I2C:
- VCC an Arduino 5V
- GND an Arduino GND
- SDA an Arduino A4
- SCL an Arduino A5
Für den DHT11-Sensor:
- VCC (Pin 1) an Arduino 5V
- Data (Pin 2) an Arduino Digital Pin 2 (mit einem 10kΩ-Pull-up-Widerstand zu 5V)
- NC (Pin 3) - Nicht verbunden
- GND (Pin 4) an Arduino GND
(im Video bei 25:16)
Einrichten der Bibliotheken
Dieses Projekt erfordert zwei Bibliotheken. Die Wire.h-Bibliothek ist Teil der Standard-Arduino-Installation. Sie müssen die LiquidCrystal_I2C-Bibliothek und die dht11-Bibliothek installieren. Das Video zeigt, wie man sie installiert. Sie können die Bibliotheken von den Links im Videobeschreibung oder von der Robojax-Website herunterladen. Nach dem Herunterladen können Sie sie über die Arduino-IDE installieren, indem Sie zu Sketch > Bibliothek einbinden > .ZIP-Bibliothek hinzufügen... navigieren und die heruntergeladenen Dateien auswählen. (im Video bei 06:16)
Finden der I2C-Adresse Ihres LCDs
Bevor Sie das Display verwenden können, müssen Sie seine I2C-Adresse bestimmen. Die häufigste Adresse ist 0x27 oder 0x3F, aber sie kann variieren. Um sie zu finden, können Sie einen I2C-Scanner-Sketch verwenden. Dies ist ein einfaches Programm, das den I2C-Bus scannt und alle gefundenen Adressen an den seriellen Monitor meldet. Laden Sie den Scanner-Code hoch, öffnen Sie den seriellen Monitor bei 9600 Baud, und er zeigt die Adresse Ihres LCDs an. (im Video bei 08:11)
Code-Erklärung
Dieser Abschnitt erklärt die wichtigsten, vom Benutzer konfigurierbaren Teile des Codes. Das vollständige Programm ist unten im Artikel zum Download verfügbar.
Der Code beginnt mit dem Einbinden der notwendigen Bibliotheken und der Definition der verwendeten Pins und Objekte.
// Header-Datei von GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // Objekt von DHT11 erstellen
#define dhtpin 2 // Pin zum Verbinden mit DHT11 festlegen
// Beginn der Einstellungen für LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD-Adresse auf 0x3F für ein 16-Zeichen- und 2-Zeilen-Display setzen
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// Ende der Einstellungen für LCD1602-I2C
Dies sind die wichtigsten Zeilen, die Sie für Ihr Setup konfigurieren müssen:
#define dhtpin 2: Dies definiert den Arduino-Pin, der mit dem Datenpin des DHT11-Sensors verbunden ist. Ändern Sie die Zahl2, wenn Sie einen anderen Pin verwenden.LiquidCrystal_I2C lcd(0x3F, 16, 2);: Diese Zeile erstellt das LCD-Objekt. Der erste Parameter,0x3F, ist die I2C-Adresse, die Sie im vorherigen Schritt gefunden haben. Die16und2definieren die Anzahl der Spalten und Zeilen Ihres Displays. Aktualisieren Sie die Adresse, wenn Ihr Scanner eine andere gefunden hat (z. B.0x27).
Der Code verwendet eine benutzerdefinierte Funktion, getTemp(), um die Temperatur zu lesen und in verschiedene Einheiten umzurechnen. Dies ist eine leistungsstarke Funktion, die den Code für verschiedene Anwendungen wiederverwendbar macht.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//Temperatur holen
if(type =='F')
{
return temp * 1.8 + 32;// in Fahrenheit umrechnen
}else if(type =='K')
{
return temp + 274.15;// in Kelvin umrechnen
}else{
return temp;
}
}
Um diese Funktion zu verwenden, rufen Sie sie mit einem einzelnen Zeichenargument auf, das die gewünschte Einheit darstellt. Zum Beispiel gibt getTemp('C') die Temperatur in Celsius zurück, getTemp('F') in Fahrenheit und getTemp('K') in Kelvin. Die Funktion liest die rohe Temperatur vom DHT11-Sensor und wendet die notwendige Umrechnungsformel an. Dadurch können Sie die angezeigte Einheit in der Haupt-loop() einfach ändern, ohne die Sensor-Leselogik neu zu schreiben. Die Hauptschleife gibt die Temperatur und Luftfeuchtigkeit auf dem LCD aus, wobei die Funktionen lcd.setCursor() und lcd.print() verwendet werden, um zu steuern, wo auf dem Bildschirm die Werte erscheinen.
Anzeigen des Gradsymbols
Der standardmäßige HD44780-LCD-Zeichensatz enthält kein eigenes Gradsymbol (°). Um es anzuzeigen, müssen Sie die Funktion lcd.write() mit dem Dezimalwert des Zeichens aus dem ROM des LCDs verwenden. Für das Gradsymbol ist dieser Wert 223. Der Code demonstriert dies, indem er lcd.print((char)223); verwendet, um das Symbol nach dem Temperaturwert auszugeben. (im Video bei 30:16)
Live-Projektdemonstration
Sobald der Code hochgeladen ist, zeigt das Display eine Startmeldung an, bevor es gelöscht wird und die aktuelle Temperatur und Luftfeuchtigkeit anzeigt. Die erste Zeile des Displays zeigt den Text "LCD1602 DHT11", während die zweite Zeile die Temperatur in Celsius, gefolgt vom Gradsymbol und "C", und dann die Temperatur in Fahrenheit, gefolgt vom Gradsymbol und "F", anzeigt. Der Luftfeuchtigkeitswert wird auf dem seriellen Monitor ausgegeben. Die Demonstration im Video zeigt, wie sich das Display alle halben Sekunden aktualisiert, während der Sensor gehalten wird, und die Umgebungsbedingungen genau widerspiegelt. (im Video bei 29:42)
Das Anzeigen der Spannung eines Potentiometers auf dem LCD wird in Lektion 20/31: Spannung auf LCD1602 anzeigen behandelt.
Die Verwendung desselben LCDs zur Anzeige der Entfernung eines Ultraschallsensors wird in Lektion 20/31: Verwendung von LCD1602 mit Arduino zur Anzeige von Temperatur, Spannung und Entfernung | Robojax behandelt.
Verwandte Projekte aus diesem Video
- Lektion 20/31: Verwendung von LCD1602 mit Arduino zur Anzeige von Temperatur, Spannung und Entfernung | Robojax
- Lektion 20/31: Spannung auf LCD1602 anzeigen
Kapitel
- [00:00] Einführung in das LCD1602 und Projektübersicht
- [01:30] Erklärung der LCD1602-Hardware und des I2C-Moduls
- [02:47] Einstellen des LCD-Kontrasts
- [03:14] LCD-Pinbelegung und I2C-Adresskonfiguration
- [05:28] Schaltplan für das LCD1602
- [06:16] Installieren der LiquidCrystal_I2C-Bibliothek
- [08:11] Finden der I2C-Adresse mit einem Scanner
- [09:28] Grundlegender Code zum Drucken von Text auf dem LCD
- [11:10] Beispiele: blinkender Cursor und benutzerdefinierte Zeichen
- [13:46] Erstellen und Verwenden benutzerdefinierter Zeichen
- [18:51] Serielles Anzeigebeispiel
- [23:16] Scrollender Text auf dem LCD
- [24:36] Kombinieren des DHT11-Sensorcodes mit dem LCD
- [30:16] Anzeigen des Gradsymbols
- [32:03] Entfernen von Dezimalstellen aus der Temperatur
- [33:00] Anzeigen der Spannung eines Potentiometers auf dem LCD
- [35:56] Anzeigen der Entfernung eines Ultraschallsensors
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
* This is the Arduino code for DHT11 module to read temperature and humidity
* This code can display temperature in:
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
* *
* Written by Ahmad Shamshiri for Robojax
* on Jan 04, 2018
* Robojax.com
Please watch video instruction here https://youtu.be/0XMLnCYkvbE
This code is available at http://robojax.com/course1/?vid=lecture11
with over 100 lectures Free On YouTube Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// header file from GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C
void setup() {
Serial.begin(9600);// setting up serial monitor
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("DHT11 Sensor");
delay(2000);
}
void loop() {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD1602 DHT11"); // print text
// print distance in degrees C
lcd.setCursor (0,1); //character 0, line 2
lcd.print(getTemp('C'));// print Temperature Celsius
lcd.setCursor (4,1); //character 5, line 2
lcd.print((char)223);// print degree
lcd.setCursor (5,1); //character 6, line 2
lcd.print("C");// print C
// print distance degrees F
lcd.setCursor (7,1); //character 8, line 2
lcd.print(getTemp('F'));// print distance in cm
lcd.setCursor (13,1); //character 14, line 2
lcd.print((char)223);// print degree
lcd.setCursor (14,1); //character 16, line 2
lcd.print("F");// print F
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
}
/*
* getTemp(char type)
* type character of upper case
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
*/
float getTemp(char type) {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
float temp = (float)DHT11.temperature;//get temp
if(type =='F')
{
return temp * 1.8 + 32;// convert to Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// convert to Kelvin
}else{
return temp;
}
}
Dinge, die Sie vielleicht brauchen
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Ressourcen & Referenzen
-
DokumentationDokumentation für das SunFounder 3 in 1 IoT/Smarte Auto/Lernkitdocs.sunfounder.com
-
ExternKaufe das 3-in-1 Smart Car Lernkit von SunFounder.sunfounder.com
Dateien📁
Arduino-Bibliotheken (zip)
-
SunFounder 3-in-1 Smart Car Lernkit Quellcode
3in1-kit-main-v2.zip12.80 MB
|||Benutzerhandbuch
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB