• Náramkové hodinky na arduinu. LCD hodiny, budík a časovač s detekcí pohybu na Arduinu. Připojení hodin reálného času

    Vyrobit velké nástěnné hodiny s automatickým jasem zabralo nějaký způsob.

    Takové hodiny jsou ideální pro velké místnosti, jako je kancelářská hala nebo velký byt.

    Vyrobit takto velké nástěnné hodiny není s pomocí tohoto návodu vážný problém.


    Pro odhad velikosti hodinek lze předpokládat, že jeden segment hodinek bude mít velikost papíru A4, takže lze snadno používat fotorámečky odpovídající velikosti.

    Krok 1. Komponenty velkých nástěnných hodin.

    Dráty, pájka, páječka, LED pásek Arduino Nano DC-DC konvertor LM2596
    4 metry LED pásku WS2811 světelný senzor hodiny reálného času DS3231
    mikrospínače

    Co jsem použil pro tento projekt:

    Krok 8. Naprogramujte hodiny.

    S trochou piplání se mi podařilo sehnat hodinky, které plně vyhovují mým potřebám. Jsem si jistý, že to umíš lépe než já.

    Kód je dobře komentovaný a snadno mu rozumíte, ladicí zprávy jsou také komentovány velmi dobře.

    Pokud potřebujete změnit barvu nástěnných hodin, které používáte, musíte změnit proměnnou na řádku 22 ( int ledColor = 0x0000FF; // Použitá barva (v hex)). Seznam barev a jejich kódů v hexadecimálním tvaru najdete na stránce: https://github.com/FastLED/FastLED/wiki/Pixel-refe…

    Pokud máte problémy se stahováním, použijte mirror: http://bit.ly/1Qjtgg0

    Můj finální náčrt lze stáhnout.

    Krok 9. Výroba čísel pomocí polystyrenu.

    Základna frézy Řezací nástroj Celkový pohled na frézu
    Výsledek frézy

    Vystřihněte každý segment podle vzoru vytištěného na začátku.
    Polystyren lze řezat ostrým nožem, což je poměrně obtížné, nebo jednoduchým zařízením vyrobeným z nichromového drátu nebo kytarové struny a několika kusů OSB desky.

    Jak se mi to povedlo, můžete vidět na obrázcích výše.

    Pro napájení řezačky jsem použil 12V zdroj.

    V důsledku řezů by měly být získány čtyři segmenty pro velké hodiny, z nichž jeden je zobrazen na fotografii.

    Krok 10. Přilepte čísla a vše uzavřete difuzérem. Závěrečné velké nástěnné hodiny.

    Zářit ve dne zářit v noci

    Po vyříznutí všech čtyř čísel a teček nástěnných hodin je všechny nalepte na karton spolu s LED pásky (pro zjednodušení jsem použil oboustrannou lepicí pásku)

    K rozptýlení tvrdého LED světla jsem použil dva listy papíru přes polystyrenová čísla. Pro pohodlí a estetiku jsem použil papír velikosti A2 přeložený napůl.

    Po dokončení všech těchto kroků jsem výslednou sestavu velkých nástěnných hodin umístil do odpovídajícího velkého fotorámečku.

    Tyto hodinky se ukázaly jako velmi efektní a poutavé. Myslím, že takto velké nástěnné hodiny skvěle ozdobí nejednu místnost.

    V kontaktu s

    Po krátké technické pauze tedy pokračujeme v seznámení s rodinou ARDUINO MK. V této lekci se pokusíme vyrobit hodiny fungující z interního generátoru MK (jedna z následujících lekcí bude s externím generátorem) a zobrazující informace na LCD indikátoru typu 1602 (což znamená 16 znaků ve 2 řádcích , existuje také typ 1604 - 16 znaků ve 4 řádcích, již jste pochopili, že první 2 číslice označují počet znaků indikátoru a druhé - počet řádků). Neodkládejme úvod, pojďme se pustit do práce.

    Pro projekt potřebujeme:

    1. Arduino Uno
    2. LCD indikátor 1602
    3. Prkénko na chleba
    4. dráty
    5. trimr 10 kOhm

    Pro ty, kteří jsou obzvláště líní, doporučuji jít dolů na konec stránky a stáhnout si hotový náčrt, pro ty, kteří se chtějí naučit, jak dělat náčrty sami, popíšu podrobněji všechny kroky projekt. Pro správnou a rychlou práci na projektu je potřeba algoritmus práce. Téměř každý projekt je lepší hodit na papír a pak postupovat podle algoritmu krok za krokem. Uděláme úplně to samé. Pojďme tedy vytvořit algoritmus. Máme několik podmínek, zapisujeme je vzestupně:

    1. Sekundy, pracujte v rozsahu od 0 do 59 v cyklu se sekundovým intervalem (to je pochopitelné).
    2. Minuty, pracujte v rozsahu od 0 do 59 v cyklu, přepínání nastává, když hodnota sekund dosáhne 0.
    3. Hodiny běží od 0 do 24 (zde si můžete vybrat zobrazení jako cizí styl od 0 do 12 s AM a PM jak chcete) v cyklu, přepínání nastává, když hodnota minut dosáhne 0.
    4. Zobrazení všech potřebných informací na displeji (můžete se například rozhodnout, že nebudete zobrazovat sekundy, ale pouze vytvoříte blikající tečku mezi hodinami a minutami)

    Sbíráme naše hodinky podle tohoto schématu:

    Připojení LCD indikátoru 1602 k ARDUINO

    Montážní tipy. Indikátor 1602 většinou pochází z Číny v „holé“ podobě, tzn. žádné piny nejsou pájeny, radím pro tyto účely použít dvouřadé počítačové patice ze základních desek, jeden pin patice se zasune do 1602, druhý pin je mimo okraj desky, připájejte oba piny na jeden kontakt - tento zvyšuje mechanickou a elektrickou pevnost. Toto schéma neukazuje schéma zapojení podsvícení, jedná se o následující 2 piny vpravo od D7. Můžete je připojit k 3,3V napájecímu zdroji na ARDUINO, můžete provést plynulý náběh/výstup, pokud připojíte kladný výstup (je označen jako A-anoda) k výstupu ARDUINO a ovládáte napájení přes tento výstup. je již vedlejší úkol, zatím stačí připojit výstup A na 1602 na 3,3V na ARDUINO a výstup je K 1602 na GND ARDUINO.

    Nyní přistoupíme k samotnému vývoji hodin. Na počítači spustíme shell ARDUINO. Zkusme si pohrát s 1602, abychom zkontrolovali správná zapojení obvodu. Jdeme Soubor-Příklady-LiqidCrystal a vyberte některý ze souborů. Nahrajte skicu do ARDUINO a uvidíte, co se stane. Pokud místo symbolů vidíte černé čtverečky, otočte trimrem, jedná se o regulátor kontrastu (udělejte totéž, pokud se nezobrazuje vůbec nic). Informace by se měly zobrazovat správně a prostě by tam nemělo být žádné „crazyabry“. Pokud se objeví, zkontrolujte schéma zapojení, kde bylo nesprávně sestaveno. Na náčrtech můžete okamžitě vidět, jak se dostat k LCD indikátoru, a žasnout nad jednoduchostí práce s ním! Pokud vše fungovalo správně, pokračujeme přímo k programování.

    Rozhodněme, že nám bude časovač fungovat bez operátora zpoždění jak je psáno. Zadáme tedy tento kód:




    #zahrnout

    // Proměnné se změní:


    prázdnota založit () {
    lcd.begin(16, 2);

    prázdnota smyčka ()
    {

    if (currentMillis - previousMillis >= interval) (


    Tento kód již bude fungovat, ale nebude nic zobrazovat. 1 bude přidána do proměnné s každou sekundu. už jsme dostali přesný interval 1 sekundy! Nyní, podle algoritmu, potřebujeme proměnný limit mezi 0 a 59. Pojďme na to.

    pokud (s>
    {


    }

    Přidejte tento kód do programu. Podle popisu je vše jasné - pokud je hodnota s větší než 59, pak k ní přiřadíme 0 a v proměnné m přidáme 1 minutu. V tuto chvíli máme plně funkční sekundový časovač a nekonečný (až 32768 - maximální hodnota typu integer) počítadlo minut. Nyní musíte stejným způsobem vypočítat minuty. Píšeme následující:

    if (m>59) // pokud jsou hodnoty m větší než 59
    {


    }

    Přidejte řádky do programu. Už by to mělo vypadat takto:

    int h,m,s; // proměnné pro hodiny, minuty, sekundy
    booleanz; // proměnná pro zobrazení bodu
    // připojení knihovny indikátorů
    #zahrnout

    // inicializuje knihovnu s čísly pinů rozhraní
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    // Proměnné se změní:
    int ledState = NÍZKÁ; // ledState slouží k nastavení LED
    bez znaménka dlouhé předchozíMillis = 0; // uloží poslední aktualizaci LED
    const long interval = 1000; // interval, ve kterém má blikat (milisekundy)

    prázdnota založit () {
    lcd.begin(16, 2);

    prázdnota smyčka ()
    {

    Unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) (
    // uložení posledního blikání LED
    předchozíMillis = aktuálníMillis;
    s++; // přidat jedničku, ekvivalent zápisu s=s+1;

    // sekce pro počítání sekund

    if (s>59) // pokud s je větší než 59
    {
    s=0; // přiřadit hodnotu 0 proměnné s
    m++; // přidá 1 k proměnné m zodpovědné za minuty
    }

    // sekce pro počítání minut

    pokud (m>
    {
    m=0; // přiřadit hodnotu 0 proměnné m
    h++; // přidá 1 k proměnné h zodpovědné za hodiny
    }

    V zásadě je vše jasné. Zbývá udělat zpracování hodin. My ano. Po sekci počítání minut přidáváme:

    pokud (h>
    {

    }

    Všechno, hodiny jsou připraveny! Vyplňte náčrt a hodiny poběží tak, jak mají! Chci vás upozornit na skutečnost, že budou počítat ve 24hodinovém formátu. Zkuste si sami vytvořit 12hodinový formát. Zbývá zobrazit informace na LCD indikátoru. Existují 2 způsoby, jak napsat kód pro zobrazení informací.

    1. Vypočítejte jeden údaj a ihned zobrazte
    2. Spočítejte všechna data a zobrazte je najednou.

    Je jen na vás, jakou cestou se vydáte. Pokud se budete držet první cesty, pak je potřeba zapsat zobrazení informací ihned do počítacích sekcí, pokud půjdete po druhé, zapíše se po všech výpočtech blok. Pojďme druhou cestou. je to výhodnější a logičtější (i když, abych byl upřímný, můj testovací náčrt je napsán prvním způsobem). K přenosu dat do indikátoru 1602 se tedy používají pouze 2 příkazy:

    lcd.setCursor(3, 0); // nastaví kurzor na znak 3 řádku 0 (počet řádků a znaků začíná od 0)
    lcd.print(0); // tisknout (tisknout, učit se anglicky) 0

    Existuje také příkaz lcd.clear; znamená čistou obrazovku ale tady to nemůžeme použít.

    Začněme shromažďovat informace. Začněme sekundami (můžete začít s libovolnou hodnotou, dělejte, jak chcete). Kurzor na řádku 0 nastavíme na pozici 6 a zobrazíme hodnotu sekund. Proč se ptáte na 6. pozici? Představme si následující: formát zobrazení hodin je 2 znaky (hodiny), oddělovač (řekněme:), 2 znaky (minuty), oddělovač (:) a nakonec sekundy. Počítáme od nulové pozice: 0+2+1+2+1=6. Protože počet začíná od 0, odečteme od dat jedničku (nula je také číslo), vyjde nám 6-1=5. Tak dlouho trvá zobrazení hodin a minut s oddělovači, další pozice jsou sekundy a rovná se 5+1=6. Trochu matoucí, ale napíšu následující hh:mm:ss a vypočítejte souřadnice nejprve od 0. Takto se vypočítají souřadnice na indikátorech rodiny 16xx. Za těchto podmínek se hodiny zobrazí v levém horním rohu, umístění můžete libovolně změnit, dokonce můžete zadat proměnnou a vybrat ji pro výběr požadované pozice zobrazení. Dobře, napíšeme řádky jako tento:

    lcd.setCursor(6, 0); // nastaví kurzor na znak 0 řádku 6 (počet řádků začíná od 0)

    Program bude vypadat takto:

    int h,m,s; // proměnné pro hodiny, minuty, sekundy
    booleanz; // proměnná pro zobrazení bodu
    // připojení knihovny indikátorů
    #zahrnout

    // inicializuje knihovnu s čísly pinů rozhraní
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    // Proměnné se změní:
    int ledState = NÍZKÁ; // ledState slouží k nastavení LED
    bez znaménka dlouhé předchozíMillis = 0; // uloží poslední aktualizaci LED
    const long interval = 1000; // interval, ve kterém má blikat (milisekundy)

    prázdnota založit () {
    lcd.begin(16, 2);

    prázdnota smyčka ()
    {

    Unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) (
    // uložení posledního blikání LED
    předchozíMillis = aktuálníMillis;
    s++; // přidat jedničku, ekvivalent zápisu s=s+1;

    // sekce pro počítání sekund

    if (s>59) // pokud s je větší než 59
    {
    s=0; // přiřadit hodnotu 0 proměnné s
    m++; // přidá 1 k proměnné m zodpovědné za minuty
    }

    // sekce pro počítání minut

    if (m>59) // pokud m je větší než 59
    {
    m=0; // přiřadit hodnotu 0 proměnné m
    h++; // přidá 1 k proměnné h zodpovědné za hodiny
    }

    // sekce pro počítání hodin

    if (h>23) // jestliže h je větší než 23
    {
    h=0; // přiřadit hodnotu 0 proměnné h
    }

    // sekce výstupu informací

    lcd.setCursor(6, 0);
    lcd.print(y); // tisk dat z proměnné s

    Nahrajte náčrt a…. se začaly objevovat sekundy!!! Jen pozor, při počítání od 0 do 59 je vše v pořádku, ale jakmile začne další minuta, začnou se místo jednotek sekund měnit desítky sekund, tzn. čas se zobrazuje nesprávně. Pojďme se s tím vypořádat. Dali jsme programu pevnou pozici 6,0 a vypisuje data přesně na této pozici, aniž by za touto pozicí cokoliv přepisovalo. Exit 2. Aplikujte lcd.clear nebo správně popište displej, zvláště u první volby bude poměrně těžké si zvyknout na přeskakování číslic sekund (dále jen minuty a hodiny). Pojďme napsat správný obslužný program zobrazení. Jaké podmínky budou při tomto zpracování? Zamysleme se. Pokud jsou sekundy menší než 10, zapíšeme jejich hodnotu na 7. pozici (6+1=7) a na 6. pozici zapíšeme 0, pokud je větší nebo rovna 10, zapíšeme na 6. pozici. Všechno je docela jednoduché. Podmínka bude vypadat takto:

    pokud (s<10) //если секунд меньше 10
    {

    lcd.print(0); //tisk 0


    }
    jiný
    {


    }

    Místo toho vložte tento kód

    lcd.setCursor(6, 0); // nastaví kurzor na 7 znaků 0 řádku (počet řádků začíná od 0)
    lcd.print(y); // tisk dat z proměnné s

    a s výsledkem jsme spokojeni! Vše je zobrazeno správně! Kromě toho se před sekundami objevil oddělovač „:“! Stejným způsobem zapíšeme handler pro minuty a hodiny s odpovídajícími souřadnicemi kurzoru. Na pár minut to může vypadat takto:

    Pokud (m<10)
    {
    lcd.setCursor(3, 0);
    lcd.print(0);
    lcd.setCursor(4, 0);
    lcd.print(m);
    }
    jiný
    {
    lcd.setCursor(3, 0);
    lcd.print(m);
    }

    a tak celé hodiny:

    Pokud (h<10)
    {
    lcd.setCursor(0, 0);
    lcd.print(0);
    lcd.setCursor(1, 0);
    lcd.print(h);
    }
    jiný
    {
    lcd.setCursor(0, 0);
    lcd.print(h);
    }

    Náš program bude vypadat takto:

    int h,m,s; // proměnné pro hodiny, minuty, sekundy
    booleanz; // proměnná pro zobrazení bodu
    // připojení knihovny indikátorů
    #zahrnout

    // inicializuje knihovnu s čísly pinů rozhraní
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    // Proměnné se změní:
    int ledState = NÍZKÁ; // ledState slouží k nastavení LED
    bez znaménka dlouhé předchozíMillis = 0; // uloží poslední aktualizaci LED
    const long interval = 1000; // interval, ve kterém má blikat (milisekundy)

    prázdnota založit () {
    lcd.begin(16, 2);

    prázdnota smyčka ()
    {

    Unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) (
    // uložení posledního blikání LED
    předchozíMillis = aktuálníMillis;
    s++; // přidat jedničku, ekvivalent zápisu s=s+1;

    // sekce pro počítání sekund

    if (s>59) // pokud s je větší než 59
    {
    s=0; // přiřadit hodnotu 0 proměnné s
    m++; // přidá 1 k proměnné m zodpovědné za minuty
    }

    // sekce pro počítání minut

    if (m>59) // pokud m je větší než 59
    {
    m=0; // přiřadit hodnotu 0 proměnné m
    h++; // přidá 1 k proměnné h zodpovědné za hodiny
    }

    // sekce pro počítání hodin

    if (h>23) // jestliže h je větší než 23
    {
    h=0; // přiřadit hodnotu 0 proměnné h
    }

    // sekce výstupu informací

    // tisk sekund

    pokud (s<10) //если секунд меньше 10
    {
    lcd.setCursor(6, 0); // kurzor na pozici 6 řádku 0
    lcd.print(0); //tisk 0
    lcd.setCursor(7, 0); //kurzor na pozici 7 řádku 0
    lcd.print(y); //vypíše hodnotu proměnné s
    }
    jiný
    {
    lcd.setCursor(6, 0); //jinak kurzor na pozici 6 řádku 0
    lcd.print(y); // vypíše hodnotu proměnné s
    }
    lcd.setCursor(5, 0); // kurzor na pozici 5 řádku 0
    lcd.print(':'); // vytiskne oddělovač mezi sekundami a minutami

    // výstupní minuty

    pokud (m<10)
    {
    lcd.setCursor(3, 0);
    lcd.print(0);
    lcd.setCursor(4, 0);
    lcd.print(m);
    }
    jiný
    {
    lcd.setCursor(3, 0);
    lcd.print(m);
    }
    lcd.setCursor(2, 0); // kurzor na pozici 2 řádku 0
    lcd.print(':'); // tisk oddělovače mezi minutami a hodinami

    // výstup hodin

    pokud (h<10)
    {
    lcd.setCursor(0, 0);
    lcd.print(0);
    lcd.setCursor(1, 0);
    lcd.print(h);
    }
    jiný
    {
    lcd.setCursor(0, 0);
    lcd.print(h);
    }

    Celý kód se vejde do nějakých 3 kilobajtů s trochou! Z toho většinu snědla knihovna za LCD indikátor. Chci hned poznamenat, že tento kód je pouze tělem programu, musíte také přidat funkci nastavení času. Navíc můžete přidat fotorezistor a jas podsvícení displeje. Můžete přidat funkci alarmového vstupu a pracovat se zvukem. Můžete také zobrazit pokojovou teplotu, datum atd. Obecně lze říci, že tento indikátor s příslušnými senzory dokáže proměnit tyto hodiny v jedinečné zařízení! Jediným negativem tohoto zařízení je, že pokud se vypne elektřina, budete muset znovu nastavit hodiny. Proto v nejbližší době popíšu práci s RTC modulem, při práci s ním, i když je vypnutá elektřina, při přivedení napětí budou hodiny fungovat, jako by se nic nestalo. Pro levnější verzi hodin můžete použít arduino pro mini, jedná se o stejný ovladač, ale nemá USB konektor, ale stojí několikanásobně levněji a má velmi malé rozměry. Můžete také použít arduino nano, stejný profesionál, ale s konektorem USB. Až do další lekce. Děkuji vám všem za pozornost.

    PS*. Mimochodem, postup pro zobrazení hodnot lze zapsat jako samostatnou funkci a předat jí potřebné hodnoty. Zkuste to udělat a porovnejte velikost obsazené paměti. Vždy se zaměřte na nejmenší objem.

    Jedním z prvních projektů, které začátečníci staví na desce Arduino, jsou jednoduché hodiny, které sledují čas. V podstatě jsou takové hodiny založeny na modulu RTC (Real Time Clock) připojeném k Arduinu. Na trhu s elektronikou jsou dnes k dispozici různé modely RTC, které se liší přesností a cenou. Mezi běžné modely patří DS1302, DS1307, DS3231.



    Ale můžete vytvořit hodiny Arduino bez použití RTC, zvláště pokud takové moduly nemůžete získat. Přesnost v tomto případě bude samozřejmě nízká, proto je třeba projekt považovat spíše za vzdělávací.


    Princip fungování takových hodinek je poměrně jednoduchý. Pokaždé, když tyto hodiny Arduino zapnete, budete je muset nastavit na aktuální čas, stejně jako jakékoli analogové hodiny. Samozřejmě je lepší nepoužívat takové hodinky v každodenním životě s jejich dlouhou aktivitou bez restartu a dalšího nastavování, protože desynchronizace s aktuálním časem při dlouhodobém provozu může být značná.


    Tyto hodiny lze sestavit na běžné prkénko, protože nevyžadují mnoho komponent. Naším hlavním odkazem zde bude deska Arduino Uno. Pro zobrazení času si můžete vzít 16x2 LCD. Chcete-li změnit nastavení času, připojte dvě tlačítka (pro hodiny a minuty). Tlačítka jsou k Aduinu připojena přes 10kΩ odpory. Pro změnu jasu displeje je nutný potenciometr 10 kΩ. Schéma připojení všech těchto komponent k desce Arduino Uno je uvedeno níže.



    Nyní musíte naprogramovat Arduino. Níže je uveden jednoduchý kód (náčrt), který umožňuje zobrazit čas na LCD obrazovce.


    #zahrnout LiquidCrystal lcd(12,11,5,4,3,2); int h=12; intm; int s; příznak int; int TIME; const int hs=8; const int ms=9; int stav1; int stav2; void setup() ( lcd.begin(16,2); ) void loop() ( lcd.setCursor(0,0); s=s+1; lcd.print("TIME:"); lcd.print(h ); lcd.print(":"); lcd.print(m); lcd.print(":"); lcd.print(s); if(flag<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(příznak==24)příznak=0; zpoždění(1000); lcd.clear(); if(s==60)( s=0; m=m+1; ) if(m==60) ( m=0; h=h+1; vlajka=vlajka+1; ) if(h==13 ) (h=1; ) lcd.setCursor(0,1); lcd.print("HEZKÝ DEN"); //-------Čas // nastavení-------// stav1=digitalRead(hs); if(stav1==1) (h=h+1; příznak=příznak+1; if(příznak<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(příznak==24)příznak=0; if(h==13)h=1; ) state2=digitalRead(ms); if(stav2==1)( s=0; m=m+1; ) )

       Děkujeme za váš zájem o stránky informačního projektu.
       Pokud chcete, aby zajímavé a užitečné materiály vycházely častěji a měly méně reklamy,
       Náš projekt můžete podpořit libovolnou částkou na jeho rozvoj.

    Rozhodl jsem se vyrobit domácí elektronické hodiny na arduino LED pásku s modulem reálného času, přikládám foto výroby a podrobný popis.

    Použité materiály:

    • - Diodová páska na čipech ws2811 (RGB, napájení 12v) 5 metrů - 700 rublů;
    • - arduino nano - 200 rublů;
    • - světelný senzor - 28 rublů;
    • - modul reálného času RTC DS1307 AT24C32 - 37 rublů;
    • - Výkonový měnič LM2596 - 41 rublů;
    • - napájení 12 V 1A;
    • - teplotní senzor DALLAS DS18B20 - 48 rublů;
    • - kus prkénka, dvě taková tlačítka, dráty.
    • - Pevná lepenka.
    • - papír na kreslení (2 ks).
    • - oboustranná páska (3M).
    • - běžná páska.
    • - desky z pěnového polyetylenu (převzaté z ochranného obalu zařízení).

    1. Instalace písma v MS Office a tisk znaku 8 na celý formát listu A4. Udělal jsem to ve Visiu. Vnitřní pruhy - okraje pro označení pod kousky diodové pásky. Vnější hranice - obrysy čísel.

    2. Obkreslení hranic kousků diodové pásky na karton

    3. Podle následující šablony vyrobíme značky na pěnový polyetylen tloušťky 15 mm a poté vyřízneme podle značek.

    K řezání jsem použil podomácku vyrobený stroj ze tří kusů dřeva, dřevotřískové desky a svisle nataženého nichromového drátu. Napájeno nastavitelným napájecím zdrojem.

    4. Podél okrajů vyznačených na kartonu přilepíme kousky diodové pásky a spojíme pájením podél řetízku.

    Vytáhl jsem hlavní schéma do samostatné krabice, protože takový případ je chatrný.

    Díky tomu je pro hodinky vhodný kabel, ve kterém:

    • +12V - pro napájení diodového pásku;
    • +5V - pro napájení osvětlovacího modulu;
    • 0 - společný vodič (mínus);
    • výstup dat z arduina na diodovou pásku;
    • výstup signálu ze světelného senzoru do arduina;

    Schéma zapojení Arduina.

    Výkonový měnič, arduino nano a modul hodin reálného času.

    Spínací deska s korekčními tlačítky.

    Algoritmus práce je následující:
    Hodiny ukazují čas, datum a teplotu v místnosti: prvních 15 sekund je čas, poté 3 sekundy je datum, další 3 sekundy je teplota a poté znovu čas. Od 45. vteřiny je opět datum 3 vteřiny, teplota 3 vteřiny a opět čas.
    Když je místnost světlá, je jas displeje vysoký, když je tma, je snížen na minimum.

    • Charakteristické rysy:
    • Výpočet reálného času v sekundách, minutách, hodinách, datech v měsíci, měsících, dnech v týdnu a letech, s přihlédnutím k výši aktuálního roku až do roku 2100.
    • Další RAM 31 x 8 pro ukládání dat
    • Sériový vstup - výstup informací pro snížení počtu pinů čipu
    • Výkon všech funkcí při napájecím napětí 2,0-5,5V
      - výkon všech funkcí při napětí 2,0-5,5 V na přídavném napájecím výstupu
    • Spotřeba ne více než 300 nA při napájení 2,5 V
    • Čtení a zápis informací po jednom bajtu nebo proudu
    • Provedení v 8pinovém pouzdru DIP, na přání také v 8pinovém pouzdru SOIC pro povrchovou montáž
    • Jednoduché 3vodičové rozhraní
    • Kompatibilní s TTL IC (Vcc= 5V)
    • Možnost dodání v průmyslovém teplotním rozsahu: od -40°C do +85°C
    • Kompatibilní s DS1202
    • Rozdíly od DS1202:
      možnost připojení vestavěného nabíjecího obvodu k výstupu Vcc1
      dvě zásuvky pro připojení hlavního a záložního zdroje
      zvětšila RAM o 7 bajtů

    Popis pinu:

    X1, X2připojení křemenného rezonátoru 32,768 kHz
    GNDVšeobecné
    RSTresetovat
    I/Ovstupní - výstupní data
    SCLKčasování sériové komunikace
    VCC1, VCC2napájecí kabely

    Strukturální diagram DS1302:

    Obecný popis:

    Čip DS1302 obsahuje hodiny reálného času s kalendářem a 31 bajtů statické paměti RAM. S mikroprocesorem komunikuje přes jednoduché sériové rozhraní. Informace o reálném čase a kalendáři jsou uvedeny v sekundách, minutách, hodinách, dni, datu, měsíci a roce. Pokud aktuální měsíc obsahuje méně než 31 dní, pak mikroobvod automaticky určí počet dní v měsíci s přihlédnutím k výši aktuálního roku. Hodiny pracují ve 24hodinovém nebo 12hodinovém formátu s indikátorem AM/PM (AM/PM). Připojení DS1302 k mikroprocesoru je zjednodušeno díky synchronní sériové komunikaci. Vyžaduje pouze 3 vodiče: (1) RST (reset), (2) I/O (datová linka) a (3) SCLK (hodiny sériové komunikace). Data lze přenášet po jednom bajtu nebo po sekvenci až 31 bajtů DS1302 je navržen tak, aby spotřebovával nízkou spotřebu a uchovával data a informace o hodinách při spotřebě méně než 1 µW. DS1302 je nástupcem DS1202. Kromě základních funkcí měření času DS1202 má DS1302 dva napájecí výstupy pro připojení hlavního a záložního zdroje, možnost připojit programovatelný nabíjecí obvod na pin VCC1 a sedm dalších bajtů paměti RAM.

    Spojení:

    Připojení DS1307 k Arduinu:

    RTC DS1307Arduino UNO
    GNDGND
    VCC+5V
    SDAA4
    SCLA5

    Připojení DS1302 k Arduinu:

    RTC DS1302Arduino UNO
    GNDGND
    VCC+5V
    RST6 (lze změnit na jiné v náčrtu)
    CLK7 (lze změnit na jiné v náčrtu)
    DAT

    (Lze změnit na jiné v náčrtu)

    Připojení DS3231 k Arduinu:

    RTC DS3231Arduino UNO
    GNDGND
    VCC+5V
    SDAA4
    SCLA5

    Modul DS1302 hodiny reálného času na Aliexpress http://ali.pub/1br52w

    Programový kód pro modul 1302 a displej 1602 I2C

    V závislosti na tom, který modul připojujete, musíte v programu určit

    Pro DS1302 :

    čas. begin(RTC_DS1302, 10, 13, 12);

    #zahrnout

    virtuabotixRTC myRTC(6, 7, 8); //CLK, DAT, RST

    Program

    #zahrnout

    #zahrnout

    LiquidCrystal_I2C lcd(0x3F ,2,1,0,4,5,6,7,3, POZITIVNÍ);

    void setup()(

    lcd.begin(16,2);

    //myRTC.setDS1302Time(00,04, 12, 06, 18, 04, 2017);

    void loop() (

    myRTC.updateTime();

    lcd.setCursor(0, 0);

    lcd.print("datum: ");

    lcd.print(myRTC.dayofmonth);

    lcd print("/");

    lcd.print(myRTC.month);

    lcd print("/");

    lcd.print(myRTC.year);

    lcd print(" ");

    lcd.setCursor(0, 1);

    lcd.print("čas: ");

    lcd.print(myRTC.hodiny);

    lcd print(":");

    lcd.print(myRTC.minutes);

    lcd print(":");

    lcd.print(myRTC.seconds);

    lcd.println(" ");

    Nezapomeňte také na úspory při nákupu zboží na Aliexpress pomocí cashbacku

    Výhody knihovny:

    Knihovna má interní funkce pro hardwarové zpracování protokolů přenosu dat I2C a SPI, a proto nevyžaduje připojení dalších knihoven, ale není s nimi v konfliktu, pokud jsou nějaké připojeny.

    Knihovna má vnitřní funkce programu pro zpracování protokolu 3-Wire

    Chcete-li inicializovat modul, zavolejte funkci begin s názvem modulu.

    Moduly jsou připojeny k hardwarovým pinům arduino použité sběrnice (kromě 3-Wire)

    Snadné nastavení a čtení času pomocí funkcí settime a gettime

    funkce settime může nastavit datum a čas, buď zcela nebo částečně (například pouze minuty nebo pouze den atd.)

    funkce gettime funguje jako funkce datum v php, vrací řetězec s časem, ale pokud je volána bez parametru, funkce nevrátí nic a čas lze číst z proměnných jako čísla.

    Knihovna je rozšiřitelná, to znamená, že aby mohla pracovat s novým modulem, je potřeba specifikovat parametry tohoto modulu ve stávajících polích souboru RTC.h (typ sběrnice, frekvence sběrnice v kHz, provozní režimy, registrovat adresy atd.), jak to vše provést, je popsáno v souboru extension.txt

    Přidáním nového modulu do knihovny tedy zvětšíme pouze oblast obsazené dynamické paměti o ~ 36 bajtů, přičemž neovlivníme oblast paměti programu.

    Při volání funkce begin knihovna načte příznaky registrů modulu a v případě potřeby je nastaví nebo resetuje tak, aby modul mohl pracovat na bateriové napájení, a nastaví se programovatelný výstup meandru (pokud ho modul má). do 1 Hz, pak lze tento výstup použít jako externí sekundové přerušení.

    Při práci s modulem DS1302 nejsou potřeba žádné rezistory na pinu GND (které jsou potřeba pro jeho spolupráci s dalšími knihovnami tohoto modulu), toho je dosaženo zadáním konkrétní frekvence 10kHz pro 3-Wire sběrnici, bez ohledu na frekvence CPU arduino.

    Knihovna má ještě jednu volitelný funkce period, která bere jako jediný argument - počet minut (od 1 do 255)

    pokud byla během zadaného času funkce gettime volána vícekrát, bude požadavek na modul na sběrnici odeslán pouze poprvé a odpověď na všechny ostatní požadavky bude součtem času poslední odpovědi modul a čas, který uplynul od této odpovědi.

    Funkci perioda stačí zavolat jednou.

    Detailní popis:

    } // POPIS PARAMETRŮ FUNKCÍ:// // Připojení knihovny:// #zahrnout // iarduino_RTC time(jméno modulu [, SS/RST pin [, CLK pin [, DAT pin]]]);// pokud modul pracuje na sběrnici I2C nebo SPI, tak stačí uvést 1 parametr, např.: iarduino_RTC time(RTC_DS3231);// pokud modul pracuje na sběrnici SPI a hardwarový SS pin je zaneprázdněn, pak číslo přiřazeného SS pinu modulu je indikováno druhým parametrem, například: iarduino_RTC time(RTC_DS1305,22);// pokud modul pracuje na třívodičové sběrnici, pak jsou uvedena čísla všech pinů, např.: iarduino_RTC time(RTC_DS1302, 1, 2, 3); // RST, CLK, DAT// // Pro práci s moduly knihovna implementuje 5 funkcí:// zahájení modulu begin();// nastavení času settime(sekundy [, minuty [, hodiny [, den [, měsíc [, rok [, den v týdnu]]]]]]);// získání času gettime("řetězec s parametry");// doba mrknutí Doba mrknutí (0-bez mrknutí / 1-blik_sec / 2-mrknutí_min / 3-blink_hour / 4-blink_days / 5-blink_month / 6-blink_year / 7-blink_weekdays / 8-blink_poledne)// uvolnění periody sběrnice (minuty);// // Funkce begin(): // funkce inicializuje modul: zkontroluje registry modulu, spustí generátor modulu atd.// // Čas nastavení funkce (sekundy [, minuty [, hodiny [, den [, měsíc [, rok [, den v týdnu]]]]]):// zapíše čas do modulu// rok je uveden bez zohlednění století ve formátu 0-99// hodiny jsou zadány ve 24hodinovém formátu, od 0 do 23// den v týdnu je zadán jako číslo od 0-neděle do 6-sobota// pokud má být předchozí parametr ponechán beze změny, pak můžete zadat zápornou nebo zjevně větší hodnotu// příklad: settime(-1, 10); nastaví 10 minut a ponechá sekundy, hodiny a datum beze změny// příklad: settime(0, 5, 13); nastaví 13 hodin, 5 minut, 0 sekund a datum ponechá beze změny// příklad: settime(-1, -1, -1, 1, 10, 15); nastaví datum na 01.10.2015 a čas a den v týdnu ponechá beze změny// // Funkce gettime("řetězec s parametry"):// funkce přijme a odešle řetězec, který nahradí níže popsané znaky aktuálním časem// příklad: gettime("d-m-Y, H:i:s, D"); odpoví řetězcem "01-10-2015, 14:00:05, Thu"// příklad: gettime("s"); odpoví řetězcem "05"// uvedené znaky jsou totožné se znaky pro funkci date() v PHP// s sekund od 00 do 59 (dvě číslice)// i minut od 00 do 59 (dvě číslice)// h hodin ve 12hodinovém formátu od 01 do 12 (dvě číslice)// H hodin ve 24hodinovém formátu od 00 do 23 (dvě číslice)// d den v měsíci od 01 do 31 (dva znaky)// w den v týdnu od 0 do 6 (jeden znak: 0-neděle, 6-sobota)// D název dne v týdnu od Po do Ne (tři znaky: Po Út St Čt Pá So Ne)// m měsíc od 01 do 12 (dvě číslice)// Název měsíce od ledna do prosince (tři znaky: led únor březen duben květen červen červenec srpen září říjen listopad prosinec)// Rok Y od 2000 do 2099 (čtyři číslice)// y rok od 00 do 99 (dvě číslice)// poledne nebo odpoledne (dva znaky, malá písmena)// poledne nebo odpoledne (dva znaky, velká písmena)// řetězec nesmí přesáhnout 50 znaků// // pokud chcete získat čas ve formě čísel, můžete zavolat funkci gettime() bez parametru a pak získat čas z proměnných// sekund sekundy 0-59// minuty minuty 0-59 // hodiny hodiny 1-12 // hodiny hodiny 0-23