Orodha ya maudhui:

Saa Saa Halisi Na Arduino: Hatua 3
Saa Saa Halisi Na Arduino: Hatua 3

Video: Saa Saa Halisi Na Arduino: Hatua 3

Video: Saa Saa Halisi Na Arduino: Hatua 3
Video: Функция Arduino Millis поясняется 3 примерами 2024, Julai
Anonim
Saa Saa Halisi Na Arduino
Saa Saa Halisi Na Arduino

Katika mradi huu, tutafanya saa kwa msaada wa moduli ya Arduino na RTC. Kama tunavyojua Arduino haiwezi kuonyesha wakati halisi kwa hivyo tutatumia moduli ya RTC kuonyesha wakati unaofaa kwenye LCD. Soma hatua zote kwa uangalifu itakusaidia sana kutengeneza saa ya saa.

Nambari ya DS3231 Arduino ni kama nambari ya DS1307 na inafanya kazi na chipsi zote mbili za RTC.

Nambari ya Arduino chini haitumii maktaba yoyote kwa DS3231 RTC, maktaba ya waya ni ya mawasiliano kati ya Arduino na DS3231 inayotumia mkutano wa I2C.

Ndio! Wahandisi wengi wa vifaa vya elektroniki hutegemea miradi yao ya wakati lakini RTC haiaminiki kabisa. Ni betri inayoendeshwa na inapaswa kubadilishwa hivi karibuni au baadaye. Kuja kwenye miradi ya IoT inachukua pini muhimu za SPI (Serial Peripheral Interface) na inavuruga na waya zilizobanwa kote. Suluhisho…. Hapa anakuja shujaa wetu NTP (Itifaki ya wakati wa Mtandao). NTP ni sahihi kwani inapata wakati kutoka kwa wavuti. Tutafanya itifaki hii kwa kutumia hali ya mteja-seva. mchakato ni rahisi sana kwamba Nodemcu yetu hufanya kama mteja na inauliza pakiti ya NTP kutoka kwa seva inayotumia UDP. Kwa kurudi, seva hutuma pakiti kwa mteja ambayo inachambua data. NTP ni itifaki ya maingiliano ya wakati wote. Sasa wacha tuangaze kituo chetu cha kazi cha maabara

Hatua ya 1: Vipengele vinavyohitajika

  • Bodi ya Arduino
  • Bodi ya DS3231 RTC
  • Skrini ya 16x2 LCD
  • 2 x kifungo cha kushinikiza
  • Kinga ya kutofautisha ya 10K ohm (au potentiometer)
  • 330-ohm kupinga
  • 3V sarafu ya betri ya seli
  • Bodi ya mkate
  • Waya za jumper

Mocule ya RTC DS3231

Wakati ni maana muhimu inayohitajika katika ulimwengu huu wa wanadamu wenye kasi. Katika mradi wa wakati halisi

Tunatumia RTC (AKK Saa ya wakati halisi)

RTC Real-time-clock (RTC) ni mzunguko uliounganishwa (IC) ambao hufuatilia wakati wa sasa. RTC inachukua wakati katika hali halisi. RTC kawaida hupatikana kwenye bodi za mama za kompyuta na mifumo iliyowekwa ili kuhitaji ufikiaji wa wakati unaofaa.

Hatua ya 2: Uunganisho wa Saa ya Arduino

Uunganisho wa Saa ya Arduino
Uunganisho wa Saa ya Arduino
  • Unganisha pini ya SCL kwa moduli ya RTC kwa Arduino A5
  • Unganisha pini ya SDA kwenye moduli ya RTC kwa Arduino A4
  • Unganisha VCC TO 5v na GND TO GND
  • Unganisha kitufe cha kushinikiza kwa pini 8
  • Unganisha kitufe kingine cha kushinikiza kwa pini 9
  • Unganisha RS ya LCD kubandika 2 ya Arduino
  • Unganisha E ya LCD kubandika 3 ya Arduino
  • Unganisha D7 ya LCD kubandika 7 ya Arduino
  • Unganisha D6 ya LCD kubandika 6 ya Arduino
  • Unganisha D5 ya LCD kubandika 5 ya Arduino
  • Unganisha D4 ya LCD kubandika 4 ya Arduino
  • Unganisha VSS & K kwa GND
  • Unganisha VDD & A kwa 5v
  • Unganisha vo kwenye pini ya pato ya potentiometer

Hatua ya 3: Nambari ya Saa ya Arduino na RTC

Nambari ya Saa ya Arduino Pamoja na RTC
Nambari ya Saa ya Arduino Pamoja na RTC

DS3231 inafanya kazi na muundo wa BCD tu na kubadilisha BCD kuwa decimal na kinyume chake nilitumia mistari 2 hapa chini (mfano kwa dakika): // Badilisha BCD kuwa decimalminute = (dakika >> 4) * 10 + (dakika & 0x0F);

// Badilisha decimal kuwa BCDminute = ((dakika / 10) << 4) + (dakika% 10); batili DS3231_display (): maonyesho wakati na kalenda, kabla ya kuonyesha data ya wakati na kalenda inabadilishwa kutoka BCD hadi fomati ya desimali.

