Sisukord:

Reaalajas kell Arduinoga: 3 sammu
Reaalajas kell Arduinoga: 3 sammu

Video: Reaalajas kell Arduinoga: 3 sammu

Video: Reaalajas kell Arduinoga: 3 sammu
Video: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, November
Anonim
Reaalajas kell koos Arduinoga
Reaalajas kell koos Arduinoga

Selles projektis valmistame Arduino ja RTC mooduli abil kella. Nagu me teame, ei saa Arduino tegelikku aega kuvada, seega kasutame õige aja kuvamiseks LCD -ekraanil RTC moodulit. Lugege hoolikalt kõiki samme, see aitab teil kellavärki teha.

DS3231 Arduino kood on nagu DS1307 kood ja see töötab mõlema RTC kiibiga.

Allolev Arduino kood ei kasuta DS3231 RTC jaoks ühtegi raamatukogu, Wire raamatukogu on mõeldud kirjavahetuseks Arduino ja DS3231 vahel, kasutades I2C konventsiooni.

Jah! Paljud elektroonikainsenerid sõltuvad sellest oma ajapõhiste projektide puhul, kuid RTC pole täiesti usaldusväärne. See töötab patareidega ja tuleb varem või hiljem välja vahetada. IoT -projektide puhul võtab see väärtuslikud SPI (Serial Peripheral Interface) tihvtid ja läheb segadusse, kui juhtmed on ümberringi sassis. Lahendus…. Siit tuleb meie kangelane NTP (võrgu aja protokoll). NTP on nii täpne, kuna saab Internetist aega. Me kasutame seda protokolli kliendi-serveri režiimis. protsess on nii lihtne, et meie Nodemcu toimib kliendina ja taotleb serverilt NTP -paketti UDP abil. Vastutasuks saadab server kliendile paketi, mis analüüsib andmeid. NTP on universaalne aja sünkroniseerimise protokoll. Valgustame nüüd oma laborite tööjaama

Samm: nõutavad komponendid

  • Arduino plaat
  • DS3231 RTC plaat
  • 16x2 LCD ekraan
  • 2 x nupp
  • 10K oomi muutuv takisti (või potentsiomeeter)
  • 330 oomi takisti
  • 3V mündipatarei
  • Leivalaud
  • Jumper juhtmed

RTC molekul DS3231

Aeg on selles kiiresti arenevas inimmaailmas vajalik hädavajalik meel. Reaalajas projektis

Me kasutame RTC-d (A. K. A reaalajas kell)

RTC reaalajas kell (RTC) on integraallülitus (IC), mis jälgib praegust aega. RTC hoolitseb aja eest reaalajas. RTC -d leidub tavaliselt arvutite emaplaatidel ja manussüsteemides, mis nõuavad õigeaegset juurdepääsu.

Samm: ühendage Arduino kell

Arduino kella ühendamine
Arduino kella ühendamine
  • Ühendage SCL -tihvt RTC -mooduliga Arduino A5 -ga
  • Ühendage SDA tihvt RTC mooduliga Arduino A4 -ga
  • Ühendage VCC to 5v ja GND to GND
  • Ühendage nupp tihvtiga 8
  • Ühendage tihvtiga 9 teine nupp
  • Ühendage vedelkristallekraani RS Arduino tihvtiga 2
  • Ühendage LCD E Arduino tihvtiga 3
  • Ühendage LCD D7 Arduino tihvtiga 7
  • Ühendage LCD D6 Arduino tihvtiga 6
  • Ühendage LCD D5 Arduino tihvtiga 5
  • Ühendage LCD D4 Arduino tihvtiga 4
  • Ühendage VSS & K GND -ga
  • Ühendage VDD & A 5v -ga
  • Ühendage vo potentsiomeetri väljundpoldiga

Samm: RTC abil Arduino kella kood

Arduino kella kood koos RTC -ga
Arduino kella kood koos RTC -ga

DS3231 töötab ainult BCD -vormingus ja BCD teisendamiseks kümnendkohaks ja vastupidi kasutasin alltoodud kahte rida (näiteks minut): // Teisenda BCD kümnendminutiks = (minut >> 4) * 10 + (minut & 0x0F);

// Teisenda kümnendarv BCDminute = ((minut / 10) << 4) + (minut % 10); void DS3231_display (): kuvab aja ja kalendri, enne kui kuvatakse kellaaeg ja kalendriandmed teisendatakse BCD -st kümnendvormingusse. tühine blink_parameter ():

