[POP-XT] RFID/NFC Interfacing with POPBOT-XT

       48070_513973988660210_2045640813_n

เครื่องอ่าน NFC/RFID ที่เราจะติดต่อกันนี้ใช้ชิปเบอร์ยอดนิยม PN532 ซึ่งปกติชิปตัวนี้จะอยู่ในเครื่องโทรศัพท์สมาร์ทโฟนที่ติดตั้ง NFC  โดยจะทำหน้าที่ทั้งอ่านเขียนการ์ด รวมถึง สื่อสารกันระหว่างเครื่องโทรศัพท์ที่มี NFC ด้วยกัน   เครื่องอ่าน NFC/RFID นี้จะมาพร้อมขดลวดเสาอากาศย่านความถี่ 13.56MHz  ซึ่งใช้งานได้อย่างดีกับการ์ด Mifare Classic ไอซี PN532 ออกแบบมาให้สื่อสารให้ไมโครคอนโทรลเลอร์ได้หลายรูปแบบไม่ว่าจะเป็นการสื่อสารอนุกรม, การสื่อสารแบบ SPI หรือ I2C บัส  โดยในที่นี้จะเลือกใช้การสื่อสารแบบ I2C บัสกับ POP-BOT XT ซึ่งต้องขอบคุณ Ladyada/adafruit (http://learn.adafruit.com/adafruit-pn532-rfid-nfc/arduino-library) และ เวปไซต์ Elechouse http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2205 สำหรับไลบรารี่ที่ช่วยให้การติดต่อกับเครื่องอ่านเป็นเรื่องง่าย

การเชื่อมต่อ

31573_513978185326457_988129103_n

จากรูปเป็นการเชื่อมต่อบอร์ด POP-BOT XT เข้ากับเครื่องอ่าน NFC/RFID จะเชื่อมต่อผ่านบอร์ด JCON-PORT4 เพื่อสะดวกในการต่อ และไม่ต้องตัดสายสัญญาณ สำหรับผู้ที่มีประสบการณ์แล้ว อาจเลือกใช้การตัดสายบัดกรีเข้าที่เครื่องอ่านโดยตรงเลยก็ได้  โดยขาที่เชื่อมต่อมี 4 ขาคือ  +5V SDA SCL GND

ติดตั้งไลบรารี่

ไลบรารี่ สามารถดาวน์โหลดได้ที่ http://www.elechouse.com/elechouse/images/product/PN532%20NFC%20Module/PN532_NFC_elechouse.rar  หลังจากแตกไฟล์แล้วให้นำไปเก็บไว้ในโฟลเดอร์ Arduino/libraries โดยอาจจะสร้างเป็นโฟลเดอร์ชื่อ nfc ขึ้นมาก็ได้

538010_513981978659411_1876732929_n

  ตัวอย่างโปรแกรม

//ไลบรารี่สำหรับการติดต่อกับเครืองอ่าน NFC และ RFID
#include <nfc.h>
// ไลบรารี่สำหรับหุ่นยนต์ POPBOT-XT
#include <popxt.h>

NFC_Module NFC;                                // ใช้คลาส NFC
unsigned long versiondata;
void setup(){
  glcdMode(3);                                 // จอแสดงผลแนวนอน        
  NFC.begin();
  versiondata = NFC.get_version();             // ตรวจสอบเวอร์ชั่น 
  if (!versiondata) {
    setTextColor(GLCD_RED);
    glcd(1,0,"Didn't find PN53x board");       // แจ้งข้อความถ้าตรวจไม่พบเครื่องอ่าน 
    while (1); // halt
  }
  setTextSize(2);
  setTextColor(GLCD_WHITE);glcd(0,0,"NFC Reader");  
  setTextSize(1);
  setTextColor(GLCD_BLUE);                     // แสดงเวอร์ชั่น
  glcd(2,0,"Version%d.%d",(versiondata>>16)&0xFF,(versiondata>>8)&0xFF);
  /* Set normal mode, and disable SAM */
  NFC.SAMConfiguration();                      //กำหนดโหมดการทำงาน
}
void loop(){
  byte BUF[32],STA;
  STA = NFC.InListPassiveTarget(BUF);          //อ่านค่า NFC เก็บในบัฟเฟอร์
  if(STA && BUF[0] == 4){                      // ตรวจสอบขนาดว่าเป็น mifare หรือไม่
    setTextColor(GLCD_SKY);
    glcd(4,0,"UUID Size %d Byte",BUF[0]);      // แจ้งขนาด
    setTextColor(GLCD_GREEN);glcd(6,0,"UUID:");  
    for(int i=0; i<BUF[0]; i++){               // นำค่ารหัสที่อ่านได้จากการ์ดหรือแท๊กมาแสดง 
      setTextColor(GLCD_YELLOW);glcd(6,5+(i*4),"%d ",BUF[i+1]);
    }
  }
}

408676_513984828659126_1304524482_n

 
ผลลัพธ์การทำงาน
ตัวอย่างนี้จะเป็นการอ่านค่าจากเครื่องอ่าน ตรวจสอบดูว่ามีเครื่องอ่านเชื่อมต่ออยู่หรือไม่ ถ้ามีการเชื่อมจะแสดงเวอร์ชั่นของชิป จากนั้น จะเป็นการอ่านค่าการ์ดมาเก็บไว้ในบัฟเฟอร์ ถ้าตรวจพบว่าการ์ดมีรูปแบบเป็น 4 ไบต์ตามมาตรฐานของ Mifare ให้นำค่ามาแสดงที่หน้าจอ GLCD
Facebook Comments Box