Cum și de ce să adăugați un ceas în timp real pentru Arduino
Păstrarea timpului în proiectele Arduino nu este la fel de ușor cum credeți: odată ce conexiunea computerului nu este acolo, arduinul neautorizat se oprește pur și simplu, inclusiv bonul său intern.
Pentru a vă păstra sincronizarea Arduino cu lumea din jur, veți avea nevoie de ceea ce se numește a “Modul ceas de timp real”. Iată cum folosiți unul.
Care este punctul unui ceas în timp real (RTC)?
Calculatorul dvs. cel mai probabil își sincronizează timpul cu internetul, dar are încă un ceas intern care continuă să funcționeze chiar și fără conexiune la Internet sau dacă alimentarea este oprită. Când utilizați un dispozitiv Arduino conectat la un calculator, acesta are acces la ora exactă furnizată de ceasul de sistem. Acest lucru este destul de util, dar majoritatea proiectelor Arduino sunt concepute pentru a fi utilizate departe de un computer - moment în care, odată ce puterea este deconectată sau Arduino repornit, nu va avea absolut nici o idee despre ce oră este. Ceasul intern va fi resetat și va începe numărarea din nou de la zero data viitoare când este alimentat.
În cazul în care proiectul dvs. are ceva de-a face cu nevoie de timp - cum ar fi lumina mea de noapte și sunrise ceas deșteptător Arduino Night Light și Sunrise Alarm Project Arduino Night Light și Sunrise Alarm Project Astăzi, vom face un ceas cu alarmă de răsărit, vă trezesc încet fără a recurge la o mașină ofensatoare de zgomot. Citiți mai multe - este clar că va fi o problemă. În acest proiect, am rezolvat problema prin setarea manuală a timpului în fiecare noapte într-un mod destul de brutal - utilizatorul ar apăsa butonul de reset înainte de a se culca, oferind o sincronizare manuală a timpului. În mod evident, aceasta nu este o soluție ideală pe termen lung.
Un modul RTC este un bit suplimentar de circuite, care necesită o baterie de celule mici, care continuă să contorizeze timpul chiar și atunci când Arduino este oprit. După ce a fost setat o dată - va păstra acel timp pentru viața bateriei, de obicei un an bun sau cam asa ceva.
TinyRTC
Cel mai popular RTC pentru Arduino este numit TinyRTC și poate fi cumpărat pentru aproximativ $ 5- $ 10 pe eBay. Cel mai probabil, va trebui să vă furnizați propria baterie (este ilegal să expediați aceste mărfuri în străinătate în multe locuri) și unele antete (acele care se introduc în găuri, ceea ce va trebui să le lipiți în interiorul dvs.).
Acesta este modulul pe care îl am:
Are chiar și un senzor de temperatură încorporat, deși bateria va dura mai mult dacă nu o utilizați.
Numarul de gauri pe acel lucru pare destul de infricosator, dar ai nevoie doar de patru; GND, VCC, SCL și SDA - puteți utiliza pinii relevanți de fiecare parte a modulului RTC. Vorbiți cu ceasul folosind protocolul I2C, ceea ce înseamnă că sunt folosite numai doi pini - unul pentru “ceas” (un ceas de date de comunicații serial, nimic de-a face cu timpul) și unul pentru date. De fapt, puteți chiar să conectați până la 121 dispozitive I2C pe aceleași două pini - consultați această pagină Adafruit pentru o serie de alte dispozitive I2C pe care le puteți adăuga, deoarece există o mulțime!
Noțiuni de bază
Conectați-vă modulul TinyRTC conform diagramei de mai jos - nu este necesară o linie DS roz, așa cum este pentru senzorul de temperatură.
Apoi, descărcați bibliotecile Time și DS1307RTC și plasați folderele care apar în fișierele dvs. / biblioteci pliant.
Ieșiți și relansați mediul Arduino pentru a încărca în biblioteci și exemple.
Veți găsi două exemple în meniul DS1307RTC: încărcați și executați Potriveste ora exemplu, primul - acesta va seta RTC la ora corectă. Codul real nu merită să intri în detaliu, știți că trebuie să îl executați o singură dată pentru a efectua sincronizarea inițială a timpului.
Apoi, uita-te la exemplul de utilizare cu ReadTest.
#include #include #include void setup () Serial.begin (9600); în timp ce (! Serial); // așteptați întârzierea serială (200); Serial.println ("testul de citire DS1307RTC"); Serial.println ( "-------------------"); void loop () tmElements_t tm; dacă (RTC.read (tm)) Serial.print ("Ok, Time ="); print2digits (tm.Hour); Serial.write ( ':'); print2digits (tm.Minute); Serial.write ( ':'); print2digits (tm.Second); Serial.print (", Data (D / M / Y) ="); Serial.print (tm.Day); Serial.write ( '/'); Serial.print (tm.Month); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm.Year)); Serial.println (); altceva if (RTC.chipPresent ()) Serial.println ("DS1307 este oprit. Porniți SetTime"); Serial.println ("exemplu pentru inițializarea timpului și începerea executării."); Serial.println (); altceva Serial.println ("eroare de citire DS1307! Verificați circuitele."); Serial.println (); întârziere (9000); întârziere (1000); void print2digits (număr int) if (număr> = 0 && numărul
Rețineți că am inclus și nucleul Wire.h biblioteca - aceasta vine cu Arduino și este utilizată pentru comunicarea peste I2C. Încărcați codul, deschideți consola seria la 9600 baud și urmăriți și Arduino vă iese la ora curentă în fiecare secundă. Minunat!
Cel mai important cod din exemplu este crearea unui tmElements_t tm - acest lucru a structura că vom popula cu timpul curent; si RTC.read (tm) funcția, care primește ora curentă de la modulul RTC, o pune în noi tm structură, și întoarce adevărat dacă totul a mers bine. Adăugați codul de depanare sau logică în interiorul acelei instrucțiuni "if", cum ar fi imprimarea timpului sau reacția la acesta.
Acum că știți cum să obțineți timpul potrivit cu Arduino, puteți încerca să rescrieți proiectul de alarmă de răsărit sau să creați un ceas cu LED-uri - posibilitățile sunt nesfârșite! Ce vei face?
Credite de imagine: Snootlab Via Flickr
Explorați mai multe despre: Arduino.