// Saa ya muda halisi na kalenda iliyo na vifungo vilivyowekwa kutumia DS3231 na Arduino // ni pamoja na nambari ya maktaba ya LCD # pamoja na // ni pamoja na nambari ya maktaba ya waya (inahitajika kwa vifaa vya itifaki ya I2C) # pamoja na unganisho la moduli ya LCD (RS, E, D4, D5, D6, D7) LiquidCrystal LCD (2, 3, 4, 5, 6, 7); kuanzisha batili () {pinMode (8, INPUT_PULLUP); // kifungo1 imeunganishwa na pinMode 8 (9, INPUT_PULLUP); // kifungo2 kimeunganishwa kubandika 9 // kuanzisha idadi ya nguzo za LCD na safu lcd. anza (16, 2); Wire.begin (); // Jiunge na i2c bus} char Wakati = "TIME::" "; Kalenda ya char = "TAREHE: / / 20"; byte i, pili, dakika, saa, tarehe, mwezi, mwaka; batili DS3231_display () {// Badilisha BCD hadi sekunde ya pili = (pili >> 4) * 10 + (pili & 0x0F); dakika = (dakika >> 4) * 10 + (dakika & 0x0F); saa = (saa >> 4) * 10 + (saa & 0x0F); tarehe = (tarehe >> 4) * 10 + (tarehe & 0x0F); mwezi = (mwezi >> 4) * 10 + (mwezi & 0x0F); mwaka = (mwaka >> 4) * 10 + (mwaka & 0x0F); // Muda wa kubadilisha [12] = pili% 10 + 48; Wakati [11] = sekunde / 10 + 48; Wakati [9] = dakika% 10 + 48; Wakati [8] = dakika / 10 + 48; Wakati [6] = saa% 10 + 48; Wakati [5] = saa / 10 + 48; Kalenda [14] = mwaka% 10 + 48; Kalenda [13] = mwaka / 10 + 48; Kalenda [9] = mwezi% 10 + 48; Kalenda [8] = mwezi / 10 + 48; Kalenda [6] = tarehe% 10 + 48; Kalenda [5] = tarehe / 10 + 48; lcd.setCursor (0, 0); lcd.print (Wakati); // Wakati wa kuonyesha LCD.setCursor (0, 1); lcd.print (Kalenda); // Onyesha kalenda} batili blink_parameter () {byte j = 0; wakati (j 23) // Ikiwa masaa> 23 ==> masaa = 0 parameter = 0; ikiwa (i == 1 && parameter> 59) // Ikiwa dakika> 59 ==> dakika = 0 parameter = 0; ikiwa (i == 2 && parameter> 31) // Ikiwa tarehe> 31 ==> tarehe = 1 parameter = 1; ikiwa (i == 3 && parameter> 12) // Ikiwa mwezi> 12 ==> mwezi = 1 parameter = 1; ikiwa (i == 4 && parameter> 99) // Ikiwa mwaka> 99 ==> mwaka = 0 parameter = 0; sprintf (maandishi, "% 02u", parameter); lcd.setCursor (x, y); lcd.print (maandishi); kuchelewesha (200); // Subiri 200ms} lcd.setCursor (x, y); lcd.print (""); // Onyesha nafasi mbili blink_parameter (); sprintf (maandishi, "% 02u", parameter); lcd.setCursor (x, y); lcd.print (maandishi); blink_parameter (); ikiwa (! digitalRead (8)) {// Ikiwa kifungo (pin # 8) imesisitizwa i ++; // Kuongeza 'i' kwa parameta inayofuata ya kurudi; // Kurudisha thamani ya parameta na kutoka}}} kitanzi batili () {if (! DigitalRead (8)) {// If button (pin # 8) is pressed i = 0; saa = hariri (5, 0, saa); dakika = hariri (8, 0, dakika); tarehe = hariri (5, 1, tarehe); mwezi = hariri (8, 1, mwezi); mwaka = hariri (13, 1, mwaka); // Badilisha decimal kuwa BCD dakika = ((dakika / 10) << 4) + (dakika% 10); saa = ((saa / 10) << 4) + (saa% 10); tarehe = ((tarehe / 10) << 4) + (tarehe% 10); mwezi = ((mwezi / 10) << 4) + (mwezi% 10); mwaka = ((mwaka / 10) << 4) + (mwaka% 10); // Mwisho wa ubadilishaji // Andika data kwa DS3231 RTC Wire.beginTransmission (0x68); // Anzisha itifaki ya I2C na anwani ya DS3231 Wire.write (0); // Tuma anwani ya rejista Wire.write (0); // Rudisha sesonds na uanze waya wa oscillator. Andika (dakika); // Andika dakika ya waya.andika (saa); // Andika saa Waya.andika (1); // Andika siku (haitumiwi) Waya.andika (tarehe); // Tarehe ya kuandika Wire.write (mwezi); // Andika mwezi waya.andika (mwaka); // Andika mwaka Wire.endUsambazaji (); // Acha usambazaji na uachilie ucheleweshaji wa basi ya I2C (200); // Subiri 200ms} Waya. Anza Uwasilishaji (0x68); // Anzisha itifaki ya I2C na anwani ya DS3231 Wire.write (0); // Tuma anwani ya rejista Wire.endUsambazaji (uwongo); // I2C kuanzisha tena Wire.requestFrom (0x68, 7); // Omba ka 7 kutoka DS3231 na uachilie basi ya I2C mwisho wa kusoma pili = Wire.read (); // Soma sekunde kutoka daftari dakika 0 = Wire.read (); // Soma dakika kutoka rejista saa 1 = Wire.read (); // Soma saa kutoka kwa rejista 2 Wire.read (); // Soma siku kutoka kwa rejista 3 (haitumiki) tarehe = Wire.read (); // Tarehe ya kusoma kutoka kwa usajili wa mwezi wa 4 = Wire.read (); // Soma mwezi kutoka daftari la miaka 5 = Wire.read (); // Soma mwaka kutoka kwa rejista 6 DS3231_display (); // Wakati wa Diaplay & kuchelewesha kalenda (50); // Subiri 50ms}

Ilipendekeza: