
In diesen Arduino Tutorial baust du dir mit deinem Arduino Uno eine kleine digital Uhr kombiniert mit dem Temperatur und Feuchtigkeitssensor DHT11. Die Uhrzeit und die Messwerte lässt du dir auf dem LCD Display anzeigen. Die benötigten Bauteile hast du aus den vorherigen Tutorials schon kennengelernt.
Wichtig: Damit der Beispielsketch funktioniert, solltest du die Arduino IDE Version 1.6.8 oder niedriger installiert haben. Die hier verwendete Time- Bibliothek ist mit neueren Versionen noch nicht kompatibel.
Was benötigst du?
- 1 x Arduiono Uno
- 1 x USB Kabel
- 1 x Steckbrett
- 1 x LCD1602 (HD44780)
- 1 x Drehpotentiometer (10 Kiloohm)
- 1 x Ohmscher Widerstand (10 Kiloohm)
- 1 x DHT11- Sensor
- Jump Wire (Männlich)
Die Time Library
Die Time Library ist für die Uhrzeit zuständig. Die ZIP-Datei für die Time Library findest du hier.
Lade die ZIP- Datei herunter und speicher sie irgendwo auf deinem Computer
Um die Library noch einzubinden startest du die Arduino IDE und klickst auf Sketch -> Bibliothek hinzufügen -> .ZIP-Bibliothek hinzufügen...

Wähle nun deine ZIP- Datei aus und klicke auf öffnen.

Die Bibliothek ist nun in der Arduine IDE bekannt.
Wie sieht der Schaltplan aus?

Der Code
//----------------------------Bibliotheken-----------------------------------------
#include <Time.h> // Die Library für die Uhrzeit
#include <LiquidCrystal.h> // Die Bibliothek für deinen Display
#include "DHT.h" // Die DHT-Library
//----------------------------Definitionen----------------------------------------
#define meinDHT DHT11 //
#define RS 12 //
#define E 11 //
#define D4 6 //
#define D5 5 //
#define D6 4 //
#define D7 3 //
#define Spalte 16 //
#define Zeile 2 //
#define Eingabezeit 200 //
//----------------------------Variablen-------------------------------------------
int datenPin = 2; // Hier wird der Daten Pin vom Sensor
// angeschlossen
int st = 0; // Variable für die Stundenangabe
int m = 0; // Variable für die Minutenangabe
int s = 0; // Variable für die Sekundenangabe
int d = 13; // Variable für den Tag
int mo = 5; // Variable für den Monat
int y = 2016; // Variable für das Jahr
int tasterSet = 10; // TasterPin zum bestätigen im Menü
int tasterHoch = 9; // Tasterpin für Zahl hochsetzen im Menü
int tasterRunter = 8; // Tasterpin für Zahl runtersetzen im Menü
int buttonStatusSet = 1; //
int buttonStatusHoch = 1; // Überwachungsvariablen ob Taster gedrückt
int buttonStatusRunter = 1; //
//---------------------------Objekte--------------------------------------------
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Hier wird das Objekt lcd vom Typ
// LiquidCrystal erzeugt
DHT dht(datenPin, meinDHT); // Das Objekt dht vom Typ DHT
//---------------------------void() und setup()---------------------------------
void setup() {
pinMode(tasterHoch, INPUT); //
pinMode(tasterHoch, INPUT); // Taster als Eingang definieren
pinMode(tasterSet, INPUT); //
digitalWrite(tasterHoch, HIGH); //
digitalWrite(tasterRunter, HIGH); // Pull up Widerstände schalten
digitalWrite(tasterSet, HIGH); //
lcd.begin(Spalte,Zeile); // Leg die LCD mit 16 Spalten und 2 Zeilen fest
dht.begin(); // Die Kommunikation mit dem Sensor beginnen
setzeStunde(); // Die Stunden einstellen
setzeMinute(); // Die Minuten einstellen
// (schau unten bei Methoden)
setTime(st,m,s,d,mo,y); // Mit den eingestellten Werten
// die Uhr einstellen
}
void loop() {
st = hour(); // Stunde aktualisieren
m = minute(); // Minute aktualisieren
delay(2000); // Temperaturmessung oder Feuchtigkeitsmessung
// braucht ca.250 Millisekunden. Deswegen
// alle 2 Sekunden messen.
float h = dht.readHumidity(); // Feuchtigkeit messen
float t = dht.readTemperature(); // Temperatur messen
lcd.setCursor(0,0); // Springe in die erste Zeile erste Spalte
lcd.print("Zeit: "); //
lcd.print(st); // Gib die Stunde an
lcd.print(":"); //
if (m<10) //Falls die Minute kleiner als 10
{ //ist, dann eine Null vor die
lcd.print("0"); //Zahl setzen, damit Ausgabe:
} //00,01,02,03 usw...
lcd.print(m); //
lcd.print(" "); // Gib die Minute an
lcd.setCursor(0,1); // Springe in die nächste Zeile
lcd.print("T:"); // Gebe die Temperatur an
lcd.print(t); //
lcd.print(" ");
lcd.print("F:"); // Gebe die Luftfeuchtigkeit an
lcd.print(h); //
}
//-------------------------------Definierte Methoden--------------------------------
void setzeStunde() // Die Methode
{
buttonStatusSet = digitalRead(tasterSet); // prüfe, ob tasterSet
// gedrückt
while(buttonStatusSet == HIGH) // solange tasterSet nicht
// gedrückt, führe den
// Befehl in den geschweiften
// Klammern aus
{
buttonStatusSet = digitalRead(tasterSet); // messe, welcher Taster
buttonStatusHoch = digitalRead(tasterHoch); // gedrückt wird
buttonStatusRunter = digitalRead(tasterRunter); //
lcd.setCursor(0,0); // springe in erste Zeile
// erste Spalte
lcd.print("Gib die Zeit ein"); //
lcd.setCursor(0,1); //
lcd.print("Stunde: "); // Frage die Stunde ab
lcd.print(st); //
lcd.print(" "); //
if(buttonStatusHoch==LOW) // Wenn man hoch drückt
{ //
st = st+1; // Erhöhe die Stunde um 1
} //
if(buttonStatusRunter==LOW) // Wenn man runter drückt
{ //
st = st-1; // Verringer die
} // Stunde um 1
if(st>23) //
{ //
st = 0; // Hier wird eingestellt,
} // dass die Stunde nur
// einen Wert zwischen
if(st<0) // 0 und 24 haben kann
{ //
st = 23; //
} //
delay(Eingabezeit); // das ist die Eingabepause
}
}
void setzeMinute() // Die Methode
{
buttonStatusSet = digitalRead(tasterSet); // prüfe, ob tasterSet
// gedrückt
while(buttonStatusSet == HIGH) // solange tasterSet nicht
// gedrückt, führe den
// Befehl in den geschweiften
// Klammern aus
{
buttonStatusSet = digitalRead(tasterSet); // messe, welcher Taster
buttonStatusHoch = digitalRead(tasterHoch); // gedrückt wird
buttonStatusRunter = digitalRead(tasterRunter); //
lcd.setCursor(0,0); // springe in erste Zeile
// erste Spalte
lcd.print("Gib die Zeit ein"); //
lcd.setCursor(0,1); //
lcd.print("Minute: "); // Frage die Minute ab
lcd.print(m); //
lcd.print(" "); //
if(buttonStatusHoch==LOW) // Wenn man hoch drückt
{ //
m = m+1; // Erhöhe die Minute um 1
} //
if(buttonStatusRunter==LOW) // Wenn man runter drückt
{ //
m = m-1; // Verringere die
} // Minute um 1
if(m>59) //
{ //
m = 0; // Hier wird eingestellt,
} // dass die Minute nur
// einen Wert zwischen
if(m<0) // 0 und 59 haben kann
{ //
m = 59; //
} //
delay(Eingabezeit); // das ist die Eingabepause
}
}
Code- Review
Da eigentlich nur die Time- Library unbekannt ist, erkläre ich dir nur die Methoden aus der Time Library, die hier verwendet wurden.
setTime(st,m,s,d,mo,y); // Mit den eingestellten Werten
// die Uhr einstellen
Mit dieser Methode startest du die Uhr. Die Parameter, die du hier übergibst sind die Startwerte für deine Uhr.
Allgemein werden folgende Parameter übergeben.
setTime(Stunde,Minute,Sekunde,Tag,Monat,Jahr);
Nun zur hour()- Methode
hour();
Mit der hour()- Methode lässt du dir die aktuelle Stunde angeben.
minute();
Mit der minute()- Methode lässt du dir die aktuelle Minute angeben.
Das war alles, was du wissen musst um den Sketch zu verstehen.
Wenn du hier irgendetwas vermisst, bessere Ansätze hast oder dir etwas nicht klar ist, zögere nicht einen Kommentar zu hinterlassen.
Kommentar schreiben
Lukas (Donnerstag, 16 März 2017 11:58)
Bekomme bei Eingabe des Codes folgende Fehlermeldung:
Arduino: 1.8.1 (Mac OS X), Board: "Arduino/Genuino 101"
/Users/Lukas/Downloads/sketch_jan25b/sketch_jan25b.ino: In function ‘void setup()’:
sketch_jan25b:64: error: ‘setTime’ was not declared in this scope
setTime(st,m,s,d,mo,y); // Mit den eingestellten Werten
^
/Users/Lukas/Downloads/sketch_jan25b/sketch_jan25b.ino: In function ‘void loop()’:
sketch_jan25b:71: error: ‘hour’ was not declared in this scope
st = hour(); // Stunde aktualisieren
^
sketch_jan25b:72: error: ‘minute’ was not declared in this scope
m = minute(); // Minute aktualisieren
^
Mehrere Bibliotheken wurden für "DHT.h" gefunden
Benutzt: /Users/Lukas/Documents/Arduino/libraries/DHT_sensor_library-1.3.0
Nicht benutzt: /Users/Lukas/Documents/Arduino/libraries/DHT-sensor-library_1.3.0_19
Nicht benutzt: /Users/Lukas/Documents/Arduino/libraries/DHT-sensor-library-master
exit status 1
‘setTime’ was not declared in this scope
alle Bibliotheken wurden zuvor eingebunden, bitte um Hilfe.
Thomas von Mymakerstuff (Donnerstag, 16 März 2017)
Hallo Lukas,
wie ich sehen kann hast du die Arduino IDE Version 1.8.1. Ich habe auch versucht mit dieser Version den Sketch zu kompilieren und es funktionierte nicht. Die Time- Library wurde für die Versionen bis 1.6.8 optimiert. Installiere die Arduino IDE Version 1.6.8 und füge die Time- Library und die DHT- Library, falls sie nicht mehr vorhanden sind, deiner IDE nochmal hinzu. Versuche dann den Sketch nochmal zu kompilieren. Es müsste dann alles klappen. Falls du die älteren Versionen nicht findest - hier ist der Link dazu.
https://www.arduino.cc/en/Main/OldSoftwareReleases#00xx
Ich hoffe es wird danach alles klappen und ich wünsche dir noch viel Erfolg bei deinem Projekt!
Viele Grüße,
Thomas
Lukas (Freitag, 17 März 2017 13:10)
Hallo Thomas,
danke für die schnelle Rückmeldung.
Nachdem ich die Arduino IDE Version 1.6.8 installiert habe, hat alles geklappt.
Nun hätte ich jedoch die Frage, ob es mögliche wäre, den Code so umzuschreiben, dass der Arduino eine Nachricht an ein Handy sendet und ein Ton erzeugt wird, sobald eine bestimmte Temperatur unterschritten wurde. Bräuchte man dafür, abgesehen von einem Buzzer, weiteres Material?
Viele Grüße,
Lukas
Thomas von Mymakerstuff (Freitag, 17 März 2017 13:34)
Hallo Lukas,
um einen Piepton auszugeben, benötigst du nur den zusätzlichen Buzzer.
Ein Signal an das Handy zu Senden ist schon etwas aufwändiger. Dazu müsstest du eine App für dein Smartphone programmieren, welches die Empfangenen Signale vom Arduino auswertet. Außerdem benötigst du ein Bauteil, welches mit deinem Handy kommunizieren kann, wie z.B. Bluetooth. Ich persönlich habe mich mit diesem Thema aber noch nicht auseinandergesetzt und kann leider auch nicht mehr Tipps dazu geben.
Viele Grüße,
Thomas
Niklas (Sonntag, 14 Januar 2018 08:24)
Hallo,
ich bekomme die Fehlermeldung:
In file included from C:\Users\Andre\Desktop\Arduino_Digitaluhr\Arduino_Digitaluhr.ino:2:0:
C:\Users\Andre\Documents\Arduino\libraries\DHT_sensor_library-1.3.0/DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
#include <Adafruit_Sensor.h>
^
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.
und weiß nicht weiter wie ich das Problem behoben bekommen. Könnte mir vielleicht jemand helfen?
MfG Niklas
Tobi (Montag, 11 März 2019 12:29)
Wo kauft man das ? Möf
KingRB (Montag, 11 März 2019 21:34)
Wie muss man das Potentiometer einstellen?
Fabian (Dienstag, 02 Juli 2019 16:11)
klappt das ganze auch mit einem Funduino Mega 2560?
Wogi (Sonntag, 01 September 2019 12:41)
da ist ein kleiner Fehler drin, siehe hier :
pinMode(tasterHoch, INPUT); //
pinMode(tasterHoch, INPUT); // Taster als Eingang definieren
pinMode(tasterSet, INPUT); //
digitalWrite(tasterHoch, HIGH); //
digitalWrite(tasterRunter, HIGH); // Pull up Widerstände schalten
digitalWrite(tasterSet, HIGH); //
tasterHoch wurde doppelt mit pinMode als Eingang definiert,
tasterRunter dafür gar nicht !!!!
ein typisches paste and copy Problem
Gruß Wogi
Maik (Donnerstag, 20 August 2020 07:19)
Code funktioniert nicht:
C:\Users\mkopp\AppData\Local\Temp\arduino_modified_sketch_33793\sketch_aug20a.ino: In function 'void setup()':
sketch_aug20a:127:4: error: 'setTime' was not declared in this scope
setTime(st,m,s,d,mo,y); // Mit den eingestellten Werten
^~~~~~~
C:\Users\mkopp\AppData\Local\Temp\arduino_modified_sketch_33793\sketch_aug20a.ino:127:4: note: suggested alternative: 'isotime'
setTime(st,m,s,d,mo,y); // Mit den eingestellten Werten
^~~~~~~
isotime
C:\Users\mkopp\AppData\Local\Temp\arduino_modified_sketch_33793\sketch_aug20a.ino: In function 'void loop()':
sketch_aug20a:141:10: error: 'hour' was not declared in this scope
st = hour(); // Stunde aktualisieren
^~~~
sketch_aug20a:143:9: error: 'minute' was not declared in this scope
m = minute(); // Minute aktualisieren
^~~~~~
C:\Users\mkopp\AppData\Local\Temp\arduino_modified_sketch_33793\sketch_aug20a.ino:143:9: note: suggested alternative: 'init'
m = minute(); // Minute aktualisieren
^~~~~~
init
exit status 1
'setTime' was not declared in this scope
Sepp (Montag, 05 Oktober 2020 07:24)
Nimm die TimeLib.h. von 2016 bis heute hat sich die ide verändert, das man Time.h nicht mehr geht, TimeLib aber.
Lothar (Dienstag, 16 Februar 2021 11:08)
Hallo, habe alles zusammen gebaut, den Sketch kopiert und nach einigem probieren und konfigurieren alles zum laufen gebracht. Funktioniert hervorragend.
Die Bibliothek ist wichtig und natürlich die Änderung im Sketch auf "TimeLib" !!!
Vielen lieben Dank !!!!
dominik (Dienstag, 29 Juni 2021 07:42)
hi hier ist Dominik ich hatte mal ne frage wo findet man diese zip Datei wo kann man die runterladen bitte mit link zur Seite.
Schon mal vielen dank