Բովանդակություն:

Իրական ժամանակի ժամացույց Arduino- ով `3 քայլ
Իրական ժամանակի ժամացույց Arduino- ով `3 քայլ

Video: Իրական ժամանակի ժամացույց Arduino- ով `3 քայլ

Video: Իրական ժամանակի ժամացույց Arduino- ով `3 քայլ
Video: Ինչպես կառավարել բազմաթիվ Servo շարժիչները Arduino- ի հետ մեկ պոտենցիոմետր օգտագործելով 2024, Նոյեմբեր
Anonim
Իրական ժամանակի ժամացույց Arduino- ի հետ
Իրական ժամանակի ժամացույց Arduino- ի հետ

Այս նախագծում մենք Arduino- ի և RTC մոդուլի օգնությամբ ժամացույց կպատրաստենք: Ինչպես գիտենք, Arduino- ն չի կարող ցուցադրել իրական ժամանակը, այնպես որ մենք կօգտագործենք RTC մոդուլը `LCD- ում ճիշտ ժամանակը ցուցադրելու համար: Carefullyգուշորեն կարդացեք բոլոր քայլերը, դա ձեզ շատ կօգնի ժամացույցի սլաքը պատրաստելու համար:

DS3231 Arduino ծածկագիրը նման է DS1307 կոդին և աշխատում է երկու RTC չիպերով:

Ներքևում գտնվող Arduino ծածկագիրը չի օգտագործում որևէ գրադարան DS3231 RTC- ի համար, Wire գրադարանը Arduino- ի և DS3231- ի միջև նամակագրության համար է `օգտագործելով I2C պայմանագիրը:

Այո! Շատ էլեկտրոնիկայի ինժեներներ կախված են դրանից իրենց ժամանակի վրա հիմնված նախագծերի համար, սակայն RTC- ն ամբողջովին հուսալի չէ: Այն աշխատում է մարտկոցով և պետք է փոխարինվի վաղ թե ուշ: Գալով IoT նախագծերին, այն զբաղեցնում է արժեքավոր SPI (սերիական ծայրամասային ինտերֆեյս) կապեր և խառնաշփոթ է առաջանում խճճված լարերով: Լուծում…. Ահա գալիս է մեր հերոսը NTP (timeանցի ժամանակի արձանագրություն): NTP- ն այնքան ճշգրիտ է, քանի որ ժամանակ է ստանում ինտերնետից: Մենք պատրաստվում ենք գործարկել այս արձանագրությունը `օգտագործելով հաճախորդ-սերվեր ռեժիմը: գործընթացը այնքան պարզ է, որ մեր Nodemcu- ն հանդես է գալիս որպես հաճախորդ և պահանջում է NTP փաթեթ սերվերից `օգտագործելով UDP: Դրա դիմաց սերվերը հաճախորդին ուղարկում է փաթեթ, որը վերլուծում է տվյալները: NTP- ը ժամանակի համաժամացման համընդհանուր արձանագրություն է: Հիմա լուսավորենք մեր լաբորատորիաների աշխատատեղը

Քայլ 1: Պահանջվող բաղադրիչներ

  • Arduino տախտակ
  • DS3231 RTC տախտակ
  • 16x2 LCD էկրան
  • 2 x կոճակ
  • 10 Կ Օմ փոփոխական դիմադրություն (կամ պոտենցիոմետր)
  • 330 օմ դիմադրություն
  • 3V մետաղադրամ բջջային մարտկոց
  • Breadboard
  • Jumper լարերը

RTC մուկուլ DS3231

Timeամանակը էական զգացում է, որը պահանջվում է մարդկության այս արագընթաց աշխարհում: Իրական ժամանակի նախագծում

Մենք օգտագործում ենք RTC (A. K. A իրական ժամանակի ժամացույց)

RTC Իրական ժամանակի ժամացույցը (RTC) ինտեգրալ միացում է (IC), որը հետևում է ընթացիկ ժամանակին: RTC- ն ժամանակի մասին հոգում է իրական ռեժիմում: RTC- ն սովորաբար հանդիպում է համակարգչային մայր տախտակներում և ներկառուցված համակարգերում `ժամանակին մուտք գործելու համար:

Քայլ 2. Arduino ժամացույցի միացում

Arduino ժամացույցի միացում
Arduino ժամացույցի միացում
  • Միացրեք SCL կապը RTC մոդուլին Arduino A5- ին
  • Միացրեք SDA կապը RTC մոդուլին Arduino A4- ին
  • Միացրեք VCC TO 5v- ին և GND- ին GND- ին
  • Միացրեք մի կոճակ 8 -ի կապակցիչին
  • Միացրեք մեկ այլ կոճակ 9 -ի կապում
  • LCD- ի RS- ն միացրեք Arduino- ի 2 -րդ կապին
  • LCD- ի E- ն միացրեք Arduino- ի 3 -րդ կապին
  • LCD- ի D7- ը միացրեք Arduino- ի 7 -րդ կապին
  • LCD- ի D6- ը միացրեք Arduino- ի 6 -րդ կապին
  • LCD- ի D5- ը միացրեք Arduino- ի 5 -րդ կապին
  • LCD- ի D4- ը միացրեք Arduino- ի 4 -րդ կապին
  • Միացրեք VSS & K- ն GND- ին
  • Միացրեք VDD & A- ն 5 վ -ին
  • Vo- ն միացրեք պոտենցիոմետրի ելքային քորոցին

Քայլ 3. Arduino ժամացույցի կոդը RTC- ով

Arduino ժամացույցի կոդը RTC- ով
Arduino ժամացույցի կոդը RTC- ով

DS3231- ն աշխատում է միայն BCD ձևաչափով և BCD- ն տասնորդական դարձնելու համար և հակառակը ՝ ես օգտագործել եմ ստորև բերված 2 տողերը (օրինակ րոպեի համար).;

// Փոխարկել տասնորդականը BCDminute = ((րոպե / 10) << 4) + (րոպե % 10); void DS3231_display (). ցուցադրում է ժամանակը և օրացույցը, նախքան ժամանակը և օրացույցի ցուցադրումը տվյալները BCD- ից վերածվում են տասնորդական ձևաչափի: void blink_parameter ():

// Իրական ժամանակի ժամացույց և օրացույց ՝ սահմանված կոճակներով ՝ օգտագործելով DS3231 և Arduino // ներառել LCD գրադարանի կոդը #ներառել // ներառել լարային գրադարանի կոդ (անհրաժեշտ է I2C արձանագրության սարքերի համար) #ներառել // LCD մոդուլի միացումներ (RS, E, D4, D5, D6, D7) LiquidCrystal LCD (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // կոճակը 1 միացված է 8 փին PinMode- ին (9, INPUT_PULLUP); // կոճակը 2 միացված է 9 -րդ կապին // կարգավորեք LCD- ի սյունակների և տողերի թիվը lcd.begin (16, 2); Wire.begin (); // Միանալ i2c ավտոբուսին} char [ամանակ = "IMEԱՄԱՆԱԿԸ:::"; char Օրացույց = "DATE: / / 20"; բայթ i, երկրորդ, րոպե, ժամ, ամսաթիվ, ամիս, տարի; անվավեր DS3231_display () {// Փոխարկել BCD- ը տասնորդական երկրորդ = (երկրորդ >> 4) * 10 + (երկրորդ & 0x0F); րոպե = (րոպե >> 4) * 10 + (րոպե & 0x0F); ժամ = (ժամ >> 4) * 10 + (ժամ & 0x0F); ամսաթիվ = (ամսաթիվ >> 4) * 10 + (ամսաթիվ & 0x0F); ամիս = (ամիս >> 4) * 10 + (ամիս & 0x0F); տարի = (տարի >> 4) * 10 + (տարի & 0x0F); // Ավարտի փոխակերպման ժամանակը [12] = երկրորդ % 10 + 48; Timeամանակ [11] = երկրորդ / 10 + 48; Timeամանակ [9] = րոպե % 10 + 48; [Ամանակ [8] = րոպե / 10 + 48; Timeամանակ [6] = ժամ % 10 + 48; Timeամանակ [5] = ժամ / 10 + 48; Օրացույց [14] = տարի % 10 + 48; Օրացույց [13] = տարի / 10 + 48; Օրացույց [9] = ամիս % 10 + 48; Օրացույց [8] = ամիս / 10 + 48; Օրացույց [6] = ամսաթիվ % 10 + 48; Օրացույց [5] = ամսաթիվ / 10 + 48; lcd.setCursor (0, 0); lcd.print ()ամանակ); // Displayուցադրման ժամանակը lcd.setCursor (0, 1); lcd.print (Օրացույց); // calendarուցադրել օրացույցը} void blink_parameter () {բայթ j = 0; while (j 23) // Եթե ժամ> 23 ==> ժամ = 0 պարամետր = 0; եթե (i == 1 && պարամետր> 59) // Եթե րոպե> 59 ==> րոպե = 0 պարամետր = 0; եթե (i == 2 && պարամետր> 31) // Եթե ամսաթիվ> 31 ==> ամսաթիվ = 1 պարամետր = 1; եթե (i == 3 && պարամետր> 12) // Եթե ամիս> 12 ==> ամիս = 1 պարամետր = 1; եթե (i == 4 && պարամետր> 99) // Եթե տարի> 99 ==> տարի = 0 պարամետր = 0; sprintf (տեքստ, «%02u», պարամետր); lcd.setCursor (x, y); lcd.print (տեքստ); ուշացում (200); // Սպասեք 200ms} lcd.setCursor (x, y); lcd.print (""); // spacesուցադրել երկու բացատ blink_parameter (); sprintf (տեքստ, «%02u», պարամետր); lcd.setCursor (x, y); lcd.print (տեքստ); blink_parameter (); եթե (! digitalRead (8)) {// Եթե կոճակը (PIN #8) սեղմված է i ++; // Ավելացում 'i' հաջորդ պարամետրի վերադարձի պարամետրի համար; // Վերադարձ պարամետրի արժեքը և ելք}}} void loop () {if (! DigitalRead (8)) {// Եթե կոճակը (pin #8) սեղմված է i = 0; ժամ = խմբագրել (5, 0, ժամ); րոպե = խմբագրել (8, 0, րոպե); ամսաթիվ = խմբագրել (5, 1, ամսաթիվ); ամիս = խմբագրել (8, 1, ամիս); տարի = խմբագրել (13, 1, տարի); // Փոխարկել տասնորդականը BCD րոպե = ((րոպե / 10) << 4) + (րոպե % 10); ժամ = ((ժամ / 10) << 4) + (ժամ % 10); ամսաթիվ = ((ամսաթիվ / 10) << 4) + (ամսաթիվ % 10); ամիս = ((ամիս / 10) << 4) + (ամիս % 10); տարի = ((տարի / 10) << 4) + (տարի % 10); // Ավարտել փոխակերպումը // Տվյալներ գրել DS3231 RTC Wire.beginTransmission (0x68); // Սկսեք I2C արձանագրությունը DS3231 հասցեով Wire.write (0); // Ուղարկեք գրանցման հասցեն Wire.write (0); // Վերականգնել sesonds- ը և սկսել oscillator Wire.write (րոպե); // Գրել րոպե Wire.write (ժամ); // Գրեք ժամ Wire.write (1); // Գրեք օր (չի օգտագործվում) Wire.write (ամսաթիվ); // Գրեք ամսաթիվը Wire.write (ամիս); // Գրել ամիս Wire.write (տարի); // Գրեք տարին Wire.endTransmission (); // Դադարեցնել փոխանցումը և բաց թողնել I2C ավտոբուսի ուշացումը (200); // Սպասեք 200ms} Wire.beginTransmission (0x68); // Գործարկել I2C արձանագրությունը DS3231 հասցեով Wire.write (0); // Ուղարկեք գրանցման հասցեն Wire.endTransmission (կեղծ); // I2C վերագործարկել Wire.requestFrom (0x68, 7); // Պահանջեք 7 բայթ DS3231- ից և թողեք I2C ավտոբուսը երկրորդ ընթերցման վերջում = Wire.read (); // կարդալ վայրկյաններ գրանցումից 0 րոպե = Wire.read (); // Կարդալ րոպեները գրանցումից 1 ժամ = Wire.read (); // Կարդալու ժամ գրանցումից 2 Wire.read (); // Օրը կարդալ գրանցամատյանից 3 (չի օգտագործվում) ամսաթիվ = Wire.read (); // Կարդալու ամսաթիվը գրանցումից 4 ամիս = Wire.read (); // Կարդալ ամսագիրը գրանցումից 5 տարի = Wire.read (); // Կարդալ տարին գրանցումից 6 DS3231_display (); // Diaplay ժամանակը և օրացույցի ուշացումը (50); // Սպասեք 50 վրկ}

Խորհուրդ ենք տալիս: