คำว่า LCD ย่อมาจากคำว่า Liquid Crystal Display ซึ่งเป็นจอที่ทำมาจากผลึกคริสตัลเหลว หลักการคือด้านหลังจอจะมีไฟส่องสว่าง หรือที่เรียกว่า Backlight อยู่ เมื่อมีการปล่อยกระแสไฟฟ้าเข้าไปกระตุ้นที่ผลึก ก็จะทำให้ผลึกโปร่งแสง ทำให้แสงที่มาจากไฟ Backlight แสดงขึ้นมาบนหน้าจอ ส่วนอื่นที่โดนผลึกปิดกั้นไว้ จะมีสีที่แตกต่างกันตามสีของผลึกคริสตัล เช่น สีเขียว หรือ สีฟ้า ทำให้เมื่อมองไปที่จอก็จะพบกับตัวหนังสือสีขาว แล้วพบกับพื้นหลังสีต่าง ๆ กัน
จอ LCD จะแบ่งเป็น 2 แบบใหญ่ๆตามลักษณะการแสดงผลดังนี้
1. Character LCD เป็นจอที่แสดงผลเป็นตัวอักษรตามช่องแบบตายตัว
จอ LCD ที่ใช้งานร่วมกับโมดูล LCD I2C นี้มีอยู่ 2 รุ่น คือ
1. รุ่น LCD 16x2 หรือรุ่น LCD 1602 สามารถแสดงข้อความได้ 16 ตัวอักษร 2 บรรทัด
2. รุ่น LCD 20x4 หรือรุ่น LCD 2004 สามารถแสดงข้อความได้ 20 ตัวอักษร 4 บรรทัด
2. Graphic LCD เป็นจอที่สามารถกำหนดได้ว่าจะให้แต่ละจุดบนหน้าจอกั้นแสง หรือปล่อยแสงออกไป ทำให้จอนี้สามารถสร้างรูปขึ้นมาบนหน้าจอได้ การระบุขนาดจะระบุในลักษณะของจำนวนจุด (Pixels) ในแต่ละแนว เช่น 128x64 หมายถึงจอที่มีจำนวนจุดตามแนวนอน 128 จุด และมีจุดตามแนวตั้ง 64 จุด
ในบทนี้จะกล่าวถึง Character LCD เพียงอย่างเดียว เนื่องจากใช้งานได้ง่าย และนิยมใช้งานในโปรเจคทั่วๆ ไปมากกว่า
การเชื่อมต่อจะมีด้วยกัน 2 แบบ คือ
- การเชื่อมต่อแบบขนาน - เป็นการเชื่อมต่อจอ LCD เข้ากับบอร์ด Arduino โดยตรง โดยจะแบ่งเป็นการเชื่อมต่อแบบ 4 บิต และการเชื่อมต่อแบบ 8 บิต ใน Arduino จะนิยมเชื่อมต่อแบบ 4 บิต เนื่องจากใช้สายในการเชื่อมต่อน้อยกว่า
- การเชื่อมต่อแบบอนุกรม - เป็นการเชื่อต่อกับจอ LCD ผ่านโมดูลแปลงรูปแบบการเชื่อมต่อกับจอ LCD จากแบบขนาน มาเป็นการเชื่อมต่อแบบอื่นที่ใช้สายน้อยกว่า เช่น การใช้โมดูล I2C Serial Interface จะเป็นการนำโมดูลเชื่อมเข้ากับตัวจอ LCD แล้วใช้บอร์ด Arduino เชื่อมต่อกับบอร์ดโมดูลผ่านโปรโตคอล I2C ทำให้ใช้สายเพียง 4 เส้น ก็ทำให้หน้าจอแสดงผลข้อความต่างๆ ออกมาได้
ในบทนี้เราจะพูดถึงการเชื่อมต่อแบบอนุกรม
การเชื่อมต่อแบบอนุกรม จะใช้งานโมดูล I2C Serial Interface Board Module มาเชื่อมต่อระหว่าง Arduino กับจอ LCD
ใช้สายแพ ตัวเมีย ตัวเมีย 4 เส้น
LCD บอร์ด Arduino
GND ต่อกับ -
VCC ต่อกับ +
SDA ต่อกับ SDA
SCL ต่อกับ SCL
รายละเอียดคำสั่งในการสั่งงานระหว่าง Arduino กับ จอ LCD
คำสั่งในการควบคุมจอ LCD ของ Arduino นั้น ทาง Arduino.cc เขียนเป็น Library มาให้เพื่อสะดวกในการนำไปใช้งาน หลังจากต่อสายเสร็จเรียบร้อย ขั้นตอนแรกในการเริ่มเขียนโปรแกรมคือการเรียกใช้ Library ของ LCD จากไฟล์ชื่อ LiquidCrystal.h หลังจากนั้นมาดูกันว่ามีฟังก์ชั่นที่สำคัญอะไรบ้างที่ใช้สั่งงานให้จอ LCD
ฟังก์ชัน LiquidCrystal(); ใช้ประกาศขาที่ต้องการส่งข้อมูลไปยังจอ LCD รูปแบบในการสั่งงานคือ
LiquidCrystal lcd(rs, enable, d4, d5, d6, d7) <<<<<<< ในกรณีใช้งานแบบ 4 บิต
LiquidCrystal lcd(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) <<<<<<< ในกรณีใช้งานแบบ 8 บิต
ในบทความนี้ใช้แบบ 4 บิต คือ LiquidCrystal lcd(12, 11, 4, 5, 6, 7); ก็หมายถึงการเชื่อมต่อ rs ที่ขา 12 , Enable ที่ขา 11 , และ DB4-DB7 ที่ขา 4-7 ของ Arduino ตามลำดับ
ฟังก์ชัน begin(); ใช้กำหนดขนาดของจอ ในบทความนี้เราใช้ขนาด 16 ตัวอักษร 2 บรรทัด จึงประกาศเป็น lcd.begin(16, 2);
ฟังก์ชัน setCursor(); ใช้กำหนดตำแหน่งและบรรทัดของ Cursor เช่น lcd.setCursor(0, 1); คือ ให้เคอร์เซอร์ไปที่ตำแหน่งที่ 0 บรรทัดที่ 1 การนับตำแหน่งเริ่มจาก 0 ดังนั้น LCD 16×2 มีตำแหน่ง 0 – 15 บรรทัด คือ 0 กับ 1
ฟังก์ชัน print(); ใช้กำหนดข้อความที่ต้องการแสดง เช่น lcd.print(“168Education”); คือ ให้แสดงข้อความ “168Education” ออกทางหน้าจอ LCD
- เปิดโปรแกรม Arduino IDE
- ไปที่คำสั่ง Sketch > Include Library คลิกเลือกคำสั่ง Manage Libraries
- จะปรากฏหน้าต่าง Library Manager ในช่องค้นหาให้พิมพ์ว่า LCD I2C จากนั้นหาไลบรารีที่ชื่อว่า LiquidCrystal_PCF8574 แล้วให้คลิกที่ปุ่ม Install
- รอจนกว่าจะทำการติดตั้งเสร็จ
- ไปที่โปรแกรม Arduino IDE
- เลือกที่คำสั่ง Sketch > Include Library คลิกที่คำสั่ง LiquidCrystal_PCF8574
จะปรากฏโค้ดตามภาพ
บรรทัดที่ 3 เราจะพิมพ์โค้ด LiquidCrystal_PCF8574 lcd(0x27);
อธิบายโค้ด
เริ่มต้นโค้ดกำหนดลักษณะการแสดงของจอ lcd คือการแสดงภาพ 16 ตัวอักษร 2 แถว ตั้งค่าความสว่าง มีค่าตั้งแต่ 0-255 กำหนดให้ตัวอักษรที่ 0 แถวที่ 0 แสดงข้อความ “012356789101112” กำหนดให้ตัวอักษรที่ 4 แถวที่ 1 แสดงข้อความ “My lcd…!”
จากนั้นทำการบันทึกไฟล์ก่อน แล้วเช็คความถูกต้องของ syntax ถ้าถูกต้อง ให้ทำการ Upload โค้ดคำสั่งลงบอร์ด Arduino
หมายเหตุ กรณีที่จอ lcd เป็นสีเหลืองให้เขียนโค้ด
บรรทัดที่3 LiquidCrystal_PCF8574 lcd(0x3F);
เป็นโมดูลที่ใช้สำหรับวัดความเร็วการหมุนของมอเตอร์การทำงานเซนเซอร์นับเหรียญจะส่งสัญญาณ digital ออกมาเป็น 1 กับ 0 (HIGH,LOW) และ analog ออกมาเป็น 1024 , 0 (HIGH,LOW) ทำให้สามารถต่อใช้งานกับ Arduino ได้ง่าย
สถานะถ้าไม่เจอวัตถุผ่านจะเป็น HIGH หรือค่าจะเป็น 1 ถ้ามีวัตถุผ่านจะเปลี่ยนสถานะเป็น LOW หรือ ค่าจะเป็น 0
ในโปรแกรมเราจะใช้ขา 2 ของ Arduino ในการอ่านข้อมูล เป็นขา interrupt
เหตุผลสำหรับที่ต้องใช้ ขา interrupt ก็คือให้ขั้นจังหวะโปรแกรมเมื่อ ขา 2 เปลี่ยนสถานะ ลอจิก 1 เป็น 0 ให้มางานในฟังก์ชั่น interrupt 2 ก่อน เพื่อให้สามารถอ่านสัญญาณที่เปลี่ยนแปลงได้ทัน
ถ้าเราไม่ใช่ขา interrupt อ่าน บางครั้งโปรแกรมไปทำงานอย่างอื่นอยู่ เช่นติดคำสั่ง Delay อยู่ ทำให้วนกลับมาอ่านสถานะลอจิกที่เซ็นเซอร์นับเหรียญส่งมาไม่ทัน
วิธีการต่ออุปกรณ์ เซ็นเซอร์นับเหรียญ นับรอบ นับจำนวน ตรวจจับวัตถุผ่าน ก้ามปู
การต่อให้ใช้สายแพ ตัวเมีย ตัวเมีย ต่อเข้ากับบอร์ด Arduino uno r3 ไปต่อกับเซนเซอร์ ก้ามปู
S10 -> D0
V10 -> VCC
G10 -> GND
- ประกาศค่าตัวแปร
- ในส่วนของ void setup() กำหนดการรับค่าของข้อมูล
อธิบายโค้ด
pinMode คำสั่งที่มีไว้สำหรับกำหนดการทำงานของ pin ที่ต้องการใช้งาน ให้ทำงานเป็นแบบ OUTPUT หรือ INPUT ในที่นี่กำหนดให้ pin_coin_10 การทำงานเป็นแบบ input
- สร้างฟังก์ชัน sensor_coin
อธิบายโค้ด
สร้างเงื่อนไข ถ้ามีการหยอดเหรียญผ่านเซนเซอร์ ทำการเพิ่มค่าตัวแปร count_coin_10 ไปทีละ 1 และเปลี่ยน check_coin_10 เป็นจริง และ ถ้า state_coin_10 เท่ากับ 0 เพื่อทำการเช็คการหยอดเหรียญค้างไว้หรือไม่เพื่อไม่ให้ระบบทำการนับไปเรื่อย ๆ check_coin_10 เป็นเท็จ
- เขียนคำสั่งใน void loop()
เช็คการหยอดเหรียญว่าหยอดครบไหม
อธิบายโค้ด
ให้ void loop จะทำการเช็คว่ามีการหยอดเหรียญไปกี่เหรียญ และได้ทำการหยอดครบ 2 เหรียญแล้วหรือยัง ถ้าครบแล้วก็ให้เลือกเมนู
|