Große elektronische Raumuhr mit Arduino. Binäre Uhr auf der Basis von Arduino Tun Sie es selbst

Guten Tag, heute werde ich die Anweisungen zur Herstellung von Uhren mit einem Raumthermometer teilen ( Uhr auf Arduino Tun Sie es selbst). Die Uhr funktioniert auf Arduino-UNO, einem WG12864B-Grafikbildschirm wird verwendet, um Zeit und Temperatur anzuzeigen. Als Temperatursensor - DS18B20. Im Gegensatz zu den meisten anderen Stunden werde ich keine RTS (Echtzeituhr) verwenden, und ich werde versuchen, ohne dieses zusätzliche Modul zu tun.

Die Schemata auf Arduino zeichnen sich durch ihre Einfachheit aus und können anfangen, Arduino zu lernen - alle. Informationen zum Anschließen von Bibliotheken und Flash-Arduino können in unserem Artikel gelesen werden.

Lass uns fortfahren.

Um Datenstunden zu erstellen, benötigen wir:

Arduino UNO (oder andere Arduino-kompatible Gebühr)
- Grafikbildschirm. WG12864B.
- DS18B20 Temperatursensor
- Widerstand 4.7 COM 0,25 W
- Widerstand 100 Ohm 0,25 W
- Batteriefach für 4 Batterien von AA-Typ "Finger"
- Fitkasten
- kleine Datei.
- Nagellack (Schwarz- oder Körperfarbe)
- ein wenig dünner Kunststoff oder Karton
- Isol
- Verbindungsdrähte anschließen
- Leiterplatte
- Tasten
- Lötkolben
- Lot, Kolophonium
- Doppelseitiges Klebeband

Grafische Bildschirmvorbereitung.
Mit der Verbindung des Bildschirms, auf den ersten Blick gibt es viele Probleme und Schwierigkeiten. Wenn Sie jedoch zuerst mit ihren Ansichten umgehen, ist es viel einfacher und klarer. Es gibt viele Sorten und Screensarten auf dem Controller KS0107 / KS0108. Alle Bildschirme werden auf 4 Typen geteilt:
Option A: HDM64GS12L-4, CRYSTALFONTZ CFAG12864B, Sparkfun LCD-00710cm, NKC-Elektronik LCD-0022, Winstar WG12864B-TML-T
Variante B: HDM64GS 12L-5, Lumex LCM-S12864GSF, Futurlec Blue128x64LCD, AZ-Anzeigen AGM1264F, DisplayTech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, QY-12864F, TM12864L-2, 12864J-1
Option C: Shenzhen Jinghua zeigt Co Ltd an. JM12864.
Option D: WD-G1906G WD-G1906G, WDEK - GEN / WD-G1906G / KS0108B, WDINEK / WD-G1906G / S6B0108A, TECDIS / Y19061 / HD61202, VARITRONIX / MGLS19264 / HD61202

Die Liste ist nicht vollständig, es gibt viele von ihnen. Die häufigste und meiner Meinung nach ein praktischer WG12864B3 V2.0. Das Display kann an einem seriellen oder parallelen Port an Arduino angeschlossen werden. Bei Verwendung mit Arduino UNO ist es besser, eine Verbindung über einen seriellen Anschluss zu wählen - dann benötigen wir nur 3 Mikrocontroller-Ausgänge anstelle von mindestens 13 Zeilen, wenn sie über einen parallelen Anschluss verbunden sind. Es verbindet alles, was alles ist, ist ganz einfach. Es gibt eine andere Nuance, Sie können zwei Optionen für Anzeigen finden, mit einem eingebauten Potentiometer (zum Anpassen des Kontrasts) und ohne ihn. Ich entschied mich, und ich berate Sie auch, Sie mit eingebautem zu machen.


Dies reduziert die Anzahl der Teile und Zeit des Lötens. Es lohnt sich auch, einen Strombegrenzungswiderstand mit einem Gesichtswert von 100 Ohm zum Hervorheben zu setzen. Direkt 5 Volt verbinden, besteht die Gefahr, dass die Hintergrundbeleuchtung riskiert wird.
WG12864B - Arduino UNO
1 (GND) - GND
2 (VCC) - + 5V
4 (Rs) - 10
5 (R / W) - 11
6 (e) - 13
15 (PSB) - GND
19 (BLA) - durch den Widerstand - + 5V
20 (BLK) - GND

Am praktischsten all dies sammelt alles, was einen Rücken des Bildschirms sammelt, und geben 5 Drähte der Verbindung mit dem Arduino-UNO aus. Am Ende sollte es so etwas herausstellen:


Für diejenigen, die immer noch eine parallele Verbindung wählen, ergibt eine Verbindungstabelle.

Und das Schema für die Bildschirme der Option B:



Mehrere Sensoren können in einer Kommunikationslinie aufgenommen werden. Für unsere Uhr reicht man aus. Wir verbinden den Draht vom Kontakt "dq" ds18b20 bis "pin 5" arduino uno.

Vorbereitung des Boards mit Knöpfen.
Um die Uhrzeit und Datumsangaben auf der Uhr einzustellen, verwenden wir drei Schaltflächen. Für den Komfort löten wir drei Tasten auf der Leiterplatte und zeigen die Drähte an.


Verbinden Sie sich wie folgt: Der Common-Draht für alle drei Tasten verbindet sich mit "GND" Arduino. Die erste Schaltfläche dient dazu, den Zeiteinstellungsmodus einzugeben und Zeit und Datum umzuschalten, verbinden Sie sich mit "Pin 2". Die zweite, die Vergrößerungsschaltfläche - auf "Pin 3" und der dritten, der Wertreduzierungstaste auf "Pin 4".

