15. díl o Arduinu – 1. bitový sedmisegmentový displej

O LED diodách a Arduinu již víme vše, nyní tedy trochu postoupíme a pokusíme se zapojit sedmi-segmentový displej a budeme na něm zobrazovat číslo. Tento displej se tedy skládá ze sedmi segmentů, respektive z osmi, pokud počítáme i tečku, které jsou označeny písmeny od A do G.

7mi-segmentovy_displej

Tento jednobitový displej má 10 vývodů, nebo alespoň ten, který mám já. Jeho parametry jsou:

  • Barva: červená
  • max. proud na segment: 30 mA
  • Svítivost: 3 mcd
  • Výška znaků: 14,2mm
  • Počet pinů: 10
  • Úbytek napětí v propustném směru: 1,9-2,5 V
  • Společný vývod: Anoda

Displejů se prodává celá řada, je dobré si dát pozor na to, jestli máte ten, který má společnou katodu či anodu, já zrovna mám ten, který má společnou Anodu. Ovládají se dá se říci úplně stejně, nicméně pokud budete mít ten druhý typ, budete muset data znegovat, což si vysvětlíme ve chvíli, kdy budeme tvořit kód.

U displeje platí stejně, jako u LED diod, že pro jeho připojení budeme potřebovat odpory. Já vše budu stavit na desce DUE, tedy budu vycházet z napětí 3.3V a tak k tomuto displeji budu potřebovat celkem osm odporů o velikosti 47 ohmů, tedy 47 ohmů v případě, že vezmu bod, kterým jsou 2V. Pokud bych však chtěl, aby displej svítil o něco více, mohu vzít hodnotu 2,5V, pro který bych, v případě mé desky DUE potřeboval odpor 27 ohmů. Opět postupujeme podle vzorečku R=U/I.

Když tedy máme představu o tom, jaké odpory bude zapotřebí pro tento displej použít, podíváme se tedy ještě na to, jestli máme potřebné věci k tomu, aby jsme společně tento díl dotáhli do konce.

  • Desku Arduino
  • 7mi segmentový displej
  • dva a nebo 8 odporů v závislosti na tom, zda má displej společnou anodu či katodu (pro anodu 8 odporů, pro katodu stačí dva)
  • Propojovací kabely
  • Bastldeska

Pokud toto všechno máme, můžeme se pustit do zapojování. Nyní se můžete podívat na obrázky toho, jak jsem displej připojil a já se je pokusím trochu popsat.

IMG_4536IMG_4539

Sedmisegmentový displej, který mám já, má na zadní straně 10 pinů, kde pin 3 a 8 jsou společné anody. To znamená, že pokud byste připojovali tento displej, tak k anodám přivedete plus a ke katodám, což jsou všechny segmenty, l připojíte zem, tedy GND. Tímto rozsvítíte velice jednoduše všechny segmenty, nicméně pokud byste toto udělali, nebylo by možné je Arduinem ovládat, protože tolik zemí žádná deska snad nemá a co hůř, v případě že byste použili větší displej, tak už vůbec šanci nemáte. Naštěstí toto lze udělat trochu jiným způsobem.

Všechny části budou připojeny k Arduinu k digitálním pinům, ale je zapotřebí si zapamatovat jednu důležitou věc, a to že:

Anoda je vypnutá, pokud je stav jejich pinu na hodnotě LOW. Katoda toto má opačně, je tedy vypnutá při stavu pinu HIGH
Pokud tedy tuto informaci již víte, je tedy velmi jednoduché napájení na displeji dá se říci otočit. Tedy pro displej se společnou anodou jeho segmenty nebudeme zapínat funkcí digitalWrite s parametrem HIGH ale naopak použijeme parametr LOW, pro společnou katodu to bude přesně opačně.

Představme si tedy jeden krátký kus kódu, díky kterému, dovedeme zobrazit na displeji číslici nula:

void setup(){

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(4, OUTPUT);

//a tak dále až do zblbnutí

}

Void loop(){

if (cislo == 0) {

digitalWrite(1, LOW);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, HIGH);//kdyby byl zaplý

}

elseif(cislo == 1){

digitalWrite(1, LOW); //a tak dále…

}

Takto dovedete vytvořit ovládání pro jeden bit tohoto displeje, nicméně je to docela složité, při představě že displej má tyto čísla třeba tři by mohlo dojít například k tomuhle:

elseif(cislo == 827) {

       digitalWrite(1, LOW); //přeji příjemnou zábavu

S něčím takovým bych se asi psát opravdu nechtěl, protože pak by to nemuselo stačit a přechod na displej, který má třeba čtyři bity by asi příjemný nebyl. Nicméně lze vytvořit pole, ne však to kde roste kukuřice nebo obilí, jde o pole, ve kterém budete mít uložené veškeré údaje, co se pro kterou číslici má zobrazit a co pro kterou číslici se má vypnout. Příklad takového pole je například takový:

byte cisla_displeje[10][7] = {
{0,0,0,1,0,0,0},//0
{1,1,0,1,1,1,0},//1
{1,0,0,0,0,0,1},//2
{1,0,0,0,1,0,0},//3
{0,1,0,0,1,1,0},//4
{0,0,1,0,1,0,0},//5
{0,0,1,0,0,0,0},//6
{1,0,0,1,1,1,0},//7
{0,0,0,0,0,0,0},//8
{0,0,0,0,1,0,0},//9
};

Komentář ukazuje, o které jde číslo. Důrazně zde doporučuji použít hodnotu byte, samozřejmě, že by šlo místo hodnot 1 a 0 psát LOW a HIGH, nicméně by bylo zapotřebí použít větší typ proměnné než byte a výsledný program by byl zbytečně nepřehledný a navíc program by byl náročnější.

Nyní se ale ještě podíváme na piny, které jsem na desce použil. Doporučuji někam na začátek kódu napsat, jak váš displej je k desce připojený, může se vám to totiž dost hodit a usnadní vám to práci. Mé zapojení vypadá takto:

 

¨

/*

| - 26 - |
33 - - 29
| - 30 - |
53 - - 22
| - 50 - | ---- 25 <-- tečka

anoda - 2
*/

byte piny_displeje[] = {33, 26, 29, 30, 53, 50, 22};

Takto jednoduše lze říci, které piny se budou používat pro zobrazování části na displeji a nyní již stačí nastavit to, aby piny byly jako výstup ve funkci setup(). Provedeme tedy toto:

void setup() {

pinMode(50, OUTPUT);
pinMode(53, OUTPUT);
pinMode(33, OUTPUT);
pinMode(30, OUTPUT);
pinMode(29, OUTPUT);
pinMode(26, OUTPUT);
pinMode(25, OUTPUT);
pinMode(22, OUTPUT);

pinMode(2, OUTPUT);

}

Nyní ještě musíme vytvořit jednu jednoduchou funkci, která se bude starat o zobrazení čísla, pojmenujeme ji tedy třeba zobraz_cislo a bude vypadat takto:

void zobraz_cislo(int hodnota_cisla){

for(int i = 0; i<7; i++){

digitalWrite(piny_displeje[i], cisla_displeje[hodnota_cisla][i]);

}

}

V této funkci neděláme tedy nic jiného, než že vezmeme piny displeje, které jsme si deklarovali výše a použijeme na ně odpovídající hodnotu z pole, které máme opět výše. To vše máme úhledně zabalené v jednom jednoduchém cyklu, který se opakuje max. 8x, protože více segmentů ani displej nemá.

Pokud jsme tuto funkci úspěšně vytvořili, musíme ještě naplnit funkci loop() ve které budeme funkci pro zobrazení čísla volat a to takto:

void loop() {

zobraz_cislo(5);

delay(1000);

}

V této funkci je hodnota 5 číslo, které se promítne na displeji. Pokud se rozhodnete, že chcete udělat jednoduché počítání, které bude každou vteřinu zvedat hodnotu o +1, tedy vykreslit číselnou řadu 0 – 9, bude funkce loop mít tento obsah, ale je zapotřebí ještě někde na začátku deklarovat proměnou i která bude integer s hodnotou 0, následný kód pak může vypadat třeba takto:

void loop() {

zobraz_cislo(i);

delay(1000);

i++;

if(i>=10){

i = 0;

}

}

Pokud se vše povede tak, jak má, mohlo by to vypadat třeba takto:

Nyní se ještě trochu vrátím k tomu, jak je to s tou anodou a katodou. Tento celý kód je psán pro displej, který má společnou anodu, nicméně v případě, že máte doma displej, který má společnou katodu, můžete jej připojit úplně stejně, jako tento, ale budete muset v kódu udělat jednu velikou změnu. Tato změna bude ve funkci zobraz_cislo, ve funkci digitalWrite před hodnotu cisla_displeje budete muset vložit vykřičník, tento řádek kódu bude vypadat tedy takto:

digitalWrite(piny_displeje[i], !cisla_displeje[hodnota_cisla][i]);

Tímto docílíte toho, že se vám na displeji, který má společnou katodu budou zobrazovat čísla správně a ne jen jejich doplněk v případě, že byste použili přímo tento kód.

 

void loop() {

zobraz_cislo(5);

delay(1000);

}

V této funkci je hodnota 5 číslo, které se promítne na displeji. Pokud se rozhodnete, že chcete udělat jednoduché počítání, které bude kazdou vteřinu zvedat hodnotu o +1, tedy vykreslit číselnou řadu 0 – 9, bude funkce loop mít tento obsah, ale je zapotřebí ještě někde na začátku deklarovat proměnou i která bude integer s hodnotou 0, následný kód pak může vypadat třeba takto:

void loop() {

zobraz_cislo(i);

delay(1000);

i++;

if(i>=10){

i = 0;

}

}

Pokud se vše povede tak, jak má, mohlo by to vypadat třeba takto:

Nyní se ještě trochu vrátím k tomu, jak je to s tou anodou a katodou. Tento celý kód je psán pro displej, který má společnou anodu, nicméně v případě, že máte doma displej, který má společnou katodu, můžete jej připojit úplně stejně, jako tento, ale budete muset v kódu udělat jednu velikou změnu. Tato změna bude ve funkci zobraz_cislo, ve funkci digitalWrite před hodnotu cisla_displeje budete muset vložit vykřičník, tento řádek kódu bude vypadat tedy takto:

digitalWrite(piny_displeje[i], !cisla_displeje[hodnota_cisla][i]);

Tímto docílíte toho, že se vám na displeji, který má společnou katodu budou zobrazovat čísla správně a ne jen jejich doplněk v případě, že byste použili přímo tento kód.


1. díl o Arduinu - Historie

Arduino je open-source platforma určená pro navrhování hraček a rychlou tvorbu prototypů nejrůznějších součástek. Platforma je založena na mikro-kontrolorech ATMega od firmy Atmel a grafickém vývojovém prostředí, které dá se říci, vychází z prostředí Wiring.

2. díl o Arduinu - typy desek

V současné době je na trhu opravdu velké množství nejrůznějších desek, které lze pro projekty v Arduinu použít. Některé jsou velmi vhodné, jiné vám budou způsobovat vrásky na čele. Jde totiž sehnat desku, pro jejíž programování je zapotřebí externí převodník, protože se sama přímo nedá připojit k PC.

3. díl o Arduinu - speciální typy desek

V minulém díle jsme se zaměřili na základní typy desek, na kterých je možné stavit projekty Arduino. Nyní se však pokusím zaměřit na speciální typy desek, které svůj účel mají, dá se říci svým způsobem předurčen. Jde totiž o desky, které nebudete potřebovat tak často, jako ty předchozí, ale v případě některých je dobré vědět, že existují, protože výsledné prototypování je díky nim o dost jednodušší.

4. díl o Arduinu – Shieldy

Arduino samo o sobě v některých verzích obsahuje různá vylepšení základní verze, viz mutace Arduina Uno na desky Ethernet nebo Bluetooth. Jako příklad si uvedeme připojení k Wi-Fi u stolního počítače.

5. díl o Arduinu – Seznamujeme se s deskou UNO

Než se pustíme do jakéhokoliv programování, popíšeme si trochu jednu z těch desek, kterou budeme ze začátku používat pro projekty. Touto deskou bude Arduino Uno. Arduino Uno je základní deska, která dovede pohánět všechny projekty, na kterých se budeme s Arduinem seznamovat.

6. díl o Arduinu – Připojujeme Arduino k PC a instalujeme IDE

Vývojové prostředí pro Arduino je napsané v jazyce Java. To znamená, že je dostupné pro všechny platformy, na kterých je Java dostupná, z těch hlavních zmíním Windows, Linux a Mac OS X, protože pro ty je již připravená instalace na oficiálních stránkách Arduina.

7. díl o Arduinu – První aplikace

Po minulém díle již máme Arduino plně připojené k PC a je plně funkční. Nyní se tedy podíváme na to, jak vytvořit úplně první program, který na našem Arduinu budeme spouštět.

8. díl o Arduinu - Bastldeska

V minulém díle jsme si představili jednoduchou aplikaci. Byl to, dá se říci počátek všeho, co je zapotřebí pro to, abychom na Arduinu začali cokoliv dělat. A tak po stopách předchozího dílu se nyní podíváme na to, jak k Arduinu připojit skutečnou LED diodu, abychom nebyli omezeni pouze na tu jednu, která je připojena k pinu číslo 13 v případě desky UNO.

9. díl o Arduinu - Připojujeme LED diodu

V předminulém díle jsme si vysvětlili, jak Arduino pracuje a vytvořili jsme jednoduchý program, který nám rozblikal diodu, která byla připojena k pinu číslo 13 přímo na desce Una.

10. díl o Arduinu - Připojujeme LED diody seriově

V minulém díle jsme připojovali jen jednu LED diodu, nyní se ale podíváme na to, jak zapojit více diod tak aby svítily společně a aby jejich zapojení bylo sériové. Sériovým zapojením se rozumí, že diody budou zapojeny za sebou. To znamená, že do této větve dvou diod bude zapotřebí umístit jen jeden jediný odpor.

11. díl o Arduinu - připojujeme LED diody paralelně

Po vzoru předchozího dílu, kdy jsme připojovali dvě diody sériově s odporem na Arduino a jednoho před ním, kdy jsme připojovali pouze jednu LED diodu s odporem, se dnes podíváme na to, jak správně zapojit LED diody paralelně.

12. díl o Arduinu - Připojujeme LED diody sériovoparalelně

V minulých dílech jsme si řekli všechno o tom, jak se připojují LED diody sériově i paralelně. Nyní nastal čas, abychom diody zapojili oběma způsoby najednou. To vše z toho důvodu, že například takto jsou zapojeny diody v LED páscích, proto je možné je stříhat.

13. díl o Arduinu - Blikáme LED diody napřeskáčku

O tom, jak zapojit LED diody víme již snad vše, nepřekvapí nás sériové zapojení, nezapotíme se u paralelního a kombinace obou najednou, je už také za námi. Nyní se ale podíváme na to, jak připojit dvě diody nezávisle na sobě, budeme tedy tvořit dva okruhy, kdy každý bude ovládaný zvlášť.

14. díl o Arduinu - Knight rider

Po vzoru předchozího dílu, kdy jsme sepínali diody proti sobě na dvou okruzích, se dnes podíváme na to, jak vytvořit světlo, které mělo auto se jménem K.I.T.T. ze seriálu Knight Rider. Způsobů by se jistě našlo více, nicméně ten, který se zde pokusím popsat je podle mě ten nejjednodušší.

16. díl o Arduinu - 1. bitový sedmisegmentový displej - loading effect

V minulém díle jsme si připojili jeden sedmisegmentový displej, který dovedl zobrazit pouze jedno jediné číslo. Na tomto displeji jsme pak následně zobrazili číslice od 0-9. Nyní se však podíváme na jednoduchý kód, který by nám měl vytvořit jednoduchý efekt, podobný tomu, který možná často vidíte, když něco načítáte.

17. díl o Arduinu - 2. bitový sedmisegmentový displej

V dílech minulých jsme se zaměřili na sedmisegmentový displej, který dovedl zobrazit pouze jednu číslici, zobrazili jsme na něm čísla od 0 do 9 a pak jsme si vytvořili jednoduchý načítací efekt.

18. díl o Arduinu - maticové zapojení LED diod

V minulých dílech jsme začali displeje, které byly složeny z LED diod. Zobrazovali jsme na nich čísla a v jednom případě jsme i simulovali načítání. A i přes to, že jsem kdysi řekl, že z diod co se zapojení týče, je to snad vše, budeme se v tomto díle k nim vracet, protože existuje ještě jedno zapojení, které jsme si sice představili již dříve, ale tentokrát jej ještě trochu vylepšíme.

19. díl o Arduinu - 4. bitový sedmisegmentový displej

V minulém díle jsme si něco řekli o tom, jak se zapojují LED diody do matice. Vše, co jsme se v minulém díle naučili, se nám nyní bude hodit, protože se dnes pokusíme zapojit 4bitový sedmisegmentový displej, který právě maticového zapojení využívá.

20. díl o Arduinu - Sériový monitor

Dnes si řekneme něco o sériovém monitoru. Arduino když pracuje, tak existuje možnost, díky které Arduino zpět počítači, ke kterému je připojeno po seriové lince posílá nejrůznější informace. Tyto informace mohou být buď hodnoty z nějakého čidla či čidel, informace o tom, jestli je dané relé sepnuté či konkrétní dioda svítí a mnoho dalšího.

21. díl o Arduinu - připojujeme senzor DHT-11

V minulém díle jsme načali sériový monitor a dnes se na něm pokusíme zobrazit první data z čidla. Čidlo, které budeme pro náš pokus používat má označení DHT-11. Tento typ čidla je velmi oblíbený, protože měří teplotu a vlhkost.

22. díl o Arduinu - připojujeme senzor DHT-22

Minule jsme si představili senzor DHT-11, který je sice velmi oblíbený, ale zároveň ne moc přesný, proto se dnes podíváme na jeho vylepšenou verzi, tedy na senzor DHT-22. Senzor DHT-22 má tyto vlastnosti.