Publicitate

Păstrarea timpului pentru proiectele Arduino nu este atât de ușor pe cât ați putea crede: odată ce conexiunea la computer nu este acolo, Arduino-ul dvs. fără putere pur și simplu încetează să funcționeze, inclusiv tickerul său intern.

Pentru a vă păstra Arduino în sincronizare cu lumea din jur, va trebui să aveți nevoie de ceea ce se numește „modul de ceas în timp real”. Iată cum folosiți unul.

Care este rostul unui ceas în timp real (RTC)?

Cel mai probabil computerul tău își sincronizează ora cu internetul, dar are totuși un ceas intern care continuă să funcționeze chiar și fără conexiune la Internet sau că alimentarea este oprită. Când utilizați un Arduino conectat la un computer, acesta are acces la timpul precis furnizat de ceasul sistemului. Este destul de util, dar cele mai multe proiecte Arduino sunt concepute pentru a fi utilizate departe de un computer - la care punct, de fiecare dată când alimentarea este deconectată sau Arduino repornește, nu va avea nici o idee despre ce oră este. Ceasul intern va fi resetat și începe să numere din nou de la zero data viitoare când este pornit.

instagram viewer

Dacă proiectul dvs. are vreo legătură cu a avea nevoie de timp - cum ar fi al meu lumină de noapte și ceas de soare Proiectul de alarmă Arduino Night Light and SunriseAstăzi, vom crea un ceas cu alarmă pentru răsăritul soarelui, care vă va trezi ușor și încet, fără a apela la o mașină ofensivă de zgomot. Citeste mai mult - aceasta va fi în mod clar o problemă. În acel proiect, ne-am ridicat problema prin stabilirea manuală a orei în fiecare seară într-un mod destul de grosolan drum - utilizatorul ar apăsa butonul de resetare chiar înainte de a merge la culcare, oferind un timp manual sincronizare. În mod clar, aceasta nu este o soluție ideală de lungă durată.

Un modul RTC este un bit suplimentar de circuit, necesitând o baterie de celule mici, care continuă să conteze timpul chiar și atunci când Arduino este oprit. După ce a fost setat o dată - va menține acest timp pentru viața bateriei, de obicei un an bun sau cam așa ceva.

TinyRTC

Cel mai popular RTC pentru Arduino se numește TinyRTC și poate fi cumpărat de aproape 5- $ 10 USD pe eBay. Cel mai probabil va trebui să vă furnizați propria baterie (este ilegal să livrați aceste peste mări în multe locuri) și câteva anteturi (pinii care se fixează în găuri, pe care va trebui să-i vindeți singur).

Acesta este modulul pe care îl am:

rtc-module

Are chiar și un senzor de temperatură încorporat, deși bateria va dura mai mult dacă nu o utilizați.

Numărul de găuri pe acel lucru pare destul de înfricoșător, dar ai nevoie doar de patru; GND, VCC, SCL și SDA - puteți utiliza pinii relevanți de o parte și de alta a modulului RTC. Vorbesti cu ceasul folosind Protocolul I2C, ceea ce înseamnă că sunt folosiți doar doi pini - unul pentru „ceas” (un ceas de date de comunicații seriale, nimic de-a face cu timpul) și unul pentru date. De fapt, chiar faceți lanț până la 121 de dispozitive I2C pe aceiași doi pini - verificați această pagină Adafruit pentru o selecție de alte dispozitive I2C pe care le puteți adăuga, pentru că sunt foarte multe

Noțiuni de bază

Caută-ți modulul TinyRTC în conformitate cu diagrama de mai jos - nu este necesară linia DS roz, deoarece pentru senzorul de temperatură.

cabluri

În continuare, descărcați Timp și DS1307RTC biblioteci și plasați folderele rezultate în dvs. /libraries pliant.

Ieșiți și relansați mediul Arduino pentru a încărca în biblioteci și exemple.
ds1307rtc-exemplu-meniu

În meniul DS1307RTC veți găsi două exemple: încărcați și executați Potriveste ora exemplu mai întâi - acest lucru va seta RTC la ora corectă. Nu merită să intri în detalii cu codul real, ci trebuie să știi că trebuie să-l rulezi o dată pentru a efectua sincronizarea timpului inițial.

În continuare, consultați exemplul de utilizare cu ReadTest.


#include 
#include 
#include  void setup () {Serial.begin (9600); în timp ce (! serial); // așteptați întârzierea în serie (200); Serial.println ("Test de citire DS1307RTC"); Serial.println ( ""); } bucla void () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Ora); Serial.write ( ':'); print2digits (tm. Minut); Serial.write ( ':'); print2digits (tm. Al doilea); Serial.print (", Data (D / M / Y) ="); Serial.print (tm. Zi); Serial.write ( '/'); Serial.print (tm. Lună); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm. An)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 este oprit. Vă rugăm să rulați SetTime "); Serial.println ("exemplu pentru inițializarea orei și începerea rulării."); Serial.println (); } else {Serial.println ("eroare de citire DS1307! Verificați circuitul. "); Serial.println (); } întârziere (9000); } întârziere (1000); } void print2digits (număr int) {if (număr> = 0 && number <10) {Serial.write ('0'); } Serial.print (număr); }

Rețineți că am inclus și miezul principal Wire.h bibliotecă - acesta vine împreună cu Arduino și este utilizat pentru comunicarea prin I2C. Încărcați codul, deschideți consola serială la 9600 baud și urmăriți și Arduino vă scoate ora curentă în fiecare secundă. Minunat!

Cel mai important cod din exemplu este crearea unui tmElements_t tm - acesta a structura că vom adăuga ora actuală; si RTC.read (tm) funcția, care primește ora curentă din modulul RTC, o pune în nostru tm structură și se întoarce adevărat dacă totul a decurs bine. Adăugați codul dvs. de depanare sau logică în acea instrucțiune „dacă”, cum ar fi tipărirea timpului sau reacția la aceasta.

Acum că știi să obții momentul potrivit cu Arduino, ai putea încerca să rescrii proiectul de alarmă de răsărit sau să creezi un ceas cu LED-uri - posibilitățile sunt nelimitate! Ce vei face?

Credite imagine: Snootlab Via Flickr

James are licență în inteligență artificială și este certificat CompTIA A + și Network +. Este dezvoltatorul principal al MakeUseOf și își petrece timpul liber jucând VR paintball și boardgames. Construiește calculatoare de când era mic.