Montage von allen zusammen.
Vermeiden kurzschluss, Sollten Sie den Bildschirm zeichnen. In einem Kreis sind wir mit einem Band eingewickelt, und auf der Rückseite der Befestigung an dem zweiseitigen Klebeband, die in der Größe geschnitzt, der Balken aus dem Isoliermaterial. Eine dichte Karton oder ein dünner Kunststoff ist geeignet. Ich nutzte den Kunststoff aus dem Tablet für Papier. Es stellte sich Folgendes heraus:


Vor dem Bildschirm am Rand des Bilateralbandes auf der Schaumbasis, vorzugsweise schwarz.


Schließen Sie den Bildschirm an Arduino an:


Plus aus dem Batteriefach verbinden Sie sich mit "VIN" Arduino, minus bis "GND". Platzieren Sie es von hinter Arduino. Vergessen Sie vor der Installation in den Fall nicht, den Temperatursensor und die Tafel mit den Tasten anzuschließen.


Vorbereitung und Füllung Skizze.
Für den Temperatursensor benötigen Sie eine OneWire-Bibliothek.

Die Ausgabe an den Bildschirm wird über die U8gliB-Bibliothek durchgeführt:

Um die Skizze zu bearbeiten und auszufüllen, müssen Sie diese beiden Bibliotheken installieren. Dies kann auf zwei Arten erfolgen. Packen Sie diese Archive einfach aus und legen Sie die unverpackten Dateien in den Ordner "Bibliotheken" im Ordner mit der installierten Stelle auf Arduino-IDE.. Oder die zweite Option, um Bibliotheken direkt in der Programmierumgebung festzulegen. Ohne heruntergeladene Archive auszupacken, wählen Sie in Arduino-IDE das Namatch-Menü - Verbinden Sie die Bibliothek. Setzen Sie ganz oben in der Dropdown-Liste die Option Add.Zip-Bibliothek hinzufügen. Wählen Sie im angezeigten Dialogfeld die Bibliothek aus, die Sie hinzufügen möchten. Öffnen Sie das Skizzenmenü erneut - Verbinden Sie die Bibliothek. Am Ende der Dropdown-Liste sollten Sie sehen neue Bibliothek. Nun kann die Bibliothek in Programmen verwendet werden. Vergessen Sie nicht, Arduino-IDE nach allem neu zu starten.

Der Temperatursensor arbeitet mit einem Drahtprotokoll und verfügt über eine eindeutige Adresse für jedes Gerät - 64-Bit-Code. Jedes Mal, wenn Sie nach diesem Code suchen, ist ungeeignet. Daher müssen Sie den Sensor zuerst an Arduino anschließen, die Skizze in der Dateimenü gießen - Beispiele - Dallas Temperatur - OneWiSearch. Führen Sie als nächstes die Werkzeuge - den Port-Monitor aus. Arduino sollte unseren Sensor finden, seine Adresse und aktuelle Temperaturwerte schreiben. Kopieren oder einfach die Adresse unseres Sensors schreiben. Öffnen Sie Skizze arduino_wg12864b_term, suchen Sie nach einer Zeichenfolge:

Byte Addr \u003d (0x28, 0xff, 0xdd, 0x14, 0xb4, 0x16, 0x5, 0x97); // Adresse meines Sensors

Notieren Sie sich die Adresse Ihres Sensors zwischen gelockten Klammern und ersetzen Sie die Adresse meines Sensors.

Strom:

//u8g.setprintpos (44, 64); U8g.print (SEK); // Widerrufen Sie Sekunden, um die Richtigkeit des Hubs zu steuern

Es dient dazu, Sekunden neben der Inschrift "Daten" auszugeben. Dies ist notwendig, um den Zeitanschlag genau einzustellen.
Wenn die Uhr eilig oder verzögert werden soll, sollte in der Zeile geändert werden:

