Inhaltsverzeichnis:
- Schritt 1: Erforderliche Komponenten
- Schritt 2: Anschluss der Arduino Clock
- Schritt 3: Code für Arduino Clock mit RTC
Video: Echtzeituhr mit Arduino - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
In diesem Projekt werden wir mit Hilfe des Arduino- und RTC-Moduls eine Uhr erstellen. Da wir wissen, dass der Arduino die aktuelle Zeit nicht anzeigen kann, verwenden wir das RTC-Modul, um die richtige Zeit auf dem LCD anzuzeigen. Lesen Sie alle Schritte sorgfältig durch, es wird Ihnen sehr helfen, das Uhrwerk zu machen.
Der DS3231 Arduino-Code ist wie der DS1307-Code und funktioniert mit beiden RTC-Chips.
Der darunterliegende Arduino-Code verwendet keine Bibliothek für den DS3231 RTC, die Wire-Bibliothek dient der Korrespondenz zwischen dem Arduino und dem DS3231 unter Verwendung der I2C-Konvention.
Ja! Viele Elektronikingenieure verlassen sich bei ihren zeitbasierten Projekten darauf, aber RTC ist nicht absolut zuverlässig. Es ist batteriebetrieben und muss bald oder später ersetzt werden. Bei IoT-Projekten belegt es wertvolle SPI-Pins (Serial Peripheral Interface) und wird mit verhedderten Drähten unordentlich. Lösung…. Hier kommt unser Held NTP (Network Time Protocol). NTP ist so genau, da es die Zeit aus dem Internet bezieht. Wir werden dieses Protokoll im Client-Server-Modus betreiben. der Vorgang ist so einfach, dass unser Nodemcu als Client fungiert und per UDP ein NTP-Paket vom Server anfordert. Im Gegenzug sendet der Server ein Paket an den Client, der die Daten analysiert. NTP ist das universelle Zeitsynchronisationsprotokoll. Lassen Sie uns jetzt unseren Laborarbeitsplatz beleuchten
Schritt 1: Erforderliche Komponenten
- Arduino-Board
- DS3231 RTC-Karte
- 16x2 LCD-Bildschirm
- 2 x Taster
- 10K Ohm variabler Widerstand (oder Potentiometer)
- 330-Ohm-Widerstand
- 3V Knopfzellenbatterie
- Steckbrett
- Überbrückungsdrähte
RTC-Modul DS3231
Zeit ist ein wesentlicher Sinn in dieser schnelllebigen Welt der Menschen. Im Echtzeit-Projekt
Wir verwenden RTC (A. K. A Echtzeituhr)
RTC Real-Time-Clock (RTC) ist ein integrierter Schaltkreis (IC), der die aktuelle Zeit verfolgt. RTC kümmert sich um die Zeit im Real-Modus. Die RTC ist normalerweise in Computer-Motherboards und eingebetteten Systemen zu finden, die einen rechtzeitigen Zugriff erfordern.
Schritt 2: Anschluss der Arduino Clock
- Verbinden Sie den SCL-Pin mit dem RTC-Modul mit dem Arduino A5
- Verbinden Sie den SDA-Pin mit dem RTC-Modul mit dem Arduino A4
- Verbinden Sie VCC mit 5V und GND MIT GND
- Schließen Sie einen Taster an den Pin 8. an
- Verbinden Sie einen weiteren Taster mit dem Pin 9
- Verbinden Sie RS des LCD mit Pin 2 von Arduino
- Verbinden Sie E von LCD mit Pin 3 von Arduino
- Verbinden Sie D7 von LCD mit Pin 7 von Arduino
- Verbinden Sie D6 von LCD mit Pin 6 von Arduino
- Verbinden Sie D5 von LCD mit Pin 5 von Arduino
- Verbinden Sie D4 von LCD mit Pin 4 von Arduino
- Verbinden Sie VSS & K mit GND
- Verbinden Sie VDD & A mit dem 5V
- Verbinden Sie vo mit dem Potentiometer-Ausgangspin
Schritt 3: Code für Arduino Clock mit RTC
Der DS3231 funktioniert nur mit BCD-Format und um den BCD in Dezimalzahlen umzuwandeln und umgekehrt habe ich die 2 Zeilen unten verwendet (Beispiel für Minute):// Convert BCD in Dezimalminute = (Minute >> 4) * 10 + (Minute & 0x0F);
// Dezimal in BCDminute umwandeln = ((Minute / 10) << 4) + (Minute % 10); void DS3231_display(): Zeigt Zeit und Kalender an, bevor Zeit und Kalenderdaten angezeigt werden, werden vom BCD- in das Dezimalformat konvertiert.void blink_parameter():
// Echtzeituhr und Kalender mit Set-Tasten mit DS3231 und Arduino // LCD-Bibliothekscode einschließen #include // Wire-Bibliothekscode einschließen (erforderlich für I2C-Protokollgeräte) #include // LCD-Modulanschlüsse (RS, E, D4, D5.), D6, D7) Flüssigkristall-LCD(2, 3, 4, 5, 6, 7); Void setup () { PinMode (8, INPUT_PULLUP); // button1 ist mit Pin 8 verbunden pinMode (9, INPUT_PULLUP); // button2 ist an Pin 9 angeschlossen // die Anzahl der Spalten und Zeilen des LCDs einstellen lcd.begin (16, 2); Wire.begin(); // i2c-Bus beitreten } char Time = "TIME::: "; char Kalender = "DATUM: / /20"; Byte i, Sekunde, Minute, Stunde, Datum, Monat, Jahr; void DS3231_display () {// BCD in Dezimalsekunde umwandeln = (Sekunde >> 4) * 10 + (Sekunde & 0x0F); Minute = (Minute >> 4) * 10 + (Minute & 0x0F); Stunde = (Stunde >> 4) * 10 + (Stunde & 0x0F); Datum = (Datum >> 4) * 10 + (Datum & 0x0F); Monat = (Monat >> 4) * 10 + (Monat & 0x0F); Jahr = (Jahr >> 4) * 10 + (Jahr & 0x0F); // Wandlungszeit beenden[12] = Sekunde % 10 + 48; Zeit[11] = Sekunde / 10 + 48; Zeit[9] = Minute % 10 + 48; Zeit[8] = Minute / 10 + 48; Zeit[6] = Stunde % 10 + 48; Zeit[5] = Stunde / 10 + 48; Kalender[14] = Jahr % 10 + 48; Kalender[13] = Jahr / 10 + 48; Kalender[9] = Monat % 10 + 48; Kalender[8] = Monat / 10 + 48; Kalender[6] = Datum % 10 + 48; Kalender[5] = Datum / 10 + 48; lcd.setCursor(0, 0); lcd.print (Zeit); // Anzeigezeit lcd.setCursor (0, 1); lcd.print (Kalender); // Kalender anzeigen aufrechtzuerhalten. Void blink_parameter () { Byte j = 0; while(j 23) // Wenn Stunden > 23 ==> Stunden = 0 Parameter = 0; if(i == 1 && Parameter > 59) // Wenn Minuten > 59 ==> Minuten = 0 Parameter = 0; if(i == 2 && Parameter > 31) // Wenn Datum > 31 ==> Datum = 1 Parameter = 1; if(i == 3 && Parameter > 12) // Wenn Monat > 12 ==> Monat = 1 Parameter = 1; if(i == 4 && Parameter > 99) // Wenn Jahr > 99 ==> Jahr = 0 Parameter = 0; sprintf(Text, "%02u", Parameter); lcd.setCursor(x, y); lcd.print (Text); Verzögerung (200); // 200ms warten } lcd.setCursor(x, y); lcd.print(" "); // Zwei Leerzeichen anzeigen blink_parameter(); sprintf(Text, "%02u", Parameter); lcd.setCursor(x, y); lcd.print (Text); blink_parameter(); if(!digitalRead(8)){// Wenn Taste (Pin #8) gedrückt wird i++; // 'i' für den nächsten Parameter erhöhen Rückgabeparameter; // Parameterwert zurückgeben und beenden}}} Void loop () { if (! digitalRead (8)) { // Wenn die Taste (Pin #8) gedrückt wird i = 0; Stunde = bearbeiten (5, 0, Stunde); Minute = Bearbeiten (8, 0, Minute); Datum = Bearbeiten (5, 1, Datum); Monat = Bearbeiten (8, 1, Monat); Jahr = Bearbeiten (13, 1, Jahr); // Dezimal in BCD-Minute umwandeln = ((Minute / 10) << 4) + (Minute % 10); Stunde = ((Stunde / 10) << 4) + (Stunde % 10); Datum = ((Datum / 10) << 4) + (Datum % 10); Monat = ((Monat / 10) << 4) + (Monat % 10); Jahr = ((Jahr / 10) << 4) + (Jahr % 10); // Konvertierung beenden // Daten in DS3231 RTC schreiben Wire.beginTransmission (0x68); // I2C-Protokoll mit DS3231-Adresse starten Wire.write(0); // Registeradresse senden Wire.write (0); // Sesonds zurücksetzen und Oszillator starten Wire.write (Minute); // Minute schreiben Wire.write (Stunde); // Stunde schreiben Wire.write(1); // Tag schreiben (nicht verwendet) Wire.write(date); // Datum schreiben Wire.write(Monat); // Monat schreiben Wire.write(Jahr); // Jahr schreiben Wire.endTransmission(); // Stoppen Sie die Übertragung und geben Sie die I2C-Busverzögerung frei (200); // 200ms warten } Wire.beginTransmission(0x68); // I2C-Protokoll mit DS3231-Adresse starten Wire.write(0); // Registeradresse senden Wire.endTransmission(false); // I2C-Neustart Wire.requestFrom (0x68, 7); // 7 Byte von DS3231 anfordern und I2C-Bus am Ende des Lesens freigeben Sekunde = Wire.read (); // Sekunden aus dem Register lesen 0 Minute = Wire.read (); // Minuten aus Register 1 Stunde lesen = Wire.read (); // Stunde aus Register 2 lesen Wire.read (); // Tag aus Register 3 lesen (nicht verwendet) date = Wire.read(); // Datum aus Register 4 Monat lesen = Wire.read (); // Monat aus Register lesen 5 year = Wire.read(); // Jahr aus Register 6 lesen DS3231_display(); // Anzeigezeit und Kalenderverzögerung (50); // Warte 50ms }
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: 7 Schritte (mit Bildern)
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: Hallo, und willkommen zu meinem ersten instructable! :) In diesem instructables möchte ich eine fantastische Bibliothek für die Schnittstelle der Tastatur mit Arduino teilen - 'Password Library' einschließlich 'Keypad Library'. Diese Bibliothek enthält die besten Funktionen, die wir wi
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E