Arduino kella järgi sisselülitamine. Arduino kell ilma RTC-moodulit kasutamata

Üks esimesi projekte, mida algajad Arduino tahvli abil ehitavad, on lihtne kell, lugedes aega maha. Põhimõtteliselt põhinevad sellised kellad Arduinoga ühendatud RTC moodulil ( Reaalajas Kell või reaalajas kell). Täna turul elektroonilised komponendid saadaval erinevad mudelid RTC-d, mille täpsus ja hind on erinevad. Levinud mudelid on DS1302, DS1307, DS3231.



Kuid saate teha Arduino kella ilma RTC-d kasutamata, eriti kui te ei saa selliseid mooduleid hankida. Täpsus muidugi on antud juhul jääb väikeseks, seega tuleks projekti käsitleda pigem koolitusprojektina.


Selliste kellade tööpõhimõte on üsna lihtne. Iga kord, kui lülitate selle Arduino kella sisse, peate selle seadistama praegusele kellaajale, nagu igale teisele analoogkell. Kindlasti on parem selliseid kellasid omas mitte kasutada igapäevaelu kui nad on pikka aega aktiivsed ilma taaskäivituseta ja edasine kohandamine, kuna desünkroniseerimine praeguse ajaga võib pikaajalise töö ajal olla märkimisväärne.


Seda kella saab kokku panna tavalise kellaga leivalaud, kuna see ei nõua palju komponente. Meie peamine link on siin Arduino plaat Uno. Aja kuvamiseks võite võtta 16x2 LCD-ekraani. Ajaseadete muutmiseks peate ühendama kaks nuppu (tundide ja minutite jaoks). Nupud on ühendatud Aduinoga 10KΩ takistite kaudu. Ekraani heleduse muutmiseks vajate 10 kOhm potentsiomeetrit. Allpool on toodud kõigi nende komponentide ühendusskeem Arduino Uno plaadiga.



Nüüd peate Arduino programmeerima. Allpool on toodud lihtne kood (visand), mis võimaldab LCD-ekraanil kellaaega kuvada.


#kaasa LiquidCrystal lcd(12,11,5,4,3,2); int h=12; int m; int s; int lipp; int TIME; const int hs=8; const int ms=9; sisemine olek1; sisemine olek2; void setup() ( lcd.begin(16,2); ) void loop() ( lcd.setCursor(0,0); s=s+1; lcd.print("TIME:"); lcd.print(h lcd.print(":");<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(lipp==24)lipp=0; viivitus(1000); lcd.clear(); if(s==60)(s=0; m=m+1; ) if(m==60) (m=0; h=h+1; lipp=lipp+1; ) if(h==13 ) ( h=1; ) lcd.setCursor(0,1); lcd.print("ILUSAT PÄEVA"); //-------Aeg // seadistus-------// olek1=digitalRead(hs); if(olek1==1) ( h=h+1; lipp=lipp+1; if(lipp<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM");

if(lipp==24)lipp=0;
kui(h==13)h=1; ) olek2=digitalRead(ms); if(olek2==1)(s=0; m=m+1; ) )    Täname, et tundsite huvi veebisaidi teabeprojekti vastu.   Kui soovite huvitavat ja
kasulikke materjale

ilmus sagedamini ja reklaami oli vähem,    Saate meie projekti toetada, annetades selle arendamiseks mis tahes summa. Niisiis, reaalajas kell. See kasulik väike asi lahendab enamiku kasulikke ajaga seotud probleeme. Oletame, et kontrollite oma suvilas kastmist kell 5 hommikul. Või tulede sisse-välja lülitamine

teatud hetk

. Kuupäeva järgi saate kütma hakata igas majas. Asi on päris huvitav ja kasulik. Ja konkreetselt? Vaatame populaarse Arduino platvormi reaalajas kella DS1302. Sellest artiklist saate teada: Tere päevast,

kallid lugejad

blokeeri kip-maailm! Kuidas sul läheb? Kirjuta kommentaaridesse, kas oled robootikast huvitatud? Mida see teema sinu jaoks tähendab? Ma ei suuda hetkekski lõpetada sellele mõtlemist. Unistan ja näen, millal jõuame lõpuks selleni, et igaüks saab endale lubada endale isikliku robot-assistendi soetada. Pole tähtis, mida ta teeb, korjab prügi, niidab muru, peseb autot. Ma kujutan ette, kuidas

keerulised algoritmid need peavad sisalduma oma "ajus". Jõuame ju selleni, et vilgutame tarkvara samamoodi nagu personaalarvutites. Samuti laadige alla

rakendusprogrammid . Õmble käed, jalad, vaheta küünised, manipulaatorid. Vaadake filme "I Robot", "

Tehisintellekt

", "Tähesõjad".

Jaapanlased on oma arendusi juba pikka aega ellu viinud. Miks me halvemad oleme?? Meil on väga vähe populaarsust. Ma tean vähe arendajaid. Ma võin seda oma sõrmedel üles lugeda. Me teeme midagi muud. Oleme edasimüüjad. Ostame lihtsalt valmis komplekte, roboteid, mänguasju ja igasugust prügi.

Miks me ei arenda seda:

Või see:

Lõpetasin oma mõtted valjusti. Räägime DS1302 reaalajas kella taimeri ühendamisest Arduinoga.

Reaalajas kell DS1302

Arduino kontrolleril pole oma kella. Seetõttu tuleb seda vajadusel täiendada spetsiaalse DS1302 mikroskeemiga.

Toiteallikaks võivad need plaadid kasutada oma akut või saada toite otse Arduino plaadilt.


Pinout tabel:

Ühendusskeem Arduino UNO-ga:

Teek võimaldab lugeda ja kirjutada reaalajas parameetreid. Annan allpool lühikese kirjelduse:

#kaasa // Ühendage raamatukogu.
iarduino_RTC OBJEKT ( NIMI [, RST_OUTPUT [, CLK_OUTPUT [, DAT_OUTPUT]]] ); // Objekti loomine.

Funktsioon alustada();// Initsialiseerige RTC mooduli töö.

Funktsioon settime( SEK [, MIN [, TUND [, PÄEV [, KUU [, AASTA [, PÄEV]]]]]] ); // Kellaaja määramine.

Funktsioon saada aeg ([ LINE ] ); // Lugege kellaaega.

funktsiooni vilkumise aeg ( PARAMEETER [SAGEDUS] ); // paneb funktsiooni gettime "vilguma" määratud parameeter aega.

funktsiooni periood ( MINUTID ); // Näitab moodulile juurdepääsu minimaalset perioodi minutites.

Muutuv sekundit// Tagastab sekundid vahemikus 0 kuni 59.

Muutuv minutit// Tagastab minutid 0 kuni 59.

Muutuv tundi// Tagastab tunnid 1.–12.

Muutuv Tundi// Tagastab tunnid vahemikus 0 kuni 23.

Muutuv keskpäev// Tagastab keskpäeval 0 või 1 (0-am, 1-pm).

Muutuv päeval// Tagastab kuu päeva vahemikus 1 kuni 31.

Muutuv argipäev// Tagastab nädalapäeva 0 kuni 6 (0 on pühapäev, 6 on laupäev).

Muutuv kuu// Tagastab kuu vahemikus 1 kuni 12.

Muutuv aastal// Tagastab aastaarvu vahemikus 0 kuni 99.

Me kirjutame lihtne programm. Praeguse kellaaja seadistamine RTC-moodulis (DS1302):

Arduino

#kaasa iarduino_RTC aeg(RTC_DS1302,6,7,8); void setup() ( delay(300); Serial.begin(9600); time.begin(); time.settime(0,51,21,27,10,15,2); // 0 sek, 51 min, 21 tundi, 27. oktoober 2015, teisipäev ) void loop())( if(millis()%1000==0)( // kui 1 sekund on möödunud Serial.println(time.gettime("d-m-Y, H:i: s, D")); // kuva viivitus (1); // paus 1 ms, et mitte kuvada aega mitu korda 1 ms jooksul ) )

#kaasa

iarduino_RTCtime(RTC_DS1302, 6, 7, 8);

