Pouze tento týden sleva až 80 % na e-learning týkající se PHP. A zároveň využij akce až 30 % zdarma při nákupu e-learningu. Více informací.
Hledáme asistenty pro kurzy programování - pohodová brigáda. Více info
PHP week

Lekce 6 - Arduino - LCD Display

V dnešním tutoriálu o Arduinu se zaměříme na LCD displej. Vím, že jsem v minulém díle sliboval měření vzdálenosti, ale chtěl jsem jí přitom zobrazovat lépe než posíláním na sériovou linku, takže si teď probereme LCD a vzdálenost bude (snad) v příštím díle.

LCD display, neboli display z tekutých krystalů, je zobrazovací zařízení s nízkou spotřebou a proto se hodí do zařízení na baterie nebo k Arduinu. Takže si nějaký seženeme , jen budeme dbát na to, aby měl řadič HD44780 nebo alespoň kompatibilní, protože jinak nám to fungovat nebude. Piny jsou u většiny displayů stejné, je ale lepší se pro jistotu podívat do datasheetu k danému modelu. Ve většině případů jsou ale již piny popsané, takže se obejdeme bez něj, a v případě jiného pořadí na to budeme dbát.

Display má celkem 16 pinů, nám ale bude nyní stačit jen 12. Displaye se často prodávají bez "nožiček" a budeme je muset přidělat. Mně bohatě postačily kousky nastříhaného drátku, které bude potřeba do dírek připájet. Takže na chvíli vezmeme do ruky pájku a jdeme pájet, nebo si seženeme nějaký, který již nožičky má, ale to bude těžší.

Zapojení pinů

Zapojení pinů je poměrně jednoduché:

  • 1 VSS - Připojíme jednoduše na zem
  • 2 VDD - Vstup 5V
  • 3 V0 - Kontrast. Někdy lepší na zem, někdy 5V. U mě bylo oboje špatné, takže jsem připojil potenciometr a nastavil si kontrast jaký chci.
  • 4 RS - Připojíme k Arduinu a v kódu poté zvolíme pin
  • 5 RW - Zem
  • 6 E (Enable) - Arduino
  • 7-10 - D0-D3 - Datové piny, které používat nebudeme
  • 11-14 - D4-D7 - Další datové piny, které připojíme k Arduinu
  • 15 - A - Anoda podsvícení, +5V
  • 16 - K - Katoda podsvícení, zem

To by byly piny. Abychom měli co zobrazovat, tak si připojíme nám již známé DHT11 ze 4. dílu.

Schéma pro zapojení display a čidla DHT11

Nějak to sestavíme dohromady podle schématu a přesuneme se rovnou k psaní kódu.

#include <dht11.h>
#include <LiquidCrystal.h>


int rs_pin = 2;
int e_pin = 3;
int d4_pin = 4;
int d5_pin = 5;
int d6_pin = 6;
int d7_pin = 7;



LiquidCrystal LCD(rs_pin, e_pin, d4_pin, d5_pin, d6_pin, d7_pin);


dht11 cidlo;
int dht11pin = 12;

void setup()
{
  LCD.begin(16,2);
  LCD.setCursor(0,0);
  LCD.print("itnetwork.cz");
  LCD.setCursor(0,1);
  LCD.print("teplota: ");
}

void loop()
{
  cidlo.read(dht11pin);
  LCD.setCursor(9,1);
  LCD.print("    ");
  LCD.setCursor(9,1);
  LCD.print(cidlo.temperature);
  LCD.setCursor(13,1);
  LCD.print((char)223);
  LCD.print("C");
  delay(500);
}

A teď k vysvětlování:

#include <dht11.h>
#include <LiquidCrystal.h>
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Naimportujeme si knihovny k dht11 a LCD. LiquidCrystal.h by mělo být již v základech, takže nebude třeba nic stahovat.

int rs_pin = 2;
int e_pin = 3;
int d4_pin = 4;
int d5_pin = 5;
int d6_pin = 6;
int d7_pin = 7;

Pro připojené LCD použijeme piny RS, E, D4-D7. Ostatní půjdou na zem/napájení (popřípadě potenciometr). Kromě datových pinů D4-D7 se zde logicky nachází také D0-D3, které ale potřebovat nebudeme.

LiquidCrystal LCD(rs_pin, e_pin, d4_pin, d5_pin, d6_pin, d7_pin);

Funkce LiquidCrystal vytvoří objekt LCD display, v našem případě s názvem LCD. Jako parametry bere oněch 6 pinů. Nemusíme je dávat do těchto proměnných, stačí jen napsat čísla, ale je důležité dodržovat pořadí RS,E,D4,D5,D6,D7.

dht11 cidlo;
int dht11pin = 12;

Tuto část snad ani vysvětlovat nemusím, protože připojit DHT11 umíme již ze 4. dílu.

LCD.begin(16,2);

Spustí display s 16 znaky a 2 řádky. Pokud máte jiný, upravte dle sebe. Tento begin je trochu jiný. Display se na začátku spuštění musí inicializovat. Schválně zkuste po vypsání textu odpojit všechnu zem a vstupních 5V do displaye a poté opětovně zapojte. Výsledkem bude buď jakýsi patvar znaků nebo jen samé obdélníčky. Pak na Arduinu stiskněte reset a display bude zas fungovat normálně. Pokud budete mít projekt, ve kterém se display během běhu programu může odpojit nějakým přerušením kontaktu, doporučuji přidat begin na začátek loopu. Mějte však na paměti, že tím dojde k smazání celého textu na display, takže v našem případě by se nám zobrazovalo jen 22 °C bez nápisů itnetwork.cz a teplota, které máme v setupu.

LCD.setCursor(0,0);

Nastaví kurzor na první znak, první řádek - začíná se od nuly. Tento řádek je naprosto zbytečný, protože na tuto pozici se kurzor nastaví ihned po spuštění displaye.

LCD.print("itnetwork.cz");
LCD.setCursor(0,1);
LCD.print("teplota: ");

Funkce print napíše na display text. Poté si posuneme kurzor na druhý řádek a napíšeme další text.

cidlo.read(dht11pin);

Přečteme hodnotu z DHT11.

LCD.setCursor(9,1);

Nastavíme kurzor za nápis teplota

LCD.print("    ");

Pro jistotu smažemr předchozí hodnotu, kdyby náhodou ubylo jedno číslo, tak to poslední zůstane za aktuálním a nepřepíše se. Je sice velice nepravděpodobné, že dostaneme 3-místnou teplotu, ale pokud budeme např. číst hodnotu z analogového pinu, tak je toto nutné.

LCD.setCursor(9,1);

Vrátí kurzor za nápis teplota.

LCD.print(cidlo.temperature);

Vypíše teplotu z čidla. Jak vidíte, lze také vypisovat rovnou hodnoty, které nám vracejí funkce bez nutnosti ukládání do meziproměnných.

LCD.setCursor(13,1);
LCD.print((char)223);
LCD.print("C");

Nyní nastavíme kurzor za nápis a napíšeme nejdříve znak stupňů. Napsat jej jen tak do uvozovek nemusí fungovat, proto napíšeme (char)223, což vyústí k vypsání znaku s ASCI hodnotou 223, což je právě značka stupňů. Poté jen napíšeme C a je hotovo. Tato část textu se nemění, tudíž bychom jí mohli napsat rovnou v setupu, ale není to nutnost.

delay(500);

A nakonec chvíli počkáme.

Kód nahrajeme a v první řadě se podíváme, jak jsme na tom s kontrastem. Pokud je display nečitelný, zkuste přepojit z 5V na GND (nebo naopak), popřípadě připojte potenciometr a pohrajte si s ním, dokud nebude text krásně čitelný. Také nezapomeňte na podsvícení, bez něj nebude nic vidět. Když něco nebude fungovat, zkontrolujte zda máte správně napojeny piny. Ke stažení je k dispozici okomentovaný zdrojový kód.

Arduino s LCD displayem

Takto to bude vypadat

To by bylo pro dnešní díl vše, příště již snad bude ono slibované měření vzdálenosti, takže si začněte shánět Ultrasonický modul HC-SR04 :)


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 457x (1.57 kB)
Aplikace je včetně zdrojových kódů

 

Předchozí článek
Arduino - Klávesnice
Všechny články v sekci
Arduino
Článek pro vás napsal Adam Ježek
Avatar
Jak se ti líbí článek?
8 hlasů
Autor se převážně věnuje Arduinu a psaní tutoriálů z této oblasti, občas napíše příležitostně nějakou tu zprávičku. Většinu svého volného času momentálně věnuje Linuxu a/nebo Raspberry Pi. Také umí C#, HTML, CSS, PHP a Python.
Aktivity

 

 

Komentáře

Avatar
...
Redaktor
Avatar
...:22.8.2014 15:29

Super clanok! :D
Len malicka chyba, mas napisane: 11-14 - D4-D5 - Další datové piny... a malo by byt 11-14 - D4-D7

Odpovědět
22.8.2014 15:29
Nehovor čo vieš, ale snaž sa vedieť, čo hovoríš...
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na ...
Adam Ježek:22.8.2014 15:32

Jojo, díky, oprava odeslána ke schválení :)

Odpovědět
22.8.2014 15:32
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
youtubak777
Člen
Avatar
youtubak777:15.10.2014 22:41

Ahoj, bude fungovat stejně i 4 řádkový display ?

 
Odpovědět
15.10.2014 22:41
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na youtubak777
Adam Ježek:16.10.2014 7:04

bude, zmiňuju to tam "Spustí display s 16 znaky a 2 řádky. Pokud máte jiný, upravte dle sebe."

Editováno 16.10.2014 7:04
Odpovědět
16.10.2014 7:04
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Michal Žůrek - misaz:19.11.2014 17:37

Pod čím má hledat ty nožičky, které se k tomu pájí? Viděl jsem že se asi prodává takové balení "pinů" kde se vysouvali takové malé zahnuté zhruba 1cm dlouhé nožičky.

 
Odpovědět
19.11.2014 17:37
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na Michal Žůrek - misaz
Adam Ježek:19.11.2014 18:51

zkus arduino lcd headers nebo jenom header. ale já tam napájel normální drátky a funguje to stejně

Odpovědět
19.11.2014 18:51
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
joebat
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
joebat:20.1.2015 22:46

Zadej do vyhledavače "Oboustranný kolík S1G40 2,54mm" a určitě je najdeš.

 
Odpovědět
20.1.2015 22:46
Avatar
Otakar Matěj:29.3.2015 19:06

Mám dotaz. Display s řadičem st7066 - ale jednořádkový- nelze jej použít. Může být chyba a jistě je a to v knihovně LiquidCrystal. Jak ji upravit? Tato knihovna údajně podle cizích serverů podporuje jen dvouřádkové a někd bývají problémy i s více řádkovými LCD. Dá se věnovat kapitola úpravám knihoven podle potřeb? Myslím, že pávě zobrazovače a podpora knihvny to si to zasouží.Děkuji za odpověď.

 
Odpovědět
29.3.2015 19:06
Avatar
Otakar Matěj:2.4.2015 11:34

Všem čtenářům - pozor na výběr LCD. Některé jsou totiž sicee 16x2 - nebo 16X1, ale jsou jinačí. Záleží na řadiči. Mám na stole třeba 16X1 - ve skutečnosti je to 8X2, ale druhý řádek je vedle prvního - tudíž 16X1. Obdobně je tomu i u jiných LCD (16X2 může být i 8X4 atd..pak nenapíšete slovo nad 8 písmen).

 
Odpovědět
2.4.2015 11:34
Avatar
Martin Bláha:10.8.2015 15:52

Ahoj, zkouší zrealizovat tento projekt, ale již dva dny mi to při ověření píše:

In file included from sketch_aug09a­.ino:3:0:
C:\Users\Ja\Do­cuments\Ardui­no\libraries\Li­quidCrystal/Li­quidCrystal.h:6:17: fatal error: SPI.h: No such file or directory
#include <SPI.h>
^
compilation terminated.
Multiple libraries were found for "LiquidCrystal.h"
Used: C:\Users\Ja\Do­cuments\Ardui­no\libraries\Li­quidCrystal
Not used: C:\Program Files\Arduino\li­braries\Liquid­Crystal
Chyba kompilace.

