เคยเบื่อไหมครับที่ต้องมานั่งล้วงกระเป๋าหากุญแจทุกครั้งเวลาจะเข้าห้องทำงาน? แถมบางทีประตูเป็นแบบล็อกอัตโนมัติ ถ้าลืมกุญแจไว้ข้างในก็จบข่าวเลย...
ด้วยปัญหานี้ นักศึกษาวิศวกรรมคนหนึ่งจึงปิ๊งไอเดียสร้าง "The D'Opener" เครื่องเปิดประตูอัจฉริยะที่ใช้บัตร RFID แตะปุ๊บประตูเปิดปั๊บ! จุดเด่นคือ ไม่ต้องเจาะประตูแม้แต่รูเดียว ตัวเครื่องจะไปหมุนมอเตอร์ดึงด้ามจับประตูจากด้านในให้เอง แถมยังคงใช้กุญแจแบบเดิมไขได้ตามปกติ มาดูกันครับว่าโปรเจกต์เจ๋งๆ แบบนี้มีขั้นตอนการสร้างยังไงบ้าง

รายการอุปกรณ์ที่ต้องใช้ (Parts & Supplies)
- บอร์ด Arduino UNO (หรือ Nano) พร้อมแผ่นวงจร Perf board
- โมดูลอ่านบัตร Parallax RFID Serial Module และบัตร/พวงกุญแจ RFID
- มอเตอร์เกียร์ (Bosch Seat Motor หรือมอเตอร์แบบทำมุมฉาก)
- โมดูล Relay แบบ 2 ช่อง
- โมดูลลดแรงดันไฟ 12V เป็น 5V (DC-DC Buck Converter) และอะแดปเตอร์ 12V
- สวิตช์ลิมิต (Limit switches) 2 ตัว และ สวิตช์ปุ่มกด (Pushbutton) 2 ตัว
- เชือก (ขนาดประมาณ 1/4 นิ้ว ยาว 12 นิ้ว) และอุปกรณ์ฮาร์ดแวร์ทั่วไป
- เครื่องพิมพ์ 3D (3D Printer) และหัวแร้งบัดกรี
Step 1 & 2: ไอเดียและการออกแบบกลไก (Mechanical Design)
หลักการทำงานคือ ตัวกล่องจะถูกนำไป "แขวน" ล็อกไว้กับแกนด้ามจับประตู (ฝั่งด้านในห้อง) โดยมีเซ็นเซอร์ RFID แนบติดไว้กับบานประตูเพื่อรอรับสัญญาณจากฝั่งด้านนอก
เมื่อเราแตะบัตรผ่านประตูเข้ามา มอเตอร์ข้างในกล่องจะหมุนแกนสปูล (Spool) เพื่อดึง "เชือก" ที่มัดรั้งไว้กับปลายด้ามจับประตู ทำให้ด้ามจับถูกกดลงและประตูเปิดออก! โดยมี Limit Switch คอยตัดไฟมอเตอร์เมื่อหมุนถึงระยะที่กำหนด
คลิกเพื่อดูรูปโมเดล 3D และดาวน์โหลดไฟล์ STL (View More)
Step 3: การต่อวงจร (Electrical Design)
ระบบนี้ใช้ไฟ 12V เป็นหลัก (จ่ายให้มอเตอร์โดยตรง) และใช้ Buck Converter ลดไฟเหลือ 5V เพื่อเลี้ยงบอร์ด Arduino, โมดูล Relay และโมดูล RFID
เราใช้ Relay 2 ตัวในการควบคุมทิศทางการหมุนของมอเตอร์ (หมุนไป-กลับ เพื่อดึงเชือกและปล่อยเชือก) โดยมีปุ่มบนกล่อง 2 ปุ่ม คือปุ่ม "Exit" สำหรับกดเปิดประตูจากด้านใน และปุ่ม "Hold" สำหรับล็อกให้ประตูดึงค้างไว้
Step 4: ลงโปรแกรม (Software & Code)
การทำงานของโค้ดคือ Arduino จะรออ่านรหัส 10 หลักจากบัตร RFID ถ้าตรงกับหมายเลขที่เราบันทึกไว้ในระบบ (CardNumber หรือ FobNumber) ก็จะสั่งให้ Relay ทำงานเพื่อหมุนมอเตอร์เปิดประตูทันที
ทริคการหาเลขบัตร RFID:
ให้ลองอัปโหลดโค้ดลงบอร์ด เปิด Serial Monitor (ตั้งค่า 9600 baud) แล้วเอาบัตรไปแตะที่เซ็นเซอร์ ตัวเลข 10 หลักจะโชว์ขึ้นมาบนหน้าจอ ให้ก๊อปปี้เลขนั้นไปใส่ในโค้ดตรงช่อง #define CardNumber "XXXXXXXXXX" ได้เลยครับ
คลิกเพื่อคัดลอกโค้ดและดาวน์โหลดไฟล์ (.ino) (View More)
// Firmware v1.1 for D'OPENER
#include <SoftwareSerial.h>
#define RFIDEnablePin 3
#define RFIDSerialRate 2400
#define RxPin 5
#define TxPin 4
#define Relay1Pin 2
#define Relay2Pin 7
#define PiezoPin 6
#define Limit1Pin 11
#define Limit2Pin 12
#define ExitButtonPin 8
#define ToggleButtonPin 10
#define ToggleLedPin 9
// ใส่รหัสบัตรของคุณตรงนี้
#define CardNumber "XXXXXXXXXX"
#define FobNumber "XXXXXXXXXX"
SoftwareSerial RFIDReader(RxPin, TxPin);
String RFIDTAG = "";
String DisplayTAG = "";
void setup() {
RFIDReader.begin(RFIDSerialRate);
pinMode(RFIDEnablePin, OUTPUT);
pinMode(ToggleLedPin, OUTPUT);
pinMode(Relay1Pin, OUTPUT);
pinMode(Relay2Pin, OUTPUT);
pinMode(PiezoPin, OUTPUT);
pinMode(Limit1Pin, INPUT_PULLUP);
pinMode(Limit2Pin, INPUT_PULLUP);
pinMode(ToggleButtonPin, INPUT_PULLUP);
pinMode(ExitButtonPin, INPUT_PULLUP);
digitalWrite(RFIDEnablePin, LOW);
Serial.begin(9600);
Serial.println("Hello world!");
motor(false, false);
}
void loop() {
if (RFIDReader.available() > 0) {
ReadSerial(RFIDTAG);
DisplayTAG = RFIDTAG;
Serial.println(RFIDTAG);
// ตรวจสอบรหัสบัตร
if ((DisplayTAG == CardNumber) || (DisplayTAG == FobNumber)) {
tone(PiezoPin, 800, 1000);
door_open();
delay(1000);
door_close();
clearBuffer();
}
}
// กดปุ่ม Hold Toggle Lock
if (!digitalRead(ToggleButtonPin)) {
delay(5);
if (!digitalRead(ToggleButtonPin)) {
door_open();
digitalWrite(ToggleLedPin, 1);
while (digitalRead(ToggleButtonPin)) { }
door_close();
digitalWrite(ToggleLedPin, 0);
}
}
// กดปุ่ม Exit ชั่วคราว
if (!digitalRead(ExitButtonPin)) {
delay(5);
if (!digitalRead(ExitButtonPin)) {
door_open();
delay(1000);
door_close();
}
}
}
void ReadSerial(String &ReadTagString) {
// ฟังก์ชันอ่านค่าจาก Serial (ดึงโค้ดเต็มจากไฟล์ดาวน์โหลด)
}
void clearBuffer() {
while (RFIDReader.available() > 0) { RFIDReader.read(); }
}
void motor(bool run, bool dir) {
if (!run) {
digitalWrite(Relay1Pin, LOW);
digitalWrite(Relay2Pin, LOW);
} else {
if (dir) {
digitalWrite(Relay1Pin, LOW);
digitalWrite(Relay2Pin, HIGH);
} else {
digitalWrite(Relay1Pin, HIGH);
digitalWrite(Relay2Pin, LOW);
}
}
}
void door_open() {
motor(true, true);
while (digitalRead(Limit2Pin)) { }
motor(false, false);
}
void door_close() {
motor(true, false);
while (digitalRead(Limit1Pin)) { }
motor(false, false);
}
📥 ดาวน์โหลดไฟล์ Arduino Code (.ino) ฉบับเต็ม
Step 5 - 9: การประกอบ ติดตั้ง และแก้ปัญหา
เมื่อเขียนโค้ดเสร็จแล้ว ให้ประกอบวงจรทั้งหมดลงในกล่อง มัดเชือกจากสปูล (Spool) ไปที่ปลายด้ามจับประตู (อย่าให้ตึงหรือหย่อนเกินไป) และตั้งตำแหน่งน็อตเตะ Limit Switch ให้พอดีกับการหมุนของด้ามจับ
ปัญหาที่พบ: บางครั้งตัวกล่องที่เป็นมอเตอร์เหล็กขนาดใหญ่ จะเข้าไปรบกวนคลื่นของเซ็นเซอร์ RFID ทำให้สแกนบัตรผ่านประตูไม่ค่อยติด ผู้สร้างจึงแก้ปัญหาด้วยการพิมพ์เคส "Sidecar" ขนาดเล็ก เพื่อย้ายตัวอ่าน RFID แยกออกมาด้านข้างแทน เท่านี้ก็ใช้งานได้ลื่นไหลแล้วครับ!
คลิกเพื่อดูรูปภาพการติดตั้งและกลไกการทำงาน (View More)
สรุป: การสร้างระบบ D'Opener เป็นโปรเจกต์ที่ผสมผสานทั้งงาน 3D Print, การต่อวงจรมอเตอร์ และการเขียนโค้ด RFID ได้อย่างลงตัว แถมยังนำไปประยุกต์ใช้กับประตูบ้านได้จริงโดยไม่ต้องเจาะทำลายประตูให้เสียของเลยครับ!
อยากทำระบบประตูอัจฉริยะเป็นของตัวเองไหม?
คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา