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 |
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.
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!
2 Kommentare
udo
hallo,
durch diesen code stürzt ständig meine arduino ide ab.
truefirewolf
Hallo,
zunächst hatte ich mich gefreut mit so wenigen Bauteilen und kurzem Code eine Digitaluhr zu bauen.
Bei genauerer Betrachtung stellt man allerdings fest, dass man die Uhrzeit so nicht einstellen kann, das gibt die Software nicht her.
Es wäre ein außerordentlicher Zufall, wenn die Uhrzeit beim Einschalten genau stimmen würde. Man benötigt ein anderes Programm wie z.B. von der Seite: http://shelvin.de/die-uhrzeit-des-rtc3231-vom-arduino-einstellen/
Betreiben kann man die so eingestellte Uhr dann mit dem oben angegeben Programm. Da die Batterie Jahre halten soll, muss o.g. Prozedur eben auch nur bei Batteriewechsel durchgeführt werden.
truefirewolf