Vánoční nadílka Vánoční nadílka
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

Lekce 6 - Arduino - LCD Display

Hardware PC Arduino Arduino - LCD Display

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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 391x (1.57 kB)
Aplikace je včetně zdrojových kódů

 

 

Článek pro vás napsal Adam Ježek
Avatar
Jak se ti líbí článek?
7 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.
Miniatura
Předchozí článek
Arduino - Klávesnice
Miniatura
Všechny články v sekci
Arduino
Aktivity (1)

 

 

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

Avatar
iqbigbang
Člen
Avatar
Odpovědět 28.5.2017 8:05
Say me, why not?
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  +1 28.5.2017 8:08
Avatar
Adam Ježek
Tým ITnetwork
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  +1 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  +1 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  +2 27.12.2017 17:35
Avatar
Adam Ježek
Tým ITnetwork
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
Zdenek:19. února 20:48

Ahoj, musis pouzivat jinou knihovnu - LiquidCrystal_I2C.h

 
Odpovědět 19. února 20:48
Avatar
Zdenek
Člen
Avatar
Zdenek:19. února 20:50

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

 
Odpovědět 19. února 20:50
Avatar
Tata Kolouch
Člen
Avatar
Tata Kolouch:3. března 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. března 16:23
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 30. Zobrazit vše