مهندس موفق الکترونیک

اتصال RFID به میکروکنترلر STM32

در این آموزش، قصد داریم سیستمی طراحی کنیم که بتوانیم با استفاده از آن کارت‌های RFID را به کمک RFID reader و میکروی STM32 بخوانیم.

اتصال RFID به میکروکنترلر STM32

RFID مخفف عبارت Radio Frequency Identification است. همان طور که از نام آن می‌توان حدس زد، در این کارت‌ها اطلاعات با استفاده از امواج فرکانس رادیویی خوانده می‌شوند. از این کارت‌ها در بسیاری از سیستم‌های احراز هویت مثلا در پارکینگ‌های طبقاتی، پرداخت عوارض، حفظ اطلاعات پرونده‌ی بیماران در بیمارستان‌ها و … استفاده می‌شود.

در این پروژه ما از ماژول EM-18 RFID به عنوان reader استفاده می‌کنیم و ID منحصر به فرد یک RFID tag را با کمک میکروکنترلر STM32F103C8 می‌خوانیم.

آنچه که در ادامه نیاز خواهیم داشت:

اما قبل از اینکه وارد چگونگی نحوه‌ی اتصال RFID با STM32 شویم، خوب است که قدری بیشتر درباره‌ی RFID tagها و RFID readerها صحبت کنیم.

RFID tag

این تگ‌ها از یک میکروچیپ و یک آنتن کویل (سیم‌پیچ) تشکیل شده‌اند و می‌توانند با نزدیک‌ترین reader (کارت‌خوان) که در مجاورتشان قرار گیرد، تبادل داده داشته باشند. انواع مختلفی از RFIDها با سایزهای متنوع و مختلف در بازار موجود می‌باشند و معمولا عملکرد اغلب آنها مشابه هم است. به جز برخی که به منظور برآوردن مقاصد بخصوص طراحی می‌شوند و فرکانس ارتباطی آنها با بقیه متفاوت است. ما در اینجا از 125Khz Passive RFID استفاده می‌کنیم که قادر است یک ID منحصر به فرد را در خود نگه داشته و مبادله کند.

اتصال RFID به میکروکنترلر STM32

اگر این کارت‌ها را در مقابل نور بگیرید، می‌توانید میکروچیپ و کویلی که در داخل آنها تعبیه شده است را ببینید.

اتصال RFID به میکروکنترلر STM32

این نکته را هم خوب است بدانید که به طور کلی دو نوع RFID tag داریم، فعال (active) و غیرفعال (passive).

نوع پسیو، پاور مورد نیاز خود را از میدان مغناطیسی‌ای دریافت می‌کند که reader (مثلا EM-18) تولید می‌کند. سپس از این پاور استفاده می‌کند تا میکروچیپ درون خود را فعال کند. میکروچیپ هم پس از فعال شدن داده‌ی خود را برای reader ارسال می‌کند.

اما نوع اکتیو RFIDها خود منبع پاور جداگانه‌ای نیاز دارند و می‌توانند تا ظرفیت 1MB داده را برای خواندن یا نوشتن مبادله کنند.

مطلب پیشنهادی:  کتابخانه CMSIS بخش دوم

EM-18 RFID Reader

هر RFID یک شناسه (ID) منحصر به فرد دارد که در درون میکروچیپ آن تعبیه می‌شود و با استفاده از RFID reader قابل دسترسی است. EM-18 یکی از ماژول‌های مشهور کارت‌خوان است که آنتن تعبیه شده درون آن در فرکانس 125KHz کار کرده و منبع تغذیه‌ی مورد نیاز آن یک منبع ۵ ولت است که هم دارای پورت خروجی سریال و هم دارای پورت خروجی weigand است. ابعاد آن بین ۸ تا ۱۲ سانتی‌متر است. پارامترهای ارتباط سریال آن به این ترتیب هستند؛ 9600bps ،8data bits و 1stop bit.

از این ماژول در سیستم‌های بسیاری مانند موارد زیر استفاده می‌شود.

  • سیستم حضور و غیاب مبتنی بر RFID
  • سیستم‌های امنیتی
  • ماشین‌های رای‌گیری
  • باجه‌های پرداخت عوارض در خیابان‌ها

خروجی این ماژول دارای فرمت 12digit ASCII است. ۱۰ رقم اول شماره‌ی آن کارت و ۲ رقم آخر حاصل XOR بیت‌های ID هستند. کاربرد این دو رقم آخر در بررسی و کشف خطا است.

اتصال RFID به میکروکنترلر STM32

اتصال RFID به میکروکنترلر STM32

به عنوان مثال فرض کنید شماره‌ی خوانده شده از روی کارتی 0200107D0D62 باشد. آنگاه داریم؛

«۰۲» پیش شماره‌ی کد است.

«00107D0D» اگر تبدیل به دسیمال شود برابر است با ۱۰۸۰۵۸۹.

و ۶۲ حاصل این عبارت است :  02XOR 00 XOR 10 XOR 7D XOR 0D

بنابراین ID این کارت به این ترتیب خواهد بود. ۰۰۰۱۰۸۰۵۸۹

پایه‌های EM-18

اتصال RFID به میکروکنترلر STM32

این ماژول دارای ۹ پایه است. از این ۹ پین، ۲ پین معمولا متصل نمی‌شوند بنابراین در عمل ما ۷ پایه داریم که باید آنها را به میکرو متصل کنیم. این پایه‌ها و توضیحات هر کدام را در جدول زیر می‌توانید ببینید.

اتصال RFID به میکروکنترلر STM32

