Keypad สำหรับป้อนข้อมูลให้ Arduino ขนาด 3X4

บทความนี้จะสอนใช้งาน Matrix Keypad 3×4 ให้สามารถกดแป้นตัวเลขใส่รหัสผ่านสั่งงาน Relay 5V 1 ch พร้อมกับมีการแสดงผลการทำงานผ่านจอ LCD16×2 โดยจะใช้บอร์ด Arduino UNO ในการคอนโทรลเลอร์ จะมีวิธีการทำอย่างไรกันนั้น ไปดูกันเลยครับ

Matrix Keypad 3×4 for Arduino

Keypad แบบ 12 ปุ่มมีการออกแบบให้สามารถใช้งานง่าย ทนต่อการใช้งาน เหมาะสำหรับ ไมโครคอนโทรลเลอร์หลากหลายรุ่น ติดตั้งได้ง่าย ปุ่มกดจะมีอยู่ 12 ปุ่มคือ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, *, # รูปแบบเหมือนโทรศัพท์

Specification:

  • Pad Size : 69 x 77 x 0.8mm
  • Cable Length :  3-1/3″ or 86mm (include connector)
  • Weight : 7g
  • Connector :  Dupont 7 pins, 0.1″ (2.54mm) Pitch
  • Mount Style :  Self-Adherence
  • Max. Circuit Rating : 35VDC, 100mA
  • Insulation Spec :   100M Ohm, 100V
  • Dielectric Withstand :  250VRms (60Hz, 1min)
  • Contact Bounce :  ≤  5ms
  • Life Expectancy :  1 million closures
  • Operation Temperature :   -20 to +40 °C

อุปกรณ์ที่ต้องใช้

  1. แป้นกดสัมผัส 3X4   สั่งซื้อ → คลิก

  2. บอร์ด Arduino UNO R3 พร้อมสายสัญญาณ และกล่องอะคริลิค  สั่งซื้อ → คลิก

  3. จอ LCD 1602 5V พื้นน้ำเงิน  สั่งซื้อ → คลิก

  4. โมดูลรีเลย์ 5-12V 1-4 Channel  สั่งซื้อ → คลิก

  5. สายจัมเปอร์ 10cm M-M, F-F, M-F 120เส้น  สั่งซื้อ → คลิก

การต่อวงจร

LCD  ⇒  Arduino UNO

SDA    →   A4

SCL     →   A5

VCC    →    5V

GND   →    GND

Relay 5V   ⇒  Arduino UNO

IN   →   Pin 11

SCL     →   A5

VCC    →    5V

GND   →    GND

Keypad3×4   ⇒  Arduino UNO

Pin 1 → Pin 2

Pin 2 → Pin 3

Pin 3 → Pin 4

Pin 4 → Pin 5

Pin 5 → Pin 6

Pin 6 → Pin 7

Pin 7 → Pin 8

โหลดและติดตั้ง Library ก่อนนะ

LCD  →   คลิก

KeyPad  →   คลิก

*หมายเหตุ ใครติดตั้ง Library ไม่เป็นดูจากลิงค์นี้นะครับ  →   คลิก

ตัวอย่างโค้ด

#include <Keypad.h>
#define RELAY_PIN 11 // ประกาศ ขาพินรีเลย์
#define ROW_NUM 4 // ประกาศ 4 แถว
#define COLUMN_NUM 3 // ประกาศ 3 คอลัมน์
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

char keys[ROW_NUM][COLUMN_NUM] = {
{‘1’, ‘2’, ‘3’},
{‘4’, ‘5’, ‘6’},
{‘7’, ‘8’, ‘9’},
{‘*’, ‘0’, ‘#’}
};

byte pin_rows[ROW_NUM] = {8, 7, 6, 5}; //เชื่อมต่อกับ pinouts ของแถว ของปุ่มกด
byte pin_column[COLUMN_NUM] = {4, 3, 2}; //เชื่อมต่อกับ pinout ของคอลัมน์ ของปุ่มกด

Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );

const String password_1 = “1234”; // กำหนดรหัสผ่าน 1
const String password_2 = “5678”; // กำหนดรหัสผ่าน 2

String input_password;

void setup() {
Serial.begin(9600);
input_password.reserve(32); // maximum password size is 32, change if needed
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
lcd.begin();
Serial.println(“ใส่รหัสผ่าน”);
}

void loop() {

char key = keypad.getKey();
lcd.setCursor(1, 0);
lcd.print(“INPUT PASSWORD”);

if (key) {
Serial.print(key);

if (key == ‘*’) {
input_password = “”; // รีเซ็ตรหัสผ่านอินพุต
lcd.setCursor(1, 0);
lcd.print(“Clear PASSWORD”);
delay(1000);
lcd.clear();
}
else if (key == ‘#’) { // กดเพื่อสั่งให้ Relay ทำงาน
if (input_password == password_1 || input_password == password_2) {
Serial.println(“รหัสผ่านถูกต้อง”);
digitalWrite(RELAY_PIN, HIGH);
delay(2000);
lcd.clear();
} else {
Serial.println(“รหัสผ่านไม่ถูกต้อง”);
lcd.setCursor(1, 0);
lcd.print(” No PASSWORD “);
delay(1000);
lcd.clear();
}

input_password = “”; // รีเซ็ตรหัสผ่านอินพุต
}
else {
input_password += key; // ต่อท้ายอักขระตัวใหม่ตอนป้อนรหัสผ่าน
lcd.setCursor(0, 1);
lcd.print(“****”);
lcd.setCursor(0, 1);
lcd.print(input_password);
}
}
else{
digitalWrite(RELAY_PIN, LOW);
}
}

เมื่ออัพโหลดโค้ดลงบอร์ดเรียบร้อยแล้วเมื่อทำการทดสอบจะได้ผลดังรูป

เพื่อนๆ น้องๆ สามารถนำไปประยุกต์ใช้กับงานโปเจคของเพื่อนๆ ได้นะครับ เช่น ระบบล็อคประตู หรือ ระบบความปลอดภัยอื่น ๆ ยังไงก็รอติดตามข้อมูลข่าวสาร ความรู้จากพวกเรา The Invention ด้วยนะครับ

Banner Content

0 Comments

Leave a Comment