Hvordan og hvorfor å legge til en sanntidsklokke til Arduino

For å holde Arduino synkronisert med verden rundt, trenger du det som kalles Real Time Clock-modul. Slik bruker du en.

For å holde Arduino synkronisert med verden rundt, trenger du det som kalles Real Time Clock-modul.  Slik bruker du en.
Annonse

Å holde tid på Arduino-prosjekter er ikke så enkelt som du kanskje tror: Når datamaskinforbindelsen ikke er der, stopper din unpowered Arduino bare å kjøre, inkludert den interne tickeren.

For å holde Arduino synkronisert med verden rundt, trenger du det som kalles en "Real Time Clock-modul". Slik bruker du en.

Hva er poenget med et realtidsklokke (RTC)?

Datamaskinen din sannsynligvis synkroniserer sin tid med internett, men den har fortsatt en intern klokke som fortsetter å gå selv uten en Internett-tilkobling eller strømmen er slått av. Når du bruker en Arduino koblet til en datamaskin, har den tilgang til nøyaktig tid levert av systemuret. Det er ganske nyttig, men de fleste Arduino-prosjekter er designet for å bli brukt vekk fra en datamaskin - når som helst, når strømmen kobles fra, eller Arduino starter på nytt, har det ingen anelse om hvilken tid det er. Den interne klokken vil bli tilbakestilt og begynner å telle fra null igjen neste gang den er slått på.

Hvis prosjektet ditt har noe å gjøre med å trenge tiden - for eksempel nattlys og soloppgangsvekkerklokke Arduino Night Light og Sunrise Alarm Project Arduino nattlys og soloppgang alarmprosjekt i dag, vil vi lage en soloppgangsvekkerklokke som forsiktig og sakte våkne deg uten å gripe til en støtende støymaskin. Les mer - dette kommer tydeligvis til å være et problem. I dette prosjektet kom vi rundt problemet ved å manuelt sette tiden hver natt på en ganske rå måte - brukeren ville trykke på tilbakestillingsknappen like før de gikk i seng, og ga en manuell tidssynkronisering. Klart det er ikke en ideell langtidsløsning.

En RTC-modul er en ekstra bit av krets, som krever et lite myntcellebatteri, som fortsetter å telle tiden selv når Arduino er slått av. Etter å ha blitt satt en gang - det vil holde den tiden for batteriets levetid, vanligvis et godt år eller så.

TinyRTC

Den mest populære RTC for Arduino kalles TinyRTC og kan kjøpes for rundt $ 5- $ 10 på eBay. Du vil sannsynligvis måtte levere ditt eget batteri (det er ulovlig å sende disse utenlands til mange steder), og noen overskrifter (pinnene som spretter inn i hullene, som du må lodde i deg selv).

Dette er modulen jeg har:

rtc-modul

Den har til og med en innebygd temperatursensor, men batteriet varer lenger hvis du ikke bruker det.

Antall hull på den tingen ser ganske skummel ut, men du trenger bare fire av dem; GND, VCC, SCL og SDA - du kan bruke de relevante pinnene på hver side av RTC-modulen. Du snakker med klokken ved hjelp av I2C-protokollen, som betyr at bare to pins er brukt - en for "klokken" (en seriell kommunikasjonsdataklokke, ingenting å gjøre med tiden) og en for dataene. Faktisk kan du til og med koble opp til 121 I2C-enheter på samme to pins - sjekk ut denne Adafruit-siden for et utvalg av andre I2C-enheter du kan legge til, fordi det er mye!

Starter

Koble til din TinyRTC-modul i henhold til diagrammet nedenfor - den rosa DS-linjen er ikke nødvendig, som det er for temperatursensoren.

ledningsnett

Deretter laster du ned tid- og DS1307RTC-bibliotekene og legger de resulterende mappene i mappen / biblioteker .

Avslutt og gjenoppstart Arduino-miljøet for å laste inn i bibliotekene og eksemplene.
ds1307rtc-eksempel-menyen

Du finner to eksempler på DS1307RTC-menyen: Last opp og kjør SetTime- eksemplet først - dette vil sette RTC til riktig tid. Den faktiske koden er ikke verdt å gå i detalj med, bare vet at du trenger å kjøre den en gang for å utføre den første tidssynkroniseringen.

Neste, se på eksempelbruken med ReadTest .

#include #include #include void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(200); Serial.println("DS1307RTC Read Test"); Serial.println("-------------------"); } void loop() { tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); print2digits(tm.Hour); Serial.write(':'); print2digits(tm.Minute); Serial.write(':'); print2digits(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number 

Merk at vi også har tatt med kjerne Wire.h biblioteket - dette kommer med Arduino og brukes til å kommunisere over I2C. Last opp koden, åpne seriekonsollen på 9600 baud, og se og Arduino-utgangene utgir gjeldende tid hvert sekund. Strålende!

Den viktigste koden i eksemplet er å lage en tmElements_t tm - dette er en struktur som vi vil fylle ut med nåværende tid; og RTC.read (tm) -funksjonen, som får den nåværende tiden fra RTC-modulen, setter den inn i vår tm- struktur, og returnerer sant hvis alt gikk bra. Legg til feilsøkings- eller logikkoden i den "if" -oppstillingen, for eksempel å skrive ut tiden eller reagere på den.

Nå som du vet hvordan du får den rette tiden med Arduino, kan du prøve å skrive om soloppgangalarmprosjektet eller lage et LED-ordklokke - mulighetene er uendelige! Hva vil du gjøre?

Image Credits: Snootlab Via Flickr

In this article