โครงงาน

ควบคุมการผ่านประตูด้วย RFID ควบคุม โดย Arduino UNO

อภิรักษ์ นามแถ่ง

aphirak@se-ed.com

 

 

 

 

 

โดยทั่วไปแล้วตามเคหสถานจะใช้การป้องกันโดยล็อกด้วยกุณแจ แต่หากท่านเป็นคนหนึ่งที่มีปัญหากับการหาลูกกุญแจไม่เจอ หรือตัวกุญแจเองอยู่ในที่มืดทำให้ไขกุญแจได้ไม่สะดวก ปัญหาต่างๆ เหล่านี้จะหมดไปหากท่านใช้ระบบผ่านเข้าออกประตูด้วย RFID

 

          โดยส่วนมากระบบรักษาความปลอดภัยในบ้านของเราจะเป็นการใช้กุญแจ แต่ถ้ามีผู้เข้าออกประตูเพียงไม่กี่คนคงจะไม่มีปัญหามากเท่าไหร่นัก แต่หากมีหลายคนการเข้าออกหรือการรักษาความปลอดภัยอาจจะทำได้ยากมากขึ้น การแก้ไขปัญหาในจุดนี้บางท่านอาจจะใช้การเข้าออกประตูโดยการกดรหัสผ่าน ซึ่งข้อเสียการกดรหัสนี้ คือ บุคคลภายนอกสามารถแอบมองดูรหัสแล้วมากดเข้าในภายหลังได้ /p>

 

          แนวทางการแก้ไข คือ ต้องทำให้การเข้าประตูมีความซับซ้อนมากยิ่งขึ้น หลายท่านอาจจะนึกถึงรีโมตคอนโทรลควบคุมการเปิดประตู แนวทางนี้อาจจะป้องกันจากบุคคลอื่นได้ดีพอสมควรเพราะรหัสจะถูกส่งผ่านคลื่นความถี่ แน่นอนว่ารีโมตคอนโทรลจำเป็นต้องใช้แบตเตอรี่ในการทำงาน และนี่ก็เป็นจุดอ่อนของระบบนี้ เพราะหากประจุไฟฟ้าของแบตเตอรี่อ่อนหรือหมดจะทำให้รีโมตไม่สามารถใช้ได้ ดังนั้นการแก้ปัญหาทั้งหมดนี้จะต้องใช้อุปกรณ์ที่ไม่มีการติดต่อทางกายภาพและไม่ใช้แบตเตอรี่ ซึ่งนั่นก็คือ RFID

 

          อุปกรณ์หลักของระบบประกอบไปด้วยโมดูลตัวอ่านและ “แท็ก” (tag) ภายใต้มาตรฐานที่เป็นเทคโนโลยี RFID (Radio Frequency Identity) แต่ละแท็กจะถูกเข้ารหัส (encoded) ด้วยเอกลักษณ์ที่ไม่ซ้ำกัน เมื่อแท็กถูกนำมาไว้ในระยะที่โมดูลตัวรับสามารถตรวจจับได้ มันจะถูกกระตุ้นด้วยสนามแม่เหล็กจากโมดูลตัวรับ จากนั้นแท็กจะส่งรหัสส่วนตัวไปยังโมดูลตัวรับเพื่อทำการตรวจสอบรหัสว่าถูกต้องหรือไม่ ระบบนี้นิยมนำไปใช้ในการควบคุมการทำงานของประตูไฟฟ้า เนื่องจากสะดวกต่อการใช้งานและเหมาะสำหรับระบบรักษาความปลอดภัย

 

          ในโครงงานนี้เป็นการหยิบเอา RFID Card Reader/Detector ที่ควบคุมด้วย MFRC522 (ดังแสดงในรูปที่ 1) ซึ่งปัจจุบันถูกนำไปใช้อย่างกว่างเนื่องจากมีราคาที่ไม่แพงและใช้งานง่าย มีย่านการอ่านและเขียนที่ความถี่ 13.56MHz ผู้ผลิตชิปนี้ คือบริษัท NXP (http://www.nxp.com)

 

 

 

รูปที่ 1 RFID Card Reader/Detector Module Kit (RC522) พร้อม Tag Card และ Tag พวงกุญแจที่ใช้ในโครงงานนี้

 

คุณสมบัติของ RC522

• กระแสในสภาวะอ่านบัตร:13-26mA/DC 3.3V
• กระแสในสภาวะรออ่านบัตร :10-13mA/DC 3.3V
• ความถี่: 13.56MHz
• กระแสใช้งานสูงสุดช่วงเวลาหนึ่ง:
• ชนิดของแท๊กที่รองรับ: S50, S70, UltraLight, Pro, Desfire
• อุณภูมิแวดล้อมที่สามารถทำงานได้: -20 ถึง 80 องศาเซลเซียส์
• ขนาด: 40mm × 60mm
• ความเร็วการถ่ายโอนข้อมูล: สูงสุด 10Mbit/s  

 

 

หลักการทำงาน

 

 

 

รูปที่ 2 วงจรสมบูรณ์

 

 

          รูปที่ 2 เป็นวงจรสมบูรณ์ของโครงงานนี้ หัวใจหลัก คือ Arduino UNO ทำหน้าที่เป็นตัวประมวลผลทางด้านฮาร์ดแวร์ การทำงานหลักๆ ได้แก่ รับข้อมูลกับโมดูล RFID, รับคำสั่งจาก Keypad แสดงสภาวะการทำงานผลผ่านทาง LCD และกำหนดสภาวะเอาต์พุต การเชื่อมต่อระหว่าง Arduino UNO กับ โมดูล RFID จะใช้มาตรฐานการสื่อสารแบบ SPI (การสื่อสารแบบนี้จะใช้ทั้งหมด 3 ขา คือ MOSI, MISO และ SCK) รวมกับขาควบคุมอีก 2 ขา (NSS และ RST) รวมขาสัญญาณทั้งหมดเป็น 5 ขา และขาไฟเลี้ยงอีก 2 ขา รวมทั้งหมด 7 ขา ได้แก่

 

  • ขา MOSI เชื่อมต่อกับขา 11 ของ Arduino UNO
  • ขา MISO เชื่อมต่อกับขา 12 ของ Arduino UNO
  • ขา SCK เชื่อมต่อกับขา 13 ของ Arduino UNO
  • ขา NSS เชื่อมต่อกับขา 10 ของ Arduino UNO
  • ขา RST เชื่อมต่อกับขา 9 ของ Arduino UNO
  • ขา VCC เชื่อมต่อกับขา 3.3V ของ Arduino UNO
  • ขา GND เชื่อมต่อกับขา GND ของ Arduino UNO

 

          การเชื่อมต่อกับ LCD ใช้การสื่อสารอนุกรมแบบ I2C (Inter-Integrated Circuit) ซึ่งการสื่อสารแบบนี้จะใช้เพียง 2 ขาเท่านั้น หากเทียบกับการเชื่อมต่อโดยตรงระหว่าง LCD กับ Arduino นั้นจะใช้ขาเยอะมาก (อย่างต่ำ 6 ขา) ทำให้เปลืองขาที่อาจจะต้องไปใช้งานกับอุปกรณ์ต่อพ่วงอื่นๆ ดังนั้นจะมีการพัฒนานำเอา I2C มาประยุกต์ใช้งานกับ LCD โมดูล เพื่อที่จะลดจำนวนขาที่ต้องใช้จำนวนมาก ให้เหลือเพียง 2 สายเท่านั้น คือขา SCL และ SDA นอกจากนี้ยังสามารถนำขาดังกล่าวนี้ติดต่อกับอุปกรณ์อื่นที่ใช้ I2C ได้บนสายเดียวกันด้วย

 

          หัวใจของ I2C โมดูล คือไอซี PCF8574 ซึ่งทำหน้าที่รับสัญญาณอินพุต I2C มาจาก Arduino จากนั้นจะกำหนดสภาวะเอาต์พุตสำหรับสั่งงาน LCD ให้ทำงานตามคำสั่ง ในส่วนของ PCF8574 จะมีเอาต์พุตทั้งหมด 1 ไบต์ (สามารถใช้ได้เพียง 8 ขา หรือ 8 บิตนั่นเอง) ดังนั้นเราจึงสามารถสั่งงาน LCD ได้เพียงโหมด 4 บิตเท่านั้น

 

          จากรูปที่ 2 ให้สังเกตดูที่ IC1 ที่ขา A0, A1 และ A2 (ขา1-3) ขาดังกล่าวนี้เป็นการกำหนดตำแหน่ง (Address) เป็นการกำหนดตำแหน่งของ LCD เพื่อเข้าถึงการสั่งงาน LCD ได้ ดังที่กล่าวไว้ข้างต้นว่าขา I2C นี้เราสามารถเชื่อมต่ออุปกรณ์ได้หลายตัว ดังนั้นจึงต้องกำหนดตำแหน่งของอุปกรณ์ไว้ด้วย ตัวอย่างเช่น หากงานของท่านจำเป็นต้องใช้ LCD หลายตัว Address นี้เพื่อเลือกควบคุมจอ LCD ตัวใดตัวหนึ่งได้ จะเห็นว่าโครงงานนี้จะเชื่อมต่อลงกราวด์ของวงจร นั่นแสดงว่าผู้เขียนกำหนดตำแหน่งให้เป็น “000” นั่นเอง ที่ขา 3 ของแอลซีดีจะต่อกับ VR1 (10K) เพื่อทำการปรับระดับความเข้มของตัวอักษรบนหน้าจอ LCD

 

          การกระตุ้นให้รีเลย์ทำงานจะกำหนดพอร์ต AD0 ของ Arduino ให้มีสภาวะเป็นลอจิกสูง (High) เพื่อขับให้รีเลย์ทำงาน โดยจะใช้ไดโอดป้องกันการยุบตัวของสนามแม่เหล็กด้วย ที่เอาต์พุต COM3 จะเชื่อมต่อกับขาคอนแทกต์ COM, NO และ NC เพื่อให้ผู้ใช้เลือกนำไปใช้งานตามความต้องการ

           

          การสแกนปุ่มกด Arduino UNO จะส่งลอจิก “1” ออกไปเอาต์พุต IO2-IO4 ทีละขา สั่งไปยังขาคอลัมพ์ (C1-C3) ของคีย์แพด หากมีการกดสวิตช์ปุ่มใดก็ตามลอจิกจากคอลัมพ์นั้นๆ จะถูกส่งไปยังขาอินพุต IO5-IO8 แถว (R1-R4) ด้วยหลักการนี้จึงทำให้ไมโครคอนโทรลเลอร์รู้ว่าผู้ใช้กดปุ่มใด

 

 

 

รูปที่ 3 ลายวงจรพิมพ์ด้านบนขนาดเท่าแบบ

 

 

  

รูปที่ 4 ตำแหน่งการลงอุปกรณ์ด้านบน

 

 

 

รูปที่ 5 ตำแหน่งการลงอุปกรณ์ด้านล่าง

 

 

การประกอบ

 

      จากรูปที่ 4 และ 5 เป็นตำแหน่งการลงอุปกรณ์ของโครงงานนี้ มีทั้งหมด 3 ส่วน คือ ส่วนควบคุม, ส่วน LCD และส่วนคีย์แพด จะสังเกตว่าลายวงจรนั้นก็มีเพียงด้านเดียว แต่อุปกรณ์จะมีการลงทั้งสองด้าน การลงอุปกรณ์จะค่อนข้างยากกว่าโครงงานทั่วไปสักหน่อย เพราะอุปกรณ์ส่วนใหญ่จะบัดกรีด้านลายวงจรพิมพ์ ดังนั้นจึงต้องสังเกตจุดบัดกรีให้ดีและควรใช้หัวแร้งปลายเล็กๆ เพื่อให้สามารถบัดกรีตำแหน่งใต้คอนเน็กเตอร์ได้ ดังแสดงในรูปที่ 6

 

 

 

รูปที่ 6 การบัดกรีใต้คอนเน็กเตอร์

 

          เนื่องจากอุปกรณ์มีน้อยชิ้น แต่ถึงแม้ว่าอุปกรณ์น้อยชิ้นแต่การลงอุปกรณ์นั้นค่อนข้างยุ่งยากพอสมควร จึงควรต้องลงอุปกรณ์ อย่างไรก็ตามการลงอุปกรณ์ก็ควรเริ่มจากตัวที่มีความสูงน้อยที่สุดก่อน อาทิเช่น ลวดจั๊มและตัวต้านทาน เป็นต้น จากนั้นจึงไล่เรียงตามลำดับความสูงจนกระทั่งครบทุกตัว ในส่วนของไอซี IC1 (PCF8574) เป็นประเภท SMD ควรต้องใช้ความระมัดระวังเรื่องความร้อนขณะบัดกรีด้วย เพราะหากแช่หัวแร้งนานจนเกินไปอาจจะทำให้ IC1 เสียหายได้ แต่ก็อย่ากังวลมากจนเกินไป เพราะอันที่จริงหากไม่แช่หัวแร้งไว้นานๆ ก็คงไม่พังง่ายๆ ครับ

 

          เมื่อลงอุปกรณ์จนครบหมดแล้วให้ตรวจสอบแรงดันในวงจรทั้งหมดเสียก่อน โดยอ้างอิงกับรูปที่ 2 ซึ่งแหล่งจ่ายไฟ5 VDC ต่อเข้า CON2 โดยให้ต้องระวัดระวังเรื่องตำแหน่งขั้วด้วย จากนั้นให้นำโวลต์มิเตอร์มาวัดระหว่างขา 1 และขา 16 ของ IC1 (หรือขา 1 และ 2 ของ LCD) ถ้าถูกต้องแรงดันที่ได้จะต้องเท่ากับ 5 โวลต์ จากนั้นใส่บอร์ด Arduino UNO ลงบนซ็อกเก็ต และวัดแรงดันจุด 3.3V บนบอร์ดเทียบกับกราวด์แรงดันที่ได้จะประมาณ 3.3 โวลต์ ถ้าหากแรงดันแต่ละจุดเป็นไปตามที่กล่าวไว้แสดงว่าพร้อมจะทดสอบการทำงานขั้นตอนต่อไปแล้ว

 

 

  

 

รูปที่ 7 เว็บไซต์สำหรับดาวน์โหลด Arduino IDE เวอร์ชัน 1.6.4

 

 

 

รูปที่ 8 หน้าจอ LCD แสดงข้อความหลังจากเปิดเครื่อง

 

 

 

รูปที่ 9 การเปิด Serial Monitor

 

 

การทดสอบ

  

          เมื่อมั่นใจว่าการลงอุปกรณ์ถูกต้องครบทุกอย่างแล้วให้ใส่อุปกรณ์ที่เหลือทั้งหมดลงตำแหน่ง จากนั้นให้ไปดาวน์โหลดโปรแกรม Arduino IDE เวอร์ชัน 1.6.4 มาไว้ที่เครื่องคอมพิวเตอร์ของท่าน เนื่องจากไลบรารี่ที่ใช้ร่วมกับโครงงานนี้จะรองรับที่เวอร์ชันดังกล่าวนี้ หากใช้เวอร์ชันอื่นอาจจะไม่สามารถใช้งานโปรแกรมนี้ได้ สามารถไปดาวน์โหลดโปรแกรม Arduino IDE เวอร์ชัน 1.6.4 ได้ที่เว็บไซต์ https://www.arduino.cc/en/Main/OldSoftwareReleases#previous (ดังแสดงในรูปที่ 7)

 

          หลังจากนั้นไปดาวน์โหลดไฟล์ที่ใช้ร่วมกับโครงงานที่เว็บไซต์ http://electronics.se-ed.com/download ให้ทำการเปิดไฟล์ SemiRFID.ino พร้อมกับทำการอัพโหลดโปรแกรม เมื่อเสร็จแล้วที่หน้าจอ LCD จะแสดงข้อความ “Access Control” ในบรรทัดแรก (ดังแสดงในรูปที่ 8) จากนั้นให้เปิด Serial Monitor ดังรูปที่ 9

 

 

 

รูปที่ 10 หน้าจอ LCD แสดงข้อความเมื่อหมายเลขแท๊กไม่ตรงกับซอร์สโค้ดที่กำหนด

 

 

 

รูปที่ 11 หมายเลขแท๊กที่ต้องใช้ในการแก้ไขซอร์สโค้ดในบรรทัดที่ 13

 

 

          จากนั้นให้ใช้แท๊กที่มีแต่ไปที่โมดูลรับ RFID หากสามารถอ่านการ์ดได้ ที่หน้าจอ LCD จะแสดงข้อความ “Not allowed!” (ดังแสดงในรูปที่ 10) เนื่องจากหมายเลขการ์ดของเรายังไม่ได้ใส่ไว้ในซอร์สโค้ด หมายเลขจึงไม่ตรงกัน ขณะเดียวกันนั้นที่หน้าต่าง Serial Monitor จะแสดงหมายเลขแท๊กที่ได้รับ (ดังแสดงในรูปที่ 11) ให้ท่านผู้อ่านคัดลอกหมายเลขนั้นไปใส่ไว้ในซอร์สโค้ดบรรทัดที่ 13 หากมาหลายตัวก็สามารถใส่ได้ ซึ่งในบทความนี้จะมีแท๊กทั้งหมด 2 ตัว ในทำนองเดียวกัน ในบรรทัดที่ 18 จะเป็นช่องให้ใส่พาสเวิร์ดของการ์ด ซึ่งในกรณีนี้ผู้ใช้สามารถเลือกใช้หรือไม่ใช้ได้ หากไม่ใช้ก็สามารถคอมเมนต์ที่บรรทัดที่ 23 ได้ ดังแสดงในรูปที่ 12

 

 

 

รูปที่ 12 การกำหนดซอร์สโค้ดเพื่อเลือกใช้หรือไม่ใช้งานในส่วนของพาสเวิร์ด

 

 

          เมื่อแก้ไขซอร์สโค้ดในส่วนของหมายเลขแท๊กเรียบร้อยแล้วก็ให้อัพโหลดโปรแกรมให้กับ Arduino UNO อีกครั้ง คราวนี้ให้เอาการ์ดอันเดิมที่เพิ่มหมายเลขการ์ดไปแล้วก่อนหน้านี้ไปแตะ ในกรณีที่ไม่ได้เปิดใช้งานพาสเวิร์ด หากถูกต้องที่หน้าจอ LCD ในบรรทัดที่ 2 จะแสดงข้อความ "Welcome!" พร้อมกันนั้นจะได้ยินเสียงรีเลย์ทำงาน นั่นแสดงว่าโครงงานพร้อมใช้งานแล้ว หากไม่ถูกต้องให้ตรวจสอบความถูกต้อง

 

          ในกรณีที่เปิดใช้งานพาสเวิร์ดในบรรทัดที่ 1 จะถามพาสเวิร์ด ให้ผู้ใช้ใส่รหัส 4 หลักที่กำหนดไว้ในซอร์สโค้ดไว้ก่อนหน้านี้ หากถูกต้องหน้าจอ LCD ในบรรทัดที่ 2 จะแสดงข้อความ "Welcome!" และรีเลย์จะทำงาน แต่หากพาสเวิร์ดไม่ถูกต้องระบบจะแดงข้อความ “Wrong Password!” ให้ผู้ใช้ใส่รหัสใหม่จนกว่าจะถูกต้อง แต่ถ้าไม่ถูกรีเลย์ก็จะไม่ทำงานและสุดท้ายประตูก็จะไม่เปิดนั่นเอง

 

 

"เพียงเท่านี้ท่านก็จะได้เครื่องที่ใช้ควบคุมการผ่านเข้าออกได้โดยที่ไม่ต้องพกกุญแจอีกต่อไป อีกทั้งยังเป็นระบบที่นับว่าทันสมัยและมีระบบรักษาความปลอดภัยที่สามารถไว้วางใจได้ระดับหนึ่งเลยทีเดียว"

 

 

 

  

 

สงวนลิขสิทธิ์ ตามพระราชบัญญัติลิขสิทธิ์ พ.ศ. 2539 www.thailandindustry.com
Copyright (C) 2009 www.thailandindustry.com All rights reserved.

ขอสงวนสิทธิ์ ข้อมูล เนื้อหา บทความ และรูปภาพ (ในส่วนที่ทำขึ้นเอง) ทั้งหมดที่ปรากฎอยู่ในเว็บไซต์ www.thailandindustry.com ห้ามมิให้บุคคลใด คัดลอก หรือ ทำสำเนา หรือ ดัดแปลง ข้อความหรือบทความใดๆ ของเว็บไซต์ หากผู้ใดละเมิด ไม่ว่าการลอกเลียน หรือนำส่วนหนึ่งส่วนใดของบทความนี้ไปใช้ ดัดแปลง โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร จะถูกดำเนินคดี ตามที่กฏหมายบัญญัติไว้สูงสุด