Arduino Tutorial: Die Digitaluhr

 

 

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

    }

}

 

 

 

Du kannst den Sketch auch hier herunterladen.

 

 

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

Kommentare: 4
  • #1

    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.

  • #2

    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

  • #3

    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

  • #4

    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