If (micros () - prevmicros\u003e 494000) (// wechseln Sie zum anderen, um die Anpassung zu ändern, war 500.000

Ich habe die Nummer ausgedrückt, in der die Uhr eher genau ging. Wenn Ihre Uhren beeilen, um diese Zahl zu erhöhen, wenn Sie zurückbleiben. Um die Genauigkeit des Hubs zu bestimmen und den Abschluss von Sekunden zu erfordern. Nach einer genauen Kalibrierung können die Sekunden kommentiert und somit vom Bildschirm entfernen.

In dem Artikel erfahren Sie mit einem hervorragenden Echtzeituhrmodul an der Batterie.

Mit diesem Modul können Sie die Uhrzeit in Ihren Projekten auf Arduino, auch bei Umprogrammierung oder Ausschaltung verfolgen können. Dies ist eines der notwendigen Elemente für die Projekte von Wecker, Alarmen, Entfernen von Messwerten von Sensoren in Echtzeit. Eines der beliebtesten Modelle des Echtzeituhrmoduls ist DS1307. Es ist darauf, dass wir aufhören werden. Das Modul ist perfekt mit Arduino-Mikrocontrollern kombiniert, auf denen die Ernährung der Logik 5 V beträgt.

Merkmale des Moduls vom Hersteller von Adafruit (das Chinesen bieten ähnliche Optionen in drei oder vier günstigeren):

  • All Inclusive: Chip, Umreifen, Batterie;
  • Leicht gehen und einfach zu bedienen;
  • Ist auf einem beliebigen Chargen installiert oder direkt mit Drähten verbunden;
  • es gibt ausgezeichnete Bibliotheken. und skizzenhafte Beispiele;
  • Zwei Löcher zur Montage;
  • Dauer der Arbeit - etwa fünf Jahre!

Das Echtzeituhrmodul kann bereits abgestrahlt sein und kann in Form einzelner Komponenten verkauft werden, deren Löten etwa 15 Minuten dauert, nicht mehr.

Was ist Echtzeituhr?

Watch wirklich Zeit ist ... Stunden. Das Modul läuft von der autonomen Stromversorgung - Batterien und zählt weiterhin die Zeit, auch wenn Ihr Projekt in das Arduino gegangen ist. Mit dem Echtzeitmodul können Sie die Zeit verfolgen, auch wenn Sie Änderungen an Ihrer Skizze vornehmen möchten, um den Mikrocontroller neu zu programmieren.

Bei den meisten Mikrocontroller, einschließlich Arduino, gibt es einen integrierten zeitlichen Zähler, der als Millis () genannt wird. Es gibt Timer in den Chip, der längere Zeiträume (Minuten oder Tage) verfolgen kann. Warum haben Sie also ein separates Stundenmodul? Das Hauptproblem ist, dass Millis () die Zeit nur seit der Stromversorgung nach Arduino verfolgt. Das heißt, sobald Sie den Vorstand getrennt haben, wird der Timer auf 0 entladen. Prosh Arduino weiß nicht, dass nun nicht, zum Beispiel, Donnerstag oder 8. März. Alles, was Sie von der eingebauten Zähler bekommen können, ist seit der letzten Eingliederung "14.000 Millisekunden."

Sie haben beispielsweise ein Programm erstellt und möchten die Zeit ab sofort zählen. Wenn Sie die Stromversorgung des Mikrocontrollers ausschalten, wird der Zeitzähler gekauft. Über die Art, wie es mit billig passiert chinesische Uhr.: Wenn der Akku sitzt, blinken sie mit dem Zeugnis von 12:00 Uhr.

In einigen Projekten benötigen Arduino Sie eine zuverlässige Kontrolle der Zeit ohne Unterbrechungen. In solchen Fällen wird das externe Echtzeituhrmodul verwendet. Chip, der in ähnlichen Stunden genutzt wird, verfolgt das Jahr und weiß sogar, wie viele Tage in einem Monat (das einzige, was normalerweise nicht berücksichtigt wird, der Übergang zum Sommer- und Winterzeit ist, da solche Übersetzungen in verschiedenen Teilen von unterschiedlich sind die Welt).

Abbildung unten zeigt hauptplatine Computer mit Echtzeituhr DS1387. In der Uhr wird eine Lithiumbatterie verwendet, so dass sie in der Größe verstreut sind.

Wir werden ein Beispiel für die Verwendung der Echtzeituhr DS1307 in Betracht ziehen. Dies ist ein billiges, einfach zu bedienendes Modul, das mehrere Jahre von einer kleinen Batterie arbeitet.

Während der Akku im Modul selbst seine Ladung selbst nicht abgibt, führt der DS1307 einen Countdown aus, selbst wenn Arduino von der Leistung getrennt oder umprogrammiert ist.

Knoten, aus denen das Echtzeituhrmodul besteht

DS1307 Echtzeitmodul Details von Adafruit
Bild Bezeichnung Beschreibung Hersteller Nummer
Ic2. Echtzeitchip DS1307. 1
Q1. 32.768 kHz, 12,5 pf kristall Generisch. 1
R1, R2. 1/4 W 5% 2.2 KOM Widerstand rot, rot, rot, golden Generisch. 2
C1. 0,1 μF Keramikkühler Generisch. 1
Schiene für 5 Kontakte (1x5) Generisch. 1
Batterie 12 mm 3 in Lithiumbatterie CR1220. 1
12mm-Münzzellenhalter Keystone 3001. 1
Zahlen Adafruit Industries. 1

Montage des Echtzeituhrmoduls

Sammlung Echtzeituhr DS1307 Adafruit
Foto Erklärungen

Bereiten Sie sich auf die Montage vor. Prüfen Sie auf alle erforderlichen Teile und Werkzeuge. Installieren Sie die Leiterplatte im Schraubstock.

Wenden Sie ein wenig Lötmittel auf den negativen Batteriekontakt an.

Installieren Sie den beiden Widerständen 2.2 COM- und Keramikkondensator. Wie genau werden Sie sie positionieren - egal. Polarität spielt keine Rolle. Stellen Sie danach den Kristall (auch symmetrisch), den Halter (Holding) für den Akku und den Echtzeit-Takt-Chip ein. Der Echtzeitmodulchip sollte so eingestellt werden, dass sich die Markierung (Nut) auf dem Chip in Übereinstimmung mit der Bezeichnung auf der Leiterplatte befindet. Schauen Sie sich das Foto auf der linken Seite sorgfältig an, da der Chip ordnungsgemäß installiert ist.


Damit das Halten für die Batterie nicht ausfallen, ist es besser, es von oben zu löten. Drehen Sie danach die Tafel und löten Sie die restlichen Kontakte.

Entfernen Sie die Überreste von Kontakten von Widerständen, Kristall und Kondensator.

Wenn Sie Kontakte verwenden möchten, um das Modul auf einer inkrementellen Leiterplatte zu installieren, setzen Sie den Kontakt des PIN mit dem Laypecker, dem Echtzeit-Uhr-Modul von oben und an der Schaltkontakte.

Installieren Sie den Akku. Der flache Teil der Batterie muss oben sein. Im Durchschnitt dient der Akku etwa 5 Jahre. Selbst wenn der Akku setzt ist, lassen Sie den Schlitz nicht leer.

Arduino-Bibliothek für die Arbeit mit DS1307

DS1307 verbindet sich leicht mit einem Mikrocontroller mit 5 V-Logik- und I2C-Funktionen. Wir werden in Betracht ziehen und dieses Modul mit Arduino verwenden.

Wir verwenden die RTClib-Bibliothek, um Messwerte von DS1307 zu empfangen und zu konfigurieren. Wenn Sie Fragen haben, um weitere Arduino-Bibliotheken aufrechtzuerhalten - überprüfen Sie diese Anweisungen.

Der Artikel beschreibt ein Beispiel für Echtzeitstunden von Adafruit, aber Sie können chinesische Kollegen mit demselben Erfolg verwenden. Das Prinzip des Betriebs und der Verbindung ist nicht anders.

  • Kaufen Sie Arduino UNO R3;
  • Breadboard kaufen;
  • Kaufen Sie Echtzeituhrmodul DS1307;

Auf der Uhr der echten Premote 5-Pins: 5V, GND, SCL, SDA und SQW.

  • 5V wird verwendet, um den Echtzeit-Takt-Chip auszuschalten, wenn Sie eine Anforderung anfragen, um Zeitdaten zu erhalten. Wenn das 5-V-Signal nicht ankommt, geht der Chip in den "Sleep" -Modus.
  • GND - Gesamtland. Stellen Sie sicher, dass Sie eine Verbindung zum Kreislauf herstellen.
  • SCL - I2C-Taktkontakt - Wird benötigt, um Daten mit Echtzeituhr auszutauschen.
  • SDA - Kontakt, für die Daten von der I2C von der Takte der Echtzeit übertragen werden.
  • SQW ermöglicht es, die Datenleistung als Recherchenwelle zu konfigurieren. In den meisten Fällen wird dieser Kontakt nicht verwendet.

Wenn Sie den analogen Pin 3 (digital 17) in den Ausgang und den hohen Modus einrichten, und analoge Pin 2 (digital 16) in den Ausgang und den niedrigen Modus können Sie Echtzeitstunden direkt von diesen Kontakten speichern!

Verbinden Sie den analogen Pin 4 auf dem Arduino nach SDA. Analog-Pin 5 auf Arduino-Verbindung zu SCL.


Skizze für Arduino.

Überprüfung von Echtzeituhren

Die erste Skizze, die Wert wert ist, ist ein Programm, das die Daten einmal pro Sekunde aus dem Echtzeitmodul gelesen wird.

Lassen Sie uns zu einem Start sehen, was passiert, wenn wir den Akku entfernen, und ersetzen Sie es in einen anderen, bis Arduino an USB angeschlossen ist. Warten Sie 3 Sekunden und entfernen Sie die Batterie. Infolgedessen startet der Chip auf Echtzeituhr neu. Fügen Sie danach den untenstehenden Code ein (der Code kann auch in den Beispielen → RTClib → DS1307 in Arduino-IDE entladen werden) und laden Sie ihn auf Arduino herunter.

Sie benötigen auch eine ONEWIRE.H-Bibliothek, Sie können es herunterladen

.

// Datums- und Uhrzeitfunktionen mit Echtzeit-Takt DS1307, das über I2C angeschlossen ist. Die Skizze verwendet die Draht-LIB-Bibliothek

#Include & ltwire.h & gt

#Include "rtclib.h"

Serial.begin (57600);

if (! rtc.isstrunning ()) (

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

// rtc.adjust (dateTime (__ date__, __ime__));

Datetime jetzt \u003d rtc.now ();

Serial.print ("/");

Serial.print ("/");

Serial.print (jetzt.Day (), Dec);

Serial.print ("");

Serial.print (":");

Serial.print (":");

Serial.println ();

Serial.print (jetzt.unixtime ());

Serial.print ("s \u003d");

Serial.println ("d");

// Berechnen Sie das Datum: 7 Tage und 30 Sekunden

DateTime Future (Now.unixTime () + 7 * 86400L + 30);

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

Serial.print (future.year (), dec);

Serial.print ("/");

Serial.print (future.month (), dec);

Serial.print ("/");

Serial.print (future.day (), dec);

Serial.print ("");

Serial.print (future.chur (), dec);

Serial.print (":");

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

Serial.print (":");

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

Serial.println ();

Serial.println ();

Öffnen Sie nun das serielle Monitor-Fenster und stellen Sie sicher, dass die Datenübertragungsrate richtig eingestellt ist: auf 57600 Bits.

Infolgedessen sollten Sie im seriellen Monitorfenster folgendes sehen:


Wenn in Echtzeit eine Stromversorgung vorhanden ist, wird 0: 0: 0 angezeigt. Sekunden werden ausgeschaltet. Nach dem Einrichten der Zeit wird ein neuer Zähler angezeigt. Aus diesem Grund ist es unmöglich, den Akku während des Betriebs des aktuellen Zeitmoduls nicht zu entfernen.

Zeit auf dem Uhrmodul einstellen

In derselben Skizze, die nicht in der Linie, die mit rtc.adjust beginnt:

// Linie unten wird verwendet, um das Datum und die Uhrzeit der Uhr einzurichten

Rtc.adjust (datetime (__ datum__, __ime__));

Der Prozess der Einrichtung des Datums und der Zeit ist sehr elegant. Diese Zeile enthält Daten von Ihrem Zähler bis persönlicher Computer (Zum Zeitpunkt der Komplimente des Codes). Diese Daten werden zur Firmware Ihres Echtzeituhrmoduls verwendet. Das heißt, wenn die Zeit auf Ihrem PC falsch konfiguriert ist, empfehlen wir zuerst, diesen Fehler zu beheben, und gehen Sie dann zur Firmware des Uhrmoduls für Arduino.

Öffnen Sie nach dem Einstellen den seriellen Monitor und stellen Sie sicher, dass die Uhr korrekt konfiguriert ist:


Alles. Von diesem Punkt an, in den nächsten Jahren muss der DS1307 nicht konfiguriert werden.

Lesen Sie Zeit mit DS1307

Nach dem Einrichten der Echtzeituhr DS1307 kann er Anforderungen an sie senden. Betrachten wir einen Teil der Skizze, in der diese Anfragen implementiert sind.

Datetime jetzt \u003d rtc.now ();

Serial.print (jetzt.year (), dec);

Serial.print ("/");

Serial.print (jetzt.month (), dec);

Serial.print ("/");

Serial.print (jetzt.Day (), Dec);

Serial.print ("");

Serial.print (jetzt. tum (), dec);

Serial.print (":");

Serial.print (jetzt.minute (), dec);

Serial.print (":");

Serial.print (jetzt.second (), dec);

Serial.println ();

Im Wesentlichen gibt es eine Option für die Zeit mit Echtzeituhr. Verwenden Sie dazu die jetzt () -Funktion, die das Datetime-Objekt zurückgibt. Diese Einrichtung enthält Informationen zu Jahr, Monat, Tag, Stunde, Minute und Sekunde.

Es gibt eine Reihe von Bibliotheken für die Echtzeituhr, die Funktionen wie RTC.Year () und RTC.HROUR () bereitstellen. Diese Funktionen strecken sich separat jährlich und eine Stunde. Ihre Verwendung ist jedoch mit einer Reihe von Problemen verknüpft: Wenn Sie zum Zeitpunkt der Zeit, z. B. um 3:14:59, ein Antrag auf die Ausgabe von Minuten, beispielsweise um 3:14:59, das ist, dass er direkt vor dem Zeugnis der Minuten entspricht " 15 "(3:15:00), die erhaltenen Daten sind gleich 3:14:00 Uhr - das heißt, Sie verlieren eine Minute.

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

Es gibt ein anderes Datenformat, das wir lernen können - die Anzahl der Sekunden von Mitternacht, dem 1. Januar 1970. Verwenden Sie dazu die Funktion UnixTime () ():

Serial.print ("seit 1970 \u003d");

Serial.print (jetzt.unixtime ());

Serial.print ("s \u003d");

Serial.print (Now.unixTime () / 86400L);

Serial.println ("d");

Da an einem Tag 60 * 60 * 24 \u003d 86400 Sekunden, können Sie den resultierenden Wert in Tagen und Jahren übersetzen. Sehr bequeme Option, wenn Sie nachverfolgen müssen, wie viel Zeit seit der letzten Anfrage bestanden hat. Wenn zum Beispiel 5 Minuten seit dem letzten Arduino-Griff an den Echtzeit-Takt DS1307 geleitet haben, ist der Wert, den der UNIXTIME () auf 300 zurückgibt.

Hinterlassen Sie Ihre Kommentare, Fragen und teilen Sie Ihre persönliche Erfahrung unten. Neue Ideen und Projekte werden oft in der Diskussion geboren!

In vielen Projekten muss Arduino die Zeit des Beginns bestimmter Ereignisse verfolgen und reparieren. Das Echtzeituhrmodul, das mit zusätzlichen Batterien ausgestattet ist, können Sie das aktuelle Datum speichern, hängt nicht von der Verfügbarkeit der Leistung des Geräts selbst ab. In diesem Artikel sprechen wir über die häufigsten RTC DS1307, DS1302, DS3231-Module, die mit der Arduino-Board verwendet werden können.

Das Uhrenmodul ist eine kleine Gebühr, die in der Regel eines der DS1307-Chips, DS1302, DS3231.Come, auf der Tafel, nahezu den Betriebsmechanismus des Power-Batterie finden. Solche Boards werden häufig verwendet, um Zeit, Datum, Wochentag und andere chronometrische Parameter zu berücksichtigen. Module arbeiten von autonomen Power - Batterien, Batterien und zählen weiterhin, auch wenn die Macht auf dem Ardioino ausgeschaltet wurde. Die häufigsten Uhrmodelle sind DS1302, DS1307, DS3231. Sie basieren auf dem RTC-Modul, das mit dem Arduino verbunden ist (Echtzeituhr).

Die Uhr zählt in Einheiten, die an einer gewöhnlichen Person angenehm sind - Minuten, Stunden, Wochentage und andere, im Gegensatz zu gewöhnlichen Zähler und Taktgeneratoren, die "Ticks" lesen. Arduino ist verfügbar spezialfunktion Millis (), das auch verschiedene Zeitintervalle lesen kann. Der Hauptnachteil dieser Funktion ist jedoch, wenn der Timer eingeschaltet ist, auf Null fallen. Damit können Sie nur die Zeit zählen, das Datum oder das Tag der Woche einstellen, ist unmöglich. Zur Lösung dieses Problems und Echtzeit-Taktmodule werden verwendet.

Die elektronische Schaltung umfasst einen Chip, Stromversorgung, einen Quarzresonator und Widerstände. Der Quarzresonator arbeitet mit einer Frequenz von 32768 Hz, was für ein normales Binärmesser bequem ist. Das DS3231-Schema enthält eingebaute Quarz- und Thermostabilitionen, mit denen Sie hohe Genauigkeitswerte erhalten können.

Vergleich der beliebten RTC-DS1302-Module, DS1307, DS3231

In dieser Tabelle haben wir die Liste der beliebtesten Module und deren Hauptmerkmale geführt.

Name Frequenz Richtigkeit Unterstützte Protokolle
DS1307. 1 Hz, 4.096 kHz, 8.192 kHz, 32,768 kHz Hängt vom Quarz ab - normalerweise erreicht der Wert 2,5 Sekunden pro Tag, es ist unmöglich, eine Genauigkeit von über 1 Sekunde pro Tag zu erreichen. Auch die Genauigkeit hängt von der Temperatur ab. I2c.
DS1302. 32.768 kHz. 5 Sekunden pro Tag I2c, spi.
Ds3231. Zwei Ausgänge - der erste bis 32,768 kHz, der zweite - programmierbar von 1 Hz bis 8,192 kHz ± 2 ppm bei Temperaturen von 0С bis 40 ° C.

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

Messgenauigkeit der Temperatur - ± 3c

I2c.

Modul DS1307.

DS1307 ist ein Modul, mit dem die Zeit verwendet wird. Es ist auf der Grundlage des DS1307ZN-Chips zusammengebaut, das Essen stammt von einer Lithiumbatterie für die Implementierung autonome Arbeit. Für einen langen Zeitraum. Der Akku an der Platine ist angehängt rückseite. Das Modul hat einen AT24C32-Chip - dies ist ein nichtflüchtiger EEPROM-Speicher um 32 kb. Beide Chips sind vom I2C-Bus miteinander verbunden. DS1307 hat einen geringen Stromverbrauch und enthält Stunden und Kalender auf 2100 Jahre.

Das Modul hat die folgenden Parameter:

  • Lebensmittel - 5V;
  • Betriebstemperaturbereich von -40c bis 85c;
  • 56 Speicherbyte;
  • Lithium-Batterie LIR2032;
  • Implementiert 12- und 24-Stunden-Modi;
  • I2C-Schnittstellenunterstützung.

Das Modul ist gerechtfertigt, um in Fällen zu verwenden, in denen die Daten recht selten gelesen werden, mit einem Intervall pro Woche oder mehr. Dies spart Ernährung, da bei ununterbrochener Verwendung mehr Spannungen verbringen muss, auch wenn es eine Batterie gibt. Mit dem Vorhandensein von Speicher können Sie sich registrieren verschiedene Parameter (zum Beispiel Temperaturmessung) und lesen Sie die erhaltenen Informationen aus dem Modul.

Die Interaktion mit anderen Geräten und Austausch mit ihnen erfolgt mit der I2C-Schnittstelle von SCL- und SDA-Kontakten. Das Schema hat Widerstände, mit denen Sie den erforderlichen Signalpegel bereitstellen können. Auch auf der Platine befindet sich ein besonderer Ort, um den Temperatursensor DS18B20 zu befestigen. Kontakte sind in 2 Gruppen verteilt, Schritt 2,54 mm. Die erste Kontaktgruppe ist die folgenden Schlussfolgerungen:

  • DS - Ausgang für den Sensor DS18B20;
  • Scl - tactline;
  • SDA - Datenleitung;
  • Vcc - 5v;

In der zweiten Kontaktgruppe sind:

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

Um eine Verbindung zum Arduino-Board herzustellen, ist die Platine selbst erforderlich (in diesem Fall wird Arduino UNO in Betracht gezogen) das Echtzeituhrmodul RTC DS1307, Drähte und USB-Kabel.

Um den Controller an Arduino anzuschließen, werden 4 Pins verwendet - VCC, Earth, SCL, SDA.

Um mit dem Taktmodul zu arbeiten, müssen Sie die DS1307RTC, TIMELIB- und Drahtbibliotheken installieren. Sie können für die Arbeit und RTClib verwenden.

RTC-Modul überprüfen

Beim Starten des ersten Codes gelesen das Programm die Daten einmal pro Sekunde aus dem Modul. Sie können zunächst sehen, wie sich das Programm verhält, wenn Sie einen Akku vom Modul erhalten und eine andere ersetzen, während das Arduino-Board nicht an den Computer angeschlossen ist. Sie müssen ein paar Sekunden warten und den Akku ziehen, dadurch wird die Uhr neu gestartet. Dann müssen Sie ein Beispiel in den Beispielen → RTClib → DS1307-Menü auswählen. Es ist wichtig, die Übertragungsrate auf 57600 BPS zu korrigieren.

Beim Öffnen des seriellen Monitorfensters sollten folgende Zeilen angezeigt werden:

Zeigt die Zeit 0: 0: 0 an. Dies ist darauf zurückzuführen, dass die Stunde in der Uhr verschwindet, und der Countdown hört auf. Aus diesem Grund können Sie den Akku während des Modulvorgangs nicht ziehen.

Um die Zeit auf dem Modul zu konfigurieren, müssen Sie die Zeile in der Skizze finden

Rtc.adjust (datetime (__ datum__, __ime__));

Diese Zeile enthält Daten von einem Computer, der die Firmware des Echtzeituhrmoduls verwendet. Zum richtige Arbeit Sie müssen zunächst die Richtigkeit des Datums und der Uhrzeit auf dem Computer überprüfen und nur dann das Blinken des Uhrmoduls anfangen. Nach dem Einstellen des Monitors werden folgende Daten angezeigt:

Das Setup wird korrekt ausgeführt und zusätzlich rekonfigurieren Sie die Echtzeituhr nicht.

Lesezeit. Sobald das Modul konfiguriert ist, können Sie Anfragen für die Zeit senden. Dies verwendet die jetzt -Funktion (), die das Datetime-Objekt zurückgibt, das Informationen über Uhrzeit und Datum enthält. Es gibt eine Reihe von Bibliotheken, die zum Lesen der Zeit verwendet werden. Zum Beispiel erhalten RTC.YEAR () und RTC.HOUR () - sie erhalten separat Informationen über das Jahr und die Stunde. Wenn Sie mit ihnen arbeiten, kann es ein Problem geben: Zum Beispiel wird eine Anforderung zur Zeitausgabe um 1:19:59 getroffen. Bevor Sie Zeit 1:20:00 zeigen, wird die Uhr Zeit 1:19:00 mitbringen, dh tatsächlich wird eine Minute verloren gehen. Daher sind diese Bibliotheken ratsam, in Fällen zu verwenden, in denen das Lesen selten auftritt - einmal ein paar Tage. Es gibt andere Funktionen, um die Uhrzeit anzurufen, aber wenn Sie Fehler reduzieren oder vermeiden müssen, ist es besser, jetzt zu benutzen () und ziehen Sie sie bereits die erforderlichen Messwerte aus.

Beispiel eines Projekts mit der I2C-Uhr- und Anzeigemodul

Das Projekt ist die übliche Uhr, die genaue Uhrzeit wird auf dem Indikator angezeigt, und der Dickdarm zwischen den Zahlen blinkt einmal in einer Sekunde in dem Intervall. Um das Projekt umzusetzen, ist die Arduino-UNO-Karte erforderlich, ein digitales Indikator, ein Echtzeituhr (in diesem Fall das oben beschriebene DS1307-Modul), Abschirmung für den Anschluss (in diesem Fall wird der Troyka-Schild verwendet), der Batterie für Uhren und Drähte wird verwendet.

Das Projekt verwendet einen einfachen vierstelligen Indikator auf dem TM1637-Chip. Das Gerät verfügt über eine Zwei-Draht-Schnittstelle und bietet 8 Ebenen der Monitorhelligkeit. Wird nur verwendet, um die Zeit im Taktformat anzuzeigen: Minuten. Der Indikator ist einfach zu bedienen und verbindet sich einfach. Es ist von Vorteil, es für Projekte anzuwenden, wenn keine Gedenk- oder Stundenüberprüfung erforderlich ist. Für mehr mehr. volle Information Über das Zeitpunkt und das Datum werden Flüssigkristallmonitore verwendet.

Das Taktmodul ist an SCL / SDA-Kontakte angeschlossen, die sich auf den I2C-Bus beziehen. Sie müssen auch das Land und das Ernährung verbinden. Arduino verbindet das gleiche wie oben beschrieben: SDA - A4, SCL - A5, Erde vom Modul mit Arduino, VCC -5V.

Der Indikator ist einfach miteinander verbunden - die Schlussfolgerungen von IT CLK und DIO sind mit einem beliebigen digitalen Pin auf der Platine verbunden.

Skizzieren. Um den Code zu schreiben, verwenden Sie mit der Setup-Funktion, mit der Sie die Uhr und die Anzeige initialisieren können, um die Kompilierungszeit aufzunehmen. Die Zeitausgabe an den Bildschirm wird mit der Schleife ausgeführt.

#Einschließen. #include "TM1637.H" #include "DS1307.H" // Sie müssen alle erforderlichen Bibliotheken mit der Uhr und der Anzeige aktivieren. char compiletime \u003d __ime__; // Kompilierungszeit. #Define display_clk_pin 10 #define display_dio_pin 11 // Nummern von Arduino-Ausgängen, auf die der Bildschirm verbindet; void setup () (Offeny.Set (); display.init (); // Anschließen und Konfigurieren des Bildschirms. uhr.begin (); // Öffnungszeiten aktivieren. Byte-Stunde \u003d Ganzime, 0); Byte Minute \u003d Ganztime (Compiletime , 2); Byte second \u003d gewellt (compiletime, 4); // bekommen Zeit. Uhr.fillbyhms (Stunde, Minute, Sekunde); // Vorbereitung auf Aufnahme im Zeitmodul. Uhr.settime (); // Rekord erhalten Informationen in. interner Speicher, Startzeit anfangen. ) Void Loop () (Int8_T Timedisp; // Anzeige auf jedem der vier Ziffern. Uhr.getime (); // Anforderung zur Zeit. Timedisp \u003d uhr.Hour / 10; timedisp \u003d uhr.chur% 10; timedisp \u003d uhr .mine / 10; timedisp \u003d uhr.minute% 10; // Verschiedene Vorgänge für Dutzende, Stundeneinheiten, Minuten usw. Display.Display (Timedisp); // Ausgabe an das Display Display.Point (uhr.second % 2? Point_on: point_off); // Schalten Sie den Dickdarm nach einer Sekunde ein und aus.) CHAR GETINT (RETURN INT (String - "0") * 10 + INT (String) - "0"; // Aktionen für a Korrigieren Sie die Zeitaufzeichnung in einer zweistelligen Ganzzahl. Andernfalls werden einfach ein Paar Zeichen auf dem Bildschirm angezeigt.)

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

Das Programm kann leicht aufgerüstet werden. Wenn die Stromversorgung oben ausgeschaltet ist, führt die schriftliche Skizze dazu, dass nach dem Einschalten des Displays die Zeit, die er zum Kompilieren eingestellt wurde. In der Setup-Funktion wird jedes Mal, wenn die Zeit berechnet wird, die vor dem Beginn der Zusammenstellung von 00:00:00 übernommen wird. Dieser Hash wird mit dem, was in EEPROM gespeichert ist, verglichen, der beim Ausschalten des Stroms gespeichert ist.

Um die Zeit in den nichtflüchtigen Speicher zu schreiben und zu lesen, müssen Sie die Funktionen des EEPROMWriteTint und EEPROMREADINE hinzufügen. Sie sind erforderlich, um den Zufall / Hash-Fehlzug mit HASHE in EEPROM zu überprüfen.

Das Projekt kann verbessert werden. Wenn Sie einen Flüssigkristallmonitor verwenden, können Sie ein Projekt erstellen, das Datum und Uhrzeit auf dem Bildschirm anzeigt. Das Anschließen aller Elemente ist in der Abbildung dargestellt.

Infolgedessen müssen Sie im Code eine neue Bibliothek angeben (für Flüssigkristall-Bildschirme ist es lycrecrystal) und fügen Sie der Loop () -Funktion Zeilen hinzu, um das Datum zu erhalten.

Der Arbeitsalgorithmus ist wie folgt:

  • Alle Komponenten anschließen;
  • Check-on Der Monitor-Bildschirm sollte sich jedes zweite Mal und das Datum ändern. Wenn auf dem Bildschirm angezeigt wird falsche ZeitSie müssen der Skizze einen RTC.Write (TMELENT_T TM) hinzufügen. Probleme mit falsch angegebenen Zeiten beziehen sich auf die Tatsache, dass das Uhrmodul das Datum und die Uhrzeit um 00:00 Uhr 01/01/2000 zurücksetzt, wenn er ausgeschaltet ist.
  • Mit der Schreibfunktion können Sie ein Datum und Ihre Uhrzeit vom Computer erhalten, wonach die richtigen Parameter auf dem Bildschirm angezeigt werden.

Fazit

Taktmodule werden in vielen Projekten eingesetzt. Sie sind für Datenprotokollierungssysteme erforderlich, wenn Sie Timer und Steuergeräte erstellen, die auf einem bestimmten Zeitplan arbeiten, in haushaltsgeräte. Mit Hilfe von weit verbreiteten und günstigen Modulen können Sie Projekte wie Wecker oder Datenrekorder von Sensoren erstellen, Informationen auf einer SD-Karte aufnehmen oder die Zeit auf dem Bildschirm anzeigen. In diesem Artikel haben wir typische Szenarien der Nutzung und Optionen zum Anschluss der beliebtesten Modelle angesehen.

Eines der ersten Projekte, die Novizen sind, basieren auf der Arduino-Gebühr, sind einfacher Stunden zum führenden Countdown. Grundsätzlich basieren diese Stunden auf dem Arduino-RTC-Modul (Echtzeituhr oder Echtzeituhr). Heute auf dem elektronischen Bauteilmarkt verfügbar verschiedene Modelle RTC, unterschiedliche Genauigkeit und Preis. Unter den gemeinsamen Modellen können DS1302, DS1307, DS3231 genannt werden.



Aber die Uhr auf Arduino kann ohne erfolgen verwenden von RTC.Insbesondere wenn es unmöglich ist, solche Module zu erhalten. Natürlich ist die Genauigkeit in diesem Fall klein, so dass das Projekt als Training behandelt werden sollte.


Das Prinzip des Betriebs solcher Stunden ist ziemlich einfach. Jedes Mal, wenn Sie diese Uhr auf dem Arduino einschalten, müssen Sie den aktuellen Zeitwert für sie sowie eine analoge Uhr einstellen. Solche Stunden sind in ihrem täglichen Leben sicherlich nicht besser mit langer Aktivität ihrer Aktivität ohne Neustart und weitere Konfiguration, da der Abstand mit der aktuellen Zeit im Prozess des Langzeitbetriebs erheblich sein kann.


Diese Uhren können auf einem herkömmlichen Charge gesammelt werden, da hier keine vielen Komponenten vorhanden sind. Der Hauptbesitzer hier wird hier das Arduino-Uno-Board sein. Sie können die LCD-Anzeige von 16x2 an die Anzeigezeit annehmen. Um die Zeiteinstellungen zu ändern, verbinden Sie zwei Tasten (stundenlang und Minuten). Knöpfe sind durch Widerstände 10 com mit mutigen verbunden. Um die Anzeigehelligkeit zu ändern, ist das Potentiometer von 10 com erforderlich. Die Kreislauf des Anschließens aller dieser Komponenten an die Arduino-UNO-Platine ist unten dargestellt.



Jetzt sollten Sie Arduino programmieren. Ein einfacher Code (Skizze), mit dem Sie die Zeit auf dem LCD-Bildschirm des LCD-Bildschirms ausgeben können, ist unten gezeigt.


#Einschließen. Liquidcrystal LCD (12,11,5, 4,2,2); int h \u003d 12; int m; int s; int Flag; Int-Zeit; Const int hs \u003d 8; Const int ms \u003d 9; Int staat1; int staat2; void setup (lcd.begin (16,2);) void loop () (lcd.setcursor (0,0); s \u003d s + 1; lcd.print ("time:"); lcd.print (h ); lcd.print (":"); lcd.print (m); lcd.print (":"); lcd.print (s); if (Flag<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12) lcd.print ("PM"); if (flag \u003d\u003d 24) Flag \u003d 0; Verzögerung (1000); lcd.clear (); if (s \u003d\u003d 60) (s \u003d 0; m \u003d m + 1;), wenn (m \u003d\u003d 60) (m \u003d 0; h \u003d h + 1; flag \u003d flag + 1;) if (h \u003d\u003d 13 ) (H \u003d 1;) LCD.Setcursor (0,1); lcd.print ("einen schönen Tag haben"); // -------- Time // Einstellung ------- // staat1 \u003d digitalRead (HS); if (staat1 \u003d\u003d 1) (H \u003d H + 1; Flag \u003d Flag + 1; if (Flag<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12) lcd.print ("PM"); if (flag \u003d\u003d 24) Flag \u003d 0; if (h \u003d\u003d 13) h \u003d 1; ) Staat2 \u003d digitalRead (ms); if (staat2 \u003d\u003d 1) (s \u003d 0; m \u003d m + 1;))

Vielen Dank für Ihr Interesse an dem Projekt für Site-Information.
Sie möchten interessante und nützliche Materialien, die öfter herauskommen, und es gab weniger Werbung,
& Nbsp & nbsp & nbsps musikalisch unterstützen unser Projekt, indem er jeden Betrag für ihre Entwicklung geopfert hat.
Fortsetzung des Themas:
Netzwerk

EINLEITUNG Es ist passiert, dass, als die Zeit des nächsten Upgrades aufkam, fast alle Komponenten neuer. Und die alte, freundliche, gute ...