void setup() (

viivitus(300);

Sari. begin(9600);

aega. alustada();

aega. settime(0, 51, 21, 27, 10, 15, 2); // 0 sek, 51 min, 21 tundi, 27. oktoober 2015, teisipäev

void loop() (

if (millis() % 1000 == 0 ) ( // kui 1 sekund on möödas

Sari. println (aeg . gettime ( "d-m-Y, H:i:s, D" ) ); // kuvamise aeg

viivitus(1); // pausi 1 ms, et mitte kuvada aega mitu korda 1 ms jooksul

Loeme praegust aega RTC moodulist (DS1302) ja väljastame selle "jadaporti":

#kaasa iarduino_RTC aeg(RTC_DS1302,6,7,8); void setup() ( delay(300); Serial.begin(9600); time.begin(); ) void loop())( if(millis()%1000==0)( // kui 1 sekund on möödas Serial .println (time.gettime("d-m-Y, H:i:s, D") // kuvab viivituse (1) // paus 1 ms, et mitte näidata aega mitu korda 1 ms jooksul; )

Tere pärastlõunast, täna jagan juhiseid toatermomeetriga kella tegemiseks( DIY Arduino kell). Kell töötab Arduino UNO-l, aja ja temperatuuri kuvamiseks kasutatakse WG12864B graafilist ekraani. Temperatuuriandurina - ds18b20. Erinevalt enamikust teistest kelladest ei kasuta ma RTS-i (Real Time Clock), vaid proovin ilma selle lisamoodulita hakkama saada.

Arduino ahelad eristuvad oma lihtsuse poolest ja igaüks võib alustada Arduino õppimist. Teekide ühendamise ja Arduino välklampide ühendamise kohta saate lugeda meie artiklist.

Alustame.

Selle kella loomiseks vajame:

Arduino UNO (või mõni muu Arduinoga ühilduv maksma)
- Graafiline ekraanWG12864B
- Temperatuuriandur ds18b20
- Takisti 4,7 Kom 0,25 W
- Takisti 100 oomi 0,25 W
- Patareipesa 4 AA patarei jaoks
- Sobiv kast
- Hea fail
- küünelakk (must või kehavärvi)
- Mõni õhuke plastik või papp
- Elektrilint
- Ühendusjuhtmed
- Trükkplaat
- Nupud
- Jootekolb
- Joote, kampol
- Kahepoolne teip

Graafilise ekraani ettevalmistamine.
Esmapilgul tekitab ekraani ühendamine palju probleeme ja raskusi. Kuid kui mõistate kõigepealt nende tüüpe, muutub see palju lihtsamaks ja selgemaks. Kontrolleril ks0107/ks0108 on palju erinevaid ja tüüpe ekraane. Kõik ekraanid jagunevad tavaliselt 4 tüüpi:
Valik A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T
Valik B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Kuvarid AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway S12864-88, Topway LDG1,428t LDG1,48t 12864L-2, 12864J-1
Valik C: Shenzhen Jinghua Displays Co Ltd. JM12864
Valik D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS191264/

Nimekiri pole täielik, neid on palju. Kõige tavalisem ja minu arvates mugavam on WG12864B3 V2.0. Ekraani saab ühendada Arduinoga läbi jada- või paralleelport. Arduino UNO-ga kasutamisel on parem valida ühendus läbi jadaport– siis vajame ainult 3 mikrokontrolleri väljundit, mitte vähemalt 13 liini asemel, kui see on ühendatud paralleelpordi kaudu. Kõik ühendab üsna lihtsalt. Üks nüanss on veel: müügil on kaks kuvamisvõimalust, sisseehitatud potentsiomeetriga (kontrastsuse reguleerimiseks) ja ilma selleta. Ma valisin ja soovitan teil teha sama sisseehitatud seadmega.


See vähendab osade arvu ja jootmisaega. Taustavalgustuseks tasub paigaldada ka 100-oomine voolu piirav takisti. 5 volti otse ühendades on oht taustvalgustuse läbipõlemiseks.
WG12864B – Arduino UNO
1 (GND) – GND
2 (VCC) - +5 V
4 (RS) – 10
5 (R/W) – 11
6 (E) – 13
15 (PSB) – GND
19 (BLA) – läbi takisti - +5V
20 (BLK) – GND

Kõige mugavam on kõik ekraani taha kokku panna ja sealt väljastada 5 Arduino UNO-ga ühendavat juhet. Lõpptulemus peaks välja nägema umbes selline:


Neile, kes ikka valivad paralleelühendus Toon ühendustabeli.

Ja valiku B ekraanide diagramm:



Ühele sideliinile saab ühendada mitu andurit. Meie kellade jaoks piisab ühest. Ühendame juhtme ds18b20 DQ tihvtist Arduino UNO kontaktiga 5.

Tahvli ettevalmistamine nuppudega.
Kella kellaaja ja kuupäeva määramiseks kasutame kolme nuppu. Mugavuse huvides jootme trükkplaadil kolm nuppu ja toome juhtmed välja.


Ühendame järgmiselt: ühendame kõigi kolme nupu ühise juhtme Arduino GND-ga. Esimene nupp, mida kasutatakse kellaaja seadistusrežiimi sisenemiseks ning kellaaja ja kuupäeva järgi ümberlülitamiseks, on ühendatud nööpnõelaga 2. Teine, väärtuse suurendamise nupp, on "Pin 3" ja kolmas, väärtuse vähendamise nupp, on "Pin 4".

Pannes kõik kokku.
Et vältida lühis, ekraan peaks olema isoleeritud. Mähime selle elektrilindiga ringiks ja edasi tagasi Kahepoolsele lindile kinnitame isolatsioonimaterjali riba, mis on lõigatud mõõtu. Paks papp või õhuke plast sobib. Paberiks kasutasin tahvelarvutist plastikut. Tulemus on järgmine:


Ekraani ette, piki serva, liimime kahepoolse vahtteibi, eelistatavalt musta.


Ühendage ekraan Arduinoga:


Pluss alates akupesaÜhendage Arduino VIN-koodiga, miinus GND-ga. Asetame selle Arduino taha. Enne korpusesse paigaldamist ärge unustage temperatuuriandurit ja plaati nuppudega ühendada.


Eskiisi ettevalmistamine ja täitmine.
Temperatuuriandur nõuab OneWire'i raamatukogu.

Ekraanile edastamine toimub U8glibi teegi kaudu:

Visandi redigeerimiseks ja täitmiseks peate installima need kaks teeki. Selleks on kaks võimalust. Pakkige need arhiivid lihtsalt lahti ja asetage lahtipakitud failid installikaustas asuvasse kausta "teegid" Arduino IDE. Või teine ​​võimalus on installida teegid otse programmeerimiskeskkonda. Allalaaditud arhiive lahti pakkimata valige Arduino IDE-s menüü Sketch - Connect Library. Valige ripploendi ülaosas "Add.Zip teek". Valige kuvatavas dialoogiboksis teek, mille soovite lisada. Avage uuesti menüü Sketch – Ühenda raamatukogu. Rippmenüü allosas peaksite nägema uut teeki. Nüüd saab raamatukogu programmides kasutada. Ärge unustage pärast seda Arduino IDE-d taaskäivitada.

Temperatuuriandur töötab One Wire protokolli abil ja sellel on iga seadme jaoks kordumatu aadress – 64-bitine kood. Seda koodi pole otstarbekas iga kord otsida. Seetõttu tuleb esmalt ühendada andur Arduinoga, laadida üles menüüst File – Näited – Dallase temperatuur – OneWireSearch leitud eskiis. Järgmisena käivitage Tools - Port Monitor. Arduino peab leidma meie anduri, kirjutama selle aadressi ja hetke temperatuurinäidud. Kopeerime või kirjutame lihtsalt üles oma anduri aadressi. Avage visand Arduino_WG12864B_Term, otsige rida:

Baitiaadress=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97);//minu anduri aadress

Kirjutame vahel üles Sinu anduri aadressi lokkis traksid, asendades minu anduri aadressi.

Laoseis:

//u8g.setPrintPos(44, 64); u8g.print(sek); // Väljund sekundid käigu õigsuse kontrollimiseks

Kasutatakse sekundite kuvamiseks pealdise „Andmed” kõrval. See on vajalik selleks täpne paigaldus aja kulgemine.
Kui kell on kiire või maha jäänud, tuleks rea väärtust muuta:

If (micros() - prevmicros >494000) ( // muutke parandamiseks midagi muud, see oli 500000

Määrasin empiiriliselt üsna täpselt numbri, mille juures kell töötab. Kui teie kell on kiire, peaksite seda numbrit suurendama, kui see on maha jäänud, vähendage seda. Liikumise täpsuse määramiseks peate kuvama sekundid. Pärast arvu täpset kalibreerimist saab sekundeid kommenteerida ja seeläbi ekraanilt eemaldada.

Paljudes Arduino projektides on vaja jälgida ja salvestada teatud sündmuste toimumise aega. Täiendava akuga varustatud reaalajas kella moodul võimaldab salvestada praegune kuupäev, olenemata seadme enda toite olemasolust. Selles artiklis räägime enamlevinud RTC moodulitest DS1307, DS1302, DS3231, mida saab kasutada koos Arduino plaadiga.

Kellamoodul on väike tasu, mis sisaldab tavaliselt ühte DS1307, DS1302, DS3231 mikroskeemidest Lisaks leiab plaadilt praktiliselt ka aku paigaldamise mehhanismi. Selliseid tahvleid kasutatakse sageli kellaaja, kuupäeva, nädalapäeva ja muude kronomeetriliste parameetrite jälgimiseks. Moodulid töötavad alates autonoomne toiteallikas- patareid, akud ja jätkake loendamist isegi siis, kui Arduino toide on välja lülitatud. Levinuimad kellamudelid on DS1302, DS1307, DS3231. Need põhinevad Arduinoga ühendatud RTC (real time clock) moodulil.

Kell loeb ühikutes, mis on mugavad tavalisele inimesele– minutid, tunnid, nädalapäevad ja muud, erinevalt tavapärastest loenduritest ja kellageneraatoritest, mis loevad “tiks”. Arduinol on erifunktsioon millis(), mis suudab lugeda ka erinevaid ajavahemikke. Kuid selle funktsiooni peamiseks puuduseks on see, et taimeri sisselülitamisel lähtestatakse see nulli. Selle abiga saate lugeda ainult kellaaega, kuupäeva või nädalapäeva pole võimalik määrata. Selle probleemi lahendamiseks kasutatakse reaalajas kellamooduleid.

Elektrooniline lülitus sisaldab mikrolülitust, toiteallikat, kvartsresonaatorit ja takisteid. Kvartsresonaator töötab sagedusel 32768 Hz, mis on tavapärase binaarloenduri jaoks mugav. DS3231 vooluringil on sisseehitatud kvarts- ja termostabilisaator, mis võimaldab väga täpseid väärtusi.

Populaarsete RTC moodulite DS1302, DS1307, DS3231 võrdlus

Selles tabelis oleme esitanud kõige populaarsemate moodulite ja nende põhiomaduste loendi.

Nimi Sagedus Täpsus Toetatud protokollid
DS1307 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz Oleneb kvartsist - tavaliselt ulatub väärtus 2,5 sekundini päevas, täpsust, mis on suurem kui 1 sekund päevas, on võimatu saavutada. Lisaks sõltub täpsus temperatuurist. I2C
DS1302 32,768 kHz 5 sekundit päevas I2C, SPI
DS3231 Kaks väljundit – esimene sagedusel 32,768 kHz, teine ​​programmeeritav 1 Hz kuni 8,192 kHz ±2 ppm temperatuuridel 0C kuni 40C.

±3,5 ppm temperatuuridel -40C kuni 85C.

Temperatuuri mõõtmise täpsus – ±3С

I2C

Moodul DS1307

DS1307 on ajamõõtmiseks kasutatav moodul. See on kokku pandud DS1307ZN kiibi baasil, toide tuleb liitiumaku rakendamiseks aku tööiga pika aja jooksul. Plaadil olev aku on paigaldatud tagakülg. Moodulil on AT24C32 kiip – see on 32 KB püsimälu EEPROM. Mõlemad mikroskeemid on ühendatud I2C siiniga. DS1307-l on madal energiatarve ning sisaldab kella ja kalendrit kuni aastani 2100.

Moodulil on järgmised parameetrid:

  • Toide – 5V;
  • Töötemperatuuri vahemik -40C kuni 85C;
  • 56 baiti mälu;
  • Liitiumaku LIR2032;
  • Rakendab 12- ja 24-tunniseid režiime;
  • I2C liidese tugi.

Moodul on õigustatud juhtudel, kui andmeid loetakse üsna harva, nädalase või pikema intervalliga. See võimaldab säästa toidu pealt, mis ajast katkematut kasutamist peate isegi akuga rohkem pinget raiskama. Mälu olemasolu võimaldab registreerida erinevaid parameetreid(näiteks temperatuuri mõõtmine) ja loe moodulist saadud infot.

Teiste seadmetega suhtlemine ja nendega teabevahetus toimub I2C liidese abil SCL- ja SDA-viigudest. Ahel sisaldab takisteid, mis võimaldavad teil pakkuda nõutav tase signaali. Plaadil on ka spetsiaalne koht temperatuurianduri DS18B20 paigaldamiseks. Kontaktid on jaotatud 2 rühma, samm 2,54 mm. Esimene kontaktide rühm sisaldab järgmisi kontakte:

  • DS – väljund andurile DS18B20;
  • SCL – kellariin;
  • SDA – andmeliin;
  • VCC – 5V;

Teine kontaktide rühm sisaldab:

  • SQ – 1 MHz;
  • BAT – liitiumaku sisend.

Arduino plaadiga ühendamiseks on vaja plaati ennast (sel juhul kaalume Arduino Unot), RTC DS1307 reaalaja kella moodulit, juhtmeid ja USB-kaablit.

Kontrolleri ühendamiseks Arduinoga kasutatakse 4 tihvti - VCC, maandus, SCL, SDA.. Kellalt VCC on Arduinol ühendatud 5V, kella maandus Arduinol maandusega, SDA - A4, SCL - A5.

Kellamooduliga töö alustamiseks peate installima teegid DS1307RTC, TimeLib ja Wire. RTCLibi saab kasutada ka tööks.

RTC mooduli kontrollimine

Kui käivitate esimese koodi, loeb programm moodulist andmeid kord sekundis. Esiteks näete, kuidas programm käitub, kui eemaldate moodulist aku ja asendate selle teisega ajal, mil Arduino plaat pole arvutiga ühendatud. Peate paar sekundit ootama ja aku eemaldama, lõpuks taaskäivitub kell. Seejärel tuleb valida näide menüüst Näited→RTClib→ds1307. Oluline on õigesti seadistada edastuskiirus 57600 bps.

Kui avate Serial Monitor akna, peaksid ilmuma järgmised read:

Aeg näitab 0:0:0. Seda seetõttu, et kell kaotab toite ja lõpetab aja lugemise. Sel põhjusel ei tohi akut mooduli töötamise ajal eemaldada.

Moodulil kellaaja määramiseks tuleb eskiisist leida joon

RTC.adjust(DateTime(__DATE__, __TIME__));

See rida sisaldab andmeid arvutist, mida kasutatakse reaalajas kella mooduli vilkumiseks. Sest õige toimimine Kõigepealt tuleb kontrollida, et kuupäev ja kellaaeg arvutis oleksid õiged ning alles siis hakata kellamoodulit vilkuma. Pärast seadistamist kuvab monitor järgmisi andmeid:

Seadistamine on tehtud õigesti ja reaalaja kella täiendavat ümberseadistamist pole vaja.

Aja lugemine. Kui moodul on konfigureeritud, saab ajapäringuid saata. Seda tehakse funktsiooni now() abil, mis tagastab DateTime objekti, mis sisaldab kellaaja ja kuupäeva teavet. On mitmeid raamatukogusid, mida kasutatakse aja lugemiseks. Näiteks RTC.year() ja RTC.hour() – need saavad eraldi teavet aasta ja tunni kohta. Nendega töötades võib tekkida probleem: näiteks esitatakse kell 1:19:59 kellaaja kuvamise taotlus. Enne kella 1:20:00 näitamist näitab kell kellaaega 1:19:00, mis tähendab, et sisuliselt läheb üks minut kaotsi. Seetõttu on soovitatav neid teeke kasutada juhtudel, kui lugemist esineb harva – kord paari päeva jooksul. Helistamise aja määramiseks on ka muid funktsioone, kuid kui on vaja vigu vähendada või vältida, siis on parem kasutada now() ja sealt vajalikud näidud välja võtta.

Näidisprojekt i2C kellamooduli ja kuvariga

Projekt on tavaline kell, kuvatakse näidik täpne aeg, ja koolon numbrite vahel vilgub ühesekundiliste intervallidega. Projekti elluviimiseks vajate Arduino Uno tahvlit, digitaalne indikaator, reaalajas kell (antud juhul ülalkirjeldatud moodul ds1307), varjestus ühendamiseks (antud juhul kasutatakse Troyka Shieldi), kella aku ja juhtmed.

Projekt kasutab lihtsat neljakohalist indikaatorit TM1637 kiibil. Seadmel on kahejuhtmeline liides ja see pakub 8 monitori heleduse taset. Kasutatakse ainult aja kuvamiseks vormingus tunnid:minutid. Indikaatorit on lihtne kasutada ja lihtne ühendada. Seda on kasulik kasutada projektide puhul, kus pole vaja minuti- või tunniandmete kontrollimist. Et saada rohkem täielik teave LCD monitore kasutatakse kellaaja ja kuupäeva näitamiseks.

Kellamoodul on ühendatud SCL/SDA tihvtidega, mis kuuluvad I2C siini. Samuti peate ühendama maanduse ja toite. See on ühendatud Arduinoga samamoodi nagu ülalpool kirjeldatud: SDA – A4, SCL – A5, maandus moodulist maanduseni Arduinost, VCC -5V.

Indikaator ühendatakse lihtsalt - selle CLK- ja DIO-viigud on ühendatud plaadi mis tahes digitaalsete tihvtidega.

Sketš. Koodi kirjutamiseks kasutage häälestusfunktsiooni, mis võimaldab kella ja indikaatori lähtestada ning salvestada kompileerimisaja. Aja printimine ekraanile toimub tsükli abil.

#kaasa #include "TM1637.h" #include "DS1307.h" //peab kõike kaasama nõutavad raamatukogud kella ja ekraaniga töötamiseks. char compileTime = __TIME__; //koostamise aeg. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 //numbrid Arduino väljunditest, millega ekraan on ühendatud; void setup() ( display.set(); display.init(); //ekraani ühendamine ja konfigureerimine. clock.begin(); //kella sisselülitamine. baittund = getInt(compileTime, 0); baitide minut = getInt( kompileTime, 2 bait = getInt(compileTime, 4). sisse saanud sisemälu, lugemise algusaeg. ) void loop() ( int8_t timeDisp; //kuva iga nelja numbri kohta. clock.getTime(); //päring aja saamiseks. timeDisp = kell.tund / 10; timeDisp = kell.tund % 10; timeDisp = kell .minute / 10 timeDisp = kell.minut % 10; erinevaid operatsioone et saada kümneid, tundide ühikuid, minuteid ja nii edasi. kuva.kuva(timeDisp); //aja kuvamine indikaatori display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//käärsoole sisse- ja väljalülitamine sekundi pärast. ) char getInt(const char* string, int startIndex) ( return int(string - "0") * 10 + int(string) - "0"; //toimingud aja korrektseks kirjutamiseks kahekohaliseks täisarvuks. Vastasel juhul ekraanil kuvatakse vaid paar sümbolit.

Pärast seda tuleb visand laadida ja kellaaeg kuvatakse monitoril.

Programmi võiks veidi kaasajastada. Kui toide on välja lülitatud, kuvab ülaltoodud sketš ekraanil pärast sisselülitamist kompileerimise ajal määratud aega. Seadistusfunktsioonis arvutatakse iga kord aega, mis on möödunud kella 00:00:00-st kompileerimise alguseni. Seda räsi võrreldakse sellega, mis on salvestatud EEPROM-i, mis säilib toite eemaldamisel.

Püsimällu kirjutamise ja lugemise aja lugemiseks peate lisama funktsioonid EEPROMWriteInt ja EEPROMReadInt. Neid on vaja selleks, et kontrollida, kas räsi ühtib/ei ühti EEPROM-is salvestatud räsiga.

Projekti saab täiustada. Kui kasutate LCD monitori, saate teha projekti, mis kuvab ekraanil kuupäeva ja kellaaega. Kõikide elementide ühendamine on näidatud joonisel.

Selle tulemusena peate koodis määrama uue raamatukogu (vedelkristallekraanide puhul on see LiquidCrystal) ja lisama selle silmuse funktsioon() stringid kuupäeva leidmiseks.

Tööalgoritm on järgmine:

  • Kõigi komponentide ühendamine;
  • Kontrollige – kellaaeg ja kuupäev monitori ekraanil peaksid muutuma iga sekundi järel. Kui ekraan ütleb vale aeg, peate visandile lisama funktsiooni RTC.write (tmElements_t tm). Probleemid valega määratud aeg on tingitud sellest, et kellamoodul lähtestab väljalülitamisel kuupäeva ja kellaaja 00:00:00 01/01/2000.
  • Kirjutamisfunktsioon võimaldab teil saada arvutist kuupäeva ja kellaaja, misjärel kuvatakse ekraanil õiged parameetrid.

Järeldus

Kellamooduleid kasutatakse paljudes projektides. Neid on vaja andmesalvestussüsteemide jaoks, etteantud ajakava järgi töötavate taimerite ja juhtimisseadmete loomisel kodumasinad. Laialdaselt saadaolevate ja odavate moodulitega saate luua selliseid projekte nagu äratuskell või anduriandmete logija, salvestada teavet SD-kaardile või näidata kellaaega ekraanil. Selles artiklis vaatlesime kõige populaarsemate moodulitüüpide tüüpilisi kasutusstsenaariume ja ühendusvõimalusi.