Wie Uhrzeit in den Arduino bekommen?

Hi,

bin neu hier und muss gleich mal 'ne Frage zur besten Vorgehensweise stellen :slight_smile:

Ich "bastel" mir gerade ein autarkes Alarmierungssystem mit einem Arduino. Das System soll im Alarmzustand (z.B. offener Schalter) selbstsändig eine Nummer anrufen, soweit so einfach. Zur Funktionskontrolle soll das System einmal täglich zu einer definierten Uhrzeit anrufen. Das ganze ist nicht zeitkritisch, es geht nur darum den Alarmzustand festzustellen, ob das nun 1min früher oder später passiert ist egal. Aktuell habe ich per TTL-RS232 ein altes Siemens S55 angeschlossen. Das Wählen, bzw. anrufen funktioniert auch schon. Evtl. soll das ganze aber später z.B. mit einem Siemens TC35 (GSM-Modul) oder wenn denn mal erhältlich dem Arduino GSM-Modul funktionieren. Da fängt allerdings mein Problem an. Für den täglichen Kontrollanruf benötige ich eine einigermßaen genaue Uhrzeit. Und die brauche ich auch dann, wenn das System autark irgendwo draussen steht und ich es nicht mit dem Computer neu programmieren/updaten kann.

Mit dem angeschlossenen Handy ist das noch unproblematisch. Ich kann das Handy mit der Uhrzeit programmieren und dann per AT-Befehl auslesen (und z.B. im Arduino die time-library nutzen). Wenn ich aber ein GSM-Modul nutze, habe ich keine Eingabemöglichkeit mehr.

Ich habe schon http://arduino.cc/forum/index.php/topic,138073.0.html gefunden, finde das aber ein wenig Overkill. Andere Idee wäre ein RTC-Modul anzuflanschen. Aber wie lange hält ein 2032 auf so einem Modul? Zweite Idee wäre, ein DCF77-Modul anzuflanschen und z.B. einmal am Tag oder einmal in der Woche die Zeit des Arduino zu synchronisieren. Wäre das machbar?

Oder gibt es sonst irgendwas was ich noch nicht gefunden habe?

Danke vorab!

Grüße
Michael

Eine CR2032 hält ca 10 Jahre.

Die genaue Uhrzeit kannst Du von einem GPS Modul, einem RDS Signal eines UKW-Radiosenders, einem NTS Server im Internet oder dem DCF77 bekommen.

Wen oder was soll Dein System denn anrufen?

grüße Uwe

uwefed:
Eine CR2032 hält ca 10 Jahre.

Die genaue Uhrzeit kannst Du von einem GPS Modul, einem RDS Signal eines UKW-Radiosenders, einem NTS Server im Internet oder dem DCF77 bekommen.

Wen oder was soll Dein System denn anrufen?

Na 10 Jahre wären ja schon mal was. Das ganze soll "natürlich" möglichst günstig ausfallen. Ich denke ein GPS-Modul nur für die Uhrzeit wäre daher etwas übertrieben. NTS-Server fällt aus, da das Modul später keinen Internet-Zugriff haben wird. Daher ja mein Gedanke an DCF77, das sollte ja eigentlich überall in DE verfügbar sein. Gibt es für RDS ein Shield oder wie macht man das?

Das System soll mich, also mein Handy :-), anrufen. Die Nummer wird vorher fest programmiert. Oder evtll. programmiere ich das noch so, dass z.B. mit dem anzurufenden Handy einmal das Handy im Alarmierungssystem anrufen, dann dort per AT-Befehl den letzten Anruf auswertet und dann die Nummer im EEPROM speichert.

Grüße
Michael

Eine CR2032 kann aber mit einer RTC schneller ausgesaugt werden. Allerdings muß der Strom für das Handy ja auch irgendwo herkommen. Von daher ist der Puffer für das RTC Modul nicht sooo kritisch.

Nimm ein DS3232 basiertes Modul und gut. Zur Not kannst Du ja die Zeit gelegentlich per Handy aus dem Telefonnetz holen.

