Arduino 16×2 LCD Display \
อยากให้โปรเจกต์ Arduino ของคุณแสดงข้อความสถานะหรือค่าที่อ่านได้จากเซ็นเซอร์ใช่ไหม? จอแสดงผล LCD เหล่านี้อาจเป็นตัวเลือกที่สมบูรณ์แบบ พวกมันเป็นที่นิยมอย่างมากและเป็นวิธีที่รวดเร็วในการเพิ่มอินเทอร์เฟซที่อ่านง่ายให้กับโปรเจกต์ของคุณ
บทช่วยสอนนี้จะครอบคลุมทุกสิ่งที่คุณจำเป็นต้องรู้เพื่อให้ใช้งาน Character LCD ได้ ไม่ใช่แค่ 16×2(1602) เท่านั้น แต่ยังรวมถึง Character LCD ใดๆ (เช่น 16×4, 16×1, 20×4 เป็นต้น) ที่ใช้ Controller chip LCD แบบ parallel interface จาก Hitachi ที่เรียกว่า HD44780. เนื่องจากชุมชน Arduino ได้พัฒนา Library เพื่อจัดการกับ HD44780 LCD ไว้แล้ว เราจึงสามารถเชื่อมต่อพวกมันได้อย่างรวดเร็ว
คุณรู้หรือไม่?
LCD ย่อมาจาก Liquid Crystal Display เป็นหน่วยแสดงผลที่ใช้ Liquid crystal เพื่อสร้างภาพที่มองเห็นได้
เมื่อกระแสไฟฟ้าถูกจ่ายให้กับ Crystal ชนิดพิเศษนี้ มันจะเปลี่ยนเป็นทึบแสง บล็อก Backlight ที่อยู่ด้านหลังหน้าจอ ผลลัพธ์คือพื้นที่เฉพาะนั้นจะมืดลงเมื่อเทียบกับส่วนอื่น ๆ และนั่นคือวิธีการแสดง Character บนหน้าจอ
Hardware Overview
LCD เหล่านี้เหมาะสำหรับการแสดง Text/Character เท่านั้น จึงเป็นที่มาของชื่อ ‘Character LCD’ จอแสดงผลมี LED Backlight และสามารถแสดง 32 ASCII Character ในสองแถว แถวละ 16 Character

สี่เหลี่ยมแต่ละช่องประกอบด้วย Grid 5×8 Pixels
หากคุณมองใกล้ ๆ คุณจะเห็นสี่เหลี่ยมเล็ก ๆ สำหรับ Character แต่ละตัวบนจอแสดงผล และ Pixels ที่ประกอบกันเป็น Character สี่เหลี่ยมแต่ละอันเป็น Grid ขนาด 5×8 Pixels
แม้ว่าพวกมันจะแสดงผลได้แค่ Text เท่านั้น แต่ก็มีหลายขนาดและหลายสีให้เลือก เช่น 16×1, 16×4, 20×4, มี Text สีขาวบนพื้นหลังสีน้ำเงิน, Text สีดำบนพื้นหลังสีเขียว และอื่น ๆ อีกมากมาย
ข่าวดีคือจอแสดงผลทั้งหมดเหล่านี้สามารถ ‘Swappable’ ได้ – หากคุณสร้างโปรเจกต์ด้วยจอหนึ่ง คุณสามารถถอดออกแล้วใช้ LCD ขนาด/สีอื่นที่คุณเลือกได้ Code ของคุณอาจจะต้องปรับให้เข้ากับขนาดที่ใหญ่ขึ้น แต่อย่างน้อย Wiring ก็ยังคงเหมือนเดิม!
16×2 Character LCD Pinout
ก่อนที่จะลงรายละเอียดการเชื่อมต่อและ Code ตัวอย่าง เรามาดูที่ LCD Pinout กันก่อน

GND ควรเชื่อมต่อกับ Ground ของ Arduino
VCC คือแหล่งจ่ายไฟสำหรับ LCD ซึ่งเราเชื่อมต่อกับ 5 Volts Pin บน Arduino
Vo (LCD Contrast) ควบคุม Contrast และ Brightness ของ LCD การใช้ Voltage divider แบบง่ายๆ ร่วมกับ Potentiometer ทำให้เราสามารถปรับ Contrast ได้อย่างละเอียด
RS (Register Select) Pin ทำให้ Arduino บอก LCD ได้ว่ากำลังส่ง Commands หรือ Data โดยพื้นฐานแล้ว Pin นี้ใช้เพื่อแยก Commands ออกจาก Data
ตัวอย่างเช่น เมื่อ RS Pin ถูกตั้งค่าเป็น LOW เราจะส่ง Commands ไปยัง LCD (เช่น กำหนด Cursor ไปยังตำแหน่งที่ระบุ, Clear display, Scroll display ไปทางขวา เป็นต้น) และเมื่อ RS Pin ถูกตั้งค่าเป็น HIGH เราจะส่ง Data/Character ไปยัง LCD
R/W (Read/Write) Pin บน LCD ใช้เพื่อควบคุมว่าจะอ่าน Data จาก LCD หรือเขียน Data ลง LCD เนื่องจากเราใช้ LCD นี้เป็น OUTPUT Device เท่านั้น เราจึงจะต่อ Pin นี้เข้ากับ LOW เพื่อบังคับให้อยู่ใน WRITE Mode
E (Enable) Pin ใช้สำหรับ Enable การแสดงผล หมายความว่า เมื่อ Pin นี้ถูกตั้งค่าเป็น LOW, LCD จะไม่สนใจว่าเกิดอะไรขึ้นกับ R/W, RS และ Data bus lines; เมื่อ Pin นี้ถูกตั้งค่าเป็น HIGH, LCD จะประมวลผล Incoming data
D0-D7 (Data Bus) เป็น Pins ที่ใช้ส่ง Data ขนาด 8 bit ที่เราส่งไปยังจอแสดงผล ตัวอย่างเช่น หากเราต้องการเห็น Character ตัวพิมพ์ใหญ่ ‘A’ บนจอแสดงผล เราจะตั้งค่า Pins เหล่านี้เป็น 0100 0001 (ตามตาราง ASCII) ไปยัง LCD
A-K (Anode & Cathode) Pins ใช้สำหรับควบคุม Backlight ของ LCD
EXPANDED TECHNICAL DETAILS
Visual Interface Fundamentals
โปรเจกต์ "Hello World" คือประตูสู่การสร้าง Human-Machine Interfaces (HMIs) โดยใช้ HD44780 controller ซึ่งเป็นมาตรฐานอุตสาหกรรม
- Parallel Data Bus: แสดงวิธีการเชื่อมต่อ 16x2 LCD โดยใช้ 4-bit mode (Pins D4-D7) ซึ่งช่วยให้ควบคุม Text ได้อย่างเต็มที่ในขณะที่ประหยัด Arduino Pins ที่มีค่า 4 Pins ไว้สำหรับ Sensors อื่นๆ
- Contrast Calibration: เน้นการใช้ 10kΩ Potentiometer บน V0 Pin เพื่อปรับ "Bias Voltage" ของ Liquid crystal ซึ่งจำเป็นอย่างยิ่งสำหรับการทำให้ Text สามารถมองเห็นได้ในสภาพแสงต่างๆ
Logic Architecture
- Library Integration: ใช้
LiquidCrystallibrary โปรเจกต์นี้เป็น Template ที่สมบูรณ์แบบสำหรับการเพิ่ม User-facing readouts (เช่น Digital thermometer หรือ Clock) ให้กับโปรเจกต์ Arduino ในอนาคต