Site icon Peťanovo.cz

Arduino hodiny s maticovým displejem

Arduino Clock with Matrix Display

Now, you do not have to use google translate for translate this page to english. You can just read blue text. Let me know if you find any mistakes.
If you like this clock, you can donate on Patreon, or IBAN: CZ9861000000001019937201 or just write something to discussion part under this article or send some photo of your clock to info@mylms.cz. Thank you.

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.

Let me show you my Arduino clock with matrix display. I do not like to make ordinery thing what you can ussualy buy. But I wanted a simple clock which can show only time (hour and minute) without any animation and other disturbing elements. Well I have made this clock with Arduino nano (Chinese clone) and four matrix dot displays.

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.

Clock construction is really easy. Display is based on four matrix displays (8 x 8 pixels) with MAX7219 driver. I ordered one module with 4 displays on one board. Next, there are real time clock module with DS3231, Arduino Nano (Chinese clone in my case) and two push butons. I use external 5V power supply.

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.

Body of clock is made from steel profile 50×30 mm with milled hole for display. I used red acrylic for make better contrast of display. There are some holes – for hanging on the back and two small holes with push buttons on the top.

Jednotlivé komponenty | all components
Základová barva | base paint
Matná černá. Vzadu jsou otvory pro zavěšení, nahoře pro nastavení | Black color. Two holes for hanging, two holes on the top for setting

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.

There is not enough space in the steel profile (maximum width is only 25 mm). I had to solder all displays directly to pcb for save some space.

Úspora místa je znatelná | A lot of space is saved

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.

There are two push buttons on the top of board. Both connect inputs from Arduino with GND. Internal pull-up resistors are set in processor. No additionals resistors are necessary.

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.

All modules are connected with 5 V bus. Because I use external 5V power supply, I do not have to use VIN pin, but directly (via the 1N4148 diode) to 5V pin. If I used VIN input, the integrated stabilizer would be overloaded with the display current!

Schéma zapojení | schematics

Zapojení pinů Arduina:

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

You can download program from my GitHub: https://github.com/mylms/Arduino-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. Pro komunikaci s RTC se nepoužívá žádná dodatečná knihovna. Na začátku programu jsou nadefinované jednotlivé znaky. Č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 (pokud je zapnuté blikání).

Sketch is really simple. It use LedControl library for matrix display. Library Wire is used for I2C communication. For communication with real time clock module is not used any other library. At the beginning of the sketch all symbols are defined. Read actual time from RTC is twice a second. Colon blinking (only if blinking is active) in the same interval.

Hodiny je možné nastavit 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 (BTN1) se přepíná parametr, který se mění, pravým tlačítkem (BTN2) se parametr zvyšuje. Po nastavení všech údajů se hodiny tlačítkem přepnou do režimu zobrazení aktuálního času.

It is possible to set clock with two buttons. When both buttons are pressed, clock goes to setting mode. Left button (BTN 1) can change the parameter, right button (BTN 2) change value of parameter. After set all parameters is clock bring back to show actual time.

Ve verzi 1.0 a 1.1 je možné měnit pouze čas – hodiny a minuty. Dále pak intenzitu svitu displeje a font. Možné je nastavit čas pomocí sériového portu.

In version 1.0 and 1.1 clock can show only time – hours and minute. It is possible to change brightness and font. All parameters can be change via serial port.

Od verze 1.2 lze v menu měnit hodiny (H), minuty (M), rok (y), měsíc (m), den (d), formát 12/24 hodin (/), zobrazení data (D), font (f), styl dvojtečky (:), intenzitu osvětlení (b), otočení fontu ( R ), otočení displeje ( r ). Po nastavení všech parametrů se zobrazí na displeji nápis „Strt“, po stisknutí tlačítka BTN1 se sekundy nastaví na 0 a hodiny se rozběhnou. Stejně tedy jako  v předchozí verzi.
Dále lze hodiny nastavit snadněji pomocí sériového portu (oproti předchozím verzím se liší styl zápisu). Rychlost sériové linky je 9600 baud. Je nutné odeslat přes sériovou linku vždy 3 znaky. První slouží jako příkaz, další dva jako číslo ve standardním desítkovém formátu (00 – 99). U čísla je vždy nutné zapsat dvě číslice. Příkazy se shodují se znaky v menu. Odesláním znaku otazníku „?“ do hodin se vypíše aktuální čas a nastavení.

From version 1.2 i’ts possible to change hour (H), minute (M), year (y), month (m), day (d), 12/24 clock format (/), show date (D), font (f), colon style (:), brightness (b), font rotate ( R ), display rotate ( r ). After set all parameters is „Strt“ shown. After press BTN1 are second set to 0 and clock goes to start. It is same like in older version.
Clock can set via serial port. Speed is 9600 baud. Three characters must be send. First is command, second and third are number in decimal notation (00 – 99). Commands are the same like in menu. After send „?“ clock send help back to serial monitor.

Od verze 1.3 lze navíc otočit font vzhůru nohama a zobrazit aktuální teplotu, která je načítána z RTC modulu. Teplota je tedy přibližná a ovlivněna teplotou samotného modulu.

From version 1.3 it’s possible to turn font upside down and show temperature. Temperature is readed from real time clock module. Temperature is only approximate and depend on temperature of RTC module.

Od verze 1.4 je možné otočit text tak, aby byl čitelný vertikálně (parametr v00/v01). Lze tedy hodiny použít na výšku. Dále je možné připojením vstupu D10 a/nebo D11 na GND zobrazit jeden ze třech textů. Ty je nutné upravit přímo v kódu.

From version 1.4 it’s possible to turn display vertically (parameter v00/v01). Now you can turn clock like „portrait“. Next, if you connect input D10 and/or D11 to GND you can show one of three messages.. Messages must be changed directly in the code.

Od verze 1.5 je možné invertovat zobrazení displeje a používat IR dálkové ovládání. Do programu je nutné zadat kódy jednotlivých tlačítek dálkového ovladače. Kódy jsou definovány od řádku 140. Jsou použity tři tlačítka – jedno simulující tlačítko 1, druhé simulující tlačítko 2 a třetí simulující stisk obou tlačítek.

From version 1.5 it’s possible to invert display and now, you can use IR remote control. It’s nessesary to add three codes to sketch – see row 140. Buttons of the remote control just simulate hardware button btn1 and btn2. Button3 simulate press both buttons at the same time (menu).

Nastavení pomocí sériové linky:

Různé fonty čísel | some different fonts
Možné zobrazení na výšku | vertical view

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.

Because USB port is accessible from left side, it’s easy to add some new function.

V komentářích můžete vidět, že jsou jednou za čas diskutovány různé úpravy kódu. Úpravy, které dávají smysl jednou za čas zahrnu přímo do originálního kódu. Samozřejmě, že by šlo udělat víc úprav, ale chci zachovat jednoduchost a univerzálnost konceptu.

Upgrade by Patrizio (this function is avaliable in v 1.4)

V této verzi byla přidána možnost zobrazit uživatelný text (grafiku) v závislosti na dvou digitálních vstupech. Funkci jsem přidal přímo do verze 1.4.

In this version is avaliable show some user texts (depends on digital inputs). This function is included in version 1.4.

Upgrade by Johnny

Úprava programu pro zobrazení času na displeji 32×16 bodů. Úpravu provedl přímo Johnny podle diskuze pod článkem zde a zde. Upravený firmware si můžete stáhnout přímo zde.

This upgrade allows use bigger display for show time. You have to use 8 LED matrix display with all resolution 32*16 pixels. You can download upgraded firmware right here – author of this version is Johnny, it’s based on Arduino Matrix Clock v 1.4. Discussion about this upgrade you can read here and here.

Exit mobile version