RFID คีย์การ์ดหลายรหัสควบคุมด้วย Arduino

.

RFID คีย์การ์ดหลายรหัสควบคุมด้วย Arduino

จักรพงษ์  มณีศรี

jakkapong.maneesri@gmail.com

ราคาประมาณ 500 บาท

 

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

 

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

คีย์การ์ดเป็นส่วนหนึ่งของเทคโนโลยี RFID (Radio Frequency Identification) ซึ่งในระบบ RFID นั้นมีส่วนประกอบหลักๆ อยู่ 2 ส่วนคือ ป้ายหรือแท็ก (Tag) และเครื่องอ่าน (Reader) ซึ่งแต่ละส่วนมีรายละเอียดดังต่อไปนี้

รูปที่ 1 คีย์การ์ดหลายรหัส

รูปที่ 2 ลักษณะภายนอกและภายในของแท็ก 

ป้ายหรือแท็ก (Tag)

เราจะรู้จักป้ายหรือแท็กในนามของ “คีย์การ์ด” นั่นเอง โดยโครงงานนี้ผู้เขียนจะใช้คำว่า “แท็ก” แทนคีย์การ์ด ขอให้ผู้อ่านเข้าใจตรงกันด้วย จากรูปที่ 2 จะเห็นว่าภายในแท็กนั้นประกอบไปด้วย 2 ส่วนคือ

  1. ไมโครชิป (Microchip) ทำหน้าที่เก็บข้อมูลในหน่วยความจำ อาจเป็นแบบอ่านได้อย่างเดียว (ROM) หรือทั้งอ่านและเขียน (RAM) ทั้งนี้ขึ้นอยู่กับความต้องการในการนำไปใช้งาน

  2. สายอากาศ (Antenna) คือขดลวดขนาดเล็กทำหน้าที่เหนี่ยวนำสัญญาณคลื่นความถี่วิทยุที่ส่งมาจากเครื่องอ่าน (Reader) แล้วสร้างพลังงานป้อนให้กับไมโครชิป และยังทำหน้าที่เป็นเสาอากาศสำหรับรับ – ส่งข้อมูลที่อยู่ในหน่วยความจำไปยังเครื่องอ่านอีกด้วย

รูปที่ 3 เครื่องอ่าน (Reader)

เครื่องอ่าน (Reader)

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

รูปที่ 4 การทำงานของระบบ RFID

มาตรฐาน RFID Tag

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

  1. เครื่องอ่านปล่อยคลื่นวิทยุออกมาตลอดเวลา และคอยตรวจจับว่ามีแท็กในบริเวณนั้นหรือไม่

  2. เมื่อมีแท็กเข้ามาอยู่ในบริเวณคลื่นวิทยุ แท็กจะได้รับพลังงานไฟฟ้าที่เกิดจากการเหนี่ยวนำจากคลื่นวิทยุที่เครื่องอ่านปล่อยออกมาจากนั้นแท็กจะส่งข้อมูลในหน่วยความจำออกมาทางสายอากาศที่อยู่ภายในแท็ก โดยการส่งข้อมูลนั้นจะส่งด้วย มาตรฐาน EM4100 แล้วเข้ารหัสแบบ Manchester จากนั้นส่งออกมาโดยวิธี Backscatter Modulation ดังรายละเอียดต่อไปนี้

  • มาตรฐาน EM4100 เป็นมาตรฐานที่กำหนดให้มีการจัดเรียงข้อมูลเพื่อส่งจากแท็กไปยังเครื่องอ่าน ดังต่อไปนี้

รูปที่ 5 รูปแบบการเก็บข้อมูลตามมาตรฐาน EM4100

