Reklāma
Laika uzturēšana Arduino projektos nav tik vienkārša, kā jūs varētu domāt: ja nav datora savienojuma, jūsu nepiespiestais Arduino vienkārši pārstāj darboties, ieskaitot tā iekšējo ķeksīti.
Lai jūsu Arduino būtu sinhronizācijā ar apkārtējo pasauli, jums būs nepieciešams tā saucamais “reālā laika pulksteņa modulis”. Lūk, kā to izmantot.
Kāda jēga no reālā laika pulksteņa (RTC)?
Visticamāk, jūsu dators sinhronizē savu laiku ar internetu, taču tam joprojām ir iekšējs pulkstenis, kas turpina darboties pat bez interneta savienojuma vai ja strāva ir izslēgta. Kad izmantojat datorā iespraustu Arduino, tam ir pieejams precīzs laiks, ko nodrošina jūsu sistēmas pulkstenis. Tas ir diezgan noderīgi, taču lielākā daļa Arduino projektu ir izstrādāti izmantošanai ārpus datora - kurā punkts, katru reizi, kad strāvas padeve tiek atvienota vai Arduino tiek restartēta, tam nav absolūti ne jausmas, kurā laikā tas ir. Iekšējais pulkstenis tiks atiestatīts un nākamreiz, kad tas tiks ieslēgts, atkal sāks skaitīt no nulles.
Ja jūsu projektam ir kāds sakars ar laika nepieciešamību - piemēram, mans naktsgaisma un saullēkta modinātājs Arduino nakts gaismas un saullēkta trauksmes projektsŠodien mēs izgatavosim saullēkta modinātāju, kas maigi un lēnām modinās jūs, neizmantojot aizvainojošu trokšņu radīšanas mašīnu. Lasīt vairāk - tas acīmredzami būs jautājums. Šajā projektā mēs novērsām šo problēmu, manuāli iestatot katru nakti diezgan rupjā laikā veids - lietotājs nospiestu atiestatīšanas pogu tieši pirms gulētiešanas, nodrošinot manuālu laiku sinhronizēt. Skaidrs, ka tas nav ideāls ilgtermiņa risinājums.
RTC modulis ir papildu shēmas elements, kam nepieciešama neliela monētu baterija, kas turpina skaitīt laiku pat tad, kad jūsu Arduino ir izslēgts. Pēc vienreizējas iestatīšanas tas saglabās šo laiku visu akumulatora darbības laiku, parasti labu gadu vai apmēram.
TinyRTC
Arduino vispopulārākais RTC tiek saukts par TinyRTC, un to var iegādāties aptuveni 5–10 USD eBay. Jums, visticamāk, būs jāiegādājas savs akumulators (šo ārzemju preču nosūtīšana uz daudzām vietām ir nelikumīgs) un dažas galvenes (tapas, kas spraugās caurumos, kuras jums būs jālodē sevī).
Šis ir modulis, kas man ir:
Tam pat ir iebūvēts temperatūras sensors, lai gan akumulators kalpos ilgāk, ja jūs to nelietojat.
Augu skaits uz šo lietu izskatās diezgan drausmīgs, taču jums ir nepieciešami tikai četri no tiem; GND, VCC, SCL un SDA - varat izmantot atbilstošās tapas katrā RTC moduļa pusē. Jūs sarunājaties ar pulksteni, izmantojot I2C protokols, kas nozīmē, ka tiek izmantotas tikai divas piespraudes - viena “pulkstenim” (seriālo sakaru datu pulkstenis, tam nav nekāda sakara ar laiku) un otrs - datiem. Patiesībā jūs pat ķēdi līdz 121 I2C ierīcei uz tiem pašiem diviem tapiem - pārbaudiet šī Adafruit lapa citu I2C ierīču izvēlei, ko varētu pievienot, jo to ir daudz!
Darba sākšana
Pievienojiet savu TinyRTC moduli saskaņā ar zemāk redzamo diagrammu - rozā DS līnija nav nepieciešama, tāpat kā tas ir temperatūras sensoram.
Pēc tam lejupielādējiet Laiks un DS1307RTC bibliotēkas un novieto iegūtās mapes mapē /libraries mape.
Izejiet no bibliotēkas un atsākiet Arduino vidi, lai ielādētu bibliotēkas un piemērus.
DS1307RTC izvēlnē atradīsit divus piemērus: augšupielādējiet un palaidiet Uzstādīt laiku pirmais piemērs - tas iestatīs RTC uz pareizo laiku. Ar faktisko kodu nav vērts iedziļināties, vienkārši zināt, ka tas ir jāpalaiž vienreiz, lai veiktu sākotnējo laika sinhronizāciju.
Tālāk apskatīsim piemēra lietojumu ar Lasīšanas pārbaude.
# iekļaut
# iekļaut
# iekļaut spēkā neesoša iestatīšana () {Serial.begin (9600); kamēr (! seriāls); // jāgaida sērijas aizkavēšanās (200); Serial.println ("DS1307RTC Read Test"); Serial.println (""); } tukšs cilpa () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Stunda); Serial.write (':'); print2digits (tm. Minūte); Serial.write (':'); print2digits (tm. Otrais); Serial.print (", Date (D / M / Y) ="); Sērijas.print (tm. Diena); Serial.write ('/'); Sērijas.print (tm. Mēnesis); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Gads)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 ir apturēta. Lūdzu, palaidiet SetTime "); Serial.println ("piemērs, lai sāktu laiku un sāktu darboties."); Serial.println (); } else {Serial.println ("DS1307 lasīšanas kļūda! Lūdzu, pārbaudiet shēmu. "); Serial.println (); } kavēšanās (9000); } kavēšanās (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (numurs); }
Ņemiet vērā, ka mēs esam iekļāvuši arī kodolu Vads.h bibliotēka - tā nāk ar Arduino un tiek izmantota saziņai pa I2C. Augšupielādējiet kodu, atveriet seriālo konsoli ar ātrumu 9600 baud un skatieties, un jūsu Arduino katru sekundi izvada pašreizējo laiku. Brīnišķīgi!
Svarīgākais kods piemērā ir tmElements_t tm - šo a struktūra ka mēs apdzīvojam pašreizējo laiku; un RTC.lasījums (tm) funkcija, kas iegūst pašreizējo laiku no RTC moduļa, ievieto to mūsu tm struktūru un atgriežas taisnība, ja viss noritēja labi. Pievienojiet atkļūdošanas vai loģikas kodu tajā “ja” paziņojumā, piemēram, izdrukājiet laiku vai reaģējiet uz to.
Tagad, kad jūs zināt, kā panākt pareizo laiku ar Arduino, jūs varētu mēģināt pārrakstīt saullēkta trauksmes projektu vai izveidot LED vārdu pulksteni - iespējas ir bezgalīgas! Ko jūs uztaisīsit?
Attēlu kredīti: Snootlab Via Flikrs
Džeimsam ir mākslīgā intelekta bakalaura grāds, un viņš ir sertificēts CompTIA A + un Network +. Viņš ir galvenais MakeUseOf izstrādātājs un brīvo laiku pavada, spēlējot VR peintbolu un galda spēles. Kopš mazotnes viņš būvēja datorus.