Hodinový displej s integrovaným obvodem TM1637 umožňuje zobrazení 4 znaků pomocí čtyř sedmi-segmentových displejů spojených do jednoho modulu. Proto může najít uplatnění v přístrojích, kde potřebujeme zobrazit čas, číselnou hodnotu nebo jednoduchý text. Velkou výhodou je využití obvodu TM1637, který vytváří rozhraní mezi displejem a Arduinem a díky němu stačí pro komunikaci pouze 2 vodiče. Pokud by jsme si chtěli připojit takto velký 7-segmentový displej přímo k Arduinu, museli by jsme propojit 12 vodičů a sami řídit časování. Oproti tomu obvod TM1637 všechny tyto detaily zařídí sám a my pouze nastavujeme, co kde zobrazit.

Hodinový displej TM1637

Pro propojení hodinového displeje s Arduinem stačí tedy využít 4 propojovací vodiče. Připojíme GND na zem, VCC na +5 V, DIO na pin 3 a CLK na pin 2. Datové piny DIO a CLK samozřejmě můžete připojit na jiné volné digitální piny na své Arduino desce.

Schéma zapojení hodinového displeje TM1637

Pro jednoduchou práci s hodinovým displejem, respektive s obvodem TM1637 jsem využil knihovnu TM1637Display, návod na práci s knihovnami je zde. Ukázkový kód na začátku obsahuje připojení knihoven a nastavení čísel pinů, kterými propojíme displej s Arduinem. Dále je uveden návod na vytvoření vlastního slova včetně ukázky na slově AHOJ. Poté následuje vytvoření instance displej z knihovny TM1637Displej. V podprogramu setup je na začátku nastavení svítivosti displeje, přičemž síla podsvícení se dá nastavovat v rozsahu 8-15(15 svítí na maximum). Jako další jsou uvedeny ukázky různých způsobů tisku informací na sedmisegmentový displej. První se vypíše připravený text AHOJ, poté čísla bez doplněných nul a s nulami a jako poslední je ukázka přepsání jednotlivých čísel za zachováním předchozí hodnoty. V nekonečné smyčce loop je uvedená ukázka výpisu reálného času, kdy na začátku smyčky se načtou informace o času od spuštění Arduina a tento čas je přepočten pro jednotlivé číslice. Poté následuje výpis času, pauza a aktivace dvojtečky uprostřed displeje.

// Hodinový displej s TM1637

// připojení knihoven
#include <Arduino.h>
#include <TM1637Display.h>

// nastavení čísel pinů pro propojení s Arduinem
#define CLK 2
#define DIO 3

// pro vlastní nastavení segmentů je zde
// uvedena ukázka slova AHOJ v proměnné AHOJ
//   -      A
// |   |  F   B
//   -      G
// |   |  E   C
//   -      D
// v proměnné vypíšeme všechny segmenty,
// které chceme rozsvítit
const uint8_t AHOJ[] = {
  SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G,   // A
  SEG_B | SEG_C | SEG_E | SEG_F | SEG_G,           // H
  SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
  SEG_B | SEG_C | SEG_D | SEG_E                    // J
  };
// vytvoření instance displej z knihovny TM1637
TM1637Display displej(CLK, DIO);

void setup() {
  // nastavení svítivosti v rozsahu 8-15
  displej.setBrightness(10);
  // výpis vlastního slova AHOJ
  displej.setSegments(AHOJ);
  delay(1000);
  // výpis čísla bez doplněných nul
  displej.showNumberDec(12, false);
  delay(1000);
  // výpis čísla s doplněnými nulami
  displej.showNumberDec(34, true);
  delay(1000);
  // výpis jednoho čísla na druhé pozici
  // showNumberDec(číslo, počet zobrazených číslic, pozice)
  displej.showNumberDec(5, 1, 2);
  delay(1000);
}

void loop()
{
  // vytvoření proměnné vypis pro uložení
  // informací o jednotlivých znacích
  uint8_t vypis[] = { 0, 0, 0, 0 };
  // vytvoření proměnné cas a uložení
  // aktuálního času od zapnutí Arduina
  // v sekundách
  long cas = millis()/1000;
  // výpočet číslic pro jednotlivé pozice
  // na displeji pro zobrazení času
  // např. první pozice udává desítky minut
  // pro 1000 vteřin: 1000s/60=16min/10=1
  // druhá pozice udává jednotky minut
  // pro 1000 vteřin: 1000s/60=16min%10=6
  // znaménko / je dělení, které vrací celou číslici
  // znaménko % je zbytek po dělení
  vypis[0] = displej.encodeDigit((cas/60)/10);
  vypis[1] = displej.encodeDigit((cas/60)%10);
  vypis[2] = displej.encodeDigit((cas%60)/10);
  vypis[3] = displej.encodeDigit((cas%60)%10);
  // výpis informací na displej
  displej.setSegments(vypis);
  delay(500);
  // pro zobrazení dvojtečky mezi číslicemi
  // je nutné k pozici 1 přičíst hodnotu 128
  vypis[1] = vypis[1]+128;
  displej.setSegments(vypis);
  delay(500);
}

Po nahrání programu do Arduino desky dostaneme například tento výsledek:

Ukázka hodinového displeje TM1637

Arduino modul s hodinovým displejem a obvodem TM1637 je velice jednoduše použitelný pro různé aplikace, kde potřebujeme vypisovat čísla pro uživatele bez připojeného počítače. Nabízí se například možnost naprogramovat si vlastní hodiny s využitím hodinového displeje a obvodu reálného času DS1307.

 

Seznam použitých komponent:

http://dratek.cz/arduino/893-arduino-hodinovy-displej-tm1637-1420663915.html

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html

FB tw

Další podobné články