Obsah:

Hodiny v reálnom čase s Arduino: 3 kroky
Hodiny v reálnom čase s Arduino: 3 kroky

Video: Hodiny v reálnom čase s Arduino: 3 kroky

Video: Hodiny v reálnom čase s Arduino: 3 kroky
Video: #10 Как запрограммировать ПЛК Outseal Arduino — сравнение 2024, November
Anonim
Hodiny v reálnom čase s Arduino
Hodiny v reálnom čase s Arduino

V tomto projekte vyrobíme hodiny pomocou modulu Arduino a RTC. Ako vieme, Arduino nemôže zobrazovať skutočný čas, takže na zobrazenie správneho času na LCD displeji použijeme modul RTC. Prečítajte si pozorne všetky kroky, ktoré vám pri výrobe hodinového strojčeka veľmi pomôžu.

Kód DS3231 Arduino je ako kód DS1307 a funguje s oboma čipmi RTC.

Dole uvedený kód Arduino nevyužíva žiadnu knižnicu pre DS3231 RTC, knižnica Wire je pre korešpondenciu medzi Arduino a DS3231 pomocou konvencie I2C.

Áno! Mnoho elektrotechnických inžinierov na nich závisí pri svojich projektoch založených na čase, ale RTC nie je úplne spoľahlivý. Je napájaný batériami a je potrebné ho čoskoro alebo neskôr vymeniť. Pokiaľ ide o projekty internetu vecí, zaberá cenné kolíky SPI (sériové periférne rozhranie) a zamotáva sa do drôtov, ktoré sú zamotané okolo. Riešenie … Tu prichádza náš hrdina NTP (Network Time Protocol). NTP je taký presný, pretože získava čas z internetu. Tento protokol budeme prevádzkovať v režime klient-server. proces je taký jednoduchý, že náš Nodemcu funguje ako klient a požaduje od servera paket NTP pomocou protokolu UDP. Server na oplátku odošle klientovi paket, ktorý údaje analyzuje. NTP je univerzálny protokol synchronizácie času. Teraz rozsvietime pracovnú stanicu laboratória

Krok 1: Požadované komponenty

  • Doska Arduino
  • Doska RTC DS3231
  • LCD obrazovka 16x2
  • 2 x tlačidlo
  • 10K ohm variabilný odpor (alebo potenciometer)
  • Odpor 330 ohmov
  • 3V gombíková batéria
  • Breadboard
  • Prepojovacie vodiče

Modul RTC DS3231

Čas je v tomto uponáhľanom svete ľudských bytostí nevyhnutným zmyslom. V projekte v reálnom čase

Používame RTC (A. K. A hodiny v reálnom čase)

Hodiny RTC v reálnom čase (RTC) sú integrované obvody (IC), ktoré zaznamenávajú aktuálny čas. RTC sa stará o čas v reálnom režime. RTC sa zvyčajne nachádza v počítačových základných doskách a vstavaných systémoch, ktoré vyžadujú včasný prístup.

Krok 2: Pripojenie hodín Arduino

Pripojenie hodín Arduino
Pripojenie hodín Arduino
  • Pripojte pin SCL k modulu RTC k Arduino A5
  • Pripojte pin SDA k modulu RTC k Arduino A4
  • Pripojte VCC TO 5v a GND TO GND
  • Pripojte tlačidlo ku kolíku 8
  • Na kolík 9 pripojte ďalšie tlačidlo
  • Pripojte RS LCD k pinu 2 Arduino
  • Pripojte E LCD k pinu 3 Arduino
  • Pripojte D7 LCD k pinu 7 Arduino
  • Pripojte D6 LCD k pinu 6 Arduino
  • Pripojte D5 LCD k pinu 5 Arduino
  • Pripojte D4 LCD k pinu 4 Arduino
  • Pripojte VSS & K k GND
  • Pripojte VDD & A k 5v
  • Pripojte vo k výstupnému kolíku potenciometra

Krok 3: Kód pre hodiny Arduino s RTC

Kód pre hodiny Arduino s RTC
Kód pre hodiny Arduino s RTC

DS3231 pracuje iba s formátom BCD a na konverziu BCD na desatinné a naopak som použil nasledujúce 2 riadky (príklad pre minúty): // Previesť BCD na desatinnú minútu = (minúta >> 4) * 10 + (minúta a 0x0F);

// Previesť desatinné miesto na BCDminute = ((minúta / 10) << 4) + (minúta % 10); void DS3231_display (): zobrazuje čas a kalendár, než sa údaje o čase a kalendári prevedú z BCD do desatinného formátu. Vyhnite sa parametru blink_parameter ():

// Hodiny a kalendár v reálnom čase s nastavenými tlačidlami pomocou DS3231 a Arduino // zahrnúť kód knižnice LCD #include // zahrnúť kód knižnice drôtu (potrebné pre zariadenia s protokolom I2C) #include // pripojenia modulu LCD (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); neplatné nastavenie () {pinMode (8, INPUT_PULLUP); // button1 je pripojený k pinu 8 pinMode (9, INPUT_PULLUP); // button2 je pripojený k pinu 9 // nastavenie počtu stĺpcov a riadkov LCD lcd.begin (16, 2); Wire.begin (); // Pripojte sa k autobusu i2c} char Čas = "ČAS:::"; char Calendar = "DÁTUM: / / 20"; bajt i, sekunda, minúta, hodina, dátum, mesiac, rok; neplatné DS3231_display () {// Previesť BCD na desatinné sekundy = (druhé >> 4) * 10 + (druhé & 0x0F); minúta = (minúta >> 4) * 10 + (minúta & 0x0F); hodina = (hodina >> 4) * 10 + (hodina & 0x0F); dátum = (dátum >> 4) * 10 + (dátum & 0x0F); mesiac = (mesiac >> 4) * 10 + (mesiac & 0x0F); rok = (rok >> 4) * 10 + (rok & 0x0F); // Čas ukončenia konverzie [12] = sekunda % 10 + 48; Čas [11] = sekunda / 10 + 48; Čas [9] = minúta % 10 + 48; Čas [8] = minúta / 10 + 48; Čas [6] = hodina % 10 + 48; Čas [5] = hodina / 10 + 48; Kalendár [14] = rok % 10 + 48; Kalendár [13] = rok / 10 + 48; Kalendár [9] = mesiac % 10 + 48; Kalendár [8] = mesiac / 10 + 48; Kalendár [6] = dátum % 10 + 48; Kalendár [5] = dátum / 10 + 48; lcd.setCursor (0, 0); lcd.print (čas); // Čas zobrazenia lcd.setCursor (0, 1); lcd.print (kalendár); // Zobraziť kalendár} void blink_parameter () {byte j = 0; while (j 23) // If hours> 23 ==> hours = 0 parameter = 0; if (i == 1 && parameter> 59) // If minutes> 59 ==> minutes = 0 parameter = 0; if (i == 2 && parameter> 31) // If date> 31 ==> date = 1 parameter = 1; if (i == 3 && parameter> 12) // If month> 12 ==> month = 1 parameter = 1; if (i == 4 && parameter> 99) // If year> 99 ==> year = 0 parameter = 0; sprintf (text, "%02u", parameter); lcd.setCursor (x, y); lcd.print (text); oneskorenie (200); // Počkajte 200 ms} lcd.setCursor (x, y); lcd.print (""); // Zobraz dve medzery blink_parameter (); sprintf (text, "%02u", parameter); lcd.setCursor (x, y); lcd.print (text); blink_parameter (); if (! digitalRead (8)) {// Ak je stlačené tlačidlo (pin #8) i ++; // Zvýšenie 'i' pre nasledujúci parameter návratového parametra; // Vrátenie hodnoty parametra a ukončenie}}} void loop () {if (! DigitalRead (8)) {// Ak je stlačené tlačidlo (pin #8) i = 0; hodina = úprava (5, 0, hodina); minúta = úprava (8, 0, minúta); dátum = úprava (5, 1, dátum); mesiac = upraviť (8, 1, mesiac); rok = upraviť (13, 1, rok); // Prevod desatinnej čísla na BCD minútu = ((minúta / 10) << 4) + (minúta % 10); hodina = ((hodina / 10) << 4) + (hodina % 10); dátum = ((dátum / 10) << 4) + (dátum % 10); mesiac = ((mesiac / 10) << 4) + (mesiac % 10); rok = ((rok / 10) << 4) + (rok % 10); // Ukončenie konverzie // Zapisovanie údajov do DS3231 RTC Wire.beginTransmission (0x68); // Spustenie protokolu I2C s adresou DS3231 Wire.write (0); // Odoslať registračnú adresu Wire.write (0); // Resetujte sesondy a spustite oscilátor Wire.write (minúta); // zápis minúty Wire.write (hodina); // Napíšte hodinu Wire.write (1); // Deň zápisu (nepoužíva sa) Wire.write (dátum); // Napíšte dátum Wire.write (mesiac); // Napíšte mesiac Wire.write (rok); // Napíšte rok Wire.endTransmission (); // Zastavte prenos a uvoľnite oneskorenie zbernice I2C (200); // Počkajte 200 ms} Wire.beginTransmission (0x68); // Spustenie protokolu I2C s adresou DS3231 Wire.write (0); // Odoslať registračnú adresu Wire.endTransmission (false); // I2C reštart Wire.requestFrom (0x68, 7); // Požiadajte 7 bajtov z DS3231 a uvoľnite zbernicu I2C na konci čítania sekundy = Wire.read (); // Čítanie sekúnd z registra 0 minút = Wire.read (); // Čítanie minút z registra 1 hodinu = Wire.read (); // Hodina čítania z registra 2 Wire.read (); // Deň čítania z registra 3 (nepoužíva sa) date = Wire.read (); // Dátum čítania z registra 4 mesiace = Wire.read (); // Prečítajte si mesiac z registra 5 rokov = Wire.read (); // Čítať rok z registra 6 DS3231_display (); // Čas zobrazenia a oneskorenie kalendára (50); // Počkajte 50 ms}

Odporúča: