Inawasha kwa saa kwenye Arduino. Saa kwenye Arduino bila kutumia moduli ya RTC

Moja ya miradi ya kwanza ambayo Kompyuta huunda kwa kutumia bodi ya Arduino ni saa rahisi, kuhesabu wakati. Kimsingi, saa kama hizo zinatokana na moduli ya RTC iliyounganishwa na Arduino ( Muda halisi Saa au Saa ya Wakati Halisi). Kwenye soko leo vipengele vya elektroniki inapatikana mifano tofauti RTC ambazo hutofautiana kwa usahihi na bei. Mifano ya kawaida ni pamoja na DS1302, DS1307, DS3231.



Lakini unaweza kutengeneza saa kwenye Arduino bila kutumia RTC, haswa ikiwa huwezi kupata moduli kama hizo. Bila shaka, usahihi ni kwa kesi hii itakuwa ndogo, kwa hivyo mradi unapaswa kuzingatiwa kama mradi wa mafunzo.


Kanuni ya uendeshaji wa saa kama hizo ni rahisi sana. Kila wakati unapowasha saa hii ya Arduino, utahitaji kuiweka kwa saa ya sasa, kama tu yoyote saa ya analog. Hakika ni bora kutotumia saa kama hizo ndani yako Maisha ya kila siku wakati zinafanya kazi kwa muda mrefu bila kuwasha tena na ubinafsishaji zaidi, kwani kutenganisha na wakati wa sasa wakati wa operesheni ya muda mrefu inaweza kuwa muhimu.


Saa hii inaweza kukusanywa kwa kutumia kawaida ubao wa mkate, kwani hauhitaji vipengele vingi. Kiungo chetu kikuu hapa kitakuwa Bodi ya Arduino Uno. Ili kuonyesha muda, unaweza kuchukua onyesho la LCD 16x2. Ili kubadilisha mipangilio ya muda, unahitaji kuunganisha vifungo viwili (kwa saa na dakika). Vifungo vimeunganishwa kwa Aduino kupitia vipingamizi vya 10KΩ. Ili kubadilisha mwangaza wa onyesho utahitaji 10 kOhm potentiometer. Mchoro wa uunganisho wa vipengele hivi vyote kwenye bodi ya Arduino Uno imewasilishwa hapa chini.



Sasa unahitaji kupanga Arduino. Nambari rahisi (mchoro) ambayo hukuruhusu kuonyesha wakati kwenye skrini ya LCD imetolewa hapa chini.


#pamoja na LiquidCrystal lcd(12,11,5,4,3,2); int h=12; int m; int s; bendera ya int; int TIME; const int hs=8; const int ms=9; hali ya ndani1; int state2; usanidi utupu() ( lcd.begin(16,2); ) kitanzi tupu() ( lcd.setCursor(0,0); s=s+1; lcd.print("TIME:"); lcd.print(h ); lcd.print(":"); lcd.print(m); lcd.print(":"); lcd.print(s); if(bendera<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); ikiwa(bendera==24)bendera=0; kuchelewa (1000); lcd.wazi(); if(s==60)( s=0; m=m+1; ) if(m==60) (m=0; h=h+1; bendera=bendera+1; ) ikiwa(h==13 ) ( h=1; ) lcd.setCursor(0,1); lcd.print("UWE NA SIKU NJEMA"); //--------Muda // mpangilio-------// hali1=digitalRead(hs); ikiwa(jimbo1==1) (h=h+1; bendera=bendera+1; ikiwa(bendera<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); ikiwa(bendera==24)bendera=0; ikiwa(h==13)h=1; ) state2=digitalRead(ms); if(state2==1)( s=0; m=m+1; ) )

   Asante kwa shauku yako katika mradi wa habari wa tovuti.
   Kama unataka kuvutia na vifaa muhimu ilitoka mara nyingi zaidi na kulikuwa na matangazo kidogo,
   Unaweza kusaidia mradi wetu kwa kuchangia kiasi chochote kwa ajili ya kuutengeneza.

Kwa hivyo, saa ya wakati halisi. Kitu hiki kidogo muhimu husuluhisha shida zinazohusiana na wakati. Hebu sema unadhibiti kumwagilia saa 5 asubuhi kwenye dacha yako. Au kuwasha na kuzima taa muda fulani. Kwa tarehe unaweza kuanza kupokanzwa katika nyumba yoyote. Jambo hilo ni la kuvutia na muhimu sana. Na zaidi hasa? Tutaangalia saa ya wakati halisi ya DS1302 kwa jukwaa maarufu la Arduino.

Kutoka kwa makala hii utajifunza:

Siku njema, wasomaji wapendwa block kip-world! Unaendeleaje? Andika kwenye maoni, unavutiwa na robotiki? Mada hii ina maana gani kwako?

Siwezi kuacha kufikiria hili kwa dakika moja. Ninaota na kuona wakati hatimaye tutafika mahali ambapo kila mtu anaweza kumudu kununua msaidizi wa roboti ya kibinafsi. Haijalishi anachofanya, kuokota takataka, kukata nyasi, kuosha gari.

Naweza kufikiria jinsi gani algorithms ngumu lazima ziwemo kwenye “bongo” zao.

Baada ya yote, tutakuja mahali ambapo tutapiga programu kwa njia sawa na kwenye kompyuta za kibinafsi. Pia pakua programu za maombi. Kushona kwa mikono, miguu, kubadilisha makucha, manipulators.

Tazama filamu "I Robot", " Akili ya bandia"," Star Wars".

Wajapani wamekuwa wakitekeleza maendeleo yao kwa muda mrefu. Mbona tuko wabaya zaidi?? Tuna umaarufu mdogo sana. Najua watengenezaji wachache. Ninaweza kuihesabu kwenye vidole vyangu. Tunafanya jambo lingine. Sisi ni wauzaji. Tunanunua tu vifaa vilivyotengenezwa tayari, roboti, vinyago na kila aina ya takataka.

Kwa nini tusiendeleze hii:

Au hii:

Nilimaliza mawazo yangu kwa sauti. Hebu tuzungumze kuhusu kuunganisha Kipima Muda cha Saa ya DS1302 kwenye Arduino.

Saa ya wakati halisi DS1302

Mdhibiti wa Arduino hana saa yake mwenyewe. Kwa hiyo, ikiwa ni lazima, lazima iongezwe na microcircuit maalum ya DS1302.

Kwa usambazaji wa nguvu, bodi hizi zinaweza kutumia betri zao wenyewe, au kuwashwa moja kwa moja kutoka kwa bodi ya Arduino.

Jedwali la Pinout:

Mchoro wa unganisho na Arduino UNO:


Njia ya kupanga Arduino kufanya kazi na DS1302

Ni muhimu kupakua maktaba halali kutoka kwa vyanzo vya kuaminika.

Maktaba hukuruhusu kusoma na kuandika vigezo vya wakati halisi. Natoa maelezo mafupi hapa chini:

#pamoja na // Unganisha maktaba.
iarduino_RTC KITU ( NAME [, RST_OUTPUT [, CLK_OUTPUT [, DAT_OUTPUT ]]] ); // Unda kitu.

Kazi kuanza ();// Anzisha uendeshaji wa moduli ya RTC.

Kazi muda wa kuweka ( SEC [, MIN [, SAA] [, SIKU [, MWEZI [, MWAKA [, SIKU]]]]]]] ); // Kuweka wakati.

Kazi wakati wa kupata ([ LINE ] ); // Soma wakati.

kazi wakati wa kufumba macho ( PARAMETER [FREQUENCY] ); // Husababisha kitendakazi cha gettime "blink" parameta maalum wakati.

kazi kipindi ( DAKIKA ); // Inaonyesha kipindi cha chini cha kufikia moduli kwa dakika.

Inaweza kubadilika sekunde// Hurejesha sekunde kutoka 0 hadi 59.

Inaweza kubadilika dakika// Hurejesha dakika kutoka 0 hadi 59.

Inaweza kubadilika masaa// Hurejesha saa kutoka 1 hadi 12.

Inaweza kubadilika Saa// Hurejesha saa kutoka 0 hadi 23.

Inaweza kubadilika mchana// Hurudi mchana 0 au 1 (0-am, 1-pm).

Inaweza kubadilika siku// Hurejesha siku ya mwezi kutoka 1 hadi 31.

Inaweza kubadilika siku ya wiki// Hurejesha siku ya juma kutoka 0 hadi 6 (0 ni Jumapili, 6 ni Jumamosi).

Inaweza kubadilika mwezi// Hurejesha mwezi kutoka 1 hadi 12.

Inaweza kubadilika mwaka// Hurejesha mwaka kutoka 0 hadi 99.

Tunaandika programu rahisi. Kuweka wakati wa sasa katika moduli ya RTC (DS1302):

Arduino

