Hodiny s tlačidlami na arduino. Veľké nástenné hodiny s automatickým jasom na Arduine

Hodiny s tlačidlami na arduino.  Veľké nástenné hodiny s automatickým jasom na Arduine
Hodiny s tlačidlami na arduino. Veľké nástenné hodiny s automatickým jasom na Arduine

Hotový projekt v jednom module obsahuje mnoho funkcií: hodiny so zobrazením dátumu a času, stopky, budík, sledovanie pohybu (pre automatické vypnutie, keď tam nie ste).

Materiály:
- Arduino Uno
- LCD štít (s tlačidlami, projekt používa štít od DFRobot)
- Puzdro
- Bzučiak
- Infračervený snímač pohybu (PIR)
- Spojovacie vodiče (samica/samica)
- Jack 2,1 mm
- Adaptér na korunku 9V 2,1 mm / 5,5 mm
- koruna 9 V
- Hodiny reálneho času

Krok jedna. Modul hodín reálneho času.
Často sa modul hodín dodáva vo forme stavebnice, ktorú si musíte zostaviť sami. Montáž zvyčajne nie je problém, navyše výrobcovia vydávajú pokyny na montáž svojho modulu. K hodinkám je dodávaná aj batéria, ktorá vydrží viac ako tri roky.

Krok dva. Napájací konektor.
Pre zjednodušenie pripojenia konštrukcie k Arduinu autor používa 2,1mm jack s priletovanými kontaktmi. V krabici je vytvorený otvor a zdvihák je zaistený lepidlom. S pripojením k Arduinu teda nebude problém. Korunka sa jednoducho nainštaluje na zadnú stranu krabice. Ak sa lepšie pozriete na fotografiu, všimnete si ďalšiu dieru v krabici. Nie je potrebné ho robiť, je to len neúspešný pokus o vytvorenie otvoru, zdvihák sa do neho jednoducho nezmestí.

Krok tri. Spojovacie vodiče.
Autor zakúpil viacfarebné drôty samice/samice. Boli lacné, ale značne uľahčili proces montáže. Vodiče boli pripojené k bzučiaku, snímaču pohybu PIR a hodinovému modulu, aby sa to všetko pripojilo k štítu LCD.

Krok štyri. Pripojenie k štítu LCD.
Na štíte je 5 radov kontaktov, ich piny na Arduine sú 1-5, resp. Je tam kontakt na 5 V a GND, to je všetko, čo bolo použité na pripojenie. Analógové kolíky Arduino sa používajú na prenos údajov pomocou bzučiaka, snímača a hodín reálneho času. Senzor s hodinami bol samozrejme pripojený k zemi a napájaniu.

Krok päť. Inštalácia do krabice.
V tomto kroku je štruktúra umiestnená v samostatnej krabici. V prvom rade sú v krabici umiestnené káble od LCD shieldu. Arduino je zaistené skrutkou na pravej spodnej strane puzdra. Na uchytenie mikrokontroléra postačí jedna skrutka, o to viac, že ​​autor používa krabičku, v ktorej sú výstužné rebrá umiestnené v mieste otvorov pre ďalšie dve skrutky. Ďalej je na Arduino nainštalovaný LCD štít, ktorého káble obchádzajú dosku na pravej strane (vidno na fotografii nižšie). Hodinový modul dokonale zapadá do ľavého dolného rohu a na zaistenie používa jednu skrutku. Táto inštalácia komponentov umožňuje jednoducho pripojiť 2,1 mm jack k Arduinu. Pohybový senzor je inštalovaný tak, aby sa dal odmontovať, pretože prekáža pri pripájaní USB kábla k doske.

Krok šiesty. Programovanie.
Ako bolo uvedené na začiatku článku, hodiny by nemali zobrazovať len čas a dátum, ale aj časovač s budíkmi. Na štíte je 5 tlačidiel, ktoré je možné naprogramovať. Budú použité pre rôzne prevádzkové režimy hodín. Pri stlačení každého tlačidla sa ozve bzučiak a keď budík funguje, vydá niekoľko signálov.

Skica pre Arduino.
Autor si ako základ zobral skicu z Adafruitu, ktorá bola vyvinutá pre hodiny reálneho času. Používa knižnicu RTClib. Ďalej autor pridal kúsok kódu pre LCD štít od DFRobot (možnosť ovládania tlačidlami). A pridal som kúsok vlastného kódu výhradne pre tento projekt. Finálnu verziu kódu si môžete stiahnuť pod článkom. Nižšie sú uvedené fotografie s rôznymi prevádzkovými režimami hodiniek.

Krok sedem. Funkcie tlačidiel.
Ako môžete vidieť na fotografii nižšie, každé tlačidlo na štíte je označené, päť z nich bolo naprogramovaných takto:
- Prvé tlačidlo (SELECT) je ponuka. Tlačidlo zobrazuje rolovanie cez dostupné funkcie (časovač, budík).
- Druhé tlačidlo (VĽAVO) - toto tlačidlo je zodpovedné za výber funkcie. Doplnkovou funkciou tlačidla je zvýšenie hodnoty o 10 pri zadávaní hodín a minút.
- Tretie a štvrté tlačidlo (UP, DOWN) - slúžia na zvýšenie a zníženie hodín a minút pri nastavovaní budíka a časovača. Dodatočná funkcia tlačidiel na prepínanie medzi dopoludním a popoludním.
- Piate tlačidlo (VPRAVO) je tlačidlo Enter. Používa sa na prijatie hodnoty (nastavenie času časovača, hodín).
- Šieste tlačidlo (RST) - tlačidlo sa používa na reštartovanie Arduina.

V tomto článku sa zoznámite s vynikajúcim modulom hodín reálneho času napájaným z batérie.

S týmto modulom môžete sledovať čas vo svojich Arduino projektoch aj v prípade preprogramovania alebo výpadku napájania. Toto je jeden z nevyhnutných prvkov pre projekty budíkov, alarmov a snímania údajov zo senzorov v reálnom čase. Jeden z najpopulárnejších modelov modulu hodín reálneho času je DS1307. Na toto sa zameriame. Modul sa perfektne hodí k mikrokontrolérom Arduino, ktoré majú 5 V logické napájanie.

Vlastnosti modulu od výrobnej spoločnosti Adafruit (Číňania ponúkajú podobné možnosti tri až štyrikrát lacnejšie):

  • Všetko je zahrnuté: čip, postroj, batéria;
  • Jednoduché zostavenie a jednoduché použitie;
  • Inštaluje sa na akúkoľvek dosku alebo sa pripája priamo pomocou káblov;
  • Existujú vynikajúce knižnice a vzorové náčrty;
  • Dva otvory na upevnenie;
  • Trvanie práce - asi päť rokov!

Modul hodín reálneho času môže byť už prispájkovaný, alebo sa môže predávať vo forme samostatných komponentov, ktorých spájkovanie zaberie približne 15 minút, nie viac.

Čo sú hodiny reálneho času?

Hodiny reálneho času sú... hodiny. Modul pracuje na autonómnom napájaní - batériách a pokračuje v odpočítavaní času, aj keď dôjde k strate napájania vášho projektu Arduino. Pomocou modulu v reálnom čase môžete sledovať čas, aj keď chcete vykonať zmeny v náčrte a preprogramovať mikrokontrolér.

Väčšina mikrokontrolérov, vrátane Arduina, má zabudované počítadlo času nazývané millis(). V čipe sú tiež zabudované časovače, ktoré dokážu sledovať dlhšie časové úseky (minúty alebo dni). Prečo teda potrebujete samostatný modul hodín? Hlavným problémom je, že millis() sleduje iba čas od okamihu, keď je Arduino privedené napájanie. To znamená, že akonáhle odpojíte dosku, časovač sa nastaví na 0. Voš Arduino nevie, čo je, napríklad štvrtok alebo 8. marca. Všetko, čo môžete získať zo vstavaného počítadla, je "14 000 milisekúnd uplynulo od posledného zapnutia."

Napríklad ste vytvorili program a chcete odpočítavať čas od tohto okamihu. Ak vypnete napájanie mikrokontroléra, počítadlo času sa stratí. Podobne ako v prípade lacných čínskych hodiniek: keď sa vybije batéria, začnú blikať o 12:00.

V niektorých projektoch Arduino budete potrebovať spoľahlivú kontrolu času bez prerušenia. Práve v takýchto prípadoch sa používa externý modul hodín reálneho času. Čip, ktorý sa používa v takýchto hodinkách, sleduje roky a dokonca vie, koľko dní má mesiac (jediná vec, ktorá sa zvyčajne neberie do úvahy, je prechod na letný a zimný čas, pretože takéto prepočty sa líšia v v rôznych častiach sveta).

Obrázok nižšie zobrazuje základnú dosku počítača s hodinami reálneho času DS1387. Hodinky používajú lítiovú batériu, takže narástli.

Pozrime sa na príklad s použitím hodín reálneho času DS1307. Ide o lacný, ľahko použiteľný modul, ktorý na malú batériu vydrží niekoľko rokov.

Kým sa batéria v samotnom module nevybije, DS1307 si udrží čas, aj keď je Arduino odpojené alebo preprogramované.

Uzly, ktoré tvoria modul hodín reálneho času

Podrobnosti o module hodín reálneho času Adafruit DS1307
Kreslenie Označenie Popis Výrobca Množstvo
IC2 Čip hodín reálneho času DS1307 1
Q1 32,768 KHz, 12,5 pF kryštál Generic 1
R1, R2 1/4W 5% rezistor 2,2 kOhm červená, červená, červená, zlatá Generic 2
C1 0,1uF keramický kondenzátor Generic 1
5-kolíková koľajnica (1x5) Generic 1
Batéria 12mm 3V lítiová batéria CR1220 1
12mm držiak na mince Keystone 3001 1
zaplatiť Adafruit Industries 1

Zostavenie modulu hodín reálneho času

Zostavenie hodín reálneho času Adafruit DS1307
Foto Vysvetlenia

Pripravte sa na montáž. Skontrolujte, či máte všetky potrebné diely a nástroje. Umiestnite dosku plošných spojov do zveráka.

Naneste trochu spájky na záporný pól batérie.

Nainštalujte dva odpory 2,2 kΩ a keramický kondenzátor. Ako presne ich usporiadate, nie je dôležité. Na polarite nezáleží. Potom nainštalujte kryštál (aj symetricky), držiak (držiak) pre batériu a čip hodín reálneho času. Čip modulu reálneho času musí byť nainštalovaný tak, aby značka (drážka) na čipe bola umiestnená v súlade s označením na doske plošných spojov. Pozorne sa pozrite na fotografiu vľavo, čip je nainštalovaný správne.


Aby držiak batérie nevypadol, je lepšie ho prispájkovať na vrchu. Potom dosku otočte a zvyšné kolíky prispájkujte.

Odstráňte zostávajúce kontakty z rezistorov, kryštálu a kondenzátora.

Ak chcete použiť kolíky na montáž modulu na nespájkovanú dosku s plošnými spojmi, nainštalujte kolíkovú koľajnicu na kontaktnú dosku, modul RTC navrch a prispájkujte kolíky.

Nainštalujte batériu. Plochá časť batérie by mala byť navrchu. V priemere batéria vydrží približne 5 rokov. Aj keď je batéria takmer vybitá, nenechávajte priehradku na batériu prázdnu.

Knižnica Arduino pre prácu s DS1307

DS1307 sa ľahko pripája k akémukoľvek mikrokontroléru s 5V logickým napájaním a konektivitou I2C. Pozrieme sa na pripojenie a používanie tohto modulu s Arduinom.

Na získanie a konfiguráciu hodnôt z DS1307 použijeme knižnicu RTClib. Ak máte otázky týkajúce sa inštalácie ďalších knižníc Arduino, prečítajte si tieto pokyny.

Článok pojednáva o príklade hodín v reálnom čase od Adafruit, ale rovnako ľahko môžete použiť čínske analógy. Princíp fungovania a pripojenia sa nelíši.

  • KÚPIŤ Arduino Uno R3;
  • KÚPIŤ doska na pečenie ;
  • KÚPIŤ modul hodín reálneho času DS1307;

Na skutočných hodinách je 5 pinov: 5V, GND, SCL, SDA a SQW.

  • 5 V sa používa na napájanie čipu modulu hodín reálneho času, keď sa ho pýtate na časové údaje. Ak nie je privedený 5V signál, čip prejde do režimu spánku.
  • GND - spoločná zem. Musí byť pripojený k okruhu.
  • SCL - i2c hodinový kontakt - je potrebný na výmenu dát s hodinami reálneho času.
  • SDA je kontakt, cez ktorý sa cez i2c prenášajú dáta z hodín reálneho času.
  • SQW umožňuje konfigurovať výstup dát vo forme štvorcovej vlny. Vo väčšine prípadov sa tento kontakt nepoužíva.

Ak ste nakonfigurovali analógový pin 3 (digitálny 17) ako OUTPUT a HIGH a analógový pin 2 (digitálny 16) ako OUTPUT a LOW, môžete napájať hodiny reálneho času priamo z týchto pinov!

Pripojte analógový pin 4 na Arduino k SDA. Pripojte analógový pin 5 na Arduino k SCL.


Skica pre Arduino

Kontrola hodín reálneho času

Prvý náčrt, ktorý sa spustí, je program, ktorý načíta údaje z modulu hodín reálneho času raz za sekundu.

Najprv sa pozrime, čo sa stane, ak vyberieme batériu a vymeníme ju za inú, zatiaľ čo Arduino nie je pripojené k USB. Počkajte 3 sekundy a vyberte batériu. V dôsledku toho sa čip na hodinách reálneho času reštartuje. Potom prilepte nižšie uvedený kód (kód je možné nahrať aj do Príkladov→RTClib→ds1307 v Arduino IDE) a nahrajte ho do Arduina.

Budete potrebovať aj knižnicu OneWire.h, môžete si ju stiahnuť

.

// funkcie dátumu a času pomocou hodín reálneho času DS1307 pripojených cez I2C. Náčrt používa knižnicu Wire lib

#include <Wire.h>

#include "RTClib.h"

Serial.begin(57600);

if (!RTC.isrunning()) (

Serial.println("RTC NIE JE spustené!");

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

DateTime now = RTC.now();

Serial.print("/");

Serial.print("/");

Serial.print(now.day(), DEC);

Serial.print(" ");

Serial.print(":");

Serial.print(":");

Serial.println();

Serial.print(now.unixtime());

Serial.print("s = ");

Serial.println("d");

// výpočet dátumu: 7 dní a 30 sekúnd

DateTime future(now.unixtime() + 7 * 86400L + 30);

Serial.print(" now + 7d + 30s: ");

Serial.print(budúci.rok(), DEC);

Serial.print("/");

Serial.print(budúci.mesiac(), DEC);

Serial.print("/");

Serial.print(future.day(), DEC);

Serial.print(" ");

Serial.print(future.hour(), DEC);

Serial.print(":");

Serial.print(future.minute(), DEC);

Serial.print(":");

Serial.print(future.second(), DEC);

Serial.println();

Serial.println();

Teraz otvorte okno sériového monitora a uistite sa, že je správne nastavená prenosová rýchlosť: 57600 bps.

V dôsledku toho by ste v okne sériového monitora mali vidieť niečo takéto:


Ak hodiny reálneho času stratia energiu, zobrazia sa 0:0:0. Sekundy sa prestanú počítať. Po nastavení času sa spustí nové odpočítavanie. Z tohto dôvodu nie je možné vybrať batériu, keď je spustený modul hodín reálneho času.

Nastavenie času na hodinovom module

V tom istom náčrte odkomentujte riadok, ktorý začína RTC.adjust:

// riadok nižšie slúži na nastavenie dátumu a času hodín

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

Proces nastavenia dátumu a času je veľmi elegantný. Tento riadok obsahuje údaje z vášho počítadla vo vašom osobnom počítači (v čase zostavovania kódu). Tieto údaje sa používajú na flashovanie modulu hodín reálneho času. To znamená, že ak je čas na vašom PC nastavený nesprávne, odporúčame najprv opraviť túto chybu a potom prejsť na blikanie modulu hodín pre Arduino.

Po nastavení otvorte sériový monitor a skontrolujte, či sú hodiny správne nastavené:


Všetky. Odteraz a niekoľko nasledujúcich rokov už nebude potrebné konfigurovať DS1307.

Čas čítania z DS1307

Po nakonfigurovaní hodín reálneho času DS1307 naň môže odosielať dopyty. Pozrime sa na časť náčrtu, ktorá implementuje tieto dotazy.

DateTime now = RTC.now();

Serial.print(teraz.rok(), DEC);

Serial.print("/");

Serial.print(teraz.mesiac(), DEC);

Serial.print("/");

Serial.print(now.day(), DEC);

Serial.print(" ");

Serial.print(now.hour(), DEC);

Serial.print(":");

Serial.print(now.minute(), DEC);

Serial.print(":");

Serial.print(now.second(), DEC);

Serial.println();

V podstate existuje jedna možnosť, ako získať čas pomocou hodín reálneho času. Na tento účel použite funkciu now(), ktorá vráti objekt DateTime. Tento objekt obsahuje údaje o roku, mesiaci, dni, hodine, minúte a sekunde.

Existuje množstvo knižníc hodín v reálnom čase, ktoré poskytujú funkcie ako RTC.year() a RTC.hour(). Tieto funkcie vytiahnu rok a hodinu samostatne. Ich použitie však prináša množstvo problémov: ak požiadate o zobrazenie minút naraz, napríklad 3:14:59, to znamená tesne predtým, ako by sa čítanie minút malo rovnať „15“ (3:15: 00), výsledný údaj bude rovný 3:14:00 - to znamená, že stratíte jednu minútu.

Vo všeobecnosti je použitie samostatných funkcií na volanie hodiny alebo roku opodstatnené iba vtedy, ak presnosť časovej kontroly s rozpätím jednej minúty/rok nie je pre váš projekt kritická (spravidla je to v prípadoch, keď sa odčítavajú zriedkavo - raz denne, raz týždenne). V každom prípade, ak sa chcete vyhnúť chybám v odčítaní, použite now() a z prijatých údajov extrahujte údaje, ktoré potrebujete (minúty, roky atď.).

Existuje ďalší formát údajov, ktorý sa môžeme naučiť - počet sekúnd od polnoci 1. januára 1970. Na to sa používa funkcia unixtime():

Serial.print(" od roku 1970 = ");

Serial.print(now.unixtime());

Serial.print("s = ");

Serial.print(now.unixtime() / 86400L);

Serial.println("d");

Keďže jeden deň má 60*60*24 = 86400 sekúnd, môžete výslednú hodnotu previesť na dni a roky. Veľmi pohodlná možnosť, ak potrebujete sledovať, koľko času uplynulo od poslednej požiadavky. Napríklad, ak od posledného prístupu Arduina k hodinám reálneho času DS1307 uplynulo 5 minút, hodnota vrátená funkciou unixtime() bude väčšia ako 300.

Zanechajte svoje pripomienky, otázky a podeľte sa o svoje osobné skúsenosti nižšie. V diskusiách sa často rodia nové nápady a projekty!

Potreboval som nejako vyrobiť veľké nástenné hodiny s automatickým jasom.

Tieto hodiny sú ideálne do veľkých miestností, ako je kancelárska chodba alebo veľký byt.

Výroba takýchto veľkých nástenných hodín nie je veľmi náročná pomocou tohto návodu.


Pre odhad veľkosti hodiniek môžete predpokladať, že jeden segment hodiniek bude mať veľkosť papiera A4, čo uľahčí používanie fotorámikov vhodnej veľkosti.

Krok 1. Komponenty veľkých nástenných hodín.

Drôty, spájka, spájkovačka, LED pásik Arduino Nano DC-DC menič LM2596
4 metre LED pásika WS2811 svetelný senzor hodiny reálneho času DS3231
mikrospínače

Čo som použil na tento projekt:

Krok 8. Naprogramujte hodiny.

Po nejakom šantení sa mi podarilo získať hodinky, ktoré úplne uspokojili moje potreby. Som si istý, že to dokážeš lepšie ako ja.

Kód je dobre komentovaný a nebude pre vás ťažké ho pochopiť; ladiace správy sú tiež veľmi dobre komentované.

Ak potrebujete zmeniť farbu použitých nástenných hodín, musíte zmeniť premennú na riadku 22 ( int ledColor = 0x0000FF; // Použitá farba (v hex)). Zoznam farieb a ich hexadecimálnych kódov nájdete na stránke: https://github.com/FastLED/FastLED/wiki/Pixel-refe…

Ak máte problémy so sťahovaním, použite zrkadlo: http://bit.ly/1Qjtgg0

Môj posledný náčrt si môžete stiahnuť.

Krok 9. Vytvorte čísla pomocou polystyrénu.

Základňa frézy Pracovné telo frézy Celkový pohľad na frézu
Výsledok rezačky

Vystrihnite každý segment do šablóny vytlačenej na začiatku.
Polystyrén je možné rezať ostrým nožom, čo je dosť ťažké, alebo jednoduchým zariadením vyrobeným z nichrómového drôtu alebo gitarovej struny a niekoľkých kusov OSB dosky.

Ako sa mi to podarilo, môžete vidieť na obrázkoch vyššie.

Na napájanie rezačky som použil 12V zdroj.

V dôsledku rezania by ste mali získať štyri segmenty pre veľké hodiny, z ktorých jeden je znázornený na fotografii.

Krok 10. Prilepte čísla a zakryte všetko difuzérom. Posledné veľké nástenné hodiny.

Svieti počas dňa Žiari v noci

Po vystrihnutí všetkých štyroch čísel a bodov nástenných hodín ich všetky nalepte na kartón spolu s LED pásikmi (na uľahčenie procesu som použil obojstrannú pásku)

Na rozptýlenie tvrdého LED svetla som použil dva listy papiera na polystyrénové čísla. Pre pohodlie a estetiku som použil papier veľkosti A2 zložený na polovicu.

Po dokončení všetkých týchto krokov som výslednú zostavu veľkých nástenných hodín umiestnil do zodpovedajúceho veľkého fotorámčeka.

Tieto hodinky sa ukázali byť veľmi pôsobivé a pútavé. Myslím, že takéto veľké nástenné hodiny dokonale ozdobia nejednu miestnosť.

V kontakte s

Po vytvorení množstva prototypov Arduina na doske som sa rozhodol urobiť niečo užitočné, čo by som mohol použiť doma. A čo môže byť užitočnejšie ako svietiace hodinky, ktoré sa z nejakého dôvodu od roku 2010 prestali vyrábať? Digitálne hodinky som začal skladať zháňaním potrebných dielov. Jedným z kritérií, ktoré pomohli rýchlo zhromaždiť potrebné komponenty, bola dostupnosť dielov v miestnych predajniach a od výrobcov z Číny a Malajzie.

Arduino hodiny reálneho času (RTC) so 7-segmentovými displejmi

Pri skladaní hodiniek sa objavilo niekoľko možností, ako na nich nastaviť presný čas. Najprv: nastaviť čas na Arduine , ktorý ho neustále napája. Táto metóda však nie je príliš praktická, pretože zakaždým, keď potrebujete nastaviť čas, budete musieť zapnúť napájanie Arduina.

Druhou možnosťou bol nápad pripojenie 7 segmentov LED -indikátory pre modul GPS . Keďže signál GPS poskytuje veľmi presný čas, táto možnosť by mala problém vyriešiť a nemusela by sa nastavovať hodiny pri každom zapnutí. Vzal som svoj vreckový navigátor Garmin GPS 60 C, serializoval som ho do Arduina a načítal som niekoľko knižníc GPS, čím som získal veľmi presný časový signál.

Problém s metódou GPS sa ukázal v tom, že keďže bývam v centre mesta, môj dom obklopuje betónová džungľa s nepreniknuteľnými výškovými budovami a bolo by potrebné namontovať externú GPS anténu za oknom, aby prijímať signál GPS z jasného neba. Bez satelitného pokrytia nie je žiadne GPS zariadenie schopné prijímať časovo uzamknutý signál. Buď mali byť hodiny na okne, alebo bolo potrebné vytiahnuť GPS anténu a položiť k nej 7-metrový kábel.

Tretí spôsob nastavenia hodín sa ukázal ako najlepší. Spočíva v práci Arduino spolu s hodinami reálneho času DS1307 (RTC). Sú napájané 3-voltovou gombíkovou batériou, ktorá si zachováva nastavenia aj po vypnutí zariadenia a odpojení mikrokontroléra.

Vybral som sa do miestneho „elektronického neba“ nachádzajúceho sa v centre mesta skúsiť šťastie pri zháňaní potrebných komponentov. Na moje prekvapenie som tam našiel všetky potrebné diely na zostavenie digitálnych hodiniek.

Požadované časti sú:

  1. Arduino doska na prototypovanie a načítanie skice do mikrokontroléra;
  2. mikrokontrolér ATmega328P pre chod hodín;
  3. štyri červené 7-segmentové LED indikátory (alebo iné chladnejšie farby, ktoré nájdete na miestnom trhu);
  4. hodiny reálneho času DS1307;
  5. kremenný rezonátor pri 32,768 kHz;
  6. držiak na gombíkovú batériu CR2025 alebo CR2032;
  7. štyri čipy posuvného registra 74HC595 pre riadenie 7-segmentových LED indikátorov;
  8. odpory 220 Ohm 0,25 W každý;
  9. jednoradové kolíkové konektory;
  10. Zásuvky integrovaného obvodu (IC);
  11. spojovacie vodiče.

Ak nemáte zručnosti na výrobu dosiek plošných spojov, odporúčam použiť spájkovaná doska (textolitová doska s mnohými otvormi na pripevnenie súčiastok k nej spájkovaním, ktorá sa omylom nazýva obvodová doska) a prispájkujte naň všetky pätice čipov IC a kolíkové konektory. Vďaka týmto rýchloupínacím kontaktom možno v prípade potreby jednoducho vymeniť všetky 7-segmentové LED a integrované obvody.

Keďže veľkosť vývojovej dosky je veľmi obmedzená, mohli sme na ňu umiestniť len 35mm LED indikátory, pretože ešte muselo zostať miesto pre držiak na mincovú batériu. Chcel by som namontovať oveľa väčšie 7-segmentové indikátory, ale tie väčšie vyžadujú zvýšené napätie, nad 5 V a už bolo potrebné skomplikovať obvod dvojitými silovými obvodmi. Nechcem sa zaoberať stabilizátorom pre dve výstupné napätia, je lepšie zamerať sa na jednoduchšiu verziu digitálnych hodín.

100 nF keramické blokovacie kondenzátory na napájacom kolíku Vcc každého registra 74HC595 sú pridané, aby sa predišlo problémom s nízkofrekvenčným rušením.

Zostavené digitálne hodiny používajú iba 5 pinov Arduino:

  • 3 digitálne výstupy pre posuvné registre 74HC595;
  • 2 analógové výstupy pre hodiny reálneho času pripojené pomocou I2C pripojenia.

Výhodou zostavených digitálnych hodín na Arduine v porovnaní s továrenskými je, že môžete ľahko pridať akékoľvek funkcie, ktoré sa im môžu hodiť.

Tu je niekoľko nápadov na úpravu hodiniek:

  1. Striedavé zobrazenie hodín/minút a minút/sekúnd;
  2. Hranie melódie každú hodinu;
  3. Inštalácia snímača LM35 a používanie hodiniek ako teplomeru;
  4. funkcia ranného budíka;
  5. Rovnomerné ovládanie iných elektrických zariadení pomocou elektromechanického relé, ktoré sa zapína v súlade s časovo definovanými udalosťami alebo údajmi z pripojených snímačov.

Keďže štyri indikátory sú dosť veľké a jasné, možno ich použiť aj na zobrazenie informácií o písmenách.

Potom, čo som prispájkoval prvú číslicu 7-segmentovej LED so spoločnou katódou na posuvný register 74HC595, objavil sa prvý problém. Použil som len jeden 220 ohmový odpor pripojený k spoločnej katóde LED, aby som ušetril odpory, a zistil som, že keď bolo zapnuté číslo 8, všetky segmenty svietili veľmi slabo. To je v poriadku pre prototyp, ale nie je vhodné pre živé digitálne hodiny. Bolo by veľmi nepríjemné mať hodinky s číslami, ktoré svietia inak. Takže som musel odrezať jednotlivé vodiče a získať viac 220 ohmových odporov, aby som ich pripojil ku každému zo siedmich LED segmentov.

Druhým problémom bolo, že som zabudol prideliť priestor pre dve 5mm LED diódy, aby fungovali ako blikajúci indikátor sekúnd dvojbodky. A indikátor tretej číslice bol už spájkovaný.

Keďže spájkovanie jedného indikátora spolu s pripojením všetkých odporov k vodičom vyžaduje príliš veľa práce, rozhodol som sa vyrobiť vzdialenú dosku s dvoma LED diódami ako sekundovými indikátormi. Nájdem spôsob, ako nastaviť dve bodky medzi číslice hodín a minút! Na fotografii nižšie jednoducho vystrelím LED diódu na kolíku 13 blikajúcu v intervaloch 500 ms.

  • Existujú kódy .
  • Záverečná skica

Tu je niekoľko fotografií zostaveného, ​​funkčného zariadenia. Teraz potrebujem niečo ako akryl na zaistenie doštičky a skrytie hodín Arduino v celkovom kryte.

Tieto hodiny sú napájané diaľkovou doskou Arduino vo verzii s FTDI káblom a DC zásuvkou.

Zostava hodín Arduino je dokončená po inštalácii snímača vlhkosti a teploty DHT11.

Podomácky vyrobený snímač teploty a vlhkosti DHT11 a DHT22 - pripojenie k Arduinu GPS hodiny na Arduino

V mnohých projektoch Arduino je potrebné sledovať a zaznamenávať čas výskytu určitých udalostí. Modul hodín reálneho času, vybavený prídavnou batériou, umožňuje uložiť aktuálny dátum bez závislosti od dostupnosti napájania na samotnom zariadení. V tomto článku si povieme o najbežnejších RTC moduloch DS1307, DS1302, DS3231, ktoré je možné použiť s doskou Arduino.

Hodinový modul je malá doska obsahujúca spravidla jeden z mikroobvodov DS1307, DS1302, DS3231 Okrem toho na doske prakticky nájdete mechanizmus inštalácie batérie. Takéto tabule sa často používajú na sledovanie času, dátumu, dňa v týždni a iných chronometrických parametrov. Moduly fungujú na autonómnom napájaní - batérie, akumulátory a pokračujú v počítaní, aj keď je napájanie Arduina vypnuté. Najbežnejšie modely hodiniek sú DS1302, DS1307, DS3231. Sú založené na module RTC (real time clock) pripojenom k ​​Arduinu.

Hodiny sa počítajú v jednotkách, ktoré sú vhodné pre priemerného človeka - minúty, hodiny, dni v týždni a iné, na rozdiel od bežných počítadiel a generátorov hodín, ktoré čítajú „tikania“. Arduino má špeciálnu funkciu millis(), ktorá dokáže čítať aj rôzne časové intervaly. Hlavnou nevýhodou tejto funkcie je však to, že sa po zapnutí časovača vynuluje. S jeho pomocou môžete iba čítať čas, nie je možné nastaviť dátum alebo deň v týždni. Na vyriešenie tohto problému sa používajú moduly hodín reálneho času.

Elektronický obvod obsahuje mikroobvod, napájací zdroj, kremenný rezonátor a odpory. Kremenný rezonátor pracuje na frekvencii 32768 Hz, čo je vhodné pre konvenčný binárny čítač. Obvod DS3231 má zabudovanú quartzovú a tepelnú stabilizáciu, čo umožňuje vysoko presné hodnoty.

Porovnanie populárnych RTC modulov DS1302, DS1307, DS3231

V tejto tabuľke uvádzame zoznam najpopulárnejších modulov a ich hlavné charakteristiky.

názovFrekvenciaPresnosťPodporované protokoly
DS13071 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHzZávisí od kremeňa - zvyčajne hodnota dosahuje 2,5 sekundy za deň, nie je možné dosiahnuť presnosť vyššiu ako 1 sekundu za deň. Presnosť tiež závisí od teploty.I2C
DS130232,768 kHz5 sekúnd denneI2C, SPI
DS3231Dva výstupy - prvý na 32,768 kHz, druhý programovateľný od 1 Hz do 8,192 kHz±2 ppm pri teplotách od 0 °C do 40 °C.

±3,5 ppm pri teplotách od -40C do 85C.

Presnosť merania teploty – ±3С

I2C

Modul DS1307

DS1307 je modul, ktorý sa používa na časovanie. Je zostavený na základe čipu DS1307ZN, napájanie je dodávané z lítiovej batérie, aby sa zabezpečila autonómna prevádzka na dlhú dobu. Batéria na doske je namontovaná na zadnej strane. Modul má čip AT24C32 - jedná sa o 32 KB energeticky nezávislú pamäť EEPROM. Oba mikroobvody sú prepojené zbernicou I2C. DS1307 má nízku spotrebu energie a obsahuje hodiny a kalendár na rok 2100.

Modul má nasledujúce parametre:

  • Napájanie – 5V;
  • Rozsah prevádzkovej teploty od -40 C do 85 C;
  • 56 bajtov pamäte;
  • lítiová batéria LIR2032;
  • Implementuje 12- a 24-hodinový režim;
  • Podpora rozhrania I2C.

Modul je opodstatnený v prípadoch, keď sa údaje čítajú pomerne zriedkavo, v intervaloch týždňa a viac. To vám umožní ušetriť energiu, pretože neprerušované používanie bude vyžadovať väčšie napätie, dokonca aj s batériou. Prítomnosť pamäte umožňuje registrovať rôzne parametre (napríklad meranie teploty) a čítať prijaté informácie z modulu.

Interakcia s inými zariadeniami a výmena informácií s nimi prebieha pomocou rozhrania I2C z pinov SCL a SDA. Obvod obsahuje odpory, ktoré umožňujú poskytnúť požadovanú úroveň signálu. Doska má tiež špeciálne miesto pre montáž snímača teploty DS18B20 Kontakty sú rozdelené do 2 skupín, rozstup 2,54 mm. Prvá skupina kontaktov obsahuje nasledujúce piny:

  • DS – výstup pre snímač DS18B20;
  • SCL – hodinová linka;
  • SDA – dátová linka;
  • VCC – 5V;

Druhá skupina kontaktov obsahuje:

  • SQ – 1 MHz;
  • BAT – vstup pre lítiovú batériu.

Na pripojenie k Arduino doske potrebujete samotnú dosku (v tomto prípade uvažujeme o Arduino Uno), modul hodín reálneho času RTC DS1307, vodiče a USB kábel.

Na pripojenie ovládača k Arduinu slúžia 4 piny - VCC, zem, SCL, SDA.. VCC z hodín je pripojený na 5V na Arduino, zem z hodín je spojená so zemou z Arduina, SDA - A4, SCL - A5.

Ak chcete začať pracovať s modulom hodín, musíte nainštalovať knižnice DS1307RTC, TimeLib a Wire. RTCLib môžete použiť aj na prácu.

Kontrola modulu RTC

Keď spustíte prvý kód, program načíta dáta z modulu raz za sekundu. Najprv môžete vidieť, ako sa program správa, ak vyberiete batériu z modulu a vymeníte ju za inú, zatiaľ čo doska Arduino nie je pripojená k počítaču. Musíte počkať niekoľko sekúnd a vybrať batériu, prípadne sa hodinky reštartujú. Potom musíte vybrať príklad z ponuky Príklady→RTClib→ds1307. Dôležité je správne nastaviť prenosovú rýchlosť na 57600 bps.

Keď otvoríte okno Serial Monitor, mali by sa zobraziť nasledujúce riadky:

Čas ukáže 0:0:0. Hodinky totiž strácajú energiu a prestanú počítať čas. Z tohto dôvodu sa batéria počas prevádzky modulu nesmie vyberať.

Ak chcete nastaviť čas na module, musíte nájsť čiaru v náčrte

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

Tento riadok bude obsahovať údaje z počítača, ktorý sa používa na flashovanie modulu hodín reálneho času. Pre správnu činnosť musíte najskôr skontrolovať správnosť dátumu a času na počítači a až potom začať blikať modul hodín. Po nastavení monitor zobrazí nasledujúce údaje:

Nastavenie je vykonané správne a nie je potrebné dodatočne prekonfigurovať hodiny reálneho času.

Čítanie času. Po nakonfigurovaní modulu je možné odosielať časové požiadavky. Robí sa to pomocou funkcie now(), ktorá vracia objekt DateTime, ktorý obsahuje informácie o čase a dátume. Existuje množstvo knižníc, ktoré sa používajú na čítanie času. Napríklad RTC.year() a RTC.hour() - samostatne získavajú informácie o roku a hodine. Pri práci s nimi môže nastať problém: napríklad požiadavka na zobrazenie času bude vykonaná o 1:19:59. Pred zobrazením času 1:20:00 hodiny zobrazia čas 1:19:00, čo znamená, že v podstate dôjde k strate jednej minúty. Preto je vhodné použiť tieto knižnice v prípadoch, keď sa čítanie vyskytuje zriedkavo – raz za niekoľko dní. Existujú aj ďalšie funkcie pre čas volania, ale ak potrebujete znížiť chyby alebo sa im vyhnúť, je lepšie použiť now() a extrahovať z nej potrebné údaje.

Príklad projektu s modulom hodín i2C a displejom

Projekt sú bežné hodiny; na indikátore sa zobrazí presný čas a dvojbodka medzi číslami bude blikať v intervaloch raz za sekundu. Na realizáciu projektu budete potrebovať dosku Arduino Uno, digitálny indikátor, hodiny reálneho času (v tomto prípade vyššie popísaný modul ds1307), štít na pripojenie (v tomto prípade je použitý Troyka Shield), batéria pre hodiny a káble.

Projekt využíva jednoduchý štvormiestny indikátor na čipe TM1637. Zariadenie má dvojvodičové rozhranie a poskytuje 8 úrovní jasu monitora. Používa sa len na zobrazenie času vo formáte hodiny:minúty. Indikátor sa ľahko používa a ľahko sa pripája. Je výhodné použiť pre projekty, kde nie je potrebné minútové alebo hodinové overovanie údajov. Na získanie kompletnejších informácií o čase a dátume sa používajú LCD monitory.

Modul hodín je pripojený na piny SCL/SDA, ktoré patria k zbernici I2C. Musíte tiež pripojiť uzemnenie a napájanie. K Arduinu sa pripája rovnakým spôsobom, ako je popísané vyššie: SDA – A4, SCL – A5, zem z modulu na zem z Arduina, VCC -5V.

Indikátor sa pripája jednoducho - jeho piny CLK a DIO sú pripojené k ľubovoľným digitálnym pinom na doske.

Skica. Na zápis kódu použite funkciu nastavenia, ktorá vám umožní inicializovať hodiny a indikátor a zaznamenať čas kompilácie. Tlač času na obrazovku sa vykoná pomocou slučky.

#include #include "TM1637.h" #include "DS1307.h" //musíte zahrnúť všetky potrebné knižnice pre prácu s hodinami a displejom. čas kompilácie znakov = __TIME__; //čas kompilácie. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 //čísla z Arduino výstupov, ku ktorým je pripojená obrazovka; void setup() ( display.set(); display.init(); //pripojenie a konfigurácia obrazovky. clock.begin(); //zapnutie hodín. byte hour = getInt(compileTime, 0); byte minute = getInt( kompilačný čas, 2 bajt sekunda = getInt(compileTime, 4); //získanie času informácie do internej pamäte, začnite čítať čas ) void loop() ( int8_t timeDisp; //zobrazenie na každom zo štyroch bitov. clock.getTime();//požiadavka na získanie času. timeDisp = clock.hour / 10; timeDisp. = clock.hour % 10; timeDisp = clock.minute / 10; .point(clock.second % 2 ? POINT_ON: POINT_OFF);//zapnutie a vypnutie dvojbodky po sekunde) char getInt(const char* string, int startIndex) ( return int(string - "0") * 10 + int(reťazec) - "0"; //akcie na správne zapísanie času do dvojciferného celého čísla. V opačnom prípade sa na obrazovke zobrazí iba niekoľko symbolov. )

Potom je potrebné načítať náčrt a čas sa zobrazí na monitore.

Program by sa mohol mierne zmodernizovať. Keď je napájanie vypnuté, náčrt napísaný vyššie spôsobí, že sa na displeji po zapnutí zobrazí čas, ktorý bol nastavený počas kompilácie. Vo funkcii nastavenia sa vždy vypočíta čas, ktorý uplynul od 00:00:00 do začiatku kompilácie. Tento hash sa porovná s tým, čo je uložené v EEPROM, ktoré sa zachová po odpojení napájania.

Ak chcete zapisovať a čítať čas do energeticky nezávislej pamäte alebo z nej, musíte pridať funkcie EEPROMWriteInt a EEPROMReadInt. Sú potrebné na kontrolu, či sa hash zhoduje/nezhoduje s hashom zaznamenaným v EEPROM.

Projekt je možné vylepšiť. Ak používate LCD monitor, môžete vytvoriť projekt, ktorý zobrazuje dátum a čas na obrazovke. Zapojenie všetkých prvkov je znázornené na obrázku.

Výsledkom je, že kód bude musieť špecifikovať novú knižnicu (pre obrazovky z tekutých kryštálov je to LiquidCrystal) a pridať riadky do funkcie loop(), aby sa získal dátum.

Prevádzkový algoritmus je nasledujúci:

  • Pripojenie všetkých komponentov;
  • Skontrolujte - čas a dátum na obrazovke monitora by sa mali meniť každú sekundu. Ak je čas na obrazovke nesprávny, musíte do náčrtu pridať funkciu RTC.write (tmElements_t tm). Problémy s nesprávnymi časmi sú spôsobené tým, že hodinový modul po vypnutí nastaví dátum a čas na 00:00:00 1. 1. 2000.
  • Funkcia zápisu vám umožňuje získať dátum a čas z počítača, po ktorom sa na obrazovke zobrazia správne parametre.

Záver

Moduly hodín sa používajú v mnohých projektoch. Sú potrebné pre systémy zaznamenávania údajov, pri vytváraní časovačov a riadiacich zariadení, ktoré pracujú podľa daného plánu, v domácich spotrebičoch. So široko dostupnými a lacnými modulmi môžete vytvárať projekty ako budík alebo záznamník údajov zo senzorov, zaznamenávať informácie na SD kartu alebo zobrazovať čas na displeji. V tomto článku sme sa pozreli na typické scenáre použitia a možnosti pripojenia pre najpopulárnejšie typy modulov.