INHOUDSOPGAWE:

Real -time klok met Arduino: 3 stappe
Real -time klok met Arduino: 3 stappe

Video: Real -time klok met Arduino: 3 stappe

Video: Real -time klok met Arduino: 3 stappe
Video: Meet the Arduino Science Kit R3 2024, Julie
Anonim
Real -time klok met Arduino
Real -time klok met Arduino

In hierdie projek maak ons 'n horlosie met behulp van die Arduino- en RTC -module. Soos ons weet, kan die Arduino nie die werklike tyd wys nie, daarom gebruik ons die RTC -module om die regte tyd op die LCD te vertoon. Lees die hele stap noukeurig, dit sal u baie help om die klok te verwerk.

Die DS3231 Arduino -kode is soos die DS1307 -kode en dit werk met beide RTC -skyfies.

Die Arduino -kode hieronder gebruik geen biblioteek vir die DS3231 RTC nie, die Wire -biblioteek is vir die korrespondensie tussen die Arduino en die DS3231 wat die I2C -konvensie gebruik.

Ja! Baie elektroniese ingenieurs is daarvan afhanklik vir hul tydgebaseerde projekte, maar RTC is nie heeltemal betroubaar nie. Dit werk op batterye en moet binnekort of later vervang word. As ek by IoT -projekte kom, beslaan dit waardevolle SPI -penne (Serial Peripheral Interface) en word dit deurmekaar met drade wat inmekaar sit. Oplossing … Hier kom ons held NTP (Network time protocol). NTP is so akkuraat, aangesien dit tyd van die internet kry. Ons gaan hierdie protokol gebruik met behulp van 'n kliënt-bedienermodus. die proses is so eenvoudig dat ons Nodemcu as 'n kliënt optree en 'n NTP -pakkie van die bediener versoek deur UDP te gebruik. In ruil daarvoor stuur die bediener 'n pakkie na die kliënt wat die data ontleed. NTP is die universele tydsynchronisasie protokol. Laat ons nou ons laboratoriums se werkstasie verlig

Stap 1: Vereiste komponente

  • Arduino bord
  • DS3231 RTC -bord
  • 16x2 LCD skerm
  • 2 x drukknop
  • 10K ohm veranderlike weerstand (of potensiometer)
  • Weerstand van 330 ohm
  • 3V muntstuk battery
  • Broodbord
  • Springdrade

RTC -mokule DS3231

Tyd is 'n noodsaaklike sin wat nodig is in hierdie vinnige wêreld van mense. In real -time projek

Ons gebruik RTC (A. K. A Real-time klok)

RTC Real-time-clock (RTC) is 'n geïntegreerde stroombaan (IC) wat tred hou met die huidige tyd. RTC sorg vir tyd in reële modus. Die RTC word gewoonlik in rekenaar moederborde en ingeboude stelsels gevind om tydige toegang te vereis.

Stap 2: Aansluiting van die Arduino -klok

Aansluiting van Arduino -horlosie
Aansluiting van Arduino -horlosie
  • Koppel die SCL -pen aan die RTC -module op die Arduino A5
  • Koppel die SDA -pen aan die RTC -module op die Arduino A4
  • Koppel VCC TO 5v en GND TO GND
  • Koppel 'n drukknop aan die pen 8
  • Koppel nog 'n drukknop aan die pen 9
  • Koppel RS van LCD aan pen 2 van Arduino
  • Koppel E van LCD aan pen 3 van Arduino
  • Koppel D7 van LCD aan pen 7 van Arduino
  • Koppel D6 van LCD aan pen 6 van Arduino
  • Koppel D5 van LCD aan pen 5 van Arduino
  • Koppel D4 van LCD aan pen 4 van Arduino
  • Koppel VSS & K aan die GND
  • Koppel VDD & A aan die 5v
  • Koppel vo aan op die uitgangspen van die potensiometer

Stap 3: Kode vir Arduino -klok met RTC

Kode vir Arduino -klok met RTC
Kode vir Arduino -klok met RTC

Die DS3231 werk slegs met BCD -formaat en om die BCD na desimale om te skakel en omgekeerd gebruik ek die 2 reëls hieronder (voorbeeld vir minuut): // Skakel BCD om na desimale minuut = (minuut >> 4) * 10 + (minuut en 0x0F);

// Skakel desimale om na BCDminute = ((minuut / 10) << 4) + (minuut % 10); void DS3231_display (): vertoon tyd en kalender, voordat tyd en kalenderdata omgeskakel word van BCD na desimale formaat.void blink_parameter ():

// Real -time klok en kalender met ingestelde knoppies met behulp van DS3231 en Arduino // sluit LCD -biblioteekkode in #sluit in // sluit draadbiblioteekkode in (benodig vir I2C -protokol -toestelle) #sluit in // LCD -moduleverbindings (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); ongeldige opstelling () {pinMode (8, INPUT_PULLUP); // knoppie1 is gekoppel aan pen 8 pinMode (9, INPUT_PULLUP); // knoppie2 is gekoppel aan pen 9 // stel die aantal kolomme en rye van die LCD op. lcd.begin (16, 2); Wire.begin (); // Sluit aan by i2c bus} char Tyd = "TYD:::"; char Kalender = "DATE: / / 20"; greep i, tweede, minuut, uur, datum, maand, jaar; void DS3231_display () {// Skakel BCD om na desimale sekonde = (tweede >> 4) * 10 + (tweede & 0x0F); minuut = (minuut >> 4) * 10 + (minuut & 0x0F); uur = (uur >> 4) * 10 + (uur en 0x0F); datum = (datum >> 4) * 10 + (datum & 0x0F); maand = (maand >> 4) * 10 + (maand & 0x0F); jaar = (jaar >> 4) * 10 + (jaar & 0x0F); // Eindomskakelingstyd [12] = tweede % 10 + 48; Tyd [11] = tweede / 10 + 48; Tyd [9] = minuut % 10 + 48; Tyd [8] = minuut / 10 + 48; Tyd [6] = uur % 10 + 48; Tyd [5] = uur / 10 + 48; Kalender [14] = jaar % 10 + 48; Kalender [13] = jaar / 10 + 48; Kalender [9] = maand % 10 + 48; Kalender [8] = maand / 10 + 48; Kalender [6] = datum % 10 + 48; Kalender [5] = datum / 10 + 48; lcd.setCursor (0, 0); lcd.print (Tyd); // Vertoon tyd lcd.setCursor (0, 1); lcd.print (kalender); // Vertoon kalender} leeg blink_parameter () {greep j = 0; terwyl (j 23) // As ure> 23 ==> ure = 0 parameter = 0; if (i == 1 && parameter> 59) // As minute> 59 ==> minute = 0 parameter = 0; if (i == 2 && parameter> 31) // As datum> 31 ==> datum = 1 parameter = 1; if (i == 3 && parameter> 12) // As maand> 12 ==> maand = 1 parameter = 1; if (i == 4 && parameter> 99) // As jaar> 99 ==> jaar = 0 parameter = 0; sprintf (teks, "%02u", parameter); lcd.setCursor (x, y); lcd.print (teks); vertraging (200); // Wag 200 ms} lcd.setCursor (x, y); lcd.print (""); // Wys twee spasies blink_parameter (); sprintf (teks, "%02u", parameter); lcd.setCursor (x, y); lcd.print (teks); blink_parameter (); as (! digitalRead (8)) {// As knoppie (pen #8) in ++ gedruk word; // Toename 'i' vir die volgende parameteropgawe -parameter; // Gee parameterwaarde terug en verlaat}}} leemte lus () {as (! DigitalRead (8)) {// As knoppie (pen #8) ingedruk word i = 0; uur = wysig (5, 0, uur); minuut = wysig (8, 0, minuut); datum = wysig (5, 1, datum); maand = wysig (8, 1, maand); jaar = wysig (13, 1, jaar); // Skakel desimale om na BCD -minuut = ((minuut / 10) << 4) + (minuut % 10); uur = ((uur / 10) << 4) + (uur % 10); datum = ((datum / 10) << 4) + (datum % 10); maand = ((maand / 10) << 4) + (maand % 10); jaar = ((jaar / 10) << 4) + (jaar % 10); // Beëindig omskakeling // Skryf data na DS3231 RTC Wire.beginTransmission (0x68); // Begin I2C -protokol met DS3231 -adres Wire.write (0); // Stuur registeradres Wire.write (0); // Herstel sesondes en begin die ossillator Wire.write (minuut); // Skryf minuut Wire.write (uur); // Skryf uur Wire.write (1); // Skryf dag (nie gebruik nie) Wire.write (datum); // Skryf datum Wire.write (maand); // Skryf maand Wire.write (jaar); // Skryf jaar Wire.endTransmission (); // Stop oordrag en laat die I2C -busvertraging (200) los; // Wag 200 ms} Wire.beginTransmission (0x68); // Begin I2C -protokol met DS3231 -adres Wire.write (0); // Stuur registeradres Wire.endTransmission (vals); // I2C herbegin Wire.requestFrom (0x68, 7); // Versoek 7 grepe van DS3231 en laat I2C -bus los aan die einde van die tweede lesing = Wire.read (); // Lees sekondes uit register 0 minute = Wire.read (); // Lees notule uit register 1 uur = Wire.read (); // Lees uur uit register 2 Wire.read (); // Lees dag uit register 3 (nie gebruik nie) datum = Wire.read (); // Lees datum uit register 4 maande = Wire.read (); // Lees maand uit register 5 jaar = Wire.read (); // Lees jaar uit register 6 DS3231_display (); // Diaplay -tyd en kalendervertraging (50); // Wag 50 ms}

Aanbeveel: