Aquarium Computer - Teil 4 - Die Real Time Clock
Einer der wichtigsten Bestandteile eines Aquarium Computers ist eine Uhr. Diese wird benötigt um beispielsweise die Beleuchtung ein- bzw. auszuschalten. Da der verwendete uController, der Arduino Nano, selber keine Real Time Clock besitzt, muss man diese erweitern. Das "Tiny RTC I2C module" eignet sich für diese Zwecke sehr gut.
Auf dem Modul befinden sich 2 Chips, ein DS1307 (Real Time Clock von Dallas) und zusätzlich ein HK24C32 (EEPROM mit 32 kByte).
Weiters ist auch der Quarz für die Uhr verbaut.
Die restlichen SMD Bauteile sind passive Bauteile wie Widerstände, Dioden und Kondensatoren.
Auf der Rückseite befindet sich eine Batteriehalterung, der für eine Akku Zelle vom Typ LIR2032 (wiederaufladbar!!!) vorgesehen ist. Wenn man darin eine Standard CR2032 Lithium Zellen verwenden würde, könnte diese durch die Ladeschaltung explodieren.
Um dennoch eine gewöhnliche Batterie verwenden zu können, ist lediglich eine kleine Modifikation notwendig. R5, D1 R4 und R6 müssen entfernt werden. Statt dem Widerstand R6 wird eine Lötbrücke gemacht.
Außerdem sollte man den Quarz mit etwas Zinn auf der Massefläche, auf der er aufliegt, festlöten, so schreibt es das Datenblatt vor. Zur Verwendung mit dem Arduino Nano, muss das Modul mit 4 Leitungen verbunden werden, wenn man eine fertige Bibliothek verwenden möchte.
RTC Module | Arduino |
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
Ich habe die von playground.arduino.cc vorgeschlagenen Bibliotheken Time und DS1307RTC verwendet. Die Einbindung ging super einfach.
#include <Time.h> // includes for time
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
// MACRO TO GET COMPILE TIME IN SECONDS
#define t(index, multiplier) ((__TIME__[index]-'0') * (multiplier))
// use hours, minutes and seconds
#define hhmmss() (t(0,36000) + t(1,3600) + t(3,600) + t(4,60) + t(6,10) + t(7,1))
void setup() {
// is the RTC running?
if (RTC.get() == 0) {
// set the RTC to the time this example was compiled
RTC.set(hhmmss());
}
setSyncProvider(RTC.get); // the function to get the time from the RTC
}
Das RTC Objekt wird bekommt man bereits durch die Lib DS1307RTC, man braucht es nur noch verwenden. Diese Bespiel setzt die Uhr auf die Uhrzeit der Kompilierung, falls sie nicht laufen sollte.
Die aktuelle Uhrzeit kann man mit den Funktionen der Bibliothek Time dann ganz einfach auslesen.
char buffer[32];
snprintf(buffer, 30, "%.2d:%.2d:%.2d", hour(), minute(), second());
print(buffer);
Viel Spaß beim Ausprobieren!