Echtzeituhr mit Display am Nano V3

Im unserem heutigen Blog-Beitrag kombinieren wir 3 Produkte: unseren allzeit beliebten AZ-Delivery Nano V3, eine DS3231 Echtzeit-Uhr, und eine vierstellige 7-Segment LED Anzeige.

Diese bilden eine gute Basis für Projekte bei denen die Uhrzeit eine Rolle spielt – Egal ob jemand eine auf Arduino basierende Kuckucksuhr, eine Zeitgesteuerte Zugangskontrolle, oder eine Stempeluhr mit RFID-Tags realisieren möchte.

Bei unserem heutigen Projekt bekommt der Arduino die Uhrzeit von der Echtzeit-Uhr, und gibt diese auf dem Display aus. Jedes der Module benötigt dabei nur 4 Verbindungen.

Wir verkabeln die Bauteile wie folgt:

AZ-Delivery Nano V3

DS3231

A5

SCL

A4

SDA

3V3

VCC

GND

GND

 

AZ-Delivery Nano V3

4 Digit 7 Segment Display

D2

CLK

D3

DIO

+5V

VCC

GND

GND

 

 

Uhr Schaltplan

 

Für die Programmierung nutzen wir die gleiche Bibliothek wie in unserem eBook zum 4 Digit 7 Segment Display: TM1637Display.h.

Die Echtzeituhr verbinden wir über den I²C-Bus. Die Uhr hat die Adresse 0x68.

Die Funktion bcdToDec benötigen wir, um den Binärcode den wir von der Echtzeituhr bekommen in Dezimalzahlen umzuwandeln.

 

#include <Arduino.h>

#include <TM1637Display.h>
#include <Wire.h>
#define RTC_I2C_ADDRESS 0x68 // I2C Adresse des RTC  DS3231
 
#define CLK 2 // Arduino Pin D2 als CLK (RTC) 
#define DIO 3 // Ardiono Pin D3 als DIO (RTC)
 
TM1637Display display(CLK, DIO); // 

uint8_t bcdToDec( uint8_t val )
{
   return (uint8_t) ((val / 16 * 10) + (val % 16));
}

int pause = 500;
 
int stunde,minute,sekunde;
   
void setup(){
  Wire.begin();
  Serial.begin(9600);
  display.setBrightness(0x0a); 
  
}
 
void loop(){
   Wire.beginTransmission(RTC_I2C_ADDRESS); //Aufbau der Verbindung zur Adresse 0x68
   Wire.write(0);
   Wire.endTransmission();
   Wire.requestFrom(RTC_I2C_ADDRESS, 7);
 
   sekunde = bcdToDec(Wire.read() & 0x7f);
   minute = bcdToDec(Wire.read()); 
   stunde = bcdToDec(Wire.read() & 0x3f); 
   
     Serial.print(stunde);
     Serial.print(":");
     Serial.print(minute);
     Serial.print(":");
     Serial.println(sekunde);
        
     display.showNumberDec(stunde, true, 2, 0);
     display.showNumberDec(minute, true, 2, 2);
   delay(pause);

}

Nach dem hochladen des Codes können wir auf dem seriellen Monitor der Arduino IDE überprüfen ob jede halbe Sekunde die Zeit ausgegeben wird.

Wenn alles richtig angeschlossen ist, erscheint die aktuelle Uhrzeit auf dem 7-Segment Display.

 

Fertiger Aufbau

 

Damit haben wir die Basis für weitere Projekte geschaffen. Wie wäre es mit einem größeren Display? Sensoren für Temperatur und Luftdruck für eine Wetterstation? Oder ein MP3-Shield welches zu jeder vollen Stunde ein „Kuckuck“ von sich gibt?

 

Wir hoffen, dass Sie unser heutiger Blogbeitrag Sie inspiriert hat, und wir freuen uns auf Ihre Kommentare. Bis zum nächsten Beitrag von AZ-Delivery, Ihrem Experten für Mikroelektronik!


 

Letzter Artikel USB-Adapter erweitern mit Flash Jumper und Reset Taster

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe