Përmbajtje:

Ora në kohë reale me Arduino: 3 hapa
Ora në kohë reale me Arduino: 3 hapa

Video: Ora në kohë reale me Arduino: 3 hapa

Video: Ora në kohë reale me Arduino: 3 hapa
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Korrik
Anonim
Ora në kohë reale me Arduino
Ora në kohë reale me Arduino

Në këtë projekt, ne do të bëjmë një orë me ndihmën e modulit Arduino dhe RTC. Siç e dimë, Arduino nuk mund të shfaq kohën aktuale, kështu që ne do të përdorim modulin RTC për të shfaqur kohën e duhur në LCD. Lexoni të gjithë hapin me kujdes do t'ju ndihmojë shumë për të bërë orën.

Kodi DS3231 Arduino është si kodi DS1307 dhe funksionon me të dy çipat RTC.

Kodi Arduino poshtë nuk përdor asnjë bibliotekë për DS3231 RTC, biblioteka Wire është për korrespondencën midis Arduino dhe DS3231 duke përdorur konventën I2C.

Po! Shumë inxhinierë elektronikë varen nga ajo për projektet e tyre të bazuara në kohë, por RTC nuk është plotësisht i besueshëm. Funksionon me bateri dhe duhet të zëvendësohet herët a vonë. Duke ardhur në projektet IoT zë kunja të vlefshme SPI (Serial Periferike Ndërfaqe) dhe bëhet e çrregullt me tela të ngatërruar përreth. Zgjidhja…. Këtu vjen heroi ynë NTP (Protokolli i kohës në rrjet). NTP është aq i saktë pasi merr kohë nga interneti. Ne do ta përdorim këtë protokoll duke përdorur një mënyrë klient-server. procesi është aq i thjeshtë sa Nodemcu ynë vepron si klient dhe kërkon një paketë NTP nga serveri duke përdorur UDP. Në këmbim, serveri i dërgon një paketë klientit e cila analizon të dhënat. NTP është protokolli universal i sinkronizimit të kohës. Tani le të ndriçojmë stacionin tonë të punës në laboratorë

Hapi 1: Komponentët e kërkuar

  • Bordi Arduino
  • DS3231 bordi RTC
  • Ekran LCD 16x2
  • 2 x buton shtypës
  • Rezistencë e ndryshueshme 10K ohm (ose potenciometër)
  • Rezistencë 330-ohm
  • Bateri me qeliza monedhë 3V
  • Breadboard
  • Telat e kërcyesit

Toka e RTC DS3231

Koha është një ndjenjë thelbësore e kërkuar në këtë botë të shpejtë të qenieve njerëzore. Në projekt në kohë reale

Ne përdorim RTC (A. K. A Ora në kohë reale)

RTC-Ora në kohë reale (RTC) është një qark i integruar (IC) që mban gjurmët e kohës aktuale. RTC kujdeset për kohën në mënyrë reale. RTC zakonisht gjendet në pllakat amë të kompjuterit dhe sistemet e ngulitura për të kërkuar qasje në kohë.

Hapi 2: Lidhja e orës Arduino

Lidhja e orës Arduino
Lidhja e orës Arduino
  • Lidhni pinin SCL me modulin RTC në Arduino A5
  • Lidhni kunjin SDA me modulin RTC në Arduino A4
  • Lidhni VCC TO 5v dhe GND TO GND
  • Lidhni një buton me pin 8
  • Lidhni një buton tjetër me pin 9
  • Lidhni RS të LCD me pin 2 të Arduino
  • Lidhni E të LCD me pinin 3 të Arduino
  • Lidhni D7 të LCD me pin 7 të Arduino
  • Lidhni D6 të LCD me pin 6 të Arduino
  • Lidhni D5 të LCD me pin 5 të Arduino
  • Lidhni D4 të LCD me pin 4 të Arduino
  • Lidhni VSS & K me GND
  • Lidhni VDD & A me 5v
  • Lidheni vo me kunjin dalës të potenciometrit

Hapi 3: Kodi për Arduino Clock Me RTC

Kodi për Arduino Clock Me RTC
Kodi për Arduino Clock Me RTC

DS3231 funksionon vetëm me formatin BCD dhe për ta kthyer BCD në dhjetore dhe anasjelltas, kam përdorur 2 rreshtat më poshtë (shembull për minutë): // Shndërroni BCD në minutë dhjetore = (minutë >> 4) * 10 + (minutë & 0x0F);

// Shndërro dhjetorin në BCDminute = ((minutë / 10) << 4) + (minutë % 10); void DS3231_display (): shfaq kohën dhe kalendarin, para se të shfaqet koha dhe të dhënat e kalendarit konvertohen nga BCD në formatin dhjetor. anuloni blink_parameter ():

// Ora dhe kalendari në kohë reale me butona të vendosur duke përdorur DS3231 dhe Arduino // përfshijnë kodin e bibliotekës LCD #përfshi // përfshijnë kodin e bibliotekës me tela (nevojitet për pajisjet e protokollit I2C) #përfshi // lidhjet e modulit LCD (RS, E, D4, D5, D6, D7) LiquidCrystal LCD (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // butoni 1 është i lidhur me pin 8 pinMode (9, INPUT_PULLUP); // butoni2 është i lidhur me pin 9 // vendosni numrin e kolonave dhe rreshtave të LCD -së lcd.filloni (16, 2); Wire.begin (); // Bashkohu me autobusin i2c} char Koha = "KOHA:::"; kalendar = "DATA: / / 20"; byte i, i dyti, minuta, ora, data, muaji, viti; pavlefshme DS3231_display () {// Shndërro BCD në sekondën dhjetore = (e dyta >> 4) * 10 + (e dyta & 0x0F); minutë = (minutë >> 4) * 10 + (minutë & 0x0F); orë = (orë >> 4) * 10 + (orë & 0x0F); data = (data >> 4) * 10 + (data & 0x0F); muaji = (muaji >> 4) * 10 + (muaji & 0x0F); vit = (viti >> 4) * 10 + (viti & 0x0F); // Koha e përfundimit të konvertimit [12] = e dyta % 10 + 48; Koha [11] = e dyta / 10 + 48; Koha [9] = minuta % 10 + 48; Koha [8] = minutë / 10 + 48; Koha [6] = ora % 10 + 48; Koha [5] = orë / 10 + 48; Kalendari [14] = viti % 10 + 48; Kalendari [13] = viti / 10 + 48; Kalendari [9] = muaji % 10 + 48; Kalendari [8] = muaji / 10 + 48; Kalendari [6] = data % 10 + 48; Kalendari [5] = data / 10 + 48; lcd.setCursor (0, 0); lcd.print (Koha); // Koha e shfaqjes lcd.setCursor (0, 1); lcd.print (Kalendari); // Shfaq kalendarin} void blink_parameter () {byte j = 0; ndërsa (j 23) // Nëse orë> 23 ==> orë = 0 parametër = 0; nëse (i == 1 && parametri> 59) // Nëse minuta> 59 ==> minuta = 0 parametër = 0; nëse (i == 2 && parametri> 31) // Nëse data> 31 ==> data = 1 parametër = 1; nëse (i == 3 && parametri> 12) // Nëse muaji> 12 ==> muaji = 1 parametër = 1; nëse (i == 4 && parametri> 99) // Nëse viti> 99 ==> vit = 0 parametri = 0; sprintf (tekst, "%02u", parametër); lcd.setCursor (x, y); lcd.print (tekst); vonesë (200); // Prisni 200ms} lcd.setCursor (x, y); lcd.print (""); // Shfaq dy hapësira blink_parameter (); sprintf (tekst, "%02u", parametër); lcd.setCursor (x, y); lcd.print (tekst); blink_parameter (); nëse (! digitalRead (8)) {// Nëse butoni (kunja #8) shtypet i ++; // Rritja 'i' për parametrin tjetër të kthimit të parametrit; // Ktheni vlerën e parametrit dhe dilni}}} void loop () {if (! DigitalRead (8)) {// Nëse shtypet butoni (kunja #8) i = 0; orë = redakto (5, 0, orë); minutë = redakto (8, 0, minutë); data = redakto (5, 1, data); muaji = redakto (8, 1, muaj); vit = redakto (13, 1, vit); // Shndërroni dhjetorin në minutë BCD = ((minutë / 10) << 4) + (minutë % 10); orë = ((orë / 10) << 4) + (orë % 10); data = ((data / 10) << 4) + (data % 10); muaji = ((muaji / 10) << 4) + (muaji % 10); vit = ((viti / 10) << 4) + (viti % 10); // Përfundimi i konvertimit // Shkruani të dhëna në DS3231 RTC Wire.beginTransmission (0x68); // Filloni protokollin I2C me adresën DS3231 Wire.write (0); // Dërgoni adresën e regjistrit Wire.write (0); // Rivendos sesondet dhe fillo oshilatorin Wire.write (minutë); // Shkruaj minutë Wire.write (orë); // Shkruaj orë Wire.write (1); // Shkruaj ditën (nuk përdoret) Wire.write (data); // Shkruani datën Wire.write (muaj); // Shkruani muajin Wire.write (viti); // Shkruani vitin Wire.endTransmission (); // Ndaloni transmetimin dhe lëshoni vonesën e autobusit I2C (200); // Prisni 200ms} Wire.beginTransmission (0x68); // Filloni protokollin I2C me adresën DS3231 Wire.write (0); // Dërgoni adresën e regjistrit Wire.endTransmission (false); // I2C rinis Wire. KërkojNga (0x68, 7); // Kërkoni 7 bajtë nga DS3231 dhe lëshoni autobusin I2C në fund të leximit të dytë = Wire.read (); // Lexo sekonda nga regjistri 0 minuta = Wire.read (); // Lexo minutat nga regjistri 1 orë = Wire.read (); // Ora e leximit nga regjistri 2 Wire.read (); // Lexoni ditën nga regjistri 3 (nuk përdoret) data = Wire.read (); // Data e leximit nga regjistri 4 muaj = Wire.read (); // Lexo muajin nga regjistri 5 vjet = Wire.read (); // Lexoni vitin nga regjistri 6 DS3231_display (); // Koha e shkrimit dhe vonesa e kalendarit (50); // Prisni 50ms}

Recommended: