Arduino ist eine einfache Uhr. Arduino-Uhr ohne das RTC-Modul zu verwenden

Schönen Tag. Im heutigen Artikel werden wir eine ungewöhnliche Binäruhr basierend auf Arduino erstellen durch ihre von Hand... Nachdem Sie sich mit dem Prozess der Erstellung solcher Kunsthandwerk, können Sie in Zukunft eine binäre Uhr beliebiger Bauart wiederholen.

Schritt 1: Was ist eine binäre Uhr?

Erinnern wir uns zunächst daran, was eine binäre (binäre) Zahl ist - dies ist eine Zahl, die im binären System der Infinitesimalrechnung dargestellt wird. Zahlenwerte dass nur zwei Zeichen verwendet werden: 0 (null) und 1 (eins).

Eine binäre Uhr ist eine Uhr, die die Zeit im Binärformat anzeigt. Das Projekt verwendet 6 LED-Spalten, um Nullen und Einsen anzuzeigen. Jede Spalte zeigt eine Ziffer / Ziffer an, dieses Format ist bekannt als binär dezimal(DDCH). Jede Linie stellt eine Zweierpotenz dar, von 2 ^ 0 (oder 1) bis 2 ^ 3 (oder 8). Daher müssen Sie beim Lesen von Informationen aus der Uhr nur die Werte der Spalten mit eingeschalteten LEDs summieren. In der ersten Spalte leuchten beispielsweise die 4. und 1. LED. Addiere 8 zu 1 und erhalte 9 (die Anzahl der Sekunden beträgt 9). Die nächste Spalte ist Zehntelsekunden, nur die 3. LED leuchtet darin, der Gesamtwert beträgt also 49 Sekunden, genau gleich mit Minuten und Stunden. Bitte beachten Sie, dass die Uhr die Uhrzeit im 24-Stunden-Format anzeigt.

Schritt 2: Komponenten

  • Arduino Profi Mini 328 5 V verwendet ein solches Board, aber in der Tat können Sie jedes andere verwenden. Wenn Sie noch nie verwendet haben Pro Mini, dann brauchst du bestimmt CP2102 (Programmierer) um das Board an einen Computer anzuschließen;

  • DS1302 - Echtzeituhrmodul;

  • 20 x 10 mm diffuse "warme" LEDs(Ich rate Ihnen, mit einer Marge zu nehmen);

  • 20 Widerstände mit einem Widerstandswert von 10Ω;

  • 2 Takttasten;

  • 2 Widerstände mit einem Widerstandswert von 10kΩ (verwendet als Pull-Up-Widerstände).

Schritt 3: Herstellung eines Prototyps

Beginnen wir mit der Herstellung eines Prototyps der Zukunft Kunsthandwerk... Im Prinzip ist dies keine Voraussetzung, aber Sie müssen sich ansehen, wie LED-Matrix, Arduino und Clock-Modul zusammenarbeiten. Ich habe Arduino Mega und einfache rote LEDs für das Prototyping verwendet. Alles funktioniert wie erwartet gut.

Schritt 4: Fall

Rahmen hausgemacht(besteht aus zwei Hälften ) wird aus Holz sein. Es wird vor dem Hintergrund einer binären Uhr kontrastreich aussehen und geben Boot Retro-Stil.

Schritt 5: Schaltplan

Die LEDs sind in einer Matrix gruppiert, um die Anzahl der beteiligten Arduino-Pins zu reduzieren. In unserem Fall sind 9 Pins für die Matrix reserviert. Nach der Herstellung der LED-Matrix verlöten wir die Leitungen zum Arduino, dann zum Uhrenmodul, Tasten zum Einstellen der Uhrzeit und schließlich zur Stromversorgung.

Schritt 6: Code

Der Code basiert auf dem Beispiel aus dem Arduino Playgroud-Post für das DS1302-Taktmodul. Danach wurden Änderungen vorgenommen, um die Uhrzeit auf der LED-Matrix anzuzeigen.

Es brauchte einen Weg, um groß zu werden Wanduhren mit automatischer Helligkeit.

Eine solche Uhr ist perfekt für große Räume, wie eine Bürohalle oder eine große Wohnung.

Eine so große Wanduhr zu bauen ist mit Hilfe dieser Anleitung nicht schwer.


Um die Größe der Uhr abzuschätzen, kann davon ausgegangen werden, dass ein Segment der Uhr die Größe von A4-Papier hat, was die Verwendung von Bilderrahmen in der entsprechenden Größe erleichtert.

Schritt 1. Komponenten einer großen Wanduhr.

Drähte, Lötzinn, Lötkolben, LED-Streifen Arduino Nano DC-DC-Wandler LM2596
4 Meter WS2811 LED-Streifen Lichtsensor Echtzeituhr DS3231
Mikroschalter

Was ich für dieses Projekt verwendet habe:

Schritt 8. Wir programmieren die Uhr.

Mit ein bisschen Basteln konnte ich eine Uhr bekommen, die voll und ganz meinen Bedürfnissen entspricht. Ich bin sicher, dass du es besser machen wirst als ich.

Der Code ist gut kommentiert und es wird Ihnen nicht schwerfallen, ihn zu verstehen, auch die Debug-Meldungen sind sehr gut kommentiert.

