Arduino සමඟ 16x2 Character LCD එකක් භාවිතා කරන හැටි

සම්පූර්ණ Tutorial එක — Wiring, Diagrams, Code Examples සමඟ Sinhala + English Technical Terms
1. හැඳින්වීම (Introduction)
Arduino project එකක output එකක් පෙන්නන්න Serial Monitor එක හොඳ වුණාට, computer එකෙන් අයින් වුණාම ඒක වැඩක් නැහැ. Sensor reading එකක්, message එකක්, menu එකක් වගේ දෙයක් standalone project එකකින්ම පෙන්නන්න ලේසිම සහ ලාබම විදිහ තමයි 16x2 Character LCD display එක. මේක තමයි Arduino world එකේ වැඩිපුරම use වෙන display එක — 3D printers, vending machines, coffee machines වගේ ගොඩක් devices වලත් මේ display එකම තියෙනවා.
"16x2" කියන්නේ display එකේ columns 16ක් සහ rows 2ක් තියෙනවා කියන එක — ඒ කියන්නේ එකවර characters 32ක් පෙන්නන්න පුළුවන්. 16x1, 20x4 වගේ වෙනත් sizes වලත් මේවා එනවා — වැඩ කරන විදිහ සහ wiring එක ඔක්කොටම එකයි.
මේ tutorial එකේදී අපි ඉගෙන ගන්නේ:
- Character LCD එකක් වැඩ කරන විදිහ (HD44780 controller + pixel grid)
- 16-pin pinout එක සහ 4-bit / 8-bit modes දෙකේ වෙනස
- Arduino UNO එකට wire කරන හැටි — contrast pot එකත් එක්ක (diagram සමඟ)
- LiquidCrystal library එකෙන් text print කරන, scroll කරන හැටි
- Custom characters (♥ වගේ) හදලා display කරන හැටි
2. Character LCD එක වැඩ කරන හැටි

Display එකේ character position 32ක් තියෙනවා. ඒ හැම position එකකම කුඩා pixels 5×8ක grid එකක් තියෙනවා. අකුරක් පෙන්නන්නේ ඒ grid එකේ අදාළ pixels ටික ON කරලා.
මේ ඔක්කොම manage කරන්නේ display එකේ පිටිපස්සේ තියෙන Hitachi HD44780 controller chip එකෙන්. මේ chip එකේ memory එකේ standard ASCII characters 128ක pixel patterns කලින්ම save වෙලා තියෙනවා (CGROM). අපිට කරන්න තියෙන්නේ "මේ position එකේ මේ character එක පෙන්නන්න" කියලා command එකක් යවන එක විතරයි — pixel level වැඩ ඔක්කොම chip එක බලාගන්නවා.
LCD (Liquid Crystal Display) technology එකේදී polarized glass layers දෙකක් අතරේ liquid crystals තියෙනවා. Electric signal එකක් දුන්නාම crystals වල alignment එක වෙනස් වෙලා, backlight එකේ එළිය pass වෙන/block වෙන එක control වෙනවා — ඒකෙන් තමයි pixels ON/OFF පේන්නේ.
3. Pinout එක (Pins 16)

3.1 Contrast Adjustment එක (V0)
V0 pin එකට දෙන voltage එකෙන් තමයි characters වල contrast එක (කොච්චර තදින් පේනවද කියන එක) set වෙන්නේ. ඒකට 10K potentiometer එකක් use කරනවා: pot එකේ එක කෙළවරක් 5V ටත්, අනිත් කෙළවර GND ටත්, middle pin (wiper) එක V0 ටත් connect කරනවා. Display එක ON කළාට පස්සේ pot එක හෙමින් කරකවලා contrast එක ලස්සනට set කරගන්න. Display එකේ මුකුත් පේන්නේ නැත්නම් 90%ක්ම හේතුව contrast එක වැරදියට තියෙන එක!
3.2 4-bit Mode vs 8-bit Mode
LCD එකට data යවන්න modes දෙකක් තියෙනවා:
LCD එක update වෙන speed එක 4-bit mode එකේදීත් ඇහැට හොඳටම ප්රමාණවත් — ඒ නිසා Arduino pins 4ක් ඉතුරු කරගන්න පුළුවන් 4-bit mode එක තමයි හැමෝම use කරන්නේ. LiquidCrystal library එකත් 4-bit mode support කරනවා.
4. Arduino UNO එකට Wire කිරීම

Pot එකේ අනිත් pins දෙක: එකක් 5V ට, අනිත් එක GND ට. Backlight resistor එක ගැන: සමහර LCD boards වල backlight current-limit resistor එක built-in — datasheet එක check කරන්න, නැත්නම් 220Ω එකක් දාන එක safe.
5. පළමු Sketch එක — "Hello World"
LCD එක control කරන්න Arduino IDE එකේම built-in LiquidCrystal library එක use කරනවා — අලුතින් install කරන්න දෙයක් නැහැ. මේ තියෙන්නේ සම්පූර්ණ sketch එක:
#include <LiquidCrystal.h>
// LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // columns 16, rows 2
lcd.print("Hello world!");
lcd.setCursor(0, 1); // column 0, row 1 (දෙවෙනි පේළිය)
lcd.print("LCD Tutorial");
}
void loop() {
}
5.1 Code එක තේරුම් ගනිමු
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2) — Constructor එකේ pin order එක: RS, E, D4, D5, D6, D7. වෙන pins වලට wire කළා නම් මෙතන numbers ටිකත් ඒ විදිහට වෙනස් කරන්න.
lcd.begin(16, 2) — Display size එක library එකට කියනවා. 20x4 display එකක් නම් lcd.begin(20, 4) කියලා දෙන්න — wiring එක වෙනස් වෙන්නේ නැහැ.
lcd.print("...") — Text/numbers display කරනවා. Serial.print වගේමයි.
lcd.setCursor(col, row) — Cursor එක ඕන position එකට ගෙනියනවා. Positions 0 ඉඳන් ගණන් වෙනවා: උඩ පේළිය row 0, පහළ පේළිය row 1.
Upload කළාට පස්සේ මුකුත් පේන්නේ නැත්නම්: (1) contrast pot එක කරකවන්න, (2) constructor එකේ pin numbers wiring එකට ගැලපෙනවද බලන්න, (3) backlight එක පත්තු වෙලාද බලන්න.
6. Text Scroll කිරීම
Characters 16කට වඩා දිග message එකක් පෙන්නන්න scroll කරන්න පුළුවන්. මේ sketch එක message එක එක position එකක් බැගින් වමට scroll කරනවා:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.print("Kohomada machan! Arduino LCD scroll demo eka...");
}
void loop() {
lcd.scrollDisplayLeft(); // එක position එකක් වමට
delay(300); // scroll speed එක (ms)
}
delay(300) අගය වෙනස් කරලා scroll speed එක adjust කරන්න පුළුවන්. අනිත් පැත්තට scroll කරන්න lcd.scrollDisplayRight() use කරන්න.
7. Custom Characters හදමු
Standard characters 128 (CGROM එකේ ඒවා) මදි නම් — උදාහරණයක් විදිහට heart symbol එකක්, battery icon එකක්, සිංහල අකුරක් වගේ දෙයක් ඕන නම් — ඔයාටම pixel pattern එකක් define කරලා display කරන්න පුළුවන්. මේවා save වෙන්නේ chip එකේ CGRAM කියන memory එකේ — එකවර custom characters 8ක් දක්වා තියාගන්න පුළුවන් (slots 0–7).
Custom character එකක් = bytes 8ක array එකක්. හැම byte එකක්ම pixel row එකක් (උඩ ඉඳන් පහළට), බිට් 5ක් තමයි use වෙන්නේ (character width එක). 1 = pixel ON, 0 = OFF:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Heart symbol එක — රූපේම binary වලින් පේනවා!
byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
// Smiley face එකක්
byte Smiley[8] = {
0b00000,
0b01010,
0b01010,
0b00000,
0b10001,
0b01110,
0b00000,
0b00000
};
void setup() {
lcd.createChar(0, Heart); // slot 0 එකට save
lcd.createChar(1, Smiley); // slot 1 එකට save
lcd.begin(16, 2);
lcd.print("I ");
lcd.write(byte(0)); // Heart එක display
lcd.print(" Arduino ");
lcd.write(byte(1)); // Smiley එක display
}
void loop() {
}
lcd.createChar(slot, array) — Pattern එක CGRAM slot එකකට (0–7) save කරනවා. begin() කරන්න කලින් call කරන එක හොඳ පුරුද්දක්.
lcd.write(byte(slot)) — Save කරපු character එක cursor position එකේ display කරනවා.
- CGRAM එක volatile — Power off වුණාම custom characters මැකෙනවා. ඒ නිසා හැම power-up එකකදීම createChar() ආයෙ call වෙන්න ඕන (setup එකේ තියෙන නිසා auto).
8. LiquidCrystal Library — වැදගත් Functions
9. වැදගත් Tips
- මුකුත් පේන්නේ නැත්නම් — 90%ක්ම contrast ප්රශ්නයක්. Pot එක දෙපැත්තටම හෙමින් කරකවලා බලන්න. පළවෙනි පේළියේ boxes ටිකක් විතරක් පේනවා නම් — lcd.begin() call වෙලා නැහැ, නැත්නම් pin order එක වැරදියි.
- RW pin එක GND එකට — LCD එකෙන් කියවන්න දෙයක් නැති නිසා RW එක හැමවෙලේම GND — Arduino pin එකක් නාස්ති කරන්න එපා.
- Pins වෙනස් කරන්න පුළුවන් — RS, E, D4–D7 ඕනෑම digital pins වලට දාන්න පුළුවන් — constructor එකේ order එක විතරක් හරියට දෙන්න.
- print() overflow — Characters 16කට වඩා print කළොත් ඉතුරු ටික off-screen memory එකේ — scroll කළාම තමයි පේන්නේ.
- I2C adapter එකක් ගැනත් හිතන්න — PCF8574 I2C backpack එකක් LCD එකට solder කළොත් wires 16 වෙනුවට 4කින් (VCC, GND, SDA, SCL) වැඩේ ඉවරයි. ඒකට LiquidCrystal_I2C library එක ඕන වෙනවා — ඒක වෙනම tutorial එකක කතාවක්!
10. සාරාංශය (Summary)
16x2 Character LCD එක Arduino projects වලට text output පෙන්නන්න තියෙන classic විසඳුමයි. මතක තියාගන්න ඕන ප්රධාන කරුණු: HD44780 controller එක pixel වැඩ ඔක්කොම බලාගන්නවා, 4-bit mode එකෙන් Arduino pins 6යි ඕන වෙන්නේ, contrast එකට 10K pot එකක් අනිවාර්යයි, LiquidCrystal library එක built-in, සහ custom characters 8ක් දක්වා CGRAM එකේ තියාගන්න පුළුවන්. දැන් ඔයාගේ projects වලට display එකක් දාන්න පුළුවන් — කලින් tutorials වල PIR sensor එකයි microSD card එකයි එක්ක combine කරලා motion logger එකකට LCD status display එකක් දාන්නත් try කරන්න!
Reference / මූලාශ්රය:
මේ tutorial එක ලියුවේ පහත මූලාශ්රයේ තොරතුරු පදනම් කරගෙන (රූප සටහන් සහ code examples අලුතින්ම හදපු ඒවා): Last Minute Engineers — Interfacing 16x2 Character LCD Module with Arduino