// Reaalajas kell ja kalender koos seadistusnuppudega, kasutades DS3231 ja Arduino // lisage LCD raamatukogu kood #include // lisage traaditeegi kood (vajalik I2C protokolli seadmete jaoks) #sisalda // LCD mooduli ühendused (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // nupp1 on ühendatud tihvtiga 8 pinMode (9, INPUT_PULLUP); // nupp2 on ühendatud tihvtiga 9 // seadistage LCD veergude ja ridade arv lcd.begin (16, 2); Wire.begin (); // i2c bussiga liitumine} char Time = "TIME:::"; char kalender = "DATE: / / 20"; bait i, teine, minut, tund, kuupäev, kuu, aasta; void DS3231_display () {// Teisenda BCD kümnendiksekundiks = (teine >> 4) * 10 + (teine & 0x0F); minut = (minut >> 4) * 10 + (minut & 0x0F); tund = (tund >> 4) * 10 + (tund & 0x0F); kuupäev = (kuupäev >> 4) * 10 + (kuupäev & 0x0F); kuu = (kuu >> 4) * 10 + (kuu ja 0x0F); aasta = (aasta >> 4) * 10 + (aasta & 0x0F); // Konversiooni lõpp [12] = teine % 10 + 48; Aeg [11] = sekund / 10 + 48; Aeg [9] = minut % 10 + 48; Aeg [8] = minut / 10 + 48; Aeg [6] = tund % 10 + 48; Aeg [5] = tund / 10 + 48; Kalender [14] = aasta % 10 + 48; Kalender [13] = aasta / 10 + 48; Kalender [9] = kuu % 10 + 48; Kalender [8] = kuu / 10 + 48; Kalender [6] = kuupäev % 10 + 48; Kalender [5] = kuupäev / 10 + 48; lcd.setCursor (0, 0); lcd.print (aeg); // Kuvamisaeg lcd.setCursor (0, 1); lcd.print (kalender); // Kuva kalender} void blink_parameter () {bait j = 0; while (j 23) // Kui tunnid> 23 ==> tunnid = 0 parameeter = 0; if (i == 1 && parameeter> 59) // Kui minutid> 59 ==> minutid = 0 parameeter = 0; if (i == 2 && parameeter> 31) // Kui kuupäev> 31 ==> kuupäev = 1 parameeter = 1; if (i == 3 && parameeter> 12) // Kui kuu> 12 ==> kuu = 1 parameeter = 1; if (i == 4 && parameeter> 99) // Kui aasta> 99 ==> aasta = 0 parameeter = 0; sprintf (tekst, "%02u", parameeter); lcd.setCursor (x, y); lcd.print (tekst); viivitus (200); // Oota 200 ms} lcd.setCursor (x, y); lcd.print (""); // Kuva kaks tühikut blink_parameter (); sprintf (tekst, "%02u", parameeter); lcd.setCursor (x, y); lcd.print (tekst); vilkuv_parameeter (); if (! digitalRead (8)) {// Kui nuppu (pin #8) vajutatakse i ++; // Järgmise parameetri tagastusparameetri ebaefektiivne 'i'; // Tagastab parameetri väärtuse ja väljub}}} void loop () {if (! DigitalRead (8)) {// Kui nuppu (pin #8) vajutatakse i = 0; tund = redigeerimine (5, 0, tund); minut = redigeerimine (8, 0, minut); kuupäev = redigeeri (5, 1, kuupäev); kuu = redigeeri (8, 1, kuu); aasta = redigeeri (13, 1, aasta); // Teisenda kümnendarv BCD minutiks = ((minut / 10) << 4) + (minut % 10); tund = ((tund / 10) << 4) + (tund % 10); kuupäev = ((kuupäev / 10) << 4) + (kuupäev % 10); kuu = ((kuu / 10) << 4) + (kuu % 10); aasta = ((aasta / 10) << 4) + (aasta % 10); // Lõpeta teisendus // Kirjutage andmed DS3231 RTC Wire.beginTransmission (0x68); // I2C protokolli käivitamine DS3231 aadressiga Wire.write (0); // Saada registriaadress Wire.write (0); // Lähtesta sesondid ja käivita ostsillaator Wire.write (minut); // Kirjutage minut Wire.write (tund); // Kirjutage tund Wire.write (1); // Päeva kirjutamine (ei kasutata) Wire.write (kuupäev); // kuupäeva kirjutamine Wire.write (kuu); // Kirjutage kuu Wire.write (aasta); // Kirjutage aasta Wire.endTransmission (); // Peata ülekanne ja vabasta I2C siini viivitus (200); // Oota 200 ms} Wire.beginTransmission (0x68); // I2C protokolli käivitamine DS3231 aadressiga Wire.write (0); // Saada registriaadress Wire.endTransmission (false); // I2C taaskäivita Wire.requestFrom (0x68, 7); // Taotle DS3231 -lt 7 baiti ja vabastage I2C siin teise lugemise lõpus = Wire.read (); // Loe sekundit registrist 0 minut = Wire.read (); // Minutite lugemine registrist 1 tund = Wire.read (); // Loe tund registrist 2 Wire.read (); // Loe päev registrist 3 (ei kasutata) kuupäev = Wire.read (); // Loe kuupäev registrist 4 kuud = Wire.read (); // Loe kuu registrist 5 aastat = Wire.read (); // Aasta lugemine registrist 6 DS3231_display (); // Kuvamisaeg ja kalendri viivitus (50); // Oota 50 ms}

Soovitan: