6. díl - Arduino - LCD Display

Hardware PC Arduino 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>

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 :)


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal Adam Ježek
Avatar
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.

Jak se ti líbí článek?
Celkem (6 hlasů) :
55555


 


Miniatura
Předchozí článek
Arduino - Klávesnice
Miniatura
Všechny články v sekci
Arduino

 

 

Komentáře
Zobrazit starší komentáře (5)

Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

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

Odpovědět  -1 19.11.2014 18:51
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
joebat
Člen
Avatar
joebat:

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

 
Odpovědět  +1 20.1.2015 22:46
Avatar
Otakar Matěj:

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:

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:

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
Tým ITnetwork
Avatar
Adam Ježek:

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
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Jan1917
Člen
Avatar
Jan1917:

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. března 23:26
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jan1917
ostrozan:

Hádáš bohužel dobře

 
Odpovědět 3. března 23:44
Avatar
Jan1917
Člen
Avatar
Odpovídá na ostrozan
Jan1917:

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. března 23:46
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jan1917
ostrozan:

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. března 23:54
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 10 zpráv z 15. Zobrazit vše