ویژگی‌های ماژول EM-18

  • حداکثر بورد خواندن اطلاعات: ۱۰ سانتی‌متر
  • دمای کاری: از ۰ تا ۸۰ درجه سانتی‌گراد
  • پارامتر ارتباط سریال: ۹۶۰۰ بیت بر ثانیه
  • جریان مصرفی: کمتر از ۵۰ میلی‌آمپر
  • فرکانس کاری: ۱۲۵ کیلوهرتز
  • ولتاژ کاری: ۵ ولت

نمودار مدار و اتصالات

اتصال RFID به میکروکنترلر STM32

اتصال RFID به میکروکنترلر STM32

اتصال STM32F103C8 و LCD

اتصال RFID به میکروکنترلر STM32

اتصال STM32F103C8 و EM-18

اتصال RFID به میکروکنترلر STM32

نوشتن برنامه‌ی میکرو برای خواندن اطلاعات RFID

در آموزش‌های قبلی، نحوه‌ی پروگرم کردن STM32 به وسیله‌ی USB را با هم آموخته‌ایم. بنابراین برای این پروژه به پروگرمر FTDI نیاز نداریم. کافیست از طریق پورت USB میکرو را با PC متصل کرده و با استفاده از ARDUINO IDE آن را پروگرم کنیم. در ادامه خواهید دید که این کار بسیار ساده است.

  1. ابتدا کتابخانه‌‌های مربوط به نمایشگر LCD را به کد اضافه کرده و پین‌های متصل به آن را نیز مشخص می‌کنیم.
#include <LiquidCrystal.h>                                              
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  1. سپس وارد بخش ()void setup می‌شویم.
مطلب پیشنهادی:  واحد کنترل اینتراپت بخش دوم(NVIC)

مود نمایشگر LCD را روی ۲*۱۶ و بادریت  ارتباط سریال را روی ۹۶۰۰ و پین A10 تنظیم می‌کنیم. (این پورت اولین پورت ارتباط سریال میکرو (RX1) است که به ماژول EM-18 متصل می‌شود)

 lcd.begin(16, 2);                 
 Serial1.begin(9600);              
 pinMode(PA10,INPUT);
  1. پیام welcome را برای نمایش شروع به کار LCD تعیین می‌کنیم و تنظیم می‌کنیم که پس از چند لحظه‌ی کوتاه پاک شود.
lcd.print("CIRCUIT DIGEST");       //Prints at LCD display
 lcd.setCursor(0, 1);               //Set courser to second line
lcd.print("RFID WITH STM32");      //Prints at LCD display
 delay(5000);                       //Delay for 5 Seconds
 lcd.clear();                       //Clears LCD display
 lcd.setCursor(0,0);                //Sets cursor at First Line
 lcd.print("RFID TAG NO:");         //Prints at LCD display
lcd.setCursor(0,1);                //Sets cursor at Second line
  1. در بخش ()void loop، زمانی که داده‌ها توسط کارت‌خوان از کارت خوانده شدند و روی پین ارتباط سریال میکرو قرار گرفتند، بیت به بیت ذخیره شده و بر روی LCD نمایش داده می‌شوند.
{   
   while(Serial1.available() && count < 12)         
  {

     RFID[count] = Serial1.read();                 
     count++;

     lcd.print(RFID[count]);                        

     if (count==12)
              {
                   lcd.print("             ");
                   count = 0;                         
                   lcd.setCursor(0, 1);               
                }
 }
}

تنها کاری که حالا باید انجام دهید این است که کد کامل را بر روی میکروی خود بارگذاری کرده و سیستم را راه‌اندازی کنید. حال اگر هر کارت RFID را به ماژول کارت‌خوان نزدیک کنید، خواهید دید که ID آن بر روی LCD  نمایش داده می‌شود.

اتصال RFID به میکروکنترلر STM32

کد کامل این پروژه و ویدئویی از انجام مراحل بالا را هم برای شما قرار داده‌ایم که می‌توانید در صورت علاقه‌مندی ببنید.

کد

//Interfacing EM-18 RFID READER MODULE with STM32F103C8
//Circuit Digest
#include <LiquidCrystal.h>                                               //Library for using LCD display functions
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to STM32F103C8
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);                                //Initialize the LCD display
int count = 0;          
char RFID[12];                                                             //Arrary for storing 12 characters of ID


void setup()
{
lcd.begin(16, 2);                  // setting LCD as 16x2 type
Serial1.begin(9600);               //begins serial communication at 9600 baud rate
pinMode(PA10,INPUT);               //Set PA10 as input pin from EM-18
lcd.print("CIRCUIT DIGEST");       //Prints at LCD display
lcd.setCursor(0, 1);               //Set courser to second line
lcd.print("RFID WITH STM32");      //Prints at LCD display
delay(5000);                       //Delay for 5 Seconds
 lcd.clear();                       //Clears LCD display
 lcd.setCursor(0,0);                //Sets cursor at First Line
 lcd.print("RFID TAG NO:");         //Prints at LCD display
 lcd.setCursor(0,1);                //Sets cursor at Second line
}


void loop()
{    
while(Serial1.available() && count < 12)          // While loop to read 12 characters and store them in input array
{
RFID[count] = Serial1.read();                  //storing 12 characters one by one
    count++;
    lcd.print(RFID[count]);                         //showing 12 characters on LCD one by one


if (count==12)
    {
lcd.print("             ");
count = 0;                          // once 12 characters are read get to start and wait for second ID
lcd.setCursor(0, 1);                //move courser to start.
}
}
}

ویدئو

مطلب پیشنهادی:  معرفی CMSIS

امیدواریم آموزش «اتصال RFID به میکروکنترلر STM32» برای شما مفید واقع شده باشد. در ادامه پیشنهاد می‌کنیم دیگر آموزش‌های STM32 را نیز مطالعه کنید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *