Tartalomjegyzék:

Valós idejű óra Arduino -val: 3 lépés
Valós idejű óra Arduino -val: 3 lépés

Videó: Valós idejű óra Arduino -val: 3 lépés

Videó: Valós idejű óra Arduino -val: 3 lépés
Videó: Когда Контрнаступление Украины? (10 июня 2023) 2024, Július
Anonim
Valós idejű óra Arduino -val
Valós idejű óra Arduino -val

Ebben a projektben órát készítünk az Arduino és az RTC modul segítségével. Mint tudjuk, az Arduino nem tudja megjeleníteni a tényleges időt, ezért az RTC modul segítségével jelenítjük meg a megfelelő időt az LCD -n. Olvassa el figyelmesen az összes lépést, ez sokat segíthet az óramű elkészítésében.

A DS3231 Arduino kód olyan, mint a DS1307 kód, és mindkét RTC lapkával működik.

Az alatta lévő Arduino kód nem használ semmilyen könyvtárat a DS3231 RTC -hez, a Wire könyvtár az Arduino és a DS3231 közötti levelezéshez, az I2C konvenciót használva.

Igen! Sok elektronikai mérnök számít rá időalapú projektjei során, de az RTC nem teljesen megbízható. Elemmel működik, és előbb -utóbb ki kell cserélni. Az IoT -projektekhez értékes SPI (soros perifériás interfész) csapokat foglal el, és zavaros lesz, ha a vezetékek kuszaak. Megoldás…. Itt jön hősünk, az NTP (hálózati időprotokoll). Az NTP olyan pontos, mivel időt kap az internetről. Ezt a protokollt kliens-szerver módban fogjuk működtetni. a folyamat olyan egyszerű, hogy Nodemcu -ükünk kliensként viselkedik, és NTP -csomagot kér a szervertől az UDP segítségével. Cserébe a szerver egy csomagot küld az ügyfélnek, amely elemzi az adatokat. Az NTP az univerzális időszinkronizálási protokoll. Most világítsunk meg laboratóriumi munkaállomásunkat

1. lépés: Szükséges összetevők

  • Arduino tábla
  • DS3231 RTC kártya
  • 16x2 LCD kijelző
  • 2 x nyomógomb
  • 10K ohmos változó ellenállás (vagy potenciométer)
  • 330 ohmos ellenállás
  • 3V -os gombelem
  • Kenyeretábla
  • Jumper vezetékek

RT32 molekula DS3231

Az idő lényeges érzék, amelyre szükség van ebben a rohanó világban. Valós idejű projektben

RTC-t (A. K. A valós idejű óra) használunk

Az RTC Real-time-clock (RTC) egy integrált áramkör (IC), amely nyomon követi az aktuális időt. Az RTC valós időben gondoskodik az időről. Az RTC rendszerint megtalálható a számítógépes alaplapokban és a beágyazott rendszerekben, amelyekhez időszerű hozzáférés szükséges.

Lépés: Az Arduino óra csatlakoztatása

Az Arduino óra csatlakoztatása
Az Arduino óra csatlakoztatása
  • Csatlakoztassa az SCL tűt az RTC modulhoz az Arduino A5 -hez
  • Csatlakoztassa az SDA tűt az RTC modulhoz az Arduino A4 -hez
  • Csatlakoztassa a VCC -t az 5v -hoz és a GND -t a GND -hez
  • Csatlakoztasson nyomógombot a 8 csaphoz
  • Csatlakoztasson egy másik nyomógombot a 9 csaphoz
  • Csatlakoztassa az LCD RS -jét az Arduino 2. tűjéhez
  • Csatlakoztassa az LCD E -t az Arduino 3. tűjéhez
  • Csatlakoztassa az LCD D7 -et az Arduino 7. tűjéhez
  • Csatlakoztassa az LCD D6 -ot az Arduino 6. tűjéhez
  • Csatlakoztassa az LCD D5 -öt az Arduino 5. tűjéhez
  • Csatlakoztassa az LCD D4 -et az Arduino 4. tűjéhez
  • Csatlakoztassa a VSS & K -t a GND -hez
  • Csatlakoztassa a VDD & A -t az 5V -hoz
  • Csatlakoztassa a vo potenciométer kimeneti csapjához

3. lépés: Az Arduino óra kódja RTC -vel

Az Arduino óra kódja RTC -vel
Az Arduino óra kódja RTC -vel

A DS3231 csak BCD formátummal működik, és a BCD tizedesre és fordítva konvertálására az alábbi 2 sort használtam (például perc): // A BCD konvertálása decimalminute = (perc >> 4) * 10 + (perc & 0x0F);

// Tizedes átalakítása BCDminute = ((perc / 10) << 4) + (perc % 10); void DS3231_display (): megjeleníti az időt és a naptárat, mielőtt megjelenítené az időt és a naptári adatokat a BCD -ből tizedes formátumba. void blink_parameter ():

// Valós idejű óra és naptár a beállító gombokkal a DS3231 és Arduino használatával // tartalmazza az LCD könyvtár kódját #include // tartalmazza a vezetékes könyvtár kódját (I2C protokollos eszközökhöz szükséges) #tartalmazza // az LCD modul csatlakozásait (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // gomb1 csatlakozik a 8 -as érintkezőhöz pinMode (9, INPUT_PULLUP); // gomb2 csatlakozik a 9 -es érintkezőhöz // állítsa be az LCD oszlopok és sorok számát lcd.begin (16, 2); Wire.begin (); // Csatlakozás az i2c buszhoz} char Time = "TIME:::"; char Calendar = "DATE: / / 20"; bájt i, második, perc, óra, dátum, hónap, év; void DS3231_display () {// A BCD konvertálása tizedesmásodpercre = (második >> 4) * 10 + (második és 0x0F); perc = (perc >> 4) * 10 + (perc & 0x0F); óra = (óra >> 4) * 10 + (óra és 0x0F); dátum = (dátum >> 4) * 10 + (dátum & 0x0F); hónap = (hónap >> 4) * 10 + (hónap és 0x0F); év = (év >> 4) * 10 + (év & 0x0F); // Konverziós idő vége [12] = második % 10 + 48; Idő [11] = másodperc / 10 + 48; Idő [9] = perc % 10 + 48; Idő [8] = perc / 10 + 48; Idő [6] = óra % 10 + 48; Idő [5] = óra / 10 + 48; Naptár [14] = év % 10 + 48; Naptár [13] = év / 10 + 48; Naptár [9] = hónap % 10 + 48; Naptár [8] = hónap / 10 + 48; Naptár [6] = dátum % 10 + 48; Naptár [5] = dátum / 10 + 48; lcd.setCursor (0, 0); lcd.print (idő); // Megjelenítési idő lcd.setCursor (0, 1); lcd.print (naptár); // Naptár megjelenítése} void blink_parameter () {byte j = 0; while (j 23) // Ha óra> 23 ==> óra = 0 paraméter = 0; if (i == 1 && paraméter> 59) // Ha perc> 59 ==> perc = 0 paraméter = 0; if (i == 2 && paraméter> 31) // Ha dátum> 31 ==> dátum = 1 paraméter = 1; if (i == 3 && paraméter> 12) // Ha hónap> 12 ==> hónap = 1 paraméter = 1; if (i == 4 && paraméter> 99) // Ha év> 99 ==> év = 0 paraméter = 0; sprintf (szöveg, "%02u", paraméter); lcd.setCursor (x, y); lcd.print (szöveg); késleltetés (200); // Várjon 200 ms} lcd.setCursor (x, y); lcd.print (""); // Két szóköz megjelenítése blink_parameter (); sprintf (szöveg, "%02u", paraméter); lcd.setCursor (x, y); lcd.print (szöveg); blink_parameter (); if (! digitalRead (8)) {// Ha megnyomja a gombot (#8. pin) i ++; // Hibátlan 'i' a következő paraméter visszatérési paraméteréhez; // Paraméterérték visszaadása és kilépés}}} void loop () {if (! DigitalRead (8)) {// Ha megnyomja a gombot (#8. Tű) i = 0; óra = szerkesztés (5, 0, óra); perc = szerkesztés (8, 0, perc); dátum = szerkesztés (5, 1, dátum); hónap = szerkesztés (8, 1, hónap); év = szerkesztés (13, 1, év); // Tizedes átalakítása BCD percre = ((perc / 10) << 4) + (perc % 10); óra = ((óra / 10) << 4) + (óra % 10); dátum = ((dátum / 10) << 4) + (dátum % 10); hónap = ((hónap / 10) << 4) + (hónap % 10); év = ((év / 10) << 4) + (év % 10); // Konverzió befejezése // Adatok írása a DS3231 RTC Wire -ba.beginTransmission (0x68); // Indítsa el az I2C protokollt DS3231 címmel Wire.write (0); // Regisztrációs cím küldése Wire.write (0); // Állítsa vissza a szezont és indítsa el az oszcillátort Wire.write (perc); // perc írása Wire.write (óra); // Írás óra Wire.write (1); // Nap írása (nem használt) Wire.write (dátum); // Dátum írása Wire.write (hónap); // Hónap írása Wire.write (év); // Év írása Wire.endTransmission (); // Állítsa le az átvitelt és engedje fel az I2C busz késleltetését (200); // Várjon 200 ms} Wire.beginTransmission (0x68); // Indítsa el az I2C protokollt DS3231 címmel Wire.write (0); // Regisztrációs cím küldése Wire.endTransmission (false); // I2C újraindítás Wire.requestFrom (0x68, 7); // Kérjen 7 bájtot a DS3231 -től, és engedje fel az I2C buszt a második olvasás végén = Wire.read (); // Másodpercek olvasása a regiszterből 0 perc = Wire.read (); // perc olvasása a regiszterből 1 óra = Wire.read (); // Olvasási óra a regiszterből 2 Wire.read (); // Olvasás napja a 3. regiszterből (nem használt) dátum = Wire.read (); // Olvasás dátuma a nyilvántartásból 4 hónap = Wire.read (); // Hónap olvasása a nyilvántartásból 5 év = Wire.read (); // Év leolvasása a regiszterből 6 DS3231_display (); // A lejátszási idő és a naptár késleltetése (50); // Várjon 50 ms}

Ajánlott: