mylms.cz

... web o elektronice


Arduino hodiny s maticovým displejem

Tak jsem se pustil opět do nějakého Arduino bastlení. I když nerad vyrábím věci, které lze běžně koupit…sešlo se mi tu pár maticových displejů, RTC modul a nějaký to Arduino. Stačilo přidat kus jeklu, pár řádků programu a mám hodiny s maticovým displejem.

Původní myšlenka byla vyrobit jednoduché hodiny, které mají svítící displej. Žádné píčoviny, které by v noci působily rušivě – stačí blikání dvojtečky jako signalizace chodu. Pro mě není ani potřeba bateriové napájení, nebo desítky různých funkcí. Prostě jenom kostka, která bude zobrazovat čas v tmavé místnosti.

arduino-matrix-clock-1



Hodiny jsou velmi jednoduché. Zobrazovací část je založena na čtyřech maticových displejích 8*8 bodů s řadičem MAX7219. Z Číny jde objednat přímo modul se čtyřmi displeji na jedné desce. Dále obvod obsahuje modul reálného času DS3231, klon Arduino Nano a dvě tlačítka. Celek je napájen 5V adaptérem.

Konstrukce je vyrobena z jeklu 50×30 mm s vyfrézovaným otvorem pro displej. V něm je kvůli zvýšení kontrastu vloženo červené plexi. Vzadu jsou otvory na pověšení a nahoře dvě dírky s mikrospínači pro ovládání např. párátkem.

arduino-matrix-clock-2

Jednotlivé komponenty

 

arduino-matrix-clock-4

Základová barva

 

arduino-matrix-clock-7

Matná černá. Vzadu jsou otvory pro zavěšení, nahoře pro nastavení

 

Kvůli úspoře místa (maximální šířka všeho cca 25 mm) jsem musel displeje připájet na desku přímo. Vypájel jsem tedy dutinkové lišty a displeje do desky zapájel.

 

arduino-matrix-clock-3

Úspora místa je znatelná

 

Na horní straně jsou na univerzálním tišťáku dva mikrospínače. Oba připojují piny Arduina na GND. V procesoru je nastaven interní pull-up. Nejsou tedy potřeba žádné dodatečné součástky.

 

arduino-matrix-clock-5

 

Na zadní straně je vše propojeno. 5 V je přivedeno na všechny komponenty. Protože už používám stabilizovaný 5V zdroj, není přívod přiveden na pin VIN Arduina, ale přes diodu 1N4148 přímo na pin 5V. Kdyby bylo napájení přivedeno na vstup VIN byl by stabilizátor na desce zatěžován velkým procházejícím proudem pro LED displej.

 

arduino-matrix-clock-9

Schéma zapojení

 

Zapojení pinů Arduina:

  • D2 – tlačítko 1 (připojuje GND, nastaven internal_pullup)
  • D3 – tlačítko 2 (připojuje GND, nastaven internal_pullup)
  • D4 – matrix display, pin DIN
  • D5 – matrix display, pin CLK
  • D6 – matrix display, pin CS
  • A4 – RTC modul, pin SDA
  • A5 – RTC modul, pin SCL
  • GND – společné pro všechny moduly
  • 5V – společné přes všechny moduly, přívod přes 1N4148 (na fotce není)

 

arduino-matrix-clock-6

 

Program si můžete stáhnout zde, na mém GitHubu: https://github.com/…Matrix-Clock 

Program hodin je poměrně jednoduchý. Používám knihovnu LedControl na ovládání maticových displejů a knihovnu Wire pro komunikaci přes I2C. Na začátku programu jsou nadefinované jednotlivé znaky (část tisknutelné ASCII tabulky). Ve funkci si poté zvolím na jakém displeji se má jaký znak zobrazit. Lze si zvolit offset (posun znaku doleva/doprava). Lze samozřejmě rozsvítit/zhasnout jakýkoliv pixel. Čtení aktuálního času volám cca jednou za 500 ms. Zároveň v tomto čase blikám s dvojtečkou – dvojtečka se tedy rozsvítí cca jednou za sekundu.

Nastavit hodiny lze stejně jako u docházkového systému přes sériovou linku - odesláním vždy dvou znaků – první znak je parametr, který se bude nastavovat a druhý parametr je hodnota. Parametry jsou jednoduše znaky „A“ až „G“, kde A je rok, G je den v týdnu. Hodnota je zakódována jako tisknutelný znak ASCII. Mezera (kód 32) je číslo 0, vykřičník (kód 33) je číslo 1, atd. Odesláním znaků „B&“ dojde k nastavení měsíce na 6, tedy červen. K nastavení lze tedy použít buď sériový terminál spolu s ASCII tabulkou, nebo si vytvořit jednoduchý program. Nastavení hodin je signalizováno krátkým probliknutím pixelů na dolní straně displeje.

Druhou možností je nastavení hodin pomocí dvou tlačítek na vrchní straně. Stisknutím obou tlačítek zároveň se hodiny přepnou do režimu nastavení. Levým tlačítkem se přepíná parametr, který se mění, pravým tlačítkem se parametr zvyšuje. Po nastavení všech údajů se hodiny tlačítkem přepnou do režimu zobrazení aktuálního času. Momentálně lze v menu měnit pouze čas (hodiny a minuty) a intenzitu osvětlení displeje. Ale není problém jednoduše přidat další funkce.

Od verze 1.1. je možné zvolit si z více fontů čísel a je možné u dojtečky nastavit skrytí, trvalé zobrazení a nebo blikání.

arduino-matrix-clock-8

 

 

arduino-matrix-clock-10

Různé fonty čísel

 

Protože je USB konektor jednoduše přístupný z levé strany hodin, lze jakoukoliv funkcionalitu (měření teploty, automatický přechod z letního času na zimní, apod.) dodělat.

 



Napsal Petan před devíti měsíci (2018-06-13 10:30:00) v kategorii Elektronika. Připojeno 8 komentářů.
Přečteno 2313x.

Na programy zde poskytované není žádná záruka na funkčnost. Jednotlivé články, stejně jako celý obsah stránek není návodem a slouží pouze k studijním účelům. Zapojení výše mají pouze informativní charakter! Vždy se řiďte originálním návodem k použití! Na elektrickém (vyhrazeném) zařízení smí pracovat pouze osoba s příslušnou kvalifikací dle vyhlášky 50/78 Sb! Vše tedy děláte na vlastní nebezpečí! Autor stránek nebere žádnou zodpovědnost za případné újmy na zdraví, životě, majetku a jiné!

I když jsou články psány s co největší pečlivostí, mohou obsahovat chyby. Vše tedy bez záruky!

Jakékoliv části webu je zakázáno bez svolení autora a uvedení zdroje publikovat! Některé části článků mohou obsahovat texty, případně obrázky ze stránek Wikipedia a Wikimedia Commons. Tyto části jsou dostupné pod původní licencí Creative Commons.



1 | indra | před osmi měsíci (2018-07-12 21:08:25)

can not set the matrix clock

thank you for your matrix clock project.I have done the assembly according to your schmetic. Thn loaded the sktech into arduino. on matrix its is showing 45: c5 only.I am trying to set the clock, but after setting hour and minute through the buttons than brightness, strt is coming out on display. and if i push the button again then 45:c5 is displaying on matrix led. nothing else, please help

  • Peťan: First send this sketch to your Arduino - maybe your RTC has different I2C address. I use 0x68.
    If you have good address, you should test only RTC clock with Arduino board. Use simple Arduino sketch for read time from RTC and send to serial port. I recomend this sketch. It's simmilar to my sketch...but it send data directly to serial port. Or, there are lots of examples on the internet. You can try that. Is it working? Is time right?
    If not, maybe your RTC module is dead (did you try to change battery?) - at last, try to change RTC module.
  • reagovat

    2 | Indra | před sedmi měsíci (2018-07-19 22:13:19)

    INDIA

    Thank You Very Much. Lots of Thank. Your guidance have helped me out to make this clock. Its working now. Keep it up. Keep posting on your blog/ web site.
    Indra from India.

  • Peťan: I'm glad to hear your positive result. Where was the problem? Greatings to India :)
  • reagovat

    3 | Indra | před sedmi měsíci (2018-07-30 20:06:18) | debendralaha@yahoo.com

    INDIA

    My RTC was faulty. I have installed new one and after finding out right 12 c address as you have instructed everything is now going smooth. Thank You again. Greetings to your country also.

  • Peťan: I have had the same problem in the past with the same module. It just always sent the same value. I replaced it and it works. It's the same problem like here. But I did not solve the problem replacing the battery.
    You can download a new version (v1.1.) of firmware for this clock. It's support more "fonts" and you can hide colon betwen hours and minutes.
  • reagovat

    4 | DAVE B | před měsícem (2018-12-31 19:23:46)

    [3] Indra: Excellent project Petean.

    Please let me know how to change the below:

    F: Font (show nr of font in select font style)

    :: Dot style (0 – hide, 1 – show, 2 – blinking)

    How to download and select these options and change through the Agnes tool?. I'm not able to understand from the video.

    Thanks in advance.

  • Peťan: You have to download version 1.1. These features are not in firmware v1.0. Agnes tool is not avaliable. It's my "internal" application for Arduino attendance system. I just use the same setting system. I know, it could be more user friendly. Probably I will make some app for time setting.
  • reagovat

    5 | DAVE B | před měsícem (2018-12-31 20:08:59)

    Excellent

    Hi Petean, It's working fine. Able to change the font style and blinking with new version 1.1.

    Many thanks and Wish you a Happy Newyear 2019.

  • Peťan: It's good to hear it :) Hapy New Year for you, too.
  • reagovat

    6 | KADİR | před měsícem (2019-01-13 14:43:53)

    TEŞEKKÜR

    Prejeyi gördüm ve çok beğendim kolaylıkla yaptım sıcaklık fonksiyonu olsa idi daha güzel olacaktı yinede emeği geçen preje sahiplerine çok teşekkür ederiz

  • Peťan: I'm not sure if I understand you at all. Of course, it is possible to add temperature meter. You could add DS18B20 temperature sensor and some code for alternatig time and temperature. I do not need this function and that's why I did not add that.
  • reagovat

    7 | Binod | před měsícem (2019-01-23 19:54:57)

    Thanks for your project

    My problem is I can't rotate the display.Sir please help me to do your project.

  • Peťan: Hi, how exactly do you want to rotate the display? Could you take a photo of your issue?
    If you need rotate only each numbers (not to change their possition) you have to change "byte ByteRevers(byte in) {" function. Or omit this function.
    If you need change the possition of each numbers (ie. reverse) you have to change "DrawSymbol" function. You have to change "adr" value.
    Maybe this picture could help you.
  • reagovat

    8 | Binod | před měsícem (2019-01-24 05:45:08)

    Thanks sir replying and helping

    Sir i am getting error . Can you help me by sending the full code of your project after rotating it 90 degree.I am totally new sir please help me.

  • Peťan: Try to change this function. Just delete old one and add this:

    ByteRevers(byte in) {
    byte out;
    out = 0;
    if (in & 0x01) out |= 0x80;
    if (in & 0x02) out |= 0x40;
    if (in & 0x04) out |= 0x20;
    if (in & 0x08) out |= 0x10;
    if (in & 0x10) out |= 0x08;
    if (in & 0x20) out |= 0x04;
    if (in & 0x40) out |= 0x02;
    if (in & 0x80) out |= 0x01;
    return(in);
    }

    Or send me a photo. I don't know how the font rotated is.
  • reagovat

    Připojte váš komentář!

    Hvězdičkou jsou označena povinná pole.
    E-mailovou adresu k příspěvku přidávat nemusíte. Autor stránek odpovídá vždy do komentáře, ne na přiložený e-mail!
    Kvůli zachování kompletnosti komentáře budou vložené odkazy na obrázky vloženy do komentáře přímo jako obrázek. Původní soubor bude zkopírován na tuto stránku.

    Fields marked with * are required.
    Do not add your email address. I always answer inside the comment, not to included address.
    Links for external pictures will changed to pictures and add inside the commentary.