snažil jsem se s tím bojovat sám, ale uznávám porážku..

moc případně děkuji

 
Odpovědět
10.8.2015 15:52
Avatar
Adam Ježek
Redaktor
Avatar
Adam Ježek:15.8.2015 23:44

Pise se to v ty hlasce. Mas tam dve knihovny. Smaz C:\Users\Ja\Do­cuments\Ardui­no\libraries\Li­quidCrystal a nech IDE pouzit vlastni v C:\Program Files\Arduino\li­braries\Liquid­Crystal

Odpovědět
15.8.2015 23:44
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Jan1917
Člen
Avatar
Jan1917:3.3.2016 23:26

Ahoj, právě jsem se pokoušel zapojit LCD dle návodu. Pokusy cokoli obrazit selhaly. Celý LCD mi svítí sytě modrou a nad místem, kde je připájeno "černé kolečko" U1 (asi nějaký mikroněco) je display zbarven do fialova, na dotyk je U1 šíleně rožhavené, nejde na něm udržet prst... Nevíte někdo co s tím je? Hádám že LCD je totálně v háji...

 
Odpovědět
3.3.2016 23:26
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jan1917
ostrozan:3.3.2016 23:44

Hádáš bohužel dobře

 
Odpovědět
3.3.2016 23:44
Avatar
Jan1917
Člen
Avatar
Odpovídá na ostrozan
Jan1917:3.3.2016 23:46

Díky za odpověď :-)
Co s tím asi je?
Jen pro zajímavost by mne to zajímalo, ne že bych to chtěl spravovat :-D

 
Odpovědět
3.3.2016 23:46
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jan1917
ostrozan:3.3.2016 23:54

Některé displeje (od jiných výrobců) mívají jinak přehozené vývody - někdy zrcadlově, někdy jenom ty na podsvícení.
Je potřeba se vždy podívat do datasheetu konkrétního typu

 
Odpovědět
3.3.2016 23:54
Avatar
Vojtěch Dočkal:2.1.2017 19:54

Ahoj, chci použít WINSTAR oled displej, tak se chci zeptat jestli to půjde i s řadičem WS0010?
Díky.

 
Odpovědět
2.1.2017 19:54
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
OxyK
Člen
Avatar
OxyK:10.5.2017 20:54

Ahoj, vyšla již nějaká novější knihovna? Pořád dostávám error, že temperature a humidity nejsou deklarované v knihovně. Díky

 
Odpovědět
10.5.2017 20:54
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na OxyK
Adam Ježek:10.5.2017 20:56

Je to možné. Podívej se do File -> Examples -> <název_knihovny>, měl by tam být nějaký sketch ve kterém je ukázáno jak tu hodnotu dostat.

Editováno 10.5.2017 20:56
Odpovědět
10.5.2017 20:56
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
iqbigbang
Člen
Avatar
iqbigbang:28.5.2017 7:17

Dobrý den, chtěl jsem se zeptat na následující problém:
Když jsem chtěl začít s Arduinem, koupil jsem si v podstatě na slepo nějaké součástky a mimo jiné i LCD displej. Při čtení tohohle návodu jsem ale zjistil, že displej má pouze zezadu 4 piny označené GND, VCC, SDA, SCL. Hledal jsem na internetu jak ho zprovoznit, ale nikde jsem nenašel ucelené, pro začátečníka pochopitelné informace. Nevíte někdo jak ho připojit? :-(

Odpovědět
28.5.2017 7:17
Say me, why not?
Avatar
kxmx
Redaktor
Avatar
Odpovídá na iqbigbang
kxmx:28.5.2017 8:04

Ahoj máš nějaké přesnější označení toho displaye? Display bude asi komunikovat přes i2c sběrnici http://www.hobbyist.co.nz/…iring_bb.png takže to bude jen o tom najít knihovnu pro ovládání.

Editováno 28.5.2017 8:06
 
Odpovědět
28.5.2017 8:04
Avatar
kxmx
Redaktor
Avatar
Odpovídá na iqbigbang
kxmx:28.5.2017 8:08

Tak zkus knihovnu LiquidCrystal_I2C http://arduino8.webnode.cz/…o-a-i2c-lcd/

 
Odpovědět
28.5.2017 8:08
Avatar
Adam Ježek
Redaktor
Avatar
Odpovědět
28.5.2017 9:26
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Tomáš Hakl
Člen
Avatar
Tomáš Hakl:28.5.2017 9:39

Knihovna LiquidCrystal_I2C, kterou doporučil kxmx funguje 100% mám ji vyzkoušenou a myslím, že jsem ani nemusel v knihovně nic měnit.

 
Odpovědět
28.5.2017 9:39
Avatar
Jaromír Zapletal:27.12.2017 16:13

Faktická poznámka - možná by bylo lepší místo "int rs_pin=2;" (a dalších...) použít "#define rs_pin 2"

 
Odpovědět
27.12.2017 16:13
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jaromír Zapletal
ostrozan:27.12.2017 17:35

To je častý nešvar - používat proměnné jako konstanty.
Což zdánlivě nevadí, ale vzhledem k tomu že proměnné jsou v mikrokontoléru v RAMce, která bývá proklatě malá a při trošku složitějších programech přestává stačit.
Proti tomu konstanty jsou v programové paměti, které je dost.

 
Odpovědět
27.12.2017 17:35
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na Jaromír Zapletal
Adam Ježek:27.12.2017 18:25

Máš pravdu, ale je tam víc věcí který by to chtělo přepsat, po maturitě se na to snad vrhnu.

Odpovědět
27.12.2017 18:25
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Zdenek
Člen
Avatar
Odpovídá na iqbigbang
Zdenek:19.2.2018 20:48

Ahoj, musis pouzivat jinou knihovnu - LiquidCrystal_I2C.h

 
Odpovědět
19.2.2018 20:48
Avatar
Zdenek
Člen
Avatar
Zdenek:19.2.2018 20:50

Ahoj,
byl by take tutorial na to jak vytvorit LCD menu?

 
Odpovědět
19.2.2018 20:50
Avatar
Tata Kolouch
Člen
Avatar
Tata Kolouch:3.3.2018 16:23

Ahoj, teprve začínám, výborný návod. Trohu jsem si to poupravil a ukazuje mi to i vlhkost.
#include <dht11.h>
#include <LiquidCrystal.h>

int rs_pin = 2;
int e_pin = 3;
int d4_pin = 4;
int d5_pin = 5;
int d6_pin = 6;
int d7_pin = 7;

LiquidCrystal LCD(rs_pin, e_pin, d4_pin, d5_pin, d6_pin, d7_pin);

dht11 cidlo;
int dht11pin = 12;
int teplota;
int vlhkost;
String vstup;
boolean upozorneni = false;

void setup()
{
LCD.begin(16,2);
LCD.setCursor(0,0);
LCD.print("vlhkost: ");
LCD.setCursor(0,1);
LCD.print("teplota: ");
}

void loop()
{

cidlo.read(dht11pin);
teplota = cidlo.temperature;
vlhkost = cidlo.humidity;

LCD.setCursor(9,0);
LCD.print(" ");
LCD.setCursor(9,0);
LCD.print(cidlo­.humidity);
LCD.setCursor(13,0);
LCD.print("%");
LCD.setCursor(9,1);
LCD.print(" ");
LCD.setCursor(9,1);
LCD.print(cidlo­.temperature);
LCD.setCursor(13,1);
LCD.print((char)223);
LCD.print("C");
delay(500);
}

 
Odpovědět
3.3.2018 16:23
Avatar
Attila Hrotko:27.8.2019 11:37

Zdravým. Mne to nefunguje stále mi vypisuje exit status. Mám všetko nahraté do knižnice ale stále mi brzdí pri DHT 11. Dakujem dopredu za komentáre.

 
Odpovědět
27.8.2019 11:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 31 zpráv z 31.