DCF77 geht auch, da bin ich gerade dran :wink:

Ansonsten kann man sich auch einen Takt aus der Netzfrequenz saugen. Die 50 Hz werden ja langzeitstabil gehalten. In Deutschland kann man das ÜBERALL empfangen. Auch ohne Netzanschluß, es reicht ja, wenn eine Leitung wenigstens in ein paar km Nähe ist. Allerdings kann das unter Umständen mehr Aufwand bedeuten als ein DCF77 Empfänger.

Ich hab gerade mit DCF77 rumgespielt und das ist super einfach und sehr genau.

Es giebt alle Biblioteken schon fertig, alles easy.

Und es ist billig. Du brauchst nur das Antennenmodul für ein paar Euronen.

Die Erklärung wie es funktioniert und die Biblioteken giebts hier:

http://playground.arduino.cc/Code/DCF77

Wenn Genauigkeit eine Minute im Monat (etwa wie dein altes S55 Handy) reicht und SO-WI Umschaltung auch von Hand oder per Kommando reicht, ist ein simples DS1307 Modul das einfachste.
DCF hat den Nachteil, dass es selbst bei guten Empfangsbedingungen lange dauert ( min. 2 Minuten ), bis eine Uhrzeit da ist, und daher gern mit einem RTC Modul kombiniert wird. ( Mit Overkill bei http://arduino.cc/forum/index.php/topic,138073.0.html meinst du sicher, dafür einen eigenen Controller zu nutzen )

@Udo:

Ansonsten kann man sich auch einen Takt aus der Netzfrequenz saugen. Die 50 Hz werden ja langzeitstabil gehalten. In Deutschland kann man das ÜBERALL empfangen. Auch ohne Netzanschluß, es reicht ja, wenn eine Leitung wenigstens in ein paar km Nähe ist

Dass das 50 Hz-Netz auf Dauer besser als "jeder" Quarz ist, ist schon klar. Das grundlegende Problem ist doch eher, dass ein Arduino nach Reset gar keine Zeit kennt. Kann man die mit einem 50 Hz Superlangwellenempfänger als codiertes Signal wie DCF empfangen ( oder direkt am Netzanschluss ) ? Weisst du da was ? Da wäre ich neugierig.

Nein, das geht nicht. Allerdings ist mir unklar wieso man die Zeit nicht einfach mit dem Handy abholen kann.

Der volle DCF77 Overkill ist davon abgesehen hier in Arbeit: DCF77 Project | Blinkenlight. Anders als der OP des Threads wird mein Projekt dieses Jahr auch fertig :wink:

Aus dem 50Hz-Signal gibts keine Uhrzeit.
DCF ist supergünstig und einfach, da reicht es einmal am Tag zu synchronisieren, wenn es nicht zeitkritisch ist.
Die Arduino-interne Zeitfunktion ist ungenau, ein RTC DS1307 ist genauer, ein DS3232 noch sauberer.
Einfache schnelle Lösung wäre tatsächlich entweder statt dem GSM-Modul ein altes Handy nehmen, aus dem die Zeit per AT auslesbar ist (Stromfresser?) oder eben DCF+RTC.
Nachteil DCF: Sync dauert in der Regel min 2 Min, bei mir hier etwa 3 - 15 Minuten. Und der DCF-Empfänger (also der Ferritkern mit Schwingkreis als Antenne) sollte nicht direkt am Arduino sitzen (stört gern) und nicht in einem Metallgehäuse.

Dirk

Wieso Handy statt GSM Modul? GSM Module müssen doch auch die AT Kommandos verstehen. Das ist doch gerade der Witz dabei.

Zur Not kann das GSM Modul ja hier anrufen: http://www.ptb.de/cms/fachabteilungen/abt4/fb-44/ag-442/verbreitung-der-gesetzlichen-zeit/zeituebertragung-ueber-das-oeffentliche-telefonnetz.html. Man muß halt damit fertig werden, daß die Nummer auch besetzt sein kann. Es gibt aber noch mehr solche Nummern.

Nachtrag: man kann das GSM Model ja auch selber anrufen und dann die Zeit direkt übertragen. Ein Duplex Modem ist schliesslich keine Einbahnstraße.

Hallo,
ich hab was bei ebay gefunden, was eventuell helfen könnte:
http://www.ebay.de/itm/Mini-GPS-Tracker-Peilsender-Einbruchsalarm-GSM-GPRS-SOS-Alarm-KFZ-Motorrad-/130814422647?pt=DE_GPS_Navigationssysteme&hash=item1e7525ae77#ht_3851wt_1139
gruß

Ich würde ein einfaches RTC nehmen und würde statt eines Kontrollanrufs eine Kontroll-SMS vom GSM-Modul aus schicken. Diese kann dann im Text noch die aktuelle Urhzeit enthalten. Vergleicht man sie mit der Zeit zu der die SMS angekommen ist, hat man (abzüglich der Versanddifferenz) schon einen ganz guten Wert. Ist die Abweichung zu gross, kann man dem GSM-Modul eine SMS mit der aktuellen Uhrzeit schicken, ebenso wie andere Befehle zur Steuerung. Die meisten Mobilfunkanbieter (egal ob Prepaid oder Vertrag) bieten heute eine SMS-Flat bzw. buchbare SMS-Kontingente an. Damit hat man auch die Kosten recht gut unter Kontrolle.
Mario.

Ich fasse mal meine Antworten zusammen:

An das Handy mit Datenkabel bin ich günstig rangekommen. Die ersten GSM-Module die ich gefunden hatte, waren auch relativ teuer, so an die 100,- EUR, da war die Handylösung günstiger. Mittlerweile habe ich aber gesehen, dass es die Siemens-Module auch für ca. 30,- EUR gibt.

Das mit dem Senden der Urhzeit per SMS hört sich auch interessant an, das werde ich mir evtl. später mal anschauen. Ich denke zuerst werde ich mir mal das mit dem DCF77-Modul und der entsprechenden Library anschauen. Auch wenn das initial und dann einmal pro Woche oder so 15min dauert, wäre das egal. Ob ich dann noch eine RTC dazunehme oder mit der "internen" Uhr arbeite muss ich dann mal sehen. Weiß jemand wie groß die Abweichung der "internen" Uhr bei Nutzung der Time-Library ist?

Zeit per Datenaufbau zum GSM-Modul übertragen ist mir glaube ich zu aufwändig. Da müsste ich ja noch ein Programm am Rechner schreiben.

Und ja, mit Overkill meinte ich den zusätzlichen Controller bei http://arduino.cc/forum/index.php/topic,138073.0.html. Das sollte doch auch mit dem Arduino alleine gehen, oder nicht?

Grüße
Michael

Wie stark die interne Uhr abweicht hängt davon ab ob Du einen Quarz oder einen Resonator hasst. Die neueren "guten" Arduinos sind da ganz besonders schlecht weil sie nur einen Resonator haben. Ältere Designs die bei der Fertigung nicht ganz so sparen (wie z.B. mein Blinkenlighty :wink: ) sind da besser. Der Unterschied liegt so zwischen Faktor 100 und Faktor 1000. Wenn Du mit einem Quarz Glück hast kommst Du auf 30ppm. Mit einer mäßigen RTC (1307) sind so 15ppm drin. Mit dem DS3232 etwa 2ppm. Alles was genauer ist kostet richtig Geld (und/oder Aufwand), vom Stromverbrauch ganz zu schweigen.

Eine einfache Lösung ohne RTC wäre es einen 16 Mhz TCXO anstelle des Quarzes einzusetzen. Das ist einfach und bequem aber unter Umständen ziemlich teuer: http://de.mouser.com/Passive-Components/Frequency-Control-Timing-Devices/Oscillators/TCXO-Oscillators/_/N-7jdmj?P=1z0wnukZ1z0x00eZ1z0x0qcZ1z0x0rc