จากรูปที่ 5 จะพบว่ามีการส่งข้อมูลในส่วนของ Header เป็นลอจิก 1 จำนวน 9 บิตก่อน จากนั้นตามด้วยข้อมูลจำนวน 10 ไบต์ (D00 – D93) แต่ละไบต์ประกอบด้วยข้อมูล 4 บิต และ 1 Parity bit (P0 – P9) ในมาตรฐานนี้ระบุเป็น Even Parity หรือแพรีตี้บิตคู่นั่นเอง และในส่วนสุดท้ายจะเป็น Column parity bit (PC0 – PC3) เกิดจากการนำข้อมูลในคอลัมน์มาทำการ Exclusive OR กัน จากนั้นตามด้วยลอจิก 0 เป็น Stop bit (S0) เช่น ต้องการส่งข้อมูลเลขฐาน 16 ตามมาตรฐาน EM4100 ดังนี้ 0460071E9D ข้อมูลที่ส่งจะต้องประกอบไปด้วย

  • การเข้ารหัสแบบ Manchester มีรูปแบบการเข้ารหัสดังรูปที่ 6 การเข้ารหัสจะใช้การเปลี่ยนระดับแรงดันไฟฟ้าจากระดับแรงดันสูงเป็นแรงดันต่ำเมื่อบิตข้อมูลที่ต้องการส่งเป็นลอจิก 0 และใช้การเปลี่ยนระดับแรงดันไฟฟ้าจากระดับแรงดันต่ำเป็นแรงดันสูงเมื่อบิตข้อมูลที่ต้องการส่งเป็นลอจิก 1

  • Backscatter Modulation เป็นการสะท้อนกลับของคลื่นหรือสัญญาณในทิศทางโดยตรงกับสัญญาณที่ส่งมา

รูปที่ 6 รูปแบบการเข้ารหัสแบบ Manchester

รูปที่ 7 Backscatter Modulation

จากรูปที่ 7 เปรียบตัวส่งด้านซ้ายมือคือเครื่องอ่าน และตัวรับด้านขวามือคือแท็ก จะเห็นว่าเมื่อมีการส่งคลื่นสัญญาณจากเครื่องอ่าน จะก่อให้เกิดแรงดันเหนี่ยวนำขึ้นที่สายอากาศของแท็ก และเมื่อมีการ Short circuit ที่สายอากาศของแท็กให้มีกระแสไหล จะทำให้เกิดคลื่นสัญญาณสะท้อนกลับไปที่เครื่องอ่าน แต่หากมีการ Open circuit ที่สายอากาศของตัวแท็กจะไม่เกิดการสะท้อนกลับของคลื่นสัญญาณไปยังเครื่องอ่าน เมื่อแท็กทำการ Short และ Open circuit ที่สายอากาศเป็นจังหวะตามมาตรฐานที่กำหนดไว้ รูปคลื่นสัญญาณที่ได้จะมีหน้าตาดังรูปที่ 8 จะเห็นว่าคลื่นสัญญาณมีระดับแรงดันอยู่ 2 ระดับ ระดับแรงดันสูงคือลอจิก 1 ระดับแรงดันต่ำคือลอจิก 0 เมื่อขยายคลื่นสัญญาณดูจะพบว่า มีสัญญาณคลื่นไซน์ ความถี่ 125 kHz

  1. เครื่องอ่านตรวจจับความเปลี่ยนแปลงของคลื่นพาหะที่ได้ส่งออกไป แปลงออกมาเป็นข้อมูลแล้วทำการถอดรหัสเพื่อนำข้อมูลไปใช้งานต่อไป 

(ก)

(ข)

รูปที่ 8 แสดงรูปคลื่นสัญญาณการเกิด Backscatter

รูปที่ 9 การอ่านรหัสจากแท็กต้นแบบ

รูปที่ 10 รหัสจากแท็กต้นแบบ

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

ก่อนอื่นเราจำเป็นต้องรู้รหัสที่อยู่ในแท็กต้นแบบก่อน ทำได้โดยใช้เครื่องอ่านต่อเข้ากับคอมพิวเตอร์เพื่ออ่านรหัส เนื่องจากเครื่องอ่านที่ผู้เขียนมีอยู่นั้นส่งข้อมูลที่อ่านได้ออกมาทางขา TXD ด้วยความเร็ว 9600 bps ผู้เขียนจะใช้วจรแปลงสัญญาณ TTL เป็น USB ของบอร์ด Arduino Nano เพื่อส่งข้อมูลจากเครื่องอ่านเข้าคอมพิวเตอร์ โดยการต่อสายไฟ 3 เส้นได้แก่ 5V, GND และ TXD โดยต่อขา TXD ของเครื่องอ่านเข้าขา TX1 ของบอร์ด Arduino Nano ดังรูปที่ 9

เพื่อไม่ให้บอร์ด Arduino Nano ส่งข้อมูลออกมาชนกับเครื่องอ่าน เราจึงต้องทำการโหลดโปแกรมไฟกระพริบให้บอร์ด Arduino Nano เสียก่อน ขั้นตอนโหลดโปรแกรมไฟกระพริบนี้นี้ผู้เขียนจะไม่ขอบอกรายละเอียด เพราะเชื่อว่าผู้อ่านทุกคนสามารถทำได้ จากนั้นให้คลิกเปิดหน้า Serial Monitor ที่โปรแกรม Arduino IDE ขึ้นมา ตั้งค่า baud rate เป็น 9600 แล้วนำแท็กต้นแบบเข้ามาใกล้ๆ เครื่องอ่าน จะเห็นรหัสแสดงที่หน้า Serial Monitor ตามรูปที่ 10 จากรูปจะเห็นว่ารหัสแท็กของผู้เขียนคือ 72005419C5 ผู้เขียนจะนำรหัสชุดนี้ไปใส่ในโค้ดเพื่อให้แท็กที่จะสร้างขึ้นมานั้นส่งรหัสเดียวกับแท็กต้นแบบ

สร้างสายอากาศ โดยนำลวดทองแดงขนาดเล็กมาพันเป็นวงกลม เพื่อใช้ในการส่งข้อมูลไปยังเครื่องอ่าน แต่การทำให้คลื่นวิทยุในย่านความถี่ที่ต้องการ ส่งผ่านไปได้อย่างมีประสิทธิภาพสูงสุดนั้น ต้องทำให้สายอากาศ รับคลื่นวิทยุในช่วงความถี่เรโซแนนซ์ (Resonance) สามารถทำได้โดยนำตัวเก็บประจุมาต่อขนานกับสายอากาศที่สร้างขึ้นมา โดยค่า Capacitance ที่จะใช้นั้นหาได้จากสมการ  (1) จัดการยกกำลังสองแล้วย้ายข้างจะได้ (2)

สมการ  (1)

สมการ  (2)

จากสมการจะเห็นว่าการหาค่า Capacitance จำเป็นต้องรู้ค่า Inductance ของสายอากาศที่สร้างขึ้นมา ซึ่งผู้เขียนเองไม่มีเครื่องมือวัดค่า Inductance ของสายอากาศ ผู้เขียนจึงใช้วิธีสั่งซื้อสายอากาศผ่านทางอินเตอร์เน็ต ดังรูปที่ 11 และสอบถามค่า Inductance จากผู้ผลิตได้คำตอบมาว่าค่า Inductance อยู่ที่ประมาณ 1.3 mH คำนวณหาค่า Capacitance โดยแทนค่า L = 1.3mH, ค่า  = 3.14, ค่า f = 125kHz คำนวณได้ค่า Capacitance = 1.2nF ค่าที่ใช้อาจเป็นค่าใกล้เคียงที่สามารถหาได้ กรณีนี้ผู้เขียนใช้ค่า 1nF หากค่า Inductance ของท่านไม่ใช่ 1.3mH ท่านต้องทำการคำนวณหาค่า Capacitance ใหม่ ตามสมการข้างต้น ขั้นตอนต่อไปให้นำอุปกรณ์มาประกอบลงบนแผ่นปริ๊นท์อเนกประสงค์หรือแผ่นปริ๊นท์ไข่ปลา ตามวงจรรูปที่ 12

รูปที่ 11 สายอากาศที่ทำจากขดลวดทองแดง

รูปที่ 12 วงจรที่ใช้ในโครงงาน

จากวงจรผู้เขียนเลือกใช้บอร์ด Arduino Nano U1 ในการควบคุมการส่งข้อมูล และในโครงงานนี้เราไม่สามารถหาไมโครชิปขนาดเล็กที่กินไฟน้อยๆ เหมือนแท็กจริงได้ จึงจำเป็นต้องมีภาคจ่ายไฟให้กับวงจรสร้างขึ้นมา โดยภาคจ่ายไฟใช้ถ่านกระดุมขนาด 3 โวลต์อนุกรมกัน 2 ตัว จะได้แรงดันสำหรับไฟเลี้ยง 6 โวลต์ ควบคุมการจ่ายไฟโดยปิด เปิดสวิตช์ SW1 สำหรับภาคส่งสัญญาณใช้ทรานซิสเตอร์ Q1 เบอร์ BC547 ในการ Short และ Open circuit ที่สายอากาศ นอกจากนี้ยังมี LED จำนวน 3 ดวงไว้สำหรับแสดงผลว่า ตอนนี้ส่งรหัสตัวไหนออกไป สามารถเลือกรหัสที่จะส่งได้จากสวิตช์ SW2 ประกอบอุปกรณ์ลงบนแผ่นปริ๊นท์ไข่ปลา ยกเว้น LED และสวิตช์ โดยให้สายอากาศอยู่ด้านล่าง ตามรูปที่ 13 เสร็จแล้วเจาะรูกล่องพลาสติก แล้วยึด LED และสวิตช์ ตามรูปที่ 14

รูปที่ 13 การประกอบอุปกรณ์ลงบนปริ๊นท์ไข่ปลา

รูปที่ 14 เจาะรูกล่องพลาสติกพร้อมยึดอุปกรณ์

บัดกรีสายไฟเพื่อเชื่อมต่ออุปกรณ์บนปริ๊นท์ไข่ปลากับอุปกรณ์บนกล่องพลาสติกให้ถูกต้องตามวงจร ส่วนของถ่านกระดุม เมื่อบัดกรีสายไฟเสร็จแล้วให้ใช้ฉนวน เช่น เทปพันสายไฟหุ้มไว้ ป้องกันการ Short circuit ดังรูปที่ 15

รูปที่ 15 บัดกรีสายไฟเชื่อมต่อวงจร

โหลดโปรแกรมให้กับบอร์ด Arduino Nano โดยสามารถดาวน์โหลดโค้ดทั้งหมดได้ที่ http://electronics.se-ed.com/download จากนั้นเปิดโปรแกรมขึ้นมาโดยใช้ Arduino IDE และแก้ไขในส่วนของรหัสที่ต้องการส่ง ในโค้ดตัวอย่างนี้ผู้เขียนได้ตั้งให้สามารถส่งได้ 3 รหัส ได้แก่ 72005419C5, 0123456789 และ ABCDEFABCD ในบรรทัดที่ 9, 10 และ 11 ของโค้ดตัวอย่าง ดังรูปที่ 16 จะเห็นว่ารหัสตัวชุดแรกเป็นรหัสเดียวกันกับแท็กต้นแบบ ซึ่งท่านสามารถแก้ให้เป็นรหัสของตัวเองได้ นอกจากนั้นยังสามารถตั้งรหัสได้เพิ่มเติมจากที่ผู้เขียนทำไว้มากเท่าที่ Flash ของเจ้า Arduino Nano ของท่านจะเต็มเลยทีเดียว  (Soure Code Arduino สำหรับโครงงาน )

รูปที่ 16 ส่วนของโค้ดที่สามารถแก้ให้เป็นรหัสที่ต้องการได้

เมื่อทำการแก้รหัสที่จะส่งและจัดการโหลดโปรแกรมให้บอร์ด Arduino Nano แล้ว ให้จัดการประกอบบอร์ดลงในกล่องพลาสติกและขันน็อตปิดฝาให้เรียบร้อย 

การทดสอบ

การทำงานของโค้ดตัวอย่างที่ผู้เขียนทำไว้คือ หลังจาก ปิดสวิตช์ SW1 เพื่อจ่ายไฟเลี้ยงให้กับวงจร แท็กจะส่งรหัสชุดแรกออกมา พร้อมกับ LED1 ติดสว่าง เมื่อกดสวิตช์ SW2 แท็กจะส่งรหัสชุดที่ 2 ออกมาพร้อมกับ LED2 ติดสว่าง เมื่อกดสวิตช์ SW2 อีกครั้งแท็กจะส่งรหัสชุดที่ 3 ออกมาพร้อมกับ LED3 ติดสว่าง เมื่อกด SW2 ไปเรื่อยๆ แท็กจะวนส่งรหัสที่ตั้งไว้ออกมาพร้อมกับแสดงผลทางหลอด LED เพื่อให้ผู้ใช้ทราบว่าตอนนี้กำลังส่งรหัสชุดไหนออกมา

การทดลอง เริ่มจากการทำตามขั้นตอนการสร้าง ข้อที่ 1 ก่อน เพื่อให้สามารถดูรหัสที่แท็กส่งออกมาทางจอคอมพิวเตอร์ได้ หลังจากนั้น ปิดสวิตช์ SW1 เพื่อจ่ายไฟเลี้ยงให้กับวงจร จะเห็น LED1 ติดสว่าง แล้วนำแท็กเข้ามาใกล้ๆ เครื่องอ่าน ดังรูปที่ 17 จะเห็นรหัสชุดแรกแสดงที่หน้า Serial Monitor เมื่อกดสวิตช์ SW2 วนไปเรื่อยๆ ก็จะเห็นรหัสที่เก็บไว้ในแท็กวนส่งออกมา ดังรูปที่ 18

รูปที่ 17 อ่านรหัสจากแท็กที่สร้างขึ้น

รูปที่ 18 รหัสจากแท็กที่สร้างขึ้น

 

นอกจากทดสอบกับคอมพิวเตอร์แล้ว ผู้เขียนยังได้นำแท็กที่สร้างขึ้นไปทดสอบกับประตูเข้าออกที่พักที่ผู้เขียนอาศัยอยู่ ผลปรากฏว่าผู้เขียนสามารถเข้าออกได้ตามปกติ ท่านสามารถทำแล้วติดไว้ในรถ เผื่อวันไหนลืมนำคีย์การ์ดมาด้วยก็สามารถใช้สิงประดิษฐ์จากโครงงานนี้ใช้แทนได้

รายการอุปกรณ์

ตัวต้านทาน

R1-   1k    5           ตัว 

ตัวเก็บประจุ

C1-     1 nF 50V เซรามิก    1     ตัว

อุปกรณ์สารกึ่งตัวนำ

LED1- LED3       แอลอีดีสีแดง 3 มม            3      ตัว

Q1-       BC547          1           ตัว

อื่นๆ

เครื่องอ่าน RFID 125kHz    1          ตัว

Arduino Nano       1         ตัว

สวิตช์ปิด เปิด        1          ตัว

สวิตช์กดติด ปล่อยดับ          1         ตัว

ขดลวดทองแดง          1         ตัว

แบตกระดุม 3 โวลต์     2     ตัว

แผ่นปริ๊นท์อเนกประสงค์         1        แผ่น

กล่องพลาสติก         1       กล่อง

หมายเหตุ ซอร์สโค้ดที่ใช้งานร่วมกับวงจรสามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com/download

 

 

Leave a Comment