โปรเจคแรกกับ arduino – RFID access control doorlock with Arduino

Posted by | December 10, 2008 | Tutorial | 18 Comments

กระแส arduino ช่วงนี้กำลังฮิต ผมหาโปรเจค arduino ง่ายมาลองใช้งานบ้างดีกว่า ในตอนนี้ผมทดลองประยุกต์ใช้งานง่ายๆ กับ RFID มาใช้งาน เผื่อเพื่อนสมาชิกจะมีไอเดีย ไปประยุกต์ต่อบ้าง

มารู้จัก RFID กันก่อน

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

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

ทดลองใช้ RFID เพื่อควบคุมการเปิดปิดประตู

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

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

  1. ID-12 RFID Reader module ตัวอ่านค่า RFID tag สนใจหาซื้อจาก thaieasyelec.com
  2. Arduino board ทำเอง หรือ จาก ayarafun product :-D
  3. RFID-tag หาซื้อขากบ้านหม้อครับ ได้ราคา โอเคสุด
  4. Char LCD Display 16×2 หาได้ทั่วไปครับ
  5. สายไฟเล็กน้อย
  6. บอร์ด Relay ใช้ เปิด-ปิด ไฟเข้า magnetic doorlock

บอร์ด arduino

ตัวอย่างการแสดงผล หน้าจอ lcd16x2

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

การทำงานของ ayarafun access system

โปรเจคนี้หัวใจหลักอยู่ที่ตัวอ่าน RFID กับ ส่วนสมอง Arduino โดย

– RFID Module จะอ่านข้อมูลจาก Tag ส่งเป็น serial ไปยัง Arduino board
– ส่วนตัว Arduino จะรับ packet ข้อมูลทาง Software Serial มาตรวจสอบ(checksum) ส่ง report ออก serial เข้าไปยังคอมพิวเตอร์ และ ตรวจสอบกับฐานข้อมูล ถ้ามีตรงกันเอาชื่อ ออกมาแสดงผลผ่าน LCD และเปิดประตู

นี้เป็นขั้นตอนการทำงานของระบบที่ออกแบบนะครับ จะต้องแสดงคนใช้งานล่าสุด(last access) ของระบบด้วย เผื่อว่า ใครทำอะไรไปจะได้ เรียกตัวถูก พอดีจอที่ใช้ 2 บรรทัด ถ้าจอ 4 บรรทัด อาจจะเพิ่มเป็นแสดง คนใช้งานล่าสุดเพิ่มอีก 2 บรรทัด

ถ้าเจอ id เปิดประตู update ชื่อคนที่ acesss คนสุดท้ายที่หน้าจอ
ดังรูป

Welcome
member

และกลับไปหน้าจอปกติ

insert key
last: member

แต่ถ้าไม่เจอ ก้อจะขึ้นว่า

error!!
can not access

และกลับไปยังหน้าจอ

insert key
last unknow

โดยโปรแกรมยังไม่ได้ มีวิธีการบันทึก ID จากภายนอก :D ผมใช้วิธี hardcode เข้าไปในส่วน source code เลย โดยผมโกงเอาให้ Arduino จะ report code RFID ผ่าน serial แล้วท่านอยากเก็บ ID นี้ ก้อทำการก๊อบปี้ใส่ไว้ใน firmware

Structure ที่ใช้เก็บ ชื่อสมาชิก และ ID Card เอาไว้ เป็นดังนี้

struct member {
const char* name;
const char code[5];
};

อยากให้มี Filed อื่นเพิ่มได้ครับ ชื่อเล่น เบอร์โทร :D ก้อเพิ่มเข้าไปในส่วนนี้ล่ะครับ

วิธีการบันทึก id กรอกข้อมูลลงใน struct ที่ Header ของโปรแกรมดังตัวอย่าง

member electoday[] = {
{ “nooknick”, {54, 0, 157, 107, 114} },
{ “wlasoi”, {54, 0, 157, 0, 191} },
{ “chang”, {54, 0, 157, 74, 142} }
}

ขั้นตอนการสร้าง
ประกอบวงจรต้อง diagram นี้ครับ

LCD4bit Arduino
rs pin 12
rw pin 11
enable pin 10
d0 pin 5
d1 pin 4
d2 pin 3
d3 pin 2
RFID Module Arduino
VCC VCC
D0 pin 8
GND GND

compile และ upload sketch นี้นะครับ เป็น code ตัวอย่างยังไม่ได้ จัดฟอร์ม ให้พร้ิอมพัฒนาต่อไป

มาดูการทำงานของระบบ prototype กันบ้าง อย่างที่ย้ำยังไม่สมบูรณ์ครับ แต่พอเพียงกับการใช้งาน ตอนนี้ ผมใส่กล่องไปทดสอบ มาเป็นเดือน ยังไม่ hang เลย :-D

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

หวังว่าท่านได้ ไอเดีย เอาไปทำอะไร สร้างสรรค์ใหม่ กับ RFID กันบ้างนะครับ

ตัวอย่าง Sourcecode ใช้งาน download -> rfid_doorlock

