ใช้ Keypad Module กับ Arduino: ตั้งแต่พื้นฐานจนถึงการใช้งานจริง
ในโลกของ Embedded Systems การรับอินพุตจากผู้ใช้เป็นหนึ่งในองค์ประกอบที่สำคัญมาก Keypad หรือคีย์แพด เป็นอุปกรณ์มาตรฐานที่เหล่าวิศวะชอบใช้ เพราะทนทาน ประหยัดขา I/O และใช้งานง่าย บทความนี้จะพาน้องๆ ลงลึกถึงการทำงานของ Keypad แบบต่างๆ และเทคนิคการเขียนโปรแกรม Arduino แบบมืออาชีพเพื่อควบคุมมัน
ทำไมต้องใช้ Keypad Matrix?
ในการออกแบบวงจร ถ้าเราต้องการปุ่ม 16 ปุ่มแล้วต่อแบบธรรมดา เราต้องใช้ขา Arduino ถึง 16 ขา ซึ่งเปลืองทรัพยากรมาก แต่ถ้าเราใช้โครงสร้างแบบ Matrix (แถวและคอลัมน์) เราสามารถลดการใช้ขาลงเหลือแค่ 8 ขา (สำหรับ 4x4) ได้ โดยอาศัยหลักการสแกนสัญญาณไล่ไปตามแถวและคอลัมน์
ประเภท Keypad ยอดนิยม
สำหรับโปรเจค Arduino เราสามารถเลือก Keypad ขนาดต่างๆ ให้เหมาะกับการใช้งานได้:
1. Keypad 4x4 เป็นโมเดลยอดฮิตที่สุด มีตัวเลข 0-9 และตัวอักษร A-D รวมถึงสัญลักษณ์ * และ # เหมาะกับโปรเจคที่ต้องการปุ่มฟังก์ชันเพิ่มเติม
2. Keypad 3x4 หน้าตามันเหมือนปุ่มโทรศัพท์มือถือรุ่นเก่าๆ นั่นแหละ เหมาะกับการใช้งานที่เน้นรับค่าตัวเลขเป็นหลัก เช่น เครื่องคิดเลขหรือระบบใส่รหัสผ่าน
3. Keypad 1x4 มักใช้ในงานที่ต้องการปุ่มควบคุมทิศทางหรือปุ่มเมนูพื้นฐาน (เช่น ขึ้น, ลง, ตกลง, ยกเลิก) มีขนาดกะทัดรัดและติดตั้งง่าย
การกำหนดขา (Pin Configuration)
หัวใจสำคัญของการใช้ Keypad คือการระบุขา แถว (Rows) และ คอลัมน์ (Columns) ให้ถูกต้อง โดยทั่วไป Keypad แบบเมมเบรนจะมาพร้อมสายริบบอนที่บอกตำแหน่งขาไว้ ดังรูป

สำหรับการใช้งานในสภาพแวดล้อมที่ทนทานสูง (เกรดอุตสาหกรรม) สามารถเลือก Keypad คุณภาพดีที่มีความรู้สึกกดดีกว่าแบบเมมเบรนทั่วไปได้
การวิเคราะห์ตรรกะซอฟต์แวร์ (Code Logic Analysis)
เวลาเขียนโปรแกรมใช้งานไลบรารี <Keypad.h> นี่มันมีหลักการทำงานเบื้องหลังที่ตั๊กๆ น่าสนใจเลยนะ มาดูกัน
- การสแกน (Scanning): โปรแกรมจะเซ็ตขา "แถว (Row)" เป็น OUTPUT และขา "คอลัมน์ (Column)" เป็น INPUT พร้อมเปิด Internal Pull-up Resistors ให้เรียบร้อย
- การตรวจจับ (Detection): เมื่อถึงเวลาที่กำหนด โปรแกรมจะส่งสัญญาณ LOW ไปที่แถวที่ 1 แล้วตรวจดูว่าคอลัมน์ไหนกลายเป็น LOW บ้าง ถ้าตรวจเจอ แสดงว่าปุ่มตรงจุดตัดแถว-คอลัมน์นั้นถูกกดแล้วจ้า
- การดีบาวนซ์ (Debouncing): ไลบรารีมีดีเลย์เล็กๆ ซ่อนไว้เพื่อป้องกันสัญญาณรบกวนจาก "การสั่นของหน้าสัมผัสโลหะ" เวลากดปุ่ม ทำให้ได้ค่าที่แม่นยำขึ้น ห้ามช็อตนะตัวนี้!
ตัวอย่างโครงสร้างโค้ดพื้นฐาน:
#include <Keypad.h>
const byte ROWS = 4; // สี่แถว
const byte COLS = 4; // สี่คอลัมน์
// กำหนดตัวอักษรบนปุ่ม
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// เชื่อมขา Arduino กับ Keypad
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
// สร้างออบเจ็กต์ Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey(); // อ่านค่าปุ่มที่ถูกกด
if (key){
Serial.println(key); // แสดงผลบน Serial Monitor
}
}
สรุปและดาวน์โหลด
การเลือกคีย์แพดที่ใช่ ขึ้นอยู่กับงานที่ทำเลยวัยรุ่น ถ้าทำโปรเจกต์ต้นแบบแบบประหยัดงบ Membrane Keypad ก็จัดไป แต่ถ้าจะทำพวกตู้ ATM หรือระบบรักษาความปลอดภัย ต้องเลือกคีย์แพดโลหะหรือพลาสติกเกรดดีๆ ถึงจะทนทานไปยาวๆ
สามารถดาวน์โหลดโค้ดตัวอย่างเต็มๆ และโปรเจกต์ที่เกี่ยวข้องได้จาก GitHub ของเรา สู้งานนะน้อง!