Vedelkristallekraani (LCD 16 x 2) ühendamine Arduino UNOga

Väikese LCD ekraani kasutamine võib osutuda kasulikuks kui on vaja jälgida reaalajas mõnda väärtust või protsessi ilma arvuti vahenduseta- näiteks protsessi kulgemise, temperatuuri või menüü kuvamiseks oma projektis. Siinse näidiskoodi ja skeemi jaoks kasutame 16×2 LCD moodulit mis on üks tuntmaid ja soodsamaid LCD ekraane mida sobib kasutada teksti kuvamiseks.

Ekraane on erinevate mõõtude, taustavärvuste, tähemärkide ning ridade arvuga, kuid kõigi ühenduskeem on sama. Need tunneb üldiselt ära samasuguste klemmide järgi. Programmis tuleb vaid defineerida õige ridade ja veergude arv vastavalt kasutatavale ekraanile.

Ekraani kasutamise projektis teeb lihtsaks LiquidCrystal library/teek mis on Arduino arenduskeskonnaga kohe kaasas. Seega piisab käima saamiseks õigete ühenduste loomisest ning programmi peale panekust.

Ühendamine

Artiklis oleva näidiskoodi proovimiseks tuleb teha järgnevad ühendused LCD mooduli ning Arduino vahel. Lisaks LCD moodulile ja Arduinole on vaja ka 10 kOhm potentsiomeetrit. See on vajalik ekraaniheleduse muutmiseks ning ilma selleta ei näe teksti.

LCD moodul Arduino UNO
VSS Gnd
VDD +5V
VO Potentsiomeetrist
RS D12
RW Gnd
E D11
D4 D5
D5 D4
D6 D3
D7 D2
A +5V
K GND

 

16x2 LCD ühendamine Arduino UNOga
16×2 LCD ühendamine Arduino UNOga

Kui pole potentsiomeetrit käepärast

Tegelikult pole potentsiomeeter üldse vajalik. Selle võib asendada ka tavalise takistiga vahemikus 1k Ohm – 4k Ohm. Sel juhul tuleb LCD klemmile VO vedada Gnd pealt läbi takisti vool. Proovitud sai näiteks 1.9K Ohm takistiga mis andis vägagi hea kontrasti. 4k Ohm takistiga oli tekst juba kordi heledam.

Näidiskood ja tulemus

Kui ühendused ülevaloleva skeemi järgi on tehtud siis pole muud kui Arduinole programm peale panna. Kui kohe pole teksti näha tuleb potentsiomeetrit kruttida seni kuni tähemärgid ekraanil nähtavaks muutuvad.

#include <LiquidCrystal.h>

/**
 * Loome lcd nimelise objekti mille abil edaspidi teksti kuvame. 
 * Samal ajal määrates milliste klemmide külge me ekraani ühendame. 
 **/
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//näite koodis liidame siia iga sekund +1
int taimer = 0;

void setup() {
  /**
   * Siin anname teada, et kasutame ekraani millel on 
   * 16 tähemärki ühel real ning kokku on 2 rida. 
   */
  lcd.begin(16, 2);
}

void loop() {
  /**
   * Liigutame kursori esimese rea, esimesele tähemärgile ja kuvame 
   * sealt alates teskti "LCD 16x2"
   **/
  lcd.setCursor(0, 0);
  lcd.print( "LCD 16x2" );
  
  
  /**
   * Liigutame kursori esimese rea, viimasele tähemärgile ja kuvame 
   * sinna tähemärgi "*"
   **/
  lcd.setCursor(15, 0);
  lcd.print( "*" );
  
  /**
   * Liigutame kursori teise rea, kaheksandale tähemärgile ning kuvame
   * sinna teksti "sekundit"
   **/
  lcd.setCursor(7, 1);
  lcd.print( "sekundit" );
  
  /**
   * Liigutame kursori teise rea, esimesele tähemärgile ja kuvame 
   * sinna väärtuse mis hetkel "taimer" muutujas on. 
   * Eelnevalt lisame "taimer" muutuja väärtusele +1. Kui programm käib siis 
   * iga sekundi tagant muutub selle numbri väärtus ühe võrra suuremaks.
   **/
  taimer = taimer + 1;
  lcd.setCursor(0, 1);
  lcd.print( taimer );
  
  //ootame sekundi, enne kui kogu protsessi kordame algusest
  delay(1000);
}

Koodi käivitudes peaks ilmuma ekraanile järgnev tulemus.

LCD 16x2 näidiskoodi tulemus
LCD 16×2 näidiskoodi tulemus

Veergudest ja ridadest

Nagu koodist näha, tuleb enne teksti kuvamist panna setCursor meetodiga paika kuhu on soov järgnev tekst kuvada. Tasub tähele panna, et ridade ja veergude lugemine ei alga mitte number ühest vaid nullist. Järgmine pilt illustreerib seda ning toob välja mõned näited.

LCD 16x2 read ja veerud näidetega
LCD 16×2 read ja veerud näidetega