#pamoja na muda wa iarduino_RTC(RTC_DS1302,6,7,8); usanidi batili() (kucheleweshwa(300); Serial.begin(9600); time.begin(); time.settime(0,51,21,27,10,15,2); // sekunde 0, dakika 51, Saa 21, Oktoba 27, 2015, Tuesday ) void loop())( if(millis()%1000==0)( // ikiwa sekunde 1 imepita Serial.println(time.gettime("d-m-Y, H:i): s, D")); // onyesha kuchelewa kwa muda(1); // sitisha kwa ms 1 ili usionyeshe wakati mara kadhaa katika 1 ms ) )

#pamoja na

iarduino_RTCtime(RTC_DS1302, 6, 7, 8);

usanidi utupu () (

kuchelewa (300);

Msururu. kuanza (9600);

wakati. kuanza ();

wakati. muda wa kuweka (0, 51, 21, 27, 10, 15, 2); // sekunde 0, dakika 51, saa 21, Oktoba 27, 2015, Jumanne

kitanzi utupu() (

ikiwa (millis() % 1000 == 0 ) ( // ikiwa sekunde 1 imepita

Msururu. println ( time . gettime ( "d-m-Y, H:i:s, D" ) ) ; // wakati wa kuonyesha

kuchelewa (1); // sitisha kwa 1 ms ili usionyeshe wakati mara kadhaa katika 1 ms

Tunasoma wakati wa sasa kutoka kwa moduli ya RTC (DS1302) na kuitoa kwa "bandari ya serial":

#pamoja na muda wa iarduino_RTC(RTC_DS1302,6,7,8); usanidi batili() (kuchelewesha(300); Serial.begin(9600); time.begin();) kitanzi batili())( if(millis()%1000==0)(// ikiwa sekunde 1 imepita Serial .println (time.gettime("d-m-Y, H:i:s, D")); // onyesha kuchelewa kwa muda(1); // sitisha kwa ms 1 ili usionyeshe wakati mara kadhaa katika 1 ms ) )

Habari za mchana, leo nitashiriki maagizo ya kutengeneza saa yenye kipimajoto cha chumba( Saa ya DIY Arduino) Saa hutumia Arduino UNO; skrini ya picha ya WG12864B inatumika kuonyesha saa na halijoto. Kama sensor ya joto - ds18b20. Tofauti na saa nyingine nyingi, sitatumia RTS (Saa Saa Halisi), lakini nitajaribu kufanya bila moduli hii ya ziada.

Duru za Arduino zinatofautishwa na unyenyekevu wao, na mtu yeyote anaweza kuanza kujifunza Arduino. Unaweza kusoma kuhusu jinsi ya kuunganisha maktaba na flash Arduino katika makala yetu.

Tuanze.

Ili kuunda saa hii tutahitaji:

Arduino UNO (Au nyingine yoyote Arduino sambamba kulipa)
- Skrini ya pichaWG12864B
Sensor ya joto ds18b20
- Kizuia 4.7 Kom 0.25 W
- Kinga 100 ohm 0.25 W
- Chumba cha betri kwa betri 4 za AA
- Sanduku la kulinganisha
- Faili nzuri
- Kipolishi cha kucha (nyeusi au rangi ya mwili)
- Baadhi ya plastiki nyembamba au kadibodi
- mkanda wa umeme
- Kuunganisha waya
- Bodi ya mzunguko
- Vifungo
- chuma cha soldering
- Solder, rosin
- Mkanda wa pande mbili

Inatayarisha skrini ya picha.
Kwa mtazamo wa kwanza, kuunganisha skrini kunaleta matatizo mengi na matatizo. Lakini ikiwa unaelewa kwanza aina zao, itakuwa rahisi zaidi na wazi zaidi. Kuna aina nyingi na aina za skrini kwenye kidhibiti cha ks0107/ks0108. Skrini zote kawaida hugawanywa katika aina 4:
Chaguo A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T
Chaguo B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Displays AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM128X6SG, Topway LM1264SG LM128Q428Q4, Distritol LM12648SG LM128, Displaytech 64128A BC F, TM12864L-2, 12864J-1
Chaguo C: Shenzhen Jinghua Displays Co Ltd. JM12864
Chaguo D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/260MGLS162

Orodha haijakamilika, kuna mengi yao. Ya kawaida na, kwa maoni yangu, rahisi ni WG12864B3 V2.0. Onyesho linaweza kushikamana na Arduino kupitia serial au bandari sambamba. Unapotumia na Arduino UNO, ni bora kuchagua unganisho kupitia bandari ya serial- basi tutahitaji matokeo 3 pekee ya kidhibiti kidogo, badala ya angalau mistari 13 tunapounganishwa kupitia mlango sambamba. Kila kitu kinaunganishwa kwa urahisi kabisa. Kuna nuance moja zaidi: unaweza kupata chaguzi mbili za kuonyesha zinazouzwa, na potentiometer iliyojengwa (kurekebisha tofauti) na bila hiyo. Nilichagua, na mimi kukushauri kufanya hivyo, na moja iliyojengwa.


Hii inapunguza idadi ya sehemu na wakati wa soldering. Inafaa pia kusanikisha kontena ya kikomo ya sasa ya Ohm 100 kwa taa ya nyuma. Kwa kuunganisha volts 5 moja kwa moja, kuna hatari ya kuchoma nje ya backlight.
WG12864B - Arduino UNO
1 (GND) - GND
2 (VCC) - +5V
4 (RS) - 10
5 (R/W) - 11
6 (E) - 13
15 (PSB) - GND
19 (BLA) - kwa njia ya kupinga - +5V
20 (BLK) – GND

Njia rahisi zaidi ni kukusanya kila kitu nyuma ya skrini na kuleta waya 5 kutoka kwayo zinazounganishwa na Arduino UNO. Matokeo ya mwisho yanapaswa kuonekana kama hii:


Kwa wale ambao bado wanachagua uunganisho sambamba Nitatoa meza ya uunganisho.

Na mchoro wa skrini za chaguo B:



Sensorer kadhaa zinaweza kushikamana na mstari mmoja wa mawasiliano. Moja inatosha kwa saa zetu. Tunaunganisha waya kutoka kwa pini ya "DQ" ya ds18b20 hadi "pin 5" ya Arduino UNO.

Kuandaa bodi na vifungo.
Kuweka wakati na tarehe kwenye saa tutatumia vifungo vitatu. Kwa urahisi, tunauza vifungo vitatu kwenye bodi ya mzunguko na kuondoa waya.


Tunaunganisha kama ifuatavyo: tunaunganisha waya wa kawaida kwa vifungo vyote vitatu kwa "GND" ya Arduino. Kitufe cha kwanza, ambacho hutumiwa kuingiza hali ya kuweka wakati na kubadili kwa wakati na tarehe, imeunganishwa kwenye "Pin 2". Ya pili, kifungo cha kuongeza thamani, ni "Pin 3", na ya tatu, kifungo cha kupunguza thamani, ni "Pin 4".

Kuweka yote pamoja.
Ili kuepuka mzunguko mfupi, skrini inapaswa kuwa maboksi. Tunaifunga kwenye mduara na mkanda wa umeme, na kuendelea nyuma Tunaunganisha kamba ya nyenzo za kuhami kwa mkanda wa pande mbili, kata kwa ukubwa. Kadibodi nene au plastiki nyembamba itafanya. Nilitumia plastiki kutoka kwa kibao kwa karatasi. Matokeo yake ni yafuatayo:


Mbele ya skrini, kando, tunapiga mkanda wa povu wa pande mbili, ikiwezekana kuwa nyeusi.


Unganisha skrini kwa Arduino:


Plus kutoka sehemu ya betri unganisha kwa "VIN" ya Arduino, toa hadi "GND". Tunaiweka nyuma ya Arduino. Kabla ya kuiweka katika kesi, usisahau kuunganisha sensor ya joto na ubao na vifungo.


Kuandaa na kujaza mchoro.
Sensor ya halijoto inahitaji maktaba ya OneWire.

Pato kwa skrini hufanywa kupitia maktaba ya U8glib:

Ili kuhariri na kujaza mchoro, unahitaji kusakinisha maktaba hizi mbili. Kuna njia mbili za kufanya hivyo. Fungua kumbukumbu hizi na uweke faili ambazo hazijapakiwa kwenye folda ya "maktaba" iliyo kwenye folda ya usakinishaji. Kitambulisho cha Arduino. Au chaguo la pili ni kufunga maktaba moja kwa moja kwenye mazingira ya programu. Bila kufungua kumbukumbu zilizopakuliwa, kwenye IDE ya Arduino, chagua Mchoro wa menyu - Unganisha Maktaba. Katika sehemu ya juu kabisa ya orodha kunjuzi, chagua "Add.Zip library". Katika kisanduku cha mazungumzo kinachoonekana, chagua maktaba unayotaka kuongeza. Fungua menyu ya Mchoro tena - Unganisha Maktaba. Katika sehemu ya chini kabisa ya orodha kunjuzi unapaswa kuona maktaba mpya. Sasa maktaba inaweza kutumika katika programu. Usisahau kuanzisha tena IDE ya Arduino baada ya haya yote.

Sensor ya halijoto hufanya kazi kwa kutumia itifaki ya Waya Moja na ina anwani ya kipekee kwa kila kifaa - msimbo wa 64-bit. Sio vitendo kutafuta nambari hii kila wakati. Kwa hiyo, lazima kwanza uunganishe sensor kwenye Arduino, pakia mchoro uliopatikana kwenye menyu Faili - Mifano - Joto la Dallas - OneWireSearch. Ifuatayo, uzindua Zana - Monitor Port. Arduino lazima ipate sensor yetu, iandike anwani yake na usomaji wa hali ya joto ya sasa. Tunakili au kuandika tu anwani ya kihisi chetu. Fungua mchoro Arduino_WG12864B_Term, tafuta mstari:

Byte addr=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97);//anwani ya kitambuzi changu

Tunaandika anwani ya kitambuzi chako kati ya braces curly, ikibadilisha anwani ya kitambuzi changu.

Hisa:

//u8g.setPrintPos(44, 64); u8g.print(sec); // Sekunde za pato ili kudhibiti usahihi wa hoja

Hutumika kuonyesha sekunde karibu na maandishi ya "Data". Hii ni muhimu kwa ufungaji sahihi kupita kwa wakati.
Ikiwa saa ni ya haraka au nyuma, unapaswa kubadilisha thamani kwenye mstari:

Ikiwa (micros() - prevmicros>494000) (// badilisha kwa kitu kingine kurekebisha ilikuwa 500000

Niliamua kwa nguvu nambari ambayo saa huendesha kwa usahihi kabisa. Ikiwa saa yako ni ya haraka, unapaswa kuongeza nambari hii; ikiwa iko nyuma, ipunguze. Kuamua usahihi wa hoja, unahitaji kuonyesha sekunde. Baada ya urekebishaji sahihi wa nambari, sekunde zinaweza kutolewa maoni na hivyo kuondolewa kwenye skrini.

Katika miradi mingi ya Arduino, inahitajika kufuatilia na kurekodi wakati wa kutokea kwa matukio fulani. Moduli ya saa ya muda halisi, iliyo na betri ya ziada, inakuwezesha kuhifadhi tarehe ya sasa, bila kujali upatikanaji wa nguvu kwenye kifaa yenyewe. Katika makala hii tutazungumzia juu ya moduli za kawaida za RTC DS1307, DS1302, DS3231 ambazo zinaweza kutumika na bodi ya Arduino.

Moduli ya saa ni ada ndogo, ambayo kwa kawaida ina moja ya microcircuits DS1307, DS1302, DS3231. Kwa kuongeza, kwenye ubao unaweza kupata kivitendo utaratibu wa kufunga betri. Bodi hizo mara nyingi hutumiwa kufuatilia wakati, tarehe, siku ya wiki na vigezo vingine vya chronometric. Moduli hufanya kazi kutoka usambazaji wa umeme wa uhuru- betri, vikusanyiko, na endelea kuhesabu hata kama nguvu ya Arduino imezimwa. Mifano ya kawaida ya saa ni DS1302, DS1307, DS3231. Zinatokana na moduli ya RTC (saa ya saa halisi) iliyounganishwa kwenye Arduino.

Saa huhesabiwa katika vitengo vinavyofaa kwa mtu wa kawaida- dakika, saa, siku za wiki na wengine, tofauti na vihesabu vya kawaida na jenereta za saa zinazosoma "tiki". Arduino ina kazi maalum millis(), ambayo inaweza pia kusoma vipindi tofauti vya wakati. Lakini hasara kuu ya kazi hii ni kwamba inaweka upya hadi sifuri wakati timer imewashwa. Kwa msaada wake unaweza kusoma wakati tu; haiwezekani kuweka tarehe au siku ya juma. Moduli za saa za wakati halisi hutumiwa kutatua tatizo hili.

Mzunguko wa umeme ni pamoja na microcircuit, ugavi wa umeme, resonator ya quartz na resistors. Resonator ya quartz inafanya kazi kwa mzunguko wa 32768 Hz, ambayo ni rahisi kwa counter ya kawaida ya binary. Mzunguko wa DS3231 una quartz iliyojengwa na utulivu wa joto, ambayo inaruhusu maadili sahihi sana.

Ulinganisho wa moduli maarufu za RTC DS1302, DS1307, DS3231

Katika meza hii tumetoa orodha ya modules maarufu zaidi na sifa zao kuu.

Jina Mzunguko Usahihi Itifaki zinazotumika
DS1307 1 Hz, 4.096 kHz, 8.192 kHz, 32.768 kHz Inategemea quartz - kwa kawaida thamani hufikia sekunde 2.5 kwa siku, haiwezekani kufikia usahihi wa juu kuliko sekunde 1 kwa siku. Pia, usahihi inategemea joto. I2C
DS1302 32.768 kHz Sekunde 5 kwa siku I2C, SPI
DS3231 Matokeo mawili - ya kwanza kwa 32.768 kHz, ya pili inayoweza kupangwa kutoka 1 Hz hadi 8.192 kHz ±2 ppm kwa joto kutoka 0C hadi 40C.

±3.5 ppm kwa joto kutoka -40C hadi 85C.

Usahihi wa kipimo cha joto - ± 3С

I2C

Sehemu ya DS1307

DS1307 ni moduli ambayo inatumika kwa kuweka muda. Imekusanyika kwa misingi ya chip DS1307ZN, nguvu hutoka betri ya lithiamu kwa utekelezaji maisha ya betri kwa muda mrefu. Betri kwenye ubao imewekwa upande wa nyuma. Moduli ina chip AT24C32 - hii ni kumbukumbu ya EEPROM isiyo na tete ya 32 KB. Mizunguko yote miwili imeunganishwa na basi ya I2C. DS1307 ina matumizi ya chini ya nguvu na ina saa na kalenda hadi mwaka wa 2100.

Moduli ina vigezo vifuatavyo:

  • Ugavi wa nguvu - 5V;
  • Kiwango cha joto cha uendeshaji kutoka -40C hadi 85C;
  • 56 bytes ya kumbukumbu;
  • Betri ya lithiamu LIR2032;
  • Inatekeleza modes 12 na 24 saa;
  • Usaidizi wa kiolesura cha I2C.

Moduli inahesabiwa haki katika hali ambapo data inasomwa mara chache sana, kwa vipindi vya wiki moja au zaidi. Hii inakuwezesha kuokoa kwenye chakula, tangu wakati matumizi yasiyokatizwa itabidi upoteze voltage zaidi, hata kwa betri. Uwepo wa kumbukumbu hukuruhusu kujiandikisha vigezo mbalimbali(kwa mfano, kipimo cha joto) na usome habari iliyopokelewa kutoka kwa moduli.

Kuingiliana na vifaa vingine na kubadilishana habari nao hufanywa kwa kutumia kiolesura cha I2C kutoka kwa pini za SCL na SDA. Mzunguko una resistors ambayo inakuwezesha kutoa kiwango kinachohitajika ishara. Bodi pia ina nafasi maalum ya kuweka sensor ya joto ya DS18B20. Mawasiliano hugawanywa katika vikundi 2, lami 2.54 mm. Kundi la kwanza la waasiliani lina pini zifuatazo:

  • DS - pato kwa sensor DS18B20;
  • SCL - mstari wa saa;
  • SDA - mstari wa data;
  • VCC - 5V;

Kundi la pili la waasiliani lina:

  • SQ - 1 MHz;
  • BAT - ingizo la betri ya lithiamu.

Ili kuunganisha kwenye ubao wa Arduino, unahitaji bodi yenyewe (katika kesi hii tunazingatia Arduino Uno), moduli ya saa ya muda halisi ya RTC DS1307, waya na kebo ya USB.

Ili kuunganisha mtawala kwa Arduino, pini 4 hutumiwa - VCC, ardhi, SCL, SDA .. VCC kutoka saa imeunganishwa na 5V kwenye Arduino, ardhi kutoka saa imeunganishwa chini kutoka Arduino, SDA - A4, SCL. - A5.

Ili kuanza kufanya kazi na moduli ya saa, unahitaji kufunga maktaba ya DS1307RTC, TimeLib na Wire. Unaweza pia kutumia RTCLib kwa kazi.

Inakagua moduli ya RTC

Unapoendesha nambari ya kwanza, programu itasoma data kutoka kwa moduli mara moja kwa sekunde. Kwanza, unaweza kuona jinsi programu inavyofanya ikiwa utaondoa betri kutoka kwa moduli na kuibadilisha na nyingine wakati bodi ya Arduino haijaunganishwa kwenye kompyuta. Unahitaji kusubiri sekunde chache na uondoe betri, hatimaye saa itaanza upya. Kisha unahitaji kuchagua mfano kutoka kwa Menyu ya Mifano→RTClib→ds1307. Ni muhimu kuweka kasi ya maambukizi kwa usahihi hadi 57600 bps.

Unapofungua dirisha la Ufuatiliaji wa Serial, mistari ifuatayo inapaswa kuonekana:

Wakati utaonyesha 0:0:0. Hii ni kwa sababu saa inapoteza nguvu na itaacha kuhesabu muda. Kwa sababu hii, betri lazima isiondolewe wakati moduli inafanya kazi.

Ili kuweka muda kwenye moduli, unahitaji kupata mstari katika mchoro

RTC.rekebisha(Tarehe(__DATE__, __TIME__));

Mstari huu utakuwa na data kutoka kwa kompyuta ambayo inatumiwa kuangaza moduli ya saa halisi. Kwa operesheni sahihi Lazima kwanza uangalie kuwa tarehe na wakati kwenye kompyuta ni sahihi, na kisha tu kuanza kuangaza moduli ya saa. Baada ya kusanidi, mfuatiliaji ataonyesha data ifuatayo:

Usanidi unafanywa kwa usahihi na hakuna haja ya kusanidi tena saa ya wakati halisi.

Muda wa kusoma. Mara baada ya moduli kusanidiwa, maombi ya wakati yanaweza kutumwa. Hii inafanywa kwa kutumia kazi ya now() , ambayo inarudisha kitu cha DateTime ambacho kina habari ya wakati na tarehe. Kuna idadi ya maktaba ambayo hutumiwa kusoma wakati. Kwa mfano, RTC.year() na RTC.hour() - zinapata taarifa tofauti kuhusu mwaka na saa. Wakati wa kufanya kazi nao, tatizo linaweza kutokea: kwa mfano, ombi la kuonyesha wakati litafanywa saa 1:19:59. Kabla ya kuonyesha saa 1:20:00, saa itaonyesha saa 1:19:00, kumaanisha, kwa hakika, dakika moja itapotea. Kwa hiyo, ni vyema kutumia maktaba haya katika hali ambapo kusoma hutokea mara kwa mara - mara moja kila siku chache. Kuna kazi zingine za wakati wa kupiga simu, lakini ikiwa unahitaji kupunguza au kuzuia makosa, ni bora kutumia now() na kutoa usomaji muhimu kutoka kwake.

Mfano wa mradi na moduli ya saa ya i2C na onyesho

Mradi ni saa ya kawaida, kiashiria kitaonyeshwa wakati halisi, na koloni kati ya nambari itapepesa kwa vipindi vya sekunde moja. Ili kutekeleza mradi utahitaji bodi ya Arduino Uno, kiashiria cha digital, saa ya wakati halisi (katika kesi hii, moduli iliyoelezwa hapo juu ya ds1307), ngao ya kuunganisha (katika kesi hii, Troyka Shield hutumiwa), betri kwa saa na waya.

Mradi unatumia kiashiria rahisi cha tarakimu nne kwenye chip TM1637. Kifaa kina interface ya waya mbili na hutoa viwango 8 vya mwangaza wa kufuatilia. Inatumika tu kuonyesha muda katika umbizo la saa:dakika. Kiashiria ni rahisi kutumia na rahisi kuunganisha. Ni vyema kutumia kwa miradi ambayo uthibitishaji wa data ya dakika au saa hauhitajiki. Ili kupata zaidi habari kamili Vichunguzi vya LCD hutumiwa kuonyesha wakati na tarehe.

Moduli ya saa imeunganishwa kwenye pini za SCL/SDA, ambazo ni za basi la I2C. Pia unahitaji kuunganisha ardhi na nguvu. Imeunganishwa na Arduino kwa njia sawa na ilivyoelezwa hapo juu: SDA - A4, SCL - A5, ardhi kutoka kwa moduli hadi ardhi kutoka Arduino, VCC -5V.

Kiashiria kimeunganishwa kwa urahisi - pini zake za CLK na DIO zimeunganishwa na pini yoyote ya digital kwenye ubao.

Mchoro. Ili kuandika msimbo, tumia kazi ya kuanzisha, ambayo inakuwezesha kuanzisha saa na kiashiria na kurekodi wakati wa mkusanyiko. Kuchapisha muda kwenye skrini kutafanywa kwa kutumia kitanzi.

#pamoja na #jumuisha "TM1637.h" #pamoja na "DS1307.h" //inahitaji kujumuisha kila kitu maktaba zinazohitajika kwa kufanya kazi na saa na onyesho. char compileTime = __TIME__; // wakati wa mkusanyiko. #fafanua DISPLAY_CLK_PIN 10 #fafanua DISPLAY_DIO_PIN 11 // nambari kutoka kwa vifaa vya kutoa vya Arduino ambako skrini imeunganishwa; usanidi utupu() ( display.set(); display.init(); // unganisha na usanidi skrini. clock.begin(); // washa saa. byte hour = getInt(compileTime, 0); dakika ndogo = getInt( compileTime, 2); byte second = getInt(compileTime, 4); //kupata muda. clock.fillByHMS(saa, dakika, sekunde); //kujitayarisha kuandika kwa moduli ya saa. clock.setTime(); // kurekodi kunaendelea habari iliyopokelewa kumbukumbu ya ndani, kuanza kwa wakati wa kusoma. ) kitanzi batili() ( int8_t timeDisp; //onyesha kwenye kila tarakimu nne. clock.getTime(); //uliza ili kupata wakati. timeDisp = clock.hour / 10; timeDisp = clock.hour % 10; timeDisp = saa .dakika / 10; timeDisp = saa.dakika % 10; // shughuli mbalimbali kupata makumi, vitengo vya masaa, dakika na kadhalika. display.display(timeDisp); //kuonyesha muda kwenye kiashiria display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//kuwasha na kuzima koloni baada ya sekunde. ) char getInt(const char* string, int startIndex) ( return int(string - "0") * 10 + int(string) - "0"; //vitendo vya kuandika kwa usahihi wakati katika nambari kamili ya tarakimu mbili. Vinginevyo, kwenye skrini itaonyesha vibambo kadhaa.)

Baada ya hayo, mchoro unahitaji kupakiwa na wakati utaonyeshwa kwenye kufuatilia.

Programu inaweza kuwa ya kisasa kidogo. Nguvu inapozimwa, mchoro ulioandikwa hapo juu utasababisha onyesho lionyeshe muda uliowekwa wakati wa ujumuishaji baada ya kuiwasha. Katika kazi ya usanidi, kila wakati muda ambao umepita kutoka 00:00:00 hadi kuanza kwa mkusanyiko utahesabiwa. Heshi hii italinganishwa na kile kinachohifadhiwa katika EEPROM, ambacho hutubiwa wakati nishati inapoondolewa.

Ili kuandika na kusoma wakati hadi au kutoka kwa kumbukumbu isiyo tete, unahitaji kuongeza vipengele vya EEPROMWriteInt na EEPROMReadInt. Zinahitajika ili kuangalia kama heshi inalingana/inatofautiana na heshi iliyorekodiwa katika EEPROM.

Mradi unaweza kuboreshwa. Ikiwa unatumia kufuatilia LCD, unaweza kufanya mradi unaoonyesha tarehe na wakati kwenye skrini. Uunganisho wa vipengele vyote unaonyeshwa kwenye takwimu.

Kama matokeo, utahitaji kubainisha maktaba mpya katika msimbo (kwa skrini za kioo kioevu hii ni LiquidCrystal), na uiongeze kazi ya kitanzi() masharti kupata tarehe.

Algorithm ya uendeshaji ni kama ifuatavyo:

  • Kuunganisha vipengele vyote;
  • Angalia - wakati na tarehe kwenye skrini ya kufuatilia inapaswa kubadilika kila sekunde. Ikiwa skrini inasema wakati mbaya, unahitaji kuongeza kitendakazi cha RTC.write (tmElements_t tm) kwenye mchoro. Shida na makosa muda maalum ni kutokana na ukweli kwamba moduli ya saa huweka upya tarehe na wakati hadi 00:00:00 01/01/2000 wakati imezimwa.
  • Kazi ya kuandika inakuwezesha kupata tarehe na wakati kutoka kwa kompyuta, baada ya hapo vigezo sahihi vitaonyeshwa kwenye skrini.

Hitimisho

Moduli za saa hutumiwa katika miradi mingi. Zinahitajika kwa mifumo ya kurekodi data, wakati wa kuunda vipima muda na vifaa vya kudhibiti vinavyofanya kazi kulingana na ratiba fulani, in vyombo vya nyumbani. Ukiwa na moduli zinazopatikana kwa wingi na za bei nafuu, unaweza kuunda miradi kama vile saa ya kengele au kirekodi data cha vitambuzi, kurekodi maelezo kwenye kadi ya SD au kuonyesha saa kwenye skrini ya kuonyesha. Katika makala hii, tuliangalia matukio ya kawaida ya matumizi na chaguzi za uunganisho kwa aina maarufu zaidi za moduli.