Wenn Sie die Farbe der verwendeten Wanduhr ändern müssen, müssen Sie die Variable in Zeile 22 ( int ledColor = 0x0000FF; // Verwendete Farbe (in Hex)). Eine Liste der Farben und ihrer Hex-Codes finden Sie auf der Seite: https://github.com/FastLED/FastLED/wiki/Pixel-ref...

Wenn Sie Probleme beim Herunterladen haben, verwenden Sie bitte einen Spiegel: http://bit.ly/1Qjtgg0

Sie können meine letzte Skizze herunterladen.

Schritt 9. Machen Sie Zahlen mit Polystyrol.

Fräserbasis Cutter Arbeitskörper Gesamtansicht des Cutters
Das Ergebnis des Cutters

Schneiden Sie jedes Segment in dem am Anfang gedruckten Muster aus.
Styropor kann mit einem scharfen Messer, was ziemlich schwierig ist, oder mit einem einfachen Gerät aus Nichromdraht oder einer Gitarrensaite und mehreren Stücken OSB-Platte geschnitten werden.

Wie ich das gemacht habe, seht ihr oben in den Bildern.

Ich habe ein 12-V-Netzteil verwendet, um den Schneider mit Strom zu versorgen.

Als Ergebnis der Schnitte sollten vier Segmente für große Stunden, von denen einer auf dem Foto zu sehen ist.

Schritt 10. Kleben Sie die Zahlen auf und bedecken Sie alles mit einem Diffusor. Die daraus resultierende große Wanduhr.

Glühen am Nachmittag Nachts leuchten

Nachdem wir alle vier Zahlen und Punkte der Wanduhr ausgeschnitten haben, kleben wir sie alle zusammen mit LED-Streifen auf Karton (zur Vereinfachung habe ich doppelseitiges Klebeband verwendet)

Um sich stark zu zerstreuen LED-Licht Ich benutzte zwei Blatt Papier über den Styroporzahlen. Aus Gründen der Bequemlichkeit und Ästhetik habe ich Papier im A2-Format verwendet, das in der Mitte gefaltet ist.

Nachdem ich alle diese Schritte abgeschlossen hatte, legte ich die resultierende große Wanduhrenbaugruppe in den entsprechenden großen Bilderrahmen.

Diese Uhr erwies sich als sehr effektiv und auffällig. Ich denke, dass eine so große Wanduhr viele Räume perfekt schmücken wird.

In Kontakt mit

Also die Echtzeituhr. Dieses nützliche kleine Ding löst die meisten nützlichen Aufgaben, die mit der Zeit verbunden sind. Sagen wir, Bewässerungskontrolle um 5 Uhr morgens auf dem Land. Oder die Beleuchtung zu einem bestimmten Zeitpunkt ein- und ausschalten. Nach Datum können Sie in jedem Haus mit dem Heizen beginnen. Das Ding ist sehr interessant und nützlich. Und genauer gesagt? Wir werden uns die Echtzeituhr DS1302 für die beliebte Arduino-Plattform ansehen.

In diesem Artikel erfahren Sie:

Guten Tag, liebe Leser des kip-world Blocks! Wie geht es Ihnen? Schreiben Sie in die Kommentare, mögen Sie Robotik? Was bedeutet Ihnen dieses Thema?

Der Gedanke daran lässt mich keine Minute los. Ich schlafe und sehe, wann wir endlich an den Punkt kommen, an dem sich jeder leisten kann, einen persönlichen Roboter - Assistenten zu kaufen. Egal, was er macht, den Müll aufräumen, den Rasen mähen, das Auto waschen.

Ich stelle mir nur vor, wie komplexe Algorithmen sie in ihrem "Gehirn" enthalten müssen.

Immerhin werden wir zu dem Schluss kommen, dass wir die Software genauso flashen werden wie auf PCs. Laden Sie auch Anwendungsprogramme herunter. Arme, Beine annähen, Krallen wechseln, Manipulatoren.

Sehen Sie die Filme "Ich bin ein Roboter", " Künstliche Intelligenz"," Sternenkrieger ".

Die Japaner stellen ihre Entwicklungen schon lange vor. Warum sind wir schlechter?? Wir haben eine sehr geringe Popularität. Ich kenne wenige Entwickler. Zählen Sie an Ihren Fingern. Wir machen etwas anderes. Wir sind Wiederverkäufer. Wir kaufen nur fertige Sets, Roboter - Spielzeug und allerlei Müll.

Warum entwickeln wir das nicht:

Oder dieses:

Ich beendete meine Überlegungen laut. Lassen Sie uns mit Ihnen über die Verbindung des DS1302 Real Time Clock Timers mit dem Arduino sprechen.

Echtzeituhr DS1302

Der Arduino-Controller hat keine eigene Uhr. Daher müssen Sie bei Bedarf eine spezielle DS1302-Mikroschaltung ergänzen.

Zur Stromversorgung können diese Boards ihre eigene Batterie verwenden oder direkt vom Arduino-Board mit Strom versorgt werden.

Pinbelegungstabelle:

Anschlussplan mit Arduino UNO:


Arduino-Programmiermethode für die Arbeit mit DS1302

Stellen Sie sicher, dass Sie eine gültige Bibliothek von vertrauenswürdigen Quellen herunterladen.

Die Bibliothek ermöglicht das Lesen und Schreiben von Echtzeitparametern. Nachfolgend gebe ich eine kurze Beschreibung:

#enthalten // Verbinden Sie die Bibliothek.
iarduino_RTC EIN OBJEKT ( NAME [, OUTPUT_RST [, OUTPUT_CLK [, OUTPUT_DAT]]] ); // Ein Objekt erstellen.

Funktion Start ();// Initialisierung des RTC-Modulbetriebs.

Funktion Zeit einstellen ( SEK [, MIN [, STUNDE [, TAG [, MONAT [, JAHR [, TAG]]]]]] ); // Stellen Sie die Zeit ein.

Funktion Zeit kriegen ([ LINIE ] ); // Lesezeit.

Funktion Blinkzeit ( PARAMETER [FREQUENZ] ); // Veranlasst die gettime-Funktion, den angegebenen Zeitparameter zu blinken.

Funktion Zeitraum ( PROTOKOLL ); // Gibt die minimale Zugriffsdauer auf das Modul in Minuten an.

Variable Sekunden// Gibt Sekunden von 0 bis 59 zurück.

Variable Protokoll// Gibt Minuten von 0 bis 59 zurück.

Variable Std// Gibt die Stunden von 1 bis 12 zurück.

Variable Std// Gibt die Stunden von 0 bis 23 zurück.

Variable Mittag// Gibt Mittag 0 oder 1 zurück (0-Uhr, 13-Uhr).

Variable Tag// Gibt den Tag des Monats von 1 bis 31 zurück.

Variable Wochentag// Gibt den Wochentag von 0 bis 6 zurück (0 ist Sonntag, 6 ist Samstag).

Variable Monat// Gibt den Monat von 1 bis 12 zurück.

Variable Jahr// Gibt das Jahr von 0 bis 99 zurück.

Wir schreiben ein einfaches Programm. Einstellen der aktuellen Uhrzeit im RTC-Modul (DS1302):

Arduino

#enthalten arduino_RTC-Zeit (RTC_DS1302,6,7,8); void setup () (delay (300); Serial.begin (9600); time.begin (); time.settime (0,51,21,27,10,15,2); // 0 sec, 51 min, 21 Stunden, 27. Oktober 2015, Dienstag) void loop () (if (millis ()% 1000 == 0) (// wenn 1 Sekunde vergangen ist Serial.println (time.gettime ("dmY, H: i: s .") , D ")); // Zeitverzögerung anzeigen (1); // 1 ms pausieren, um die Zeit nicht mehrmals in 1 ms anzuzeigen))

#enthalten

arduino_RTCtime (RTC_DS1302, 6, 7, 8);

void setup () (

Verzögerung (300);

Seriell. beginnen (9600);

Zeit. Start ();

Zeit. Einstellzeit (0, 51, 21, 27, 10, 15, 2); // 0 Sek, 51 Min, 21 Std, 27. Oktober 2015, Dienstag

Leere Schleife () (

if (Millis ()% 1000 == 0) ( // wenn 1 Sekunde vergangen ist

Seriell. println (time. gettime ("d-m-Y, H: i: s, D")); // die Uhrzeit anzeigen

Verzögerung (1); // 1ms pausieren, um die Zeit nicht mehrmals in 1ms anzuzeigen

Wir lesen die aktuelle Uhrzeit aus dem RTC-Modul (DS1302) und geben sie an den „Serial Port“ aus:

#enthalten arduino_RTC-Zeit (RTC_DS1302,6,7,8); void setup () (delay (300); Serial.begin (9600); time.begin ();) void loop () (if (millis ()% 1000 == 0) (// wenn 1 Sekunde vergangen ist Serial. println (time.gettime ("dmY, H: i: s, D")); // Zeitverzögerung anzeigen (1); // 1 ms pausieren, um die Zeit nicht mehrmals in 1 ms anzuzeigen))

In diesem Artikel lernen Sie ein hervorragendes batteriebetriebenes Echtzeituhrmodul kennen.

Mit diesem Modul behalten Sie auch bei Umprogrammierung oder Stromausfall die Zeit in Ihren Arduino-Projekten im Blick. Dies ist eines der wesentlichen Elemente für Projekte von Alarmen, Alarmen und Messwerten von Sensoren in Echtzeit. Eines der beliebtesten Modelle des Echtzeituhrmoduls ist das DS1307. Darauf werden wir aufhören. Das Modul ist perfekt kompatibel mit Arduino-Mikrocontrollern, bei denen die Logikspannung 5 V beträgt.

Features des Moduls des Herstellers Adafruit (die Chinesen bieten ähnliche Optionen drei- bis viermal günstiger an):

  • Alles inklusive: Chip, Kabelbaum, Batterie;
  • Einfach zu montieren und einfach zu bedienen;
  • Lässt sich auf jedem Steckbrett montieren oder direkt mit Drähten verbinden;
  • Es gibt tolle Bibliotheken und Beispielskizzen;
  • Zwei Befestigungslöcher;
  • Die Dauer der Arbeit beträgt ca. fünf Jahre!

Das Echtzeituhrmodul kann bereits abgelötet sein oder als separate Komponenten verkauft werden, deren Löten etwa 15 Minuten dauert, nicht mehr.

Was ist eine Echtzeituhr?

Die Echtzeituhr ist ... eine Uhr. Das Modul arbeitet mit einer autonomen Stromversorgung - Batterien und zählt die Zeit weiter, auch wenn die Stromversorgung Ihres Arduino-Projekts ausfällt. Mit dem Echtzeitmodul behalten Sie die Zeit im Auge, auch wenn Sie Änderungen an Ihrer Skizze vornehmen und den Mikrocontroller neu programmieren möchten.

Die meisten Mikrocontroller, einschließlich des Arduino, haben einen eingebauten Zeitzähler namens millis(). Im Chip sind auch Timer eingebaut, die längere Zeiträume (Minuten oder Tage) erfassen können. Warum brauchen Sie also ein separates Uhrenmodul? Das Hauptproblem ist, dass millis() nur die Zeit ab dem Moment verfolgt, in dem das Arduino eingeschaltet wird. Das heißt, sobald Sie das Board ausstecken, wird der Timer auf 0 zurückgesetzt. Die Arduino-Laus weiß nicht, was es ist, zum Beispiel Donnerstag oder 8. März. Alles, was Sie vom eingebauten Zähler erhalten können, ist "14000 Millisekunden sind seit dem letzten Einschalten vergangen".

Sie haben beispielsweise ein Programm erstellt und möchten den Countdown von diesem Moment an beibehalten. Wenn Sie die Stromversorgung des Mikrocontrollers ausschalten, erlischt der Zeitzähler. So ähnlich ist es mit billig Chinesische Uhren: Wenn die Batterie leer ist, blinken sie um 12:00 Uhr.

In einigen Arduino-Projekten benötigen Sie eine zuverlässige Zeitsteuerung ohne Unterbrechungen. Hier kommt das externe Echtzeituhr-Modul zum Einsatz. Der in solchen Uhren verwendete Chip verfolgt die Jahre und weiß sogar, wie viele Tage ein Monat hat (das einzige, was normalerweise nicht berücksichtigt wird, ist die Umstellung auf Sommerzeit, da solche Übertragungen in verschiedenen Teilen der Welt unterschiedlich sind ).

Das Bild unten zeigt Hauptplatine Computer mit Echtzeituhr DS1387. Die Uhr verwendet eine Lithiumbatterie, daher ist sie an Größe gewachsen.

Wir werden uns ein Beispiel für die Verwendung der Echtzeituhr DS1307 ansehen. Es ist ein billiges, einfach zu bedienendes Modul, das mit einer kleinen Batterie mehrere Jahre hält.

Bis die Batterie im Modul selbst leer ist, zählt der DS1307 weiter, auch wenn der Arduino ausgesteckt oder neu programmiert wird.

Knoten, aus denen das Echtzeituhrmodul besteht

Adafruit DS1307 Echtzeituhr-Modul Details
Zeichnung Bezeichnung Beschreibung Hersteller Menge
IC2 Echtzeituhr-Chip DS1307 1
Q1 32,768 kHz, 12,5 pF Quarz Generisch 1
R1, R2 1/4 W 5% 2,2K Ohm Widerstand Rot, Rot, Rot, Gold Generisch 2
C1 0,1uF Keramikkondensator Generisch 1
Schiene für 5 Kontakte (1x5) Generisch 1
Batterie 12mm 3V Lithiumbatterie CR1220 1
12mm Knopfzellenhalter Keystone 3001 1
Zahlen Adafruit Industries 1

Aufbau des Echtzeituhrmoduls

Zusammenbau der Adafruit DS1307 Echtzeituhr
Foto Erklärungen

Bereiten Sie die Montage vor. Überprüfen Sie, ob Sie alle erforderlichen Teile und Werkzeuge haben. Legen Sie die Platine in einen Schraubstock.

Tragen Sie etwas Lötzinn auf den Minuspol der Batterie auf.

Installieren Sie zwei 2,2K-Widerstände und einen Keramikkondensator. Es spielt keine Rolle, wie Sie sie anordnen. Polarität spielt keine Rolle. Danach montieren Sie den Quarz (ebenfalls symmetrisch), die Halterung (Halter) für die Batterie und den Echtzeituhr-Chip. Der Chip des Echtzeitmoduls muss so eingebaut werden, dass die Markierung (Nut) auf dem Chip entsprechend der Bezeichnung auf der Platine liegt. Schauen Sie sich das Foto links genau an, wo der Chip richtig eingebaut ist.


Um zu verhindern, dass der Batteriehalter herausfällt, ist es besser, ihn oben anzulöten. Dann die Platine umdrehen und die restlichen Pins verlöten.

Entfernen Sie den Rest der Kontakte von den Widerständen, Quarz und Kondensator.

Wenn Sie die Pins verwenden möchten, um das Modul auf einer lötfreien Platine zu montieren, legen Sie die Pinschiene auf das Steckbrett, das RTC-Modul oben und löten Sie die Pins.

Installieren Sie die Batterie. Der flache Teil der Batterie sollte oben liegen. Im Durchschnitt hält eine Batterie etwa 5 Jahre. Auch wenn der Akku leer ist, lassen Sie den Akkuschacht nicht leer.

Arduino-Bibliothek für die Arbeit mit DS1307

Der DS1307 lässt sich problemlos an jeden Mikrocontroller mit 5V-Logikleistung und I2C-Konnektivität anschließen. Wir werden uns das Verbinden und Verwenden dieses Moduls mit einem Arduino ansehen.

Wir werden die RTClib-Bibliothek verwenden, um Messwerte vom DS1307 abzurufen und anzupassen. Wenn Sie Fragen zum Hinzufügen zusätzlicher Arduino-Bibliotheken haben, lesen Sie dieses Tutorial.

Dieser Artikel zeigt ein Beispiel für eine Echtzeituhr von Adafruit, aber Sie können genauso gut ihre chinesischen Pendants verwenden. Das Funktions- und Anschlussprinzip ist das gleiche.

  • KAUFEN Arduino Uno R3;
  • KAUFEN Breadboard;
  • KAUFEN Sie das Echtzeituhrmodul DS1307;

Die Echtzeituhr hat 5 Pins: 5V, GND, SCL, SDA und SQW.

  • 5V wird verwendet, um den Echtzeituhrmodulchip mit Strom zu versorgen, wenn Sie Zeitdaten abfragen. Wenn das 5V-Signal nicht empfangen wird, geht der Chip in den "Sleep"-Modus.
  • GND ist gemeinsame Masse. Unbedingt an den Stromkreis angeschlossen.
  • SCL - i2c Clock Pin - erforderlich für den Datenaustausch mit der Echtzeituhr.
  • SDA ist ein Kontakt, über den Daten von der Echtzeituhr über i2c übertragen werden.
  • Mit SQW können Sie die Rechteckwellendatenausgabe anpassen. In den meisten Fällen wird dieser Kontakt nicht verwendet.

Wenn Sie den analogen Pin 3 (digital 17) auf OUTPUT und HIGH und den analogen Pin 2 (digital 16) auf OUTPUT und LOW setzen, können Sie die Echtzeituhr direkt über diese Pins mit Strom versorgen!

Verbinden Sie den analogen Pin 4 von Arduino mit SDA. Verbinden Sie den analogen Pin 5 von Arduino mit SCL.


Skizze für Arduino

Überprüfung der Echtzeituhr

Der erste Sketch, der es wert ist, ausgeführt zu werden, ist ein Programm, das einmal pro Sekunde Daten aus dem Echtzeituhrmodul liest.

Sehen wir uns zunächst an, was passiert, wenn wir die Batterie entfernen und durch eine andere ersetzen, während das Arduino nicht an USB angeschlossen ist. Warten Sie 3 Sekunden und entfernen Sie den Akku. Als Ergebnis wird der Chip der Echtzeituhr neu gestartet. Fügen Sie danach den folgenden Code ein (der Code kann auch im Menü Beispiele → RTClib → ds1307 in . heruntergeladen werden) Arduino-IDE) und laden Sie es auf Arduino hoch.

Sie benötigen auch die OneWire.h-Bibliothek, die Sie herunterladen können

.

// Datums- und Zeitfunktionen mit DS1307 Echtzeituhr, verbunden über I2C. Die Skizze verwendet die Wire lib-Bibliothek

#include & ltWire.h & gt

#include "RTClib.h"

Serienbeginn (57600);

if (! RTC.läuft ()) (

Serial.println ("RTC läuft NICHT!");

// RTC.adjust (DateTime (__ DATE__, __TIME__));

DateTime now = RTC.now ();

Serial.print ("/");

Serial.print ("/");

Seriendruck (jetzt. Tag (), DEZ);

Seriendruck ("");

Seriendruck (":");

Seriendruck (":");

Serial.println ();

Serial.print (jetzt.unixtime ());

Serial.print ("s =");

Serial.println ("d");

// Datum berechnen: 7 Tage und 30 Sekunden

DateTime Future (now.unixtime () + 7 * 86400L + 30);

Serial.print ("jetzt + 7d + 30s:");

Seriendruck (zukünftiges Jahr (), DEZ);

Serial.print ("/");

Serial.print (zukünftiger.Monat (), DEC);

Serial.print ("/");

Seriendruck (zukünftiger Tag (), DEZ);

Seriendruck ("");

Serial.print (future.hour (), DEC);

Seriendruck (":");

Serial.print (future.minute (), DEC);

Seriendruck (":");

Serial.print (future.second (), DEC);

Serial.println ();

Serial.println ();

Öffnen Sie nun das Fenster des seriellen Monitors und überprüfen Sie, ob die Baudrate richtig eingestellt ist: bei 57600 bps.

Als Ergebnis sollten Sie im seriellen Monitorfenster etwa Folgendes sehen:


Wenn die RTC-Leistung verloren geht, wird 0: 0: 0 angezeigt. Die Sekunden werden nicht mehr gezählt. Nach dem Einstellen der Uhrzeit beginnt ein neuer Countdown. Aus diesem Grund darf die Batterie nicht entfernt werden, während das Echtzeituhrmodul läuft.

Uhrzeit am Uhrenmodul einstellen

Entkommentieren Sie in derselben Skizze die Zeile, die mit RTC.adjust beginnt:

// die untere Zeile wird verwendet, um das Datum und die Uhrzeit der Uhr einzustellen

RTC.adjust (DateTime (__ DATE__, __TIME__));

Das Einstellen von Datum und Uhrzeit ist sehr elegant. Diese Zeile enthält Daten von Ihrem Zähler an persönlicher Computer(zum Zeitpunkt der Zusammenstellung des Codes). Diese Daten werden verwendet, um Ihr Echtzeituhrmodul zu flashen. Das heißt, wenn die Uhrzeit auf Ihrem PC falsch konfiguriert ist, empfehlen wir Ihnen, zuerst diesen Fehler zu beheben und dann mit der Firmware des Uhrenmoduls für Arduino fortzufahren.

Öffnen Sie nach der Einstellung den seriellen Monitor und stellen Sie sicher, dass die Uhr richtig eingestellt ist:


Alles. Von nun an und in den nächsten Jahren müssen Sie den DS1307 nicht mehr konfigurieren.

Ablesen der Uhrzeit vom DS1307

Nach dem Einstellen der Echtzeituhr kann DS1307 Anfragen an diese senden. Werfen wir einen Blick auf den Teil der Skizze, der diese Anforderungen umsetzt.

DateTime now = RTC.now ();

Serial.print (jetzt.Jahr (), DEC);

Serial.print ("/");

Serial.print (jetzt.Monat (), DEC);

Serial.print ("/");

Seriendruck (jetzt. Tag (), DEZ);

Seriendruck ("");

Serial.print (jetzt.Stunde (), DEC);

Seriendruck (":");

Serial.print (jetzt.Minute (), DEC);

Seriendruck (":");

Serial.print (now.second (), DEC);

Serial.println ();

Grundsätzlich gibt es eine Möglichkeit, die Uhrzeit mit einer Echtzeituhr abzurufen. Verwenden Sie dazu die Funktion now(), die ein DateTime-Objekt zurückgibt. Dieses Objekt enthält Daten über Jahr, Monat, Tag, Stunde, Minute und Sekunde.

Es gibt eine Reihe von Echtzeituhrbibliotheken, die Funktionen wie RTC.year () und RTC.hour () bereitstellen. Diese Funktionen ziehen Jahr und Stunde getrennt. Ihre Verwendung ist jedoch mit einer Reihe von Problemen behaftet: Wenn Sie die Anzeige der Minuten zu einem Zeitpunkt anfordern, z. B. 3:14:59, dh kurz bevor die Minuten "15" (3:15 :00), die empfangenen Daten entsprechen 3:14:00 - das heißt, Sie verlieren eine Minute.

В общем, использование отдельных функций для вызова часа или года обосновано только в том случае, когда точность контроля времени с разбросом в одну минуту/года для вашего проекта не критична (как правило, это в тех случаях, когда показания снимаются редко - раз в сутки , einmal in der Woche). Wenn Sie Fehler in den Messwerten vermeiden möchten, verwenden Sie in jedem Fall jetzt () und ziehen Sie aus den erhaltenen Daten die benötigten Messwerte (Minuten, Jahre usw.).

Es gibt ein weiteres Datenformat, aus dem wir lernen können - die Anzahl der Sekunden ab Mitternacht, dem 1. Januar 1970. Dazu wird die Funktion unixtime() verwendet:

Serial.print ("seit 1970 =");

Serial.print (jetzt.unixtime ());

Serial.print ("s =");

Serial.print (jetzt.unixtime () / 86400L);

Serial.println ("d");

Da 60 * 60 * 24 = 86400 Sekunden an einem Tag sind, können Sie den resultierenden Wert in Tage und Jahre umrechnen. Eine sehr praktische Option, wenn Sie nachverfolgen möchten, wie viel Zeit seit der letzten Anfrage vergangen ist. Wenn beispielsweise 5 Minuten seit dem letzten Zugriff des Arduino auf die Echtzeituhr DS1307 vergangen sind, wird der von der unixtime()-Funktion zurückgegebene Wert 300 mehr sein.

Hinterlassen Sie Ihre Kommentare, Fragen und teilen Sie Ihre persönlichen Erfahrungen unten. In der Diskussion entstehen oft neue Ideen und Projekte!

In vielen Projekten ist Arduino erforderlich, um den Zeitpunkt des Auftretens bestimmter Ereignisse zu verfolgen und aufzuzeichnen. Das mit einem zusätzlichen Akku ausgestattete Echtzeituhrenmodul ermöglicht es Ihnen, das aktuelle Datum zu speichern, unabhängig davon, ob das Gerät selbst mit Strom versorgt wird. In diesem Artikel werden wir über die gängigsten RTC-Module DS1307, DS1302, DS3231 sprechen, die mit dem Arduino-Board verwendet werden können.

Das Uhrenmodul ist eine kleine Platine, die in der Regel eine der Mikroschaltungen DS1307, DS1302, DS3231 enthält, außerdem befindet sich auf der Platine praktisch ein Mechanismus zum Installieren einer Batterie. Solche Tafeln werden oft verwendet, um Zeit, Datum, Wochentag und andere chronometrische Parameter zu verfolgen. Die Module arbeiten mit autonomer Stromversorgung - Batterien, Akkus und zählen weiter, auch wenn der Arduino ausgeschaltet ist. Die gängigsten Uhrenmodelle sind DS1302, DS1307, DS3231. Sie basieren auf dem RTC-Modul (Real Time Clock), das mit dem Arduino verbunden ist.

Die Uhr zählt in Einheiten, die für eine normale Person bequem sind - Minuten, Stunden, Wochentage und andere, im Gegensatz zu gewöhnlichen Zählern und Taktgeneratoren, die "Ticks" lesen. Arduino hat Spezialfunktion millis(), die auch verschiedene Zeitintervalle lesen kann. Der Hauptnachteil dieser Funktion besteht jedoch darin, dass sie beim Einschalten des Timers auf Null zurückgesetzt wird. Es kann nur die Uhrzeit abgelesen werden, das Einstellen von Datum oder Wochentag ist nicht möglich. Um dieses Problem zu lösen, werden Echtzeituhrmodule verwendet.

Die elektronische Schaltung umfasst eine Mikroschaltung, eine Stromversorgung, einen Quarzresonator und Widerstände. Der Quarzresonator arbeitet mit 32768 Hz, was für einen herkömmlichen Binärzähler praktisch ist. Die DS3231-Schaltung verfügt über einen eingebauten Quarz und eine thermische Stabilisierung für hohe Genauigkeitswerte.

Vergleich gängiger RTC-Module DS1302, DS1307, DS3231

In dieser Tabelle haben wir eine Liste der beliebtesten Module und ihrer Hauptmerkmale zusammengestellt.

Name Frequenz Genauigkeit Unterstützte Protokolle
DS1307 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz Abhängig vom Quarz - normalerweise erreicht der Wert 2,5 Sekunden pro Tag, es ist unmöglich, eine Genauigkeit von mehr als 1 Sekunde pro Tag zu erreichen. Außerdem ist die Genauigkeit temperaturabhängig. I2C
DS1302 32,768 kHz 5 Sekunden pro Tag I2C, SPI
DS3231 Zwei Ausgänge - der erste mit 32,768 kHz, der zweite - programmierbar von 1 Hz bis 8,192 kHz ± 2 ppm bei Temperaturen von 0 °C bis 40 °C.

± 3,5 ppm bei Temperaturen von -40 °C bis 85 °C.

Genauigkeit der Temperaturmessung - ± 3C

I2C

DS1307-Modul

DS1307 ist ein Modul, das für die Zeitmessung verwendet wird. Es ist auf Basis der DS1307ZN-Mikroschaltung aufgebaut, die Stromversorgung erfolgt über eine Lithiumbatterie zur Implementierung selbstständiges Arbeiten für einen langen Zeitraum. Der Akku auf der Platine ist befestigt an Rückseite... Das Modul verfügt über eine AT24C32-Mikroschaltung - dies ist ein 32 KB nichtflüchtiges EEPROM. Beide Mikroschaltungen sind über den I2C-Bus miteinander verbunden. DS1307 ist energieeffizient und enthält eine 2100 Uhr und einen Kalender.

Das Modul hat folgende Parameter:

  • Stromversorgung - 5V;
  • Betriebstemperaturbereich von -40 ° C bis 85 ° C;
  • 56 Byte Speicher;
  • Lithiumbatterie LIR2032;
  • Implementiert 12- und 24-Stunden-Modi;
  • Unterstützung von I2C-Schnittstellen.

Das Modul ist in Fällen gerechtfertigt, in denen Daten relativ selten gelesen werden, mit einem Intervall von einer Woche oder mehr. Dadurch können Sie Strom sparen, da Sie bei ununterbrochener Nutzung mehr Spannung aufwenden müssen, auch wenn Sie einen Akku haben. Das Vorhandensein von Speicher ermöglicht die Registrierung verschiedene Parameter(z. B. Temperaturmessung) und lesen die empfangenen Informationen vom Modul.

Die Interaktion mit anderen Geräten und der Informationsaustausch mit diesen erfolgt über die I2C-Schnittstelle von den SCL- und SDA-Pins. In die Schaltung sind Widerstände eingebaut, die es ermöglichen, den erforderlichen Signalpegel bereitzustellen. Die Platine hat auch einen speziellen Platz für die Montage eines Temperatursensors DS18B20. Die Kontakte sind in 2 Gruppen unterteilt, Raster 2,54 mm. Die erste Kontaktgruppe enthält folgende Schlussfolgerungen:

  • DS - Ausgang für den DS18B20-Sensor;
  • SCL - Taktleitung;
  • SDA - Datenleitung;
  • VCC - 5V;

Die zweite Gruppe von Kontakten enthält:

  • SQ - 1 MHz;
  • BAT - Eingang für Lithiumbatterie.

Um eine Verbindung zum Arduino-Board herzustellen, benötigen Sie das Board selbst (in diesem Fall kommt das Arduino Uno in Betracht), das Echtzeituhrmodul RTC DS1307, Drähte und ein USB-Kabel.

Um den Controller mit dem Arduino zu verbinden, werden 4 Pins verwendet - VCC, Masse, SCL, SDA .. VCC von der Uhr ist mit 5V auf dem Arduino verbunden, die Masse von der Uhr - mit der Masse von Arduino, SDA - A4, SCL - A5.

Um mit dem Uhrmodul arbeiten zu können, müssen Sie die Bibliotheken DS1307RTC, TimeLib und Wire installieren. Kann verwendet werden, um zu arbeiten und RTCLib.

Überprüfung des RTC-Moduls

Wenn der erste Code ausgeführt wird, liest das Programm einmal pro Sekunde Daten aus dem Modul. Zuerst können Sie sehen, wie sich das Programm verhält, wenn Sie die Batterie aus dem Modul entfernen und durch eine andere ersetzen, während das Arduino-Board nicht mit dem Computer verbunden ist. Sie müssen einige Sekunden warten und den Akku entfernen. Dadurch wird die Uhr neu gestartet. Dann müssen Sie im Menü Beispiele → RTClib → ds1307 ein Beispiel auswählen. Es ist wichtig, die Baudrate korrekt auf 57600 bps einzustellen.

Wenn Sie das Fenster des seriellen Monitors öffnen, sollten die folgenden Zeilen erscheinen:

Zeigt die Zeit 0: 0: 0 an. Dies liegt daran, dass die Uhr an Leistung verliert und der Countdown stoppt. Aus diesem Grund darf die Batterie bei laufendem Modul nicht entfernt werden.

Um die Uhrzeit am Modul einzustellen, müssen Sie die Linie in der Skizze finden

RTC.adjust (DateTime (__ DATE__, __TIME__));

Diese Zeile enthält Daten vom Computer, der zum Flashen des Echtzeituhrmoduls verwendet wird. Für richtige Arbeit Sie müssen zuerst die Richtigkeit von Datum und Uhrzeit am Computer überprüfen und erst dann mit dem Flashen des Uhrenmoduls beginnen. Nach der Einstellung zeigt der Monitor folgende Daten an:

Die Einstellungen wurden korrekt vorgenommen und die Echtzeituhr muss nicht neu konfiguriert werden.

Zeit lesen. Sobald das Modul konfiguriert ist, können Zeitanfragen gesendet werden. Verwenden Sie dazu die Funktion now(), die ein DateTime-Objekt zurückgibt, das Informationen zu Uhrzeit und Datum enthält. Es gibt eine Reihe von Bibliotheken, die zum Lesen der Uhrzeit verwendet werden. Zum Beispiel RTC.year () und RTC.hour () - sie erhalten getrennt Informationen über Jahr und Stunde. Bei der Arbeit mit ihnen kann ein Problem auftreten: Beispielsweise wird um 1:19:59 eine Aufforderung zur Anzeige der Uhrzeit gestellt. Bevor die Uhrzeit 1:20:00 angezeigt wird, zeigt die Uhr die Uhrzeit 1:19:00 an, was bedeutet, dass tatsächlich eine Minute verloren geht. Daher ist es ratsam, diese Bibliotheken in Fällen zu verwenden, in denen selten gelesen wird - einmal alle paar Tage. Es gibt andere Funktionen zum Aufrufen der Zeit, aber wenn Sie Fehler reduzieren oder vermeiden müssen, ist es besser, jetzt () zu verwenden und die erforderlichen Messwerte daraus zu ziehen.

Beispielprojekt mit i2C-Uhrenmodul und Display

Das Projekt ist eine gewöhnliche Uhr, der Indikator zeigt die genaue Uhrzeit an und der Doppelpunkt zwischen den Ziffern blinkt in Abständen von einer Sekunde. Um das Projekt umzusetzen, benötigen Sie ein Arduino Uno Board, eine Digitalanzeige, eine Echtzeituhr (in diesem Fall das oben beschriebene ds1307-Modul), ein Anschluss-Shield (in diesem Fall wird Troyka Shield verwendet), a Uhr Batterie und Kabel.

Das Projekt verwendet eine einfache vierstellige Anzeige auf der TM1637-Mikroschaltung. Das Gerät verfügt über eine Zweidraht-Schnittstelle und bietet 8 Helligkeitsstufen des Monitors. Wird nur verwendet, um die Zeit im Format Stunden: Minuten anzuzeigen. Der Indikator ist einfach zu bedienen und einfach anzuschließen. Es ist vorteilhaft für Projekte, die keine minuten- oder stündliche Datenvalidierung erfordern. Für mehr alle Informationen Für Uhrzeit und Datum werden LCD-Monitore verwendet.

Das Taktmodul wird an die SCL / SDA-Pins angeschlossen, die mit dem I2C-Bus verbunden sind. Sie müssen auch Masse und Strom anschließen. Verbinden Sie sich mit Arduino auf die gleiche Weise wie oben beschrieben: SDA - A4, SCL - A5, Masse vom Modul zur Masse mit Arduino, VCC -5V.

Der Indikator wird einfach angeschlossen - die CLK- und DIO-Pins davon werden mit beliebigen digitalen Pins auf der Platine verbunden.

Skizzieren. Verwenden Sie zum Schreiben des Codes die Setup-Funktion, mit der Sie die Uhr und den Indikator initialisieren und die Kompilierzeit aufzeichnen können. Die Anzeige der Zeit auf dem Bildschirm erfolgt mit Schleife.

#enthalten #include "TM1637.h" #include "DS1307.h" // Sie müssen alle notwendigen Bibliotheken einbinden, um mit der Uhr und dem Display zu arbeiten. char-compileTime = __TIME__; // Kompilierzeit. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 // Zahlen von den Arduino-Ausgängen, an die der Bildschirm angeschlossen ist; void setup () (display.set (); display.init (); // screen.clock.begin () verbinden und konfigurieren; // Clock einschalten.byte hour = getInt (compileTime, 0); byte minute = getInt (compileTime, 2); byte second = getInt (compileTime, 4); // Abrufen der time.clock.fillByHMS (Stunde, Minute, Sekunde); // Vorbereitung zum Schreiben in die Zeit module.clock.setTime () ; // Aufnahme laufender Informationen empfangen in interner Speicher, Lesezeit beginnen. ) void loop () (int8_t timeDisp; // Anzeige bei jedem der vier bits.clock.getTime (); // Anfrage zum Abrufen von time.timeDisp = clock.hour / 10; timeDisp = clock.hour% 10; timeDisp = clock .minute / 10; timeDisp = clock.minute% 10; // verschiedene Operationen zum Abrufen von Zehnern, Einheiten von Stunden, Minuten usw. display.display (timeDisp); // Anzeige der Zeit auf dem Indikator display.point (clock. second% 2? POINT_ON: POINT_OFF); // Doppelpunkt nach einer Sekunde ein- und ausschalten.) Char getInt (const char * string, int startIndex) (return int (string - "0") * 10 + int (string) - "0"; // Aktionen, um die Zeit korrekt in eine zweistellige ganze Zahl zu schreiben. Andernfalls zeigt der Bildschirm nur ein paar Zeichen an.)

Danach muss die Skizze hochgeladen werden und die Uhrzeit wird auf dem Monitor angezeigt.

Das Programm kann leicht erweitert werden. Wenn Sie das Gerät ausschalten, führt die obige Skizze dazu, dass nach dem Einschalten das Display die Zeit anzeigt, die während der Kompilierung eingestellt wurde. In der Setup-Funktion wird jeweils die Zeit von 00:00:00 bis zum Beginn der Übersetzung berechnet. Dieser Hash wird mit dem verglichen, was im EEPROM gespeichert ist und der beim Ausschalten beibehalten wird.

Fügen Sie die Funktionen EEPROMWriteInt und EEPROMReadInt hinzu, um Zeit in oder aus einem nichtflüchtigen Speicher zu schreiben und zu lesen. Sie werden benötigt, um zu prüfen, ob der Hash mit dem im EEPROM geschriebenen Hash übereinstimmt/nicht übereinstimmt.

Sie können das Projekt verbessern. Wenn Sie einen LCD-Monitor verwenden, können Sie ein Projekt erstellen, bei dem Datum und Uhrzeit auf dem Bildschirm angezeigt werden. Die Verbindung aller Elemente ist in der Abbildung dargestellt.

Als Ergebnis muss der Code angeben neue Bibliothek(bei Flüssigkristallbildschirmen ist dies LiquidCrystal), und fügen Sie Zeilen zur Funktion loop() hinzu, um das Datum zu erhalten.

Der Arbeitsalgorithmus lautet wie folgt:

  • Verbindung aller Komponenten;
  • Überprüfen Sie - die Uhrzeit und das Datum auf dem Monitorbildschirm sollten sich jede Sekunde ändern. Wenn der Bildschirm sagt falsche Zeit, müssen Sie der Skizze die Funktion RTC.write (tmElements_t tm) hinzufügen. Probleme mit falsch eingestellten Uhrzeiten sind darauf zurückzuführen, dass das Uhrenmodul beim Herunterfahren Datum und Uhrzeit auf 00:00:00 01.01.2000 zurücksetzt.
  • Mit der Schreibfunktion können Sie Datum und Uhrzeit vom Computer abrufen, woraufhin die richtigen Parameter auf dem Bildschirm angezeigt werden.

Abschluss

Taktmodule werden in vielen Projekten verwendet. Sie werden für Datenprotokollierungssysteme benötigt, wenn Timer und Steuergeräte erstellt werden, die nach einem bestimmten Zeitplan arbeiten, in Haushaltsgeräte... Mit weit verbreiteten und preiswerten Modulen können Sie Projekte wie einen Wecker oder einen Sensordatenlogger erstellen, Informationen auf einer SD-Karte aufzeichnen oder die Uhrzeit auf dem Bildschirm anzeigen. In diesem Artikel haben wir typische Anwendungsfälle und Möglichkeiten zur Anbindung der gängigsten Modultypen untersucht.

Fortsetzung des Themas:
Geräte

Freie Sonnenstrahlen effizient in Energie umzuwandeln, mit der Haushalte und andere Einrichtungen mit Strom versorgt werden können, ist der gehegte Traum vieler Verteidiger grüner ...