Skelbimas

Turėti laiko Arduino projektams nėra taip paprasta, kaip jūs galite pamanyti: kai nėra kompiuterio ryšio, jūsų be galios „Arduino“ tiesiog nustos veikti, įskaitant vidinį varnelę.

Norint, kad „Arduino“ būtų sinchronizuotas su jį supančiu pasauliu, jums reikės to, kas vadinama „realaus laiko laikrodžio moduliu“. Štai kaip tai naudoti.

Kaip realaus laiko laikrodis (RTC)?

Greičiausiai jūsų kompiuteris sinchronizuoja savo laiką su internetu, tačiau jis vis tiek turi vidinį laikrodį, kuris veikia net ir be interneto ryšio arba maitinimas yra išjungtas. Kai naudojate „Arduino“, prijungtą prie kompiuterio, jis gali pasiekti tikslų laiką, kurį pateikia jūsų sistemos laikrodis. Tai gana naudinga, tačiau dauguma „Arduino“ projektų yra skirti naudoti ne nuo kompiuterio, o tada tašką, bet kuriuo metu atjungus maitinimą arba atnaujinus „Arduino“, jis visiškai neįsivaizduoja, kurį laiką tai yra. Vidinis laikrodis bus atstatytas ir kitą kartą pradedamas skaičiuoti nuo nulio, kai tik jis bus įjungtas.

instagram viewer

Jei jūsų projektas turi ką nors bendro su to, kad reikia laiko - pavyzdžiui, mano nakties šviesa ir saulėtekio žadintuvas „Arduino“ nakties šviesos ir saulėtekio aliarmo projektasŠiandien mes pagaminsime saulėtekio žadintuvą, kuris švelniai ir lėtai pažadins jus, nesinaudodamas įžeidžiančia mašina. Skaityti daugiau - tai akivaizdžiai bus problema. Tame projekte mes išsprendėme problemą rankiniu būdu nustatydami kiekvieną naktį gana grubų laiką būdas - vartotojas paspaustų atkūrimo mygtuką prieš pat eidamas miegoti, nurodydamas rankinį laiką sinchronizuoti. Akivaizdu, kad tai nėra idealus ilgalaikis sprendimas.

RTC modulis yra papildomas grandinės elementas, reikalaujantis nedidelės monetų baterijos, kuri skaičiuoja laiką net tada, kai jūsų „Arduino“ yra išjungtas. Kartą nustačius - akumuliatorius gali naudoti visą tą laiką, paprastai maždaug metus.

„TinyRTC“

Populiariausias Arduino RTC vadinamas TinyRTC ir jo galima nusipirkti maždaug 5–10 USD „eBay“. Greičiausiai turėsite aprūpinti savo bateriją (į šias šalis gabenti į daugelį vietų yra neteisėta) ir kai kurias antraštes (kaiščius, kurie įkišami į skylutes, kurias turėsite lituoti patys).

Tai yra modulis, kurį turiu:

rtc modulis

Jis netgi turi įmontuotą temperatūros jutiklį, nors akumuliatorius tarnaus ilgiau, jei jo nenaudosite.

Skylių skaičius tame daikte atrodo gana baisus, tačiau jums reikia tik keturių iš jų; GND, VCC, SCL ir SDA - galite naudoti atitinkamus kaiščius abiejose RTC modulio pusėse. Jūs kalbatės su laikrodžiu naudodamiesi I2C protokolas, o tai reiškia, kad naudojami tik du kaiščiai - vienas „laikrodžiui“ (nuosekliųjų ryšių duomenų laikrodis, neturintis nieko bendra su laiku), o kitas - duomenims. Tiesą sakant, jūs netgi sujungiate iki 121 I2C įrenginių ant tų pačių dviejų kaiščių - patikrinkite šį „Adafruit“ puslapį kuriuos galite pridėti prie kitų I2C įrenginių, nes jų yra daug!

Darbo pradžia

Prijunkite „TinyRTC“ modulį pagal žemiau pateiktą schemą - rausvos DS linijos nereikia, nes tai yra temperatūros jutiklis.

laidus

Tada atsisiųskite Laikas ir DS1307RTC bibliotekas ir įdėkite gautus aplankus į savo /libraries aplankas.

Išeikite iš naujo ir paleiskite Arduino aplinką, kad galėtumėte įkelti bibliotekas ir pavyzdžius.
ds1307rtc-pavyzdys-meniu

DS1307RTC meniu rasite du pavyzdžius: įkelkite ir paleiskite Nustatyti laiką pirmas pavyzdys - tai nustatys teisingą RTC laiką. Tikro kodo neverta gilintis į detales, tiesiog žinokite, kad norint atlikti pradinę laiko sinchronizaciją, jį reikia paleisti vieną kartą.

Toliau pažiūrėkite į pavyzdžių naudojimą su „ReadTest“.


# įtraukti 
# įtraukti 
# įtraukti  negaliojanti sąranka () {Serial.begin (9600); tuo tarpu (! serialas); // laukti serijos atidėjimo (200); „Serial.println“ („DS1307RTC skaitymo testas“); Serial.println (""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Valanda); Serial.write (':'); print2digits (tm. Minutė); Serial.write (':'); print2digits (tm. Antra); Serial.print (", Data (D / M / Y) ="); Serijos spausdinimas (tm. Diena); Serial.write ('/'); Serijos spausdinimas (tm. Mėnuo); Serial.write ('/'); „Serial.print“ („tmYearToCalendar“ (tm. Metai)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 sustabdytas. Prašome paleisti „SetTime“ “); „Serial.println“ („pavyzdys, kaip nustatyti laiką ir pradėti veikti“); Serial.println (); } else {Serial.println ("DS1307 skaitymo klaida!" Patikrinkite schemą. "); Serial.println (); } vėlavimas (9000); } vėlavimas (1000); } void print2digits (int numeris) {if (number> = 0 && number <10) {Serial.write ('0'); } Serijos spausdinimas (numeris); }

Atminkite, kad mes taip pat įtraukėme branduolį Viela.h biblioteka - tai yra „Arduino“ ir naudojama bendravimui per I2C. Nusiųskite kodą, atidarykite nuoseklųjį pultą 9600 baudų greičiu ir žiūrėkite, ar jūsų „Arduino“ kas sekundę rodys esamą laiką. Nuostabus!

Svarbiausias kodas pavyzdyje yra kuriant tmElements_t tm - tai a struktūra gyvensime pagal dabartinį laiką; ir RTC skaitymas (tm) funkcija, kuri gauna dabartinį laiką iš RTC modulio, įtraukia jį į mūsų tm struktūrą ir grįžta teisingai, jei viskas klostėsi gerai. Įtraukite derinimo arba logikos kodą į tą „jei“ teiginį, pvz., Atsispausdinkite laiką arba sureaguokite į jį.

Dabar, kai žinote, kaip reikiamu metu susisiekti su „Arduino“, galite pabandyti perrašyti saulėtekio aliarmo projektą arba sukurti LED žodyno laikrodį - galimybės begalinės! Ką pagaminsi?

Vaizdo kreditai: „Snootlab“ Per „Flickr“

Jamesas yra dirbtinio intelekto bakalauras ir yra CompTIA A + bei Network + sertifikuotas. Jis yra pagrindinis „MakeUseOf“ kūrėjas ir laisvalaikį praleidžia žaisdamas VR dažasvydį ir stalo žaidimus. Nuo mažens jis statė kompiuterius.