Sadržaj:

Sat u stvarnom vremenu s Arduinom: 3 koraka
Sat u stvarnom vremenu s Arduinom: 3 koraka

Video: Sat u stvarnom vremenu s Arduinom: 3 koraka

Video: Sat u stvarnom vremenu s Arduinom: 3 koraka
Video: Home Automation: 12V Relay with LED Display Delay 0.1 seconds to 999 seconds Timer module P1 to P4 2024, Studeni
Anonim
Sat u stvarnom vremenu s Arduinom
Sat u stvarnom vremenu s Arduinom

U ovom projektu napravit ćemo sat uz pomoć Arduino i RTC modula. Kao što znamo, Arduino ne može prikazati stvarno vrijeme, pa ćemo koristiti RTC modul za prikaz pravog vremena na LCD -u. Pažljivo pročitajte sve korake koji će vam puno pomoći da napravite sat.

Arduino kod DS3231 je poput koda DS1307 i radi s oba RTC čipa.

Arduino kôd ispod ne koristi nikakvu knjižnicu za DS3231 RTC, knjižnica Wire služi za dopisivanje između Arduina i DS3231 koristeći I2C konvenciju.

Da! Mnogi elektronički inženjeri ovise o tome za svoje vremenski zasnovane projekte, ali RTC nije potpuno pouzdan. Radi na baterije i mora se zamijeniti uskoro ili kasnije. Dolazeći na IoT projekte, zauzima vrijedne SPI (Serijsko periferno sučelje) pinove i postaje neuredan sa žicama isprepletenim. Rješenje …. Ovdje dolazi naš heroj NTP (mrežni vremenski protokol). NTP je toliko precizan jer dobiva vrijeme s interneta. Ovim ćemo protokolom upravljati u načinu rada klijent-poslužitelj. proces je toliko jednostavan da naš Nodemcu djeluje kao klijent i traži NTP paket od poslužitelja koristeći UDP. Zauzvrat, poslužitelj šalje paket klijentu koji analizira podatke. NTP je univerzalni protokol za sinkronizaciju vremena. Osvijetlimo sada našu laboratorijsku radnu stanicu

Korak 1: Potrebne komponente

  • Arduino ploča
  • DS3231 RTC ploča
  • 16x2 LCD zaslon
  • 2 x tipkalo
  • 10K ohmski promjenjivi otpornik (ili potenciometar)
  • 330-ohmski otpornik
  • 3V dugmasta baterija
  • Oglasna ploča
  • Kratkospojne žice

RTC mokula DS3231

Vrijeme je bitan smisao potreban u ovom brzom svijetu ljudskih bića. U projektu u stvarnom vremenu

Koristimo RTC (A. K. A sat u stvarnom vremenu)

RTC sat u stvarnom vremenu (RTC) je integrirani sklop (IC) koji prati trenutno vrijeme. RTC se brine o vremenu u stvarnom načinu rada. RTC se obično nalazi u računalnim matičnim pločama i ugrađenim sustavima kako bi zahtijevao pravovremeni pristup.

Korak 2: Spajanje Arduino sata

Povezivanje Arduino sata
Povezivanje Arduino sata
  • Spojite SCL pin na RTC modul na Arduino A5
  • Spojite SDA pin na RTC modul na Arduino A4
  • Spojite VCC na 5v i GND na GND
  • Spojite gumb na pin 8
  • Spojite drugi gumb na pin 9
  • Spojite RS LCD na pin 2 Arduina
  • Spojite E LCD -a na pin 3 Arduina
  • Spojite D7 LCD -a na pin 7 Arduina
  • Spojite D6 LCD -a na pin 6 Arduina
  • Spojite D5 LCD -a na pin 5 Arduina
  • Spojite D4 LCD -a na pin 4 Arduina
  • Spojite VSS & K na GND
  • Spojite VDD & A na 5v
  • Spojite vo na izlazni pin potenciometra

Korak 3: Kôd za Arduino sat sa RTC -om

Kôd za Arduino sat sa RTC -om
Kôd za Arduino sat sa RTC -om

DS3231 radi samo s BCD formatom i za pretvaranje BCD -a u decimalni i obrnuto koristio sam 2 retka ispod (primjer za minute): // Pretvorim BCD u decimalnu minutu = (minuta >> 4) * 10 + (minuta & 0x0F);

// Pretvorimo decimalu u BCDminute = ((minute / 10) << 4) + (minuta % 10); void DS3231_display (): prikazuje vrijeme i kalendar, prije nego što se prikaže vrijeme i podaci kalendara se pretvore iz BCD u decimalni format. void blink_parameter ():

// Sat u stvarnom vremenu i kalendar s postavljenim gumbima pomoću DS3231 i Arduina // uključuju kôd LCD knjižnice #include // uključuju kôd knjižnice Wire (potreban za uređaje s protokolom I2C) #include // veze LCD modula (RS, E, D4, D5, D6, D7) LCD s tekućim kristalom (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // button1 je spojen na pin 8 pinMode (9, INPUT_PULLUP); // button2 je spojen na pin 9 // postavlja LCD broj stupaca i redaka lcd.begin (16, 2); Wire.begin (); // Pridruži se i2c sabirnici} char Time = "TIME:::"; char Calendar = "DATUM: / / 20"; bajt i, drugi, minut, sat, datum, mjesec, godina; void DS3231_display () {// Pretvori BCD u decimalnu sekundu = (druga >> 4) * 10 + (druga & 0x0F); minuta = (minuta >> 4) * 10 + (minuta & 0x0F); sat = (sat >> 4) * 10 + (sat & 0x0F); datum = (datum >> 4) * 10 + (datum & 0x0F); mjesec = (mjesec >> 4) * 10 + (mjesec & 0x0F); godina = (godina >> 4) * 10 + (godina & 0x0F); // Vrijeme završetka pretvorbe [12] = drugi % 10 + 48; Vrijeme [11] = drugo / 10 + 48; Vrijeme [9] = minuta % 10 + 48; Vrijeme [8] = minuta / 10 + 48; Vrijeme [6] = sat % 10 + 48; Vrijeme [5] = sat / 10 + 48; Kalendar [14] = godina % 10 + 48; Kalendar [13] = godina / 10 + 48; Kalendar [9] = mjesec % 10 + 48; Kalendar [8] = mjesec / 10 + 48; Kalendar [6] = datum % 10 + 48; Kalendar [5] = datum / 10 + 48; lcd.setCursor (0, 0); lcd.print (vrijeme); // Vrijeme prikaza lcd.setCursor (0, 1); lcd.print (Kalendar); // Prikaz kalendara} void blink_parameter () {bajt j = 0; while (j 23) // Ako su sati> 23 ==> sati = 0 parametar = 0; if (i == 1 && parameter> 59) // Ako minute> 59 ==> minute = 0 parametar = 0; if (i == 2 && parametar> 31) // Ako je datum> 31 ==> datum = 1 parametar = 1; if (i == 3 && parametar> 12) // Ako je mjesec> 12 ==> mjesec = 1 parametar = 1; if (i == 4 && parametar> 99) // Ako je godina> 99 ==> godina = 0 parametar = 0; sprintf (tekst, "%02u", parametar); lcd.setCursor (x, y); lcd.print (tekst); kašnjenje (200); // Pričekajte 200 ms} lcd.setCursor (x, y); lcd.print (""); // Prikaz dva razmaka blink_parameter (); sprintf (tekst, "%02u", parametar); lcd.setCursor (x, y); lcd.print (tekst); blink_parameter (); if (! digitalRead (8)) {// Ako je pritisnuta tipka (pin #8) i ++; // Povećanje 'i' za sljedeći parametar vraćanja parametra; // Vrati vrijednost parametra i izađi}}} void loop () {if (! DigitalRead (8)) {// Ako je pritisnuta tipka (pin #8) i = 0; sat = uredi (5, 0, sat); minuta = uređivanje (8, 0, minuta); datum = uredi (5, 1, datum); mjesec = uredi (8, 1, mjesec); godina = uredi (13, 1, godina); // Pretvorimo decimalu u BCD minutu = ((minuta / 10) << 4) + (minuta % 10); sat = ((sat / 10) << 4) + (sat % 10); datum = ((datum / 10) << 4) + (datum % 10); mjesec = ((mjesec / 10) << 4) + (mjesec % 10); godina = ((godina / 10) << 4) + (godina % 10); // Završetak pretvorbe // Zapisivanje podataka na DS3231 RTC Wire.beginTransmission (0x68); // Pokretanje I2C protokola s DS3231 adresom Wire.write (0); // Pošaljite adresu registra Wire.write (0); // Resetiraj sesonde i pokreni oscilator Wire.write (minuta); // Zapišite minutu Wire.write (sat); // Zapisati sat Wire.write (1); // Upiši dan (ne koristi se) Wire.write (datum); // Upiši datum Wire.write (mjesec); // Napiši mjesec Wire.write (godina); // Napiši godinu Wire.endTransmission (); // Zaustavljanje prijenosa i otpuštanje kašnjenja sabirnice I2C (200); // Pričekajte 200 ms} Wire.beginTransmission (0x68); // Pokretanje I2C protokola s DS3231 adresom Wire.write (0); // Pošaljite adresu registra Wire.endTransmission (false); // I2C ponovno pokretanje Wire.requestFrom (0x68, 7); // Zatražite 7 bajtova od DS3231 i pustite I2C sabirnicu na kraju sekunde čitanja = Wire.read (); // Očitavanje sekundi iz registra 0 minuta = Wire.read (); // Čitanje minuta iz registra 1 sat = Wire.read (); // Očitavanje sata iz registra 2 Wire.read (); // Dan čitanja iz registra 3 (ne koristi se) datum = Wire.read (); // Čitanje datuma iz registra 4 mjeseca = Wire.read (); // Očitavanje mjeseca iz registra 5 godina = Wire.read (); // Očitavanje godine iz registra 6 DS3231_display (); // Vrijeme reprodukcije i kašnjenje kalendara (50); // Pričekajte 50 ms}

Preporučeni: