Mainos
Ajan pitäminen Arduino-projekteissa ei ole niin helppoa kuin luulet: kun tietokoneyhteyttä ei ole, virrattomana Arduino yksinkertaisesti lakkaa toimimasta, mukaan lukien sisäinen tikku.
Jotta Arduino pysyy synkronoituna ympäröivän maailman kanssa, tarvitset niin kutsutun "Real Time Clock -moduulin". Näin käytät tätä.
Mikä on reaaliaikaisen kellon (RTC) merkitys?
Todennäköisesti tietokoneesi synkronoi aikansa Internetin kanssa, mutta siinä on silti sisäinen kello, joka jatkaa liikkumista jopa ilman Internet-yhteyttä tai virta on katkaistu. Kun käytät tietokoneeseen kytkettyä Arduinoa, sillä on pääsy järjestelmän kellon tarjoamaan oikeaan aikaan. Se on aika hyödyllistä, mutta suurin osa Arduino-projekteista on suunniteltu käytettäväksi etäällä tietokonetta - missä kohta aina, kun virta katkaistaan tai Arduino käynnistetään uudelleen, sillä ei ole mitään aavistustakaan siitä, mihin aikaan se on. Sisäinen kello nollataan ja se alkaa laskea nollasta seuraavan kerran, kun se käynnistetään.
Jos projektissasi on jotain tekemistä ajan tarvitsemisen kanssa - kuten minun yövalo ja auringonnousun herätyskello Arduino-yövalo- ja auringonnousun hälytysprojektiTänään valmistamme auringonnousun herätyskellon, joka herättää hellästi ja hitaasti turvautumatta loukkaavaan melua tuottavaan koneeseen. Lue lisää - tästä tulee selvästi kysymys. Siinä projektissa pääsimme ongelmaan kiertämällä asettamalla manuaalisesti joka ilta aika melko raa'asti tapa - käyttäjä painaa nollauspainiketta juuri ennen nukkumaanmenoa antaen manuaalisen ajan synkronointi. On selvää, että se ei ole ihanteellinen pitkäaikainen ratkaisu.
RTC-moduuli on lisäbitti piireistä, joka vaatii pienen kolikkokennon, joka laskee edelleen aikaa myös silloin, kun Arduino-laite on kytketty pois päältä. Kun olet asettanut yhden kerran - se pitää akun käyttöiän, yleensä hyvän vuoden tai niin.
TinyRTC
Arduinon suosituin RTC on nimeltään TinyRTC, ja sitä voi ostaa noin 5–10 dollaria eBayssa. Sinun on todennäköisesti toimitettava oma akku (näiden laitosten lähettäminen ulkomaille moniin paikkoihin on laitonta) ja jotkut otsikot (reikien reikät, jotka sinun täytyy juottaa itseesi).
Tämä on moduuli, joka minulla on:

Siinä on jopa sisäänrakennettu lämpötila-anturi, vaikka akku kestää kauemmin, jos et käytä sitä.
Tuohon reikien lukumäärä näyttää melko pelottavalta, mutta tarvitset vain neljä niistä; GND, VCC, SCL ja SDA - voit käyttää RTC-moduulin molemmin puolin olevia merkityksellisiä tappeja. Puhut kellolle käyttämällä I2C-protokolla, mikä tarkoittaa, että käytetään vain kahta nastaa - yksi kelloa varten (sarjaliikennedatakello, jolla ei ole mitään tekemistä ajan kanssa) ja toinen tiedoille. Itse asiassa ketjutat jopa 121 I2C-laitetta samaan kahteen tappiin - tarkista tämä Adafruit-sivu Voit lisätä muita I2C-laitteita, koska niitä on paljon!
Päästä alkuun
Kytke TinyRTC-moduuli alla olevan kaavion mukaan - vaaleanpunaista DS-linjaa ei tarvita, kuten lämpötila-anturille.

Lataa seuraavaksi Aika ja DS1307RTC kirjastot ja sijoita tuloksena olevat kansiot kansioon /libraries kansio.
Poistu ja käynnistä Arduino-ympäristö ladataksesi kirjastoja ja esimerkkejä.
DS1307RTC-valikossa on kaksi esimerkkiä: lataa ja suorita Asettaa aika esimerkki ensin - tämä asettaa RTC: n oikeaan aikaan. Varsinaisen koodin kanssa ei kannata mennä yksityiskohtiin, tiedä vain, että sinun on suoritettava se kerran suorittaaksesi alkuperäisen synkronoinnin.
Seuraavaksi tarkastellaan esimerkin käyttöä ReadTest.
#sisältää
#sisältää
#sisältää tyhjä asetus () {Serial.begin (9600); kun taas (! sarja); // odota sarjaviivettä (200); Serial.println ("DS1307RTC Read Test"); Serial.println ( ""); } tyhjä silmukka () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Tunnin); Serial.write ( ':'); print2digits (tm. Minuutti); Serial.write ( ':'); print2digits (tm. Toinen); Serial.print (", päivämäärä (D / M / Y) ="); Sarjajälki (tm. Päivä); Serial.write ( '/'); Sarjajälki (tm. Kuukausi); Serial.write ( '/'); Sarjakuva.print (tmYearToCalendar (tm. Vuosi)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 on pysäytetty. Suorita SetTime "); Serial.println ("esimerkki ajan asettamisesta ja aloittamisesta."); Serial.println (); } else {Serial.println ("DS1307 lue virhe! Tarkista piirit. "); Serial.println (); } viive (9000); } viive (1000); } mitätön tulostusnumero (int-numero) {if (numero> = 0 & & numero <10) {Sarja.kirjoitus ('0'); } Serial.print (numero); }
Huomaa, että olemme mukana myös ytimen Wire.h kirjasto - tämä tulee Arduinon mukana ja sitä käytetään kommunikointiin I2C: n kautta. Lataa koodi, avaa sarjakonsoli nopeudella 9600 baudia ja katsele, niin Arduino tuottaa nykyisen ajan joka sekunti. Ihmeellisiä!
Tärkein esimerkissä oleva koodi on tmElements_t tm - Tämä rakenne että asumme nykyisen ajan kanssa; ja RTC.luku (tm) toiminto, joka saa nykyisen ajan RTC-moduulista, asettaa sen meidän tm rakenne, ja palaa totta, jos kaikki meni hyvin. Lisää debug- tai logiikkakoodisi kyseisen “if” -käskyn sisälle, esimerkiksi tulosta aika tai reagoi siihen.
Nyt kun tiedät kuinka saada oikea aika Arduinon kanssa, voit yrittää kirjoittaa auringonnousun hälytysprojektin uudelleen tai luoda LED-sanan kellon - mahdollisuudet ovat rajattomat! Mitä sinä teet?
Kuvapisteet: Snootlab Flickrin kautta
Jamesilla on teknisen älykunnan kandidaatin tutkinto ja hän on CompTIA A + ja Network + -sertifioitu. Hän on MakeUseOfin johtava kehittäjä ja viettää vapaa-aikansa pelaamalla VR-paintballia ja lautapelejä. Hän on rakennettu tietokoneita lapsuudestaan asti.