About chang

  • http://orangejasmin.multiply.com Orange Jasmin

    แวะมาเยี่ยมจ้า ย้ายบ้านเหรอ ทำเว็บสวยดีนี่นา ^^

  • Anonymous

    เอ่อ พี่ครับหากเราใช้ IC เบอร์ cc1110 มาทำระบบ RFID

    ในขั้นตอนการเขียนโปรแกรม เพื่อเช็ค ID(เป็นเลขฐานสิบหก) จำนวนแปดไบต์
    จะมีวิธีเขียนยังงัยหรอครับ ผมเขียนไม่ได้ ไม่รู้ใช้ register ตัวไหนอ่ะครับ
    พอจะแนะแนวได้มั้ยครับ

  • ra

    น่าสนใจมากๆครับ ไม่ทราบว่า RFID reader สามารถแปลงให้แทนที่จะอ่านค่าในบัตร แต่ทำหน้าที่เหมือน detect ว่าบัตรออกจากตัว reader ได้หรือป่าวครับผม

  • http://www.ayarafun.com chang

    นิรนาม :

    เอ่อ พี่ครับหากเราใช้ IC เบอร์ cc1110 มาทำระบบ RFID

    ในขั้นตอนการเขียนโปรแกรม เพื่อเช็ค ID(เป็นเลขฐานสิบหก) จำนวนแปดไบต์
    จะมีวิธีเขียนยังงัยหรอครับ ผมเขียนไม่ได้ ไม่รู้ใช้ register ตัวไหนอ่ะครับ
    พอจะแนะแนวได้มั้ยครับ

    cc1110 เป็น mcu รวมกับ RF ในตัวใช่ไหมครับ

    ถ้าผมเข้าใจไม่ผิค คงจะเหนื่อย นิดหน่อยนะครับ ผมไม่ได้ทำเกี่ยวกับ RF มากนักนะครับ อาจจะอธิบายได้ไม่ดี

    ผมว่า CC1110 มันไม่ได้ ออกแบบไว้อ่าน RFID นะครับตรงนะครับ ที่ลอง อ่าน datasheet เหมือนข้อมูล อาจจะ เข้ามาทาง uart ของ mcu ครับ(ไม่แน่ใจนะ แต่แน่ๆ ถามคนเคยใช้)

    ในขั้นแรก น่าจะลองกับ tag มาตราฐาน แล้วทำให้ cc1110 อ่านค่า ID ออกมาให้ได้ก่อนครับ
    tag มาตราฐาน จะใช้สัญญาณช่วง 125kHz ให้เข้าใจ วิธีการทำงานของ RFID สักก่อน

    แล้วค่อยลองทำ tag เองครับ เลือกช่วงคลืนที่จะใช้ และออกแบบ protocol ในการรับส่งข้อมูล

  • http://www.ayarafun.com chang

    ra :

    น่าสนใจมากๆครับ ไม่ทราบว่า RFID reader สามารถแปลงให้แทนที่จะอ่านค่าในบัตร แต่ทำหน้าที่เหมือน detect ว่าบัตรออกจากตัว reader ได้หรือป่าวครับผม

    ตัว Reader ที่ใช้ เป็นแค่ตัวรับอย่างเดียวเลยครับ ไม่มีตัวส่ง คงเอา modify เป็นตัวส่ง ID ไม่ได้ครับ

    ลักษณะที่ท่านว่ามันเป็น active tag RFID

    คงต้องลอง ทำวงจรตัวรับส่งสัญญาณ RF เองครับ ต้องเขียนโปรแกรม ให้สังสัญญาณตาม protocol ของ RFID ของเจ้านั้นๆ ครับ

  • salit

    สวัสดีครับผมขอคำแนะนำหน่อยนะครับ ตอนนี้กำลังจะทำโรเจคทำเครื่องอ่าน/เขียน rfid เลยยากรู้เกี่ยวกับอุปกรณ์และอยากได้วิธีการทำด้วยนะครับถ้าหากว่าใครรู้ ช่วยบอกผมด้วยนะครับ หรือติดต่อที่เมลล์ salit_nick@hotmail.com

  • salit

    ตัวนี้ไม่ต้องใช้ ic max232 หรือครับ

  • http://www.ayarafun.com chang

    @salit

    ตัวนี้ ผมต่อเข้า mcu เลยครับ ระดับไฟ มันต่อเข้ากันได้เลยครับ

    ถ้าต่อเข้า คอมพิวเตอร์ อาจจะต้องมี ตัว max232

  • dek cs

    ช่วยแนะนำโปรเจ็คที่เกี่ยวข้องกับ rfid ให้ทีคะ เพราะตอนนี้คิดไม่ออก

    • http://www.ayarafun.com chang

      ฮ่าๆ คิดไม่ออกเหมือนกันครับ RFID หมดมุกแล้ว
      คุณน้องจะเอาไปทำอะไรล่ะ

  • JANE

    มีเบอร์โทรติดต่อไหมครับ(หรืออีเมส์ก็ได้ครับ)
    ขอคุณมากเลยครับยอมงานพี่มากเลยๆๆๆๆๆๆๆๆๆๆๆ

    • http://www.ayarafun.com chang

      ติดต่อ email หน้า contact ครับ

  • Ice Iiice

    พี่ครับ Sourcecode โหลดไม่ได้แล้วอ่ะครับ ผมอยากนำไปต่อ ยอดอ่ะครับ

    • http://www.ayarafun.com ChANg

      แก้ไข Link ให้แล้วนะครับ

  • I’KIK INDYROCK

    พี่ค่ะ สามารถบันทึกเวลาการเข้าออกได้มั๊ยค่ะ 

    • http://www.ayarafun.com chang

      ทำได้หมดล่ะครับ

  • Indy

    Can you speak or understand English?
    I am looking for helper (Programer of RFID TAG).

  • numprick

    สอบถามครับพี่

    แล้วเราจะรู้ค่า RFID TAG ได้อยากไร ครับ

    //we hard code programming database member in rom

    member electoday[] = {
    { “inside”, {-1, -1, -1, -1, -1} },
    { “unknown”, {-1, -1, -1, -1, -1} },
    { “admin” , {13, 0, 88, 178, 131} },
    { “card1″, {54, 0, 157, 107, 114} },
    { “card2″, {54, 0, 157, 0, 191} },
    };