نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • امنیت
  • خواندن و نوشتن تگ های RFID ماژول RC522 برای آردوینو

خواندن و نوشتن تگ های RFID ماژول RC522 برای آردوینو

این پروژه به درخواست یکی از دوستان جهت نصب بر روی درب انبار ساخته شده است. در آینده چندین مورد دیگر به درخواست دوستان و آشنایان ساخته شد. طراحی ساده و قابل اعتماد بود. این دستگاه به این صورت عمل می کند: فقط آن دسته از کارت های RFID را که قبلاً وارد حافظه دستگاه شده اند عبور می دهد.

ویژگی های اصلی کنترل کننده دسترسی:

فرمت کارت های RFID EMmarin 125 کیلوهرتز

میکروکنترلر ATtiny13

تعداد کارت / جا کلیدی - 10.
دکمه "OPEN" معمولاً باز است و در برابر چسبیدن محافظت می شود.
خروجی کنترل قفل، ترانزیستور اثر میدانی با جریان بالا، حالت عملکرد قفل (به طور موقت روشن می شود).

غذا - 12 ولت.
مصرف در حالت آماده به کار - 35 میلی آمپر.
تعداد کارت‌های دسترسی / صفحه کلید - 10 عدد.
طول ارتباط با دکمه "OPEN" 10 متر است.
نوع خروجی کنترل قفل - تخلیه باز (ترانزیستور اثر میدان قدرتمند، جریان تا 2A).

نمودار شماتیک کنترل کننده دسترسی روی کارت های RFID 125 کیلوهرتز (Em-Marin) برای 10 کارت (در میکروکنترلر ATtiny13):

اگر نیاز به کنترل قفل الکترومغناطیسی دارید، باید یک رله خروجی با گروه تماس مورد نیاز نصب کنید.

ظاهر اعتبار سنج RFID مونتاژ شده:

نصب فیوز بیت ها در PonyProg:

عملکرد دستگاه، دانلود فیلم ضبط شده توسط نویسنده.
همچنین یکی از خوانندگان ویدئویی از دستگاه مونتاژ شده منتشر کرده است:

دستورالعمل های برنامه نویسی

حالت عملیاتی - هنگامی که 12 ولت به کنترلر اعمال می شود، LED با فرکانس 1 هرتز چشمک می زند.
حالت برنامه نویسی - LED 2 هرتز چشمک می زند.
هنگامی که دکمه "OPEN" را فشار می دهید، یک سری بوق کوتاه در حین باز شدن قفل به صدا در می آید.

سیگنال های صوتی

1 بوق کوتاه - کارت یا جاکلیدی در حافظه کنترلر ذخیره می شود.
2 بوق کوتاه - کارت یا جاکلیدی قبلاً در حافظه کنترلر ذخیره شده است.
5 بوق کوتاه - از حالت برنامه نویسی خارج شوید.
1 بوق طولانی - حافظه کارت کلید از کنترلر پاک شده است.
بوق های کوتاه مداوم - حافظه کارت/کلید پر است، حداکثر 10 عدد. (نیاز به خاموش شدن کنترلر دارد).

ضبط مستر کارت و زمان باز شدن قفل

1 - کنترلر را خاموش کنید.
2 - دکمه "OPEN" را فشار دهید
3 - در حالی که دکمه را نگه داشته اید، پس از 5 ثانیه برق را به کنترلر وصل کنید. کنترل کننده "BEEPS"، LED با فرکانس 2 هرتز چشمک می زند.
4 - دکمه را رها کنید.
5 - کارت یا جا کلیدی را به منطقه خواندن بیاورید، یک بوق به صدا در می آید، مستر کارت یا جا کلیدی ضبط می شود، در حالی که زمان باز شدن قفل 1 ثانیه ضبط می شود.

6 - نگه داشتن کارت یا جا کلیدی در قسمت مطالعه - سیگنال های صوتی را می خوانیم. مقدار زمان باز شدن قفل مورد نیاز را تعیین می کند، افزایش 1 ثانیه، اما حداکثر 32 ثانیه.
7 - برق کنترلر را خاموش کرده یا 30 ثانیه مکث کنید.

پاک کردن تمام حافظه کارت

1 - حالت عملیاتی
2 - دکمه "OPEN" را فشار داده و در حالی که آن را نگه داشته اید، کارت MASTER یا جا کلیدی را به ریدر بیاورید و نگه دارید، پس از 5 ثانیه یک بوق طولانی به صدا در می آید - حافظه کارت ها / جا کلیدی پاک شده است.
3 - دکمه را رها کنید، کارت یا جاکلیدی را بردارید.

امروز در مورد ماژول RFID RC522 بر اساس تراشه MFRC522 صحبت خواهم کرد. منبع تغذیه 3.3 ولت، محدوده تشخیص تا 6 سانتی متر. طراحی شده برای خواندن و نوشتن برچسب های RFID با فرکانس 13.56 مگاهرتز. فرکانس در این مورد بسیار مهم است، زیرا برچسب های RFID در سه محدوده فرکانس وجود دارند:


  • علامت های باند LF (125-134 کیلوهرتز)

  • برچسب های باند HF (13.56 مگاهرتز)

  • برچسب های باند UHF (860-960 مگاهرتز)

به طور خاص، این ماژول با تگ های محدوده HF، به ویژه با پروتکل MIFARE کار می کند.

برای کار با ماژول، می توانید از کتابخانه استاندارد RFID موجود در Arduino IDE استفاده کنید، اما کتابخانه دیگری نیز وجود دارد که به طور خاص برای این ماژول نوشته شده است - MFRC522 (1 Mb). هر دو کتابخانه بسیار راحت هستند، اما MFRC522 عملکردهای ویژه تری دارد که به شما امکان می دهد کد برنامه حاصل را به حداقل برسانید.

ارتباط

برخی از آنها با مشکل مواجه می شوند - نام پین ها در بیشتر آموزش ها و آموزش ها ممکن است با پین اوت ماژول شما مطابقت نداشته باشد. اگر پین SS در طرح ها نشان داده شده است، اما ماژول شما آن را ندارد، به احتمال زیاد به عنوان SDA علامت گذاری شده است. در زیر یک جدول اتصال ماژول برای متداول ترین بردها ارائه خواهم کرد.

MFRC522 آردوینو اونو آردوینو مگا آردوینو نانو نسخه 3

آردوینو لئوناردو/میکرو

آردوینو پرو میکرو
RST 9 5 D9 RESET/ICSP-5 RST
SDA (SS) 10 53 D10 10 10
MOSI 11 (ICSP-4) 51 D11 ICSP-4 16
میسو 12 (ICSP-1) 50 D12 ICSP-1 14
SCK 13 (ICSP-3) 52 D13 ICSP-3 15
3.3 ولت 3.3 ولت 3.3 ولت استابلایزر 3.3 ولت استابلایزر 3.3 ولت استابلایزر 3.3 ولت
GND GND GND GND GND GND

پین‌های کنترل SS(SDA) و RST در طرح مشخص شده‌اند، بنابراین اگر برد شما با نمونه‌ای که در مثال‌هایم استفاده می‌کنم متفاوت است و از UNO R3 استفاده می‌کنم، پایه‌های جدول را در ابتدای طرح مشخص کنید:


#define SS_PIN 10 #define RST_PIN 9

مثال شماره 1: خواندن شماره کارت

نمونه ای از کتابخانه RFID - cardRead را در نظر بگیرید. داده ها را از کارت ارائه نمی دهد، بلکه فقط تعداد آن را ارائه می دهد که معمولاً برای بسیاری از کارها کافی است.


#include #include #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); // داده های مربوط به شماره کارت در 5 متغیر ذخیره می شود، ما آنها را به خاطر می آوریم تا بررسی کنیم که آیا قبلاً چنین کارتی را خوانده ایم int serNum0. int serNum1; intserNum2; int serNum3; int serNum4; void setup() ( Serial.begin(9600); SPI.begin(); rfid.init(); ) void loop() (if (rfid.isCard()) ( if (rfid.readCardSerial()) ( // اگر (rfid.serNum != serNum0 && rfid.serNum != serNum1 && rfid.serNum != serNum2 && rfid.serNum != serNum3 && rfid.serNum != serNum4) شماره کارت را با شماره کارت قبلی مقایسه کنید ( /* If کارت - جدید است، سپس خوانده شود*/ Serial.println(" ")؛ Serial.println ("کارت پیدا شد")؛ serNum0 = rfid.serNum؛ serNum1 = rfid.serNum؛ serNum2 = rfid.serNum؛ serNum3 = rfid. serNum؛ serNum4 = rfid.serNum؛ //چاپ شماره کارت Serial.println("شماره کارت:"); Serial.print("دسامبر:"); Serial.print(rfid.serNum,DEC); Serial.print(" , "); Serial.print(rfid.serNum,DEC); Serial.print(")، Serial.print(rfid.serNum,DEC); Serial.print(")، Serial.print(rfid. serNum,DEC); Serial.print("); Serial.print(rfid.serNum,DEC); Serial.println(" "); Serial.print ("Hex: ")؛ Serial.print(rfid.serNum ,HEX); Serial .print(")، Serial.print(rfid.serNum,HEX); Serial.pr int(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.println(" "); ) else ( /* اگر قبلاً یک کارت خوانده شده است، فقط نقطه */ Serial.print("."); ) ) ) rfid.halt(); )

طرح آپلود شده، LED پاور روی ماژول روشن است، اما ماژول به کارت پاسخ نمی دهد؟ وحشت نکنید، یا بدوید تا به دنبال نمونه های "درست" کار بگردید. به احتمال زیاد، به سادگی هیچ تماسی روی یکی از پین ها وجود ندارد - سوراخ های روی تخته کمی بزرگتر از ضخامت جامپر هستند، بنابراین ارزش تلاش برای تنظیم مجدد آنها را دارد. آیا LED روی برد روشن نیست؟ جامپری که به 3.3 ولت منتهی می شود را تغییر دهید و مطمئن شوید که به 3.3 ولت روی برد متصل است، تامین برق 5 ولت به راحتی برد شما را از بین می برد.

بیایید بگوییم همه چیز برای شما کار کرد. سپس با خواندن برچسب ها توسط ماژول RFID، موارد زیر را در مانیتور پورت سریال مشاهده خواهیم کرد:


در اینجا من 3 نمره مختلف را خواندم و همانطور که می بینید او هر 3 را با موفقیت خواند.

مثال شماره 2: خواندن داده ها از کارت

بیایید یک گزینه توسعه یافته تر را در نظر بگیریم - نه تنها شماره کارت، بلکه تمام داده های موجود برای خواندن را نیز می خواند. این بار نمونه ای از کتابخانه MFRC522 - DumpInfo را می گیریم.


#include #include #define RST_PIN 9 // #define SS_PIN 10 // MFRC522 mfrc522(SS_PIN, RST_PIN); // ایجاد نمونه MFRC522 void setup() ( Serial.begin(9600); // راه اندازی مانیتور پورت سریال در حالی که (!Serial)؛ // هیچ کاری انجام ندهید تا زمانی که باز شود (برای آردوینو در تراشه ATMEGA32U4) SPI.begin() ; // راه‌اندازی گذرگاه SPI mfrc522.PCD_Init(); // راه‌اندازی ماژول RFID ShowReaderDetails(); // نمایش داده‌های مربوط به ماژول MFRC522 Serial.println(F("PICC را اسکن کنید تا UID، نوع و بلوک‌های داده را ببینید.. ." )); ) void loop() ( // به دنبال کارت جدید if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // انتخاب یکی از کارت ها if (! mfrc522.PICC_ReadCardSerial()) ( return; ) // چاپ داده ها از کارت mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); ) void ShowReaderDetails() ( // دریافت شماره نسخه ماژول بایت v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg(Serial.print); "نسخه نرم افزار MFRC522: 0x")؛ Serial.print(v, HEX); if (v == 0x91) Serial.print(F(" = v1.0"))؛ در غیر این صورت اگر (v == 0x92) سریال .print(F(" = v2.0")); else Serial.print(F(" (نامعلوم)")); Serial.println ("")؛ // هنگامی که 0x00 یا 0xFF دریافت می کنیم، اگر ((v == 0x00) || (v == 0xFF)) (سریال. println(F("هشدار: خرابی ارتباط، آیا MFRC522 به درستی وصل شده است؟") ارتباط ناموفق بود. ;))

اگر مثال قبلی بدون خطا کار می کرد، پس این نیز نباید مشکلی ایجاد کند. اگرچه، گذر مترو که در مثال قبلی شماره کارت را بدون مشکل صادر می کرد، در این مورد با نوع داده نامشخصی بود و ماژول نمی توانست چیزی غیر از شماره کارت را بخواند.

در نتیجه پس از خواندن داده های کارت، نوع، شناسه و داده های آن را از 16 بخش حافظه دریافت می کنیم. لازم به ذکر است که کارت های MIFARE 1K از 16 سکتور، هر سکتور از 4 بلوک و هر بلوک حاوی 16 بایت داده تشکیل شده است.


مثال شماره 3: نوشتن شناسه جدید روی کارت

در این مثال، ما تغییر شناسه کارت (UID) را در نظر خواهیم گرفت. مهم است بدانید که همه کارت ها از تغییر شناسه پشتیبانی نمی کنند. کارت ممکن است قابل نوشتن باشد، اما این فقط به این معنی است که داده ها قابل نوشتن هستند. متأسفانه کارت هایی که در دست من بود از بازنویسی UID پشتیبانی نمی کرد، اما برای هر موردی کد طرح را در اینجا می دهم.


#include #include /* UID جدید را در اینجا تنظیم کنید */ #define NEW_UID (0xDE, 0xAD, 0xBE, 0xEF) #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); Serial.println(F("هشدار: این مثال UID کارت قابل تغییر UID شما را بازنویسی می کند، با احتیاط استفاده کنید!"))؛ برای (بایت i = 0؛ i< 6; i++) { key.keyByte[i] = 0xFF; } } void loop() { if (! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { delay(50); return; } // Считываем текущий UID Serial.print(F("Card UID:")); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); // Записываем новый UID byte newUid = NEW_UID; if (mfrc522.MIFARE_SetUid(newUid, (byte)4, true)) { Serial.println(F("Wrote new UID to card.")); } // Halt PICC and re-select it so DumpToSerial doesn"t get confused mfrc522.PICC_HaltA(); if (! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { return; } // Считываем данные с карты Serial.println(F("New UID and contents:")); mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); delay(2000); }

مثال شماره 4: نوشتن داده ها بر روی کارت

و در نهایت، آنچه ما برای مدت طولانی به آن رسیده ایم - نوشتن داده ها روی کارت. "شیرین" ترین بخش کار با ماژول، توانایی کپی کردن یک نقشه موجود، اضافه کردن چیزی یا تغییر چیزی است، بسیار جالب تر از خواندن آن است.

بیایید یکی از بلوک های داده روی نقشه را تغییر دهیم:


#include #include #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); // کلید را آماده کنید // از کلید FFFFFFFFFFFFFFh استفاده کنید که استاندارد کارت های خالی برای ( بایت i = 0 i< 6; i++) { key.keyByte[i] = 0xFF; } Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write.")); Serial.print(F("Using key (for A and B):")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); } void loop() { // Ждем новую карту if (! mfrc522.PICC_IsNewCardPresent()) return; // Выбираем одну из карт if (! mfrc522.PICC_ReadCardSerial()) return; // Показываем подробности карты Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Проверяем совместимость if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("This sample only works with MIFARE Classic cards.")); return; } // В этом примере мы используем первый сектор данных карты, блок 4 byte sector = 1; byte blockAddr = 4; byte dataBlock = { // Данные, которые мы запишем на карту 0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4, 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, 0x08, 0x09, 0xff, 0x0b, // 9, 10, 255, 12, 0x0c, 0x0d, 0x0e, 0x0f // 13, 14, 15, 16 }; byte trailerBlock = 7; byte status; byte buffer; byte size = sizeof(buffer); // Аутентификация Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Показываем текущие данные сектора Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // Читаем данные из блока Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); // Аутентификация Serial.println(F("Authenticating again using key B...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Записываем данные в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" ...")); dump_byte_array(dataBlock, 16); Serial.println(); status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.println(); // Читаем данные снова, чтобы проверить, что запись прошла успешно Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(F("Checking result...")); byte count = 0; for (byte i = 0; i < 16; i++) { if (buffer[i] == dataBlock[i]) count++; } Serial.print(F("Number of bytes that match = ")); Serial.println(count); if (count == 16) { Serial.println(F("Success:-)")); } else { Serial.println(F("Failure, no match:-(")); Serial.println(F(" perhaps the write didn"t work properly...")); } Serial.println(); // Выводим данные Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }

و در نتیجه، یک نقشه با یک بلوک داده اصلاح شده دریافت می کنیم:


اکنون، با آموختن نحوه خواندن و نوشتن بلوک های داده کارت، می توانید با برچسب هایی که به احتمال زیاد دارید - گذرنامه ها، بلیط های حمل و نقل عمومی - آزمایش کنید. سعی کنید داده‌های این کارت‌ها را بخوانید و بنویسید، چند پاس تکراری هرگز ضرری ندارد، درست است؟)

این همه است، مشترک شوید و نشریات را دنبال کنید. دفعه بعد صحبت خواهم کرد و به شما نشان خواهم داد که چگونه کاراکترهای سفارشی را به یک نمایشگر 1602 کاراکتری استاندارد اضافه کنید و به طور موثر گرافیک را به نمایشگر اضافه کنید.

RFID (شناسایی فرکانس رادیویی) از میدان های الکترومغناطیسی برای شناسایی و ردیابی خودکار برچسب های متصل به اشیاء استفاده می کند. برچسب ها حاوی اطلاعات الکترونیکی ذخیره شده هستند. برچسب های غیرفعال انرژی را از سیگنال های رادیویی از یک خواننده RFID در نزدیکی جمع آوری می کنند. تگ های فعال دارای منبع تغذیه محلی (مانند باتری) هستند و می توانند صدها متر دورتر از خواننده کار کنند. برخلاف بارکد، برچسب نباید در محدوده دستگاه باشد، بنابراین می توان آن را در شی ردیابی شده جاسازی کرد. RFID یکی از روش های شناسایی خودکار و جمع آوری داده ها می باشد.

کاربرد

تگ های RFID در بسیاری از صنایع مورد استفاده قرار می گیرند. به عنوان مثال، یک خواننده RFID که در حین تولید به خودرو متصل است، می تواند برای ردیابی پیشرفت در طول خط مونتاژ استفاده شود. داروهای دارای برچسب را می توان از طریق انبارها ردیابی کرد. کاشت ریزتراشه های RFID در دام، شناسایی حیوانات را ممکن می سازد.

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

تاریخ

در سال 1945، لئون ترمین یک دستگاه شنود برای اتحاد جماهیر شوروی اختراع کرد که امواج رادیویی را با اطلاعات صوتی اضافه شده ارسال می کرد. ارتعاشات صدا در حین ارتعاش بر دیافراگم تأثیر می گذارد، که شکل تشدید کننده را کمی تغییر می دهد، که فرکانس رادیویی منعکس شده را تعدیل می کند. اگرچه این دستگاه یک دستگاه شنود مخفی بود و نه یک برچسب شناسایی، اما پیشروی دستگاه خوان USB RFID در نظر گرفته می شود زیرا توسط امواج صوتی از منبع خارجی فعال می شد. ترانسپوندرها هنوز توسط اکثر هواپیماهای عملیاتی استفاده می شوند. در گذشته، فن آوری مشابه، مانند RFID Reader، به طور منظم توسط متفقین و آلمان در جنگ جهانی دوم برای شناسایی هواپیما استفاده می شد.

دستگاه ماریو کاردولو که در 23 ژانویه 1973 ثبت اختراع شد، اولین پیشرو واقعی RFID مدرن بود زیرا یک گیرنده رادیویی غیرفعال با حافظه بود. دستگاه اصلی غیرفعال بود و با سیگنال بازجویی تغذیه می شد. در سال 1971 به دولت شهر نیویورک و سایر کاربران بالقوه نشان داده شد و شامل یک ترانسپوندر با حافظه 16 بیتی برای استفاده به عنوان دستگاه پرداخت بود. حق اختراع اصلی Cardullo استفاده از فرکانس های رادیویی، صدا و نور را به عنوان یک رسانه انتقال پوشش می دهد.

دامنه استفاده

طرح تجاری اصلی که در سال 1969 به سرمایه گذاران ارائه شد، کاربردهای زیر را برای خواننده RFID نشان داد:

  • استفاده در حمل و نقل (شناسایی وسایل نقلیه موتوری، سیستم پرداخت خودکار، پلاک الکترونیکی، مانیفست الکترونیکی، مسیریابی وسیله نقلیه، نظارت بر کارایی خودرو)؛
  • بانکداری (چک الکترونیکی، کارت اعتباری الکترونیکی)؛
  • پرسنل، دروازه های اتوماتیک، نظارت)؛ صنعت پزشکی (شناسایی، سابقه بیمار).

نمایش اولیه قدرت بازتابی (بازتاب مدوله‌شده) برچسب‌های RFID، چه غیرفعال و چه نیمه غیرفعال، توسط استفن دپ، آلفرد کوئل و رابرت فرایمن در آزمایشگاه ملی لوس آلاموس در سال 1973 انجام شد. سیستم قابل حمل با فرکانس 915 مگاهرتز کار می کرد و از برچسب های 12 بیتی استفاده می کرد. این روش توسط اکثر خواننده های مدرن UHFID و RFID مایکروویو استفاده می شود. در زندگی مدرن، چنین دستگاه هایی تقاضای زیادی دارند.

مشخصات

سیستم RFID از تگ های متصل به اشیاء قابل شناسایی استفاده می کند. هنگام ساخت یک خواننده RFID با دستان خود، باید در نظر داشت که فرستنده-گیرنده های رادیویی دو طرفه، به نام بازپرس یا خواننده، سیگنالی را به برچسب ارسال می کنند و پاسخ آن را می خوانند. برچسب های RFID می توانند غیرفعال، فعال یا غیرفعال باشند. یک برچسب فعال دارای یک باتری داخلی است و به صورت دوره ای سیگنال ID خود را ارسال می کند. باتری غیرفعال (BAP) دارای یک باتری کوچک روی برد است و با حضور یک خواننده RFID فعال می شود. برچسب غیرفعال ارزانتر و کوچکتر است زیرا باتری ندارد. در عوض، تگ از موج رادیویی ارسال شده توسط خواننده استفاده می کند. با این حال، برای اینکه یک برچسب غیرفعال کار کند، باید با سطح توانی حدود هزار برابر قوی تر از انتقال سیگنال روشن شود. این بر تداخل و تشعشع تأثیر می گذارد.

سپتامبر 19, 2013 در 06:32 ب.ظ

بودجه خوان UHF RFID و توسعه آن

  • فناوری های بی سیم

سلام خانم ها و آقایان محترم.
ارزان ترین خواننده UHF RFID یا EPC Gen2 خوان حداقل 200 دلار در خرده فروشی قیمت دارد.

چگونه می توانید یک خواننده UHF RFID از 10 دلار قطعات بسازید و چگونه می توانید از آن بهره مند شوید، در زیر توضیح داده شده است.

اکثر خوانندگان RFID مدرن استاندارد EPC Gen2 از تراشه های تخصصی استفاده می کنند. آنها توسط Impinj، AMS و Phychips تولید می شوند. ارزان ترین تراشه ها حدود 20 دلار در تعداد 1000 قطعه قیمت دارند. خوانندگان RFID فوق العاده هستند: قدرتمند، زیرک و دوربرد - اما گران قیمت.
در بهار سال جاری، مقاله ای با عنوان "خواننده RFID UHF کم هزینه ساده" در اینترنت در مورد نحوه مونتاژ یک خواننده RFID فعال از قطعات رادیویی رایج که در خرده فروشی حدود 5 دلار قیمت دارند، ظاهر شد. به نظر می رسد این ایده ساده است، اما اجرای آن به تازگی محقق شده است. فرض توسعه بر این واقعیت استوار است که اغلب در نزدیکی آنتن باید به آرامی چند علامت را بخوانید و نیازی به پرداخت هزینه زیادی برای خواننده با نرخ آتش 200-500 نیست. علامت در ثانیه بلوک دیاگرام خواننده در تصویر نشان داده شده است.


زیبایی آن در سادگی آن است. اساس یک میکروکنترلر معمولی است که سیگنال های استاندارد EPC Gen2 را روی پایه GPIO تولید می کند که برای نظرسنجی برچسب مورد نیاز است. سیگنال ها به تراشه فرستنده Melexis TH72035 و سپس از طریق کوپلر Johanson 0910CF15B0100 به آنتن منتقل می شوند. گیرنده بر روی یک مقایسه کننده MAX931 طبق طرح زیر مونتاژ می شود.


سیگنال های منطقی از گیرنده به یکی دیگر از پایه های GPIO ریزپردازنده ارسال می شود. ما یک نرم افزار ساده خوان UHF RFID دریافت می کنیم. البته نوشتن یک ریدر RFID نرم EPC Gen2 یک پوند کشمش نیست. اما اگر اهداف را به وضوح تعریف کنید و فقط از زیرمجموعه مناسب پروتکل EPC Gen2 استفاده کنید، کار تا حد زیادی ساده می شود.
نویسندگان پروژه توصیف شده یکی از اهداف توسعه بیشتر آن را قرار دادن تمام اجزای خواننده RFID بر روی یک برد می دانند. اما آیا رفتن در جهت مخالف جالب تر نخواهد بود؟ یعنی خواننده را به ماژول های عملکردی مجزای فیزیکی تقسیم کنید و سپس یک خواننده RFID با مشخصات لازم از ماژول های مختلف بسازید. همه چیز زیر فقط یک ایده است، بدون توضیح دقیق.

واضح است که ماژول اصلی مبتنی بر ریزپردازنده است. احتمالاً باید روی Cortex-M0، خروجی به کانکتورهای UART و USB انجام شود تا بتوان خواننده را کنترل کرد. برای اتصال ماژول فرستنده گیرنده، از یک کانکتور 6 پین استفاده کنید: Rx، Tx، 2 برای برق فرستنده گیرنده، 2 GPIO. تا جایی که خروجی های ریزپردازنده کافی باشد، چنین کانکتورهایی را می توان 2-4 ساخت.
ماژول فرستنده گیرنده مستقیماً یا از طریق یک کابل کوتاه به ماژول ریزپردازنده متصل خواهد شد. شاید لازم باشد چندین نوع ماژول فرستنده گیرنده با قدرت و قیمت متفاوت اما با یک کانکتور ساخته شود. از پایه پنجم کانکتور برای روشن کردن فرستنده و گیرنده استفاده می شود و در صورت لزوم می توان از پایه ششم برای نوعی سنسور استفاده کرد. منطقی است که برد مدار چاپی فرستنده گیرنده را با نیمه سوراخ های انتهایی متالایزه بسازیم. سپس می توان آن را به بردهای مدار چاپی با آنتن های مختلف یا یک برد مدار چاپی با کانکتور کواکسیال SMA لحیم کرد.
بنابراین، با اتصال ماژول ریزپردازنده و ماژول فرستنده گیرنده، یک خواننده RFID دریافت می کنیم. اما فقط به خاطر این، ارزش حصار کردن یک باغ را ندارد. بیایید جلوتر برویم. اجازه دهید به جای فرستنده گیرنده، یک برد با درایور RS422 و سوکت RJ45 (جفت 1 - دریافت، جفت 2 - انتقال، 3 - قدرت، 4 - GPIO) به کانکتور 6 پین ماژول ریزپردازنده وصل کنیم. همان را به فرستنده و گیرنده می چسبانیم. واضح است که اکنون می توان ماژول ریزپردازنده و فرستنده و گیرنده را با استفاده از هر پچ کوردی وصل کرد یا از SCS اداری برای اتصال استفاده کرد. به طور کلی، آنتن را می توان بسیار دور از ماژول ریزپردازنده قرار داد. و بدون کوکس.
خوب، این همه نیست :) RS422 یک اتوبوس است. فرستنده و گیرنده می تواند یک تراشه D-flip-flop را در خود جای دهد. ماژول های فرستنده گیرنده را به صورت سری با پچ کورد وصل کنید. درست است، اگر یک شمارنده سنکرون به جای D-flip-flop نصب شده باشد، یک کانکتور RJ45 دوم یا یک اسپلیتر T مورد نیاز است. با کمک دو GPIO در جفت UTP چهارم می توانید فرستنده مورد نظر را انتخاب کنید. به نظر می رسد یک خواننده RFID توزیع شده، مانند تصویر.


چرا USB مورد نیاز است: اما برای اینکه بتوانیم خواننده را به تبلت اندرویدی متصل کنیم.

این راه حل در مواردی قابل اجرا است که به سرعت و محدوده خواندن برچسب بالا نیاز نباشد.
1. برای معده شناسی مناسب نیست. اینها فروشگاه های RFID آینده هستند. و فروشگاه های RFID در حال حاضر فروشگاه های بزرگ (کفش و پوشاک) هستند. در آنجا، خوانندگان RFID قبلاً در اتاق‌های اتصال (همراه با نمایشگر تعاملی)، در صندوق‌ها و قفسه‌های هوشمند با کالاها استفاده می‌شوند.
2. انبارهایی با پالت یورو (زنجیره ای از ماژول های فرستنده گیرنده که در آن گوشه سمت چپ پالت ها قرار دارند).
3. سیستم دسترسی برای رویدادهای عمومی مختلف.
4. احتمالاً جای دیگری.

نمودار شماتیک شبیه ساز فرستنده RFID EM-Marine (EM4100).
کارت‌های بدون تماس Em-Marine محبوب‌ترین ابزار شناسایی در کشور ما هستند و برای شناسایی کاربران در سیستم‌های کنترل و مدیریت دسترسی (ACS) استفاده می‌شوند.
دومین حوزه کاربرد کارت های Em-Marine که کمتر محبوب نیست، استفاده از آنها در سیستم های دسترسی منطقی برای مجوز کاربر با شماره شناسه کارت در سیستم عامل رایانه و برنامه های کاری و غیره است.

کارت های Em-Marine و جاکلیدی.
بر این اساس، چنین سیستم‌های شناسایی بسیار متداول هستند و ممکن است برای پیاده‌سازی سیستم‌های شناسایی و اتوماسیون خودشان مفید باشند. از آنجایی که پروتکل تبادل و سخت افزار چنین سیستم های فرکانس پایین برای پیاده سازی خود دستگاه های خود ساده تر است، اکثر طرح های رادیویی آماتور RFID به سیستم های فرکانس پایین اختصاص داده شده است.

فرکانس کاری کارت های Em-Marine 125 کیلوهرتز است. برای خواندن آنها از کارت خوان های تخصصی مجاورتی (RFID readers) استفاده می شود. تعامل شناسه با چنین خواننده ای از راه دور انجام می شود.
تعداد زیادی گزینه برای اجرای خارجی این شناسه ها وجود دارد: پاس های Em-Marine به شکل کارت های نازک و ضخیم، دستبند برای پارک های آبی، کلیدهای مختلف، برچسب های رادیویی برای ادغام در محصولات RFID ساخته می شوند.
برای استاندارد فرستنده EM4100، کارت حاوی 64 بیت داده است و کارت ها معمولاً قابل بازنویسی نیستند. برای سهولت در ثبت نام کارت، کد نوشته شده در کارت با چاپ در یک طرف کارت کپی می شود. رمزگذاری داده های ارسال شده توسط ترانسپوندر، رمزگذاری منچستر است. در این مورد، دوره های سیگنال ارسال شده توسط ترانسپوندر مضربی از فرکانس 125 کیلوهرتز است - فرکانس سیگنال خواننده فرستنده. خود فرستنده ها بدون منبع تغذیه خارجی (برچسب غیرفعال) اجرا می شوند، هنگامی که برچسب وارد منطقه پوشش قسمت کارت خوان می شود، برق توسط مدار LC (سیم پیچ و خازن) تامین می شود. کلاک ترانسپوندر نیز توسط سیگنال خواننده - 125 کیلوهرتز انجام می شود. بنابراین، پارامترهای سیگنال حاصل در رمزگذاری منچستر مضربی از سیگنال 125 کیلوهرتز هستند.

طرح تعامل بین ترانسپوندر و خواننده RFID.
برای درک کامل تر، اجازه دهید ساختار بسته ترانسپوندر EMMarine EM4100 RFID را در نظر بگیریم. توضیحات (به زبان انگلیسی، برگرفته از حاشیه نویسی) قالب بسته فرستنده ارائه شده است.
فرستنده های RFID سازگار با EM4100 دارای 64 بیت حافظه فقط خواندنی هستند. این بدان معنی است که اطلاعات را می توان از برچسب خواند اما هیچ داده ای را نمی توان تغییر داد، یا زمانی که کارت با داده های اولیه برنامه ریزی شد، داده های جدیدی روی کارت نوشته شد. فرمت داده ها همانطور که در اینجا نشان داده شده است.
1 1 1 1 1 1 1 1 1 1 9 بیت سرصفحه، همه 1 اینچ
شماره نسخه 8 بیتی D00 D01 D02 D03 P0
یا شناسه مشتری
D04 D05 D06 D07 P1
D08 D09 D10 D11 P2 هر گروه 4 بیتی
D12 D13 D14 D15 P3 با 32 بیت داده زوج دنبال می شود
بیت برابری D16 D17 D18 D19 P4
D20 D21 D22 D23 P5
D24 D25 D26 D27 P6
D28 D29 D30 D31 P7
D32 D33 D34 D35 P8
D36 D37 D38 D39 P9
بیت های برابری 4 ستونی PC0 PC1 PC2 PC3 S0 1 بیت توقف (0)
9 بیت اول منطق 1 است.
بر این اساس، ما 9 بیت شروع بسته (همیشه منطقی 1)، 11 گروه 4 بیتی داده با 1 بیت برابری در ردیف، 4 بیت برابری در ستون های انتهای بسته، بیت نهایی (همیشه 0) داریم. .
به عنوان مثال، اجازه دهید یک فرستنده با شماره داده 06001259E3 را در نظر بگیرید.
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 00
0 6 0 0 1 2 5 9 E 3

بایت داده 0x06 به عنوان شماره نسخه در نظر گرفته می شود. در کارت های EM-Marine که من با آنها برخورد کردم، مقادیر اعشاری مربوط به 3 بایت آخر بسته مهر شده است. در هر صورت، برای پیاده سازی باید تمام 64 بیت بسته را طبق این توضیحات بازتولید کنیم.
حال بیایید نگاهی دقیق تر به توضیحات مدولاسیون داده ترانسپوندر بیندازیم. داده ها از حاشیه نویسی AN680 گرفته شده است. در شکل، نسبت به نمودارهای مورد علاقه ما، علائمی را با رنگ قرمز ایجاد کردم.

حالا بیایید نمودارهایی را که نیاز داریم را با جزئیات بیشتری شرح دهیم. همانطور که قبلا ذکر شد سیگنال ساعت CLK سیگنال خواننده RFID است. داده های رمزگذاری شده NRZ باید توسط فرستنده مطابق با داده های بسته ثبت شده (64 بیت) تهیه شود. مشاهده می شود که اجرای کدگذاری NRZ برای بسته ترانسپوندر ابتدایی است و به حداقل منابع نیاز دارد. ما در واقع بسته را به یک جریان بیت تجزیه می کنیم و مقادیر منطقی سیگنال را 0 و 1 در داده ها تغییر می دهیم و تمام. برای به دست آوردن سیگنال حاصل، وضعیت فعلی سیگنال را با فرمت NRZ و CLK سیگنال ساعت خواننده را به صورت برنامه‌نویسی XOR می‌کنیم. در نتیجه، رمزگذاری منچستر سیگنال حاصل را دریافت می کنیم. من رمزگذاری را با جزئیات بیشتر در مورد منچستر توضیح نمی دهم - داده ها را می توان در حاشیه نویسی جداگانه یافت. برای توصیف دقیق‌تر روش‌های مدولاسیون، به داده‌های «روش‌های مدولاسیون H.R.» مراجعه کنید. Walker Data Systems 05/01/04 (بازبینی در 4/18/10)»، من دقیقاً این نمونه ها را مطالعه کردم. نکته اصلی این است که با حداقل منابع، می توانیم یک فرستنده فرمت EM-Marine را پیاده سازی کنیم. به عنوان مثال، می توانید کنترلر AVR سری tiny45 را بگیرید (این کار را روی tiny13 نیز می توانید انجام دهید). روی کنترلر tiny45 آزمایش شد زیرا دقیقاً برای آزمایش در دسترس بود.
حال بیایید بلوک دیاگرام ترانسپوندر را بر اساس مدل موجود در Proteus برای کنترلر tiny45 ارائه کنیم.

نمودار عملکردی ترانسپوندر در پروتئوس.

سیگنال تولید شده توسط ترانسپوندر اینگونه به نظر می رسد. قرمز شروع بسته را نشان می دهد.
نمودار نشان می دهد که پایه کنترل کننده T0 (PORTB.2) برای تامین یک سیگنال ساعت برای تایمر 8 بیتی TIMER0 استفاده می شود. این برنامه یک وقفه تصادفی را در تایمر TIMER0 (TIM0_COMPA) اجرا می کند. ساعت از یک سیگنال خارجی برای این تایمر تنظیم شده است. برای ما، سیگنال ساعت 125 کیلوهرتز از کارت خوان است. همه چیز مربوط به منبع تغذیه کنترلر و مدارهای زمان بندی از خواننده از نمودار حذف شده است. در یک مدار واقعی، خود کنترلر از یک کوارتز 4 مگاهرتز که بین پایه های دوم و سوم کنترلر نصب شده است، کلاک می شود. همچنین می توانید خازن های بای پس کوارتز 22 pF را روی این پایه های کنترل اضافه کنید.
تنظیمات شبیه سازی پروتئوس برای کنترلر به صورت زیر مشخص می شود:

هنگام برنامه ریزی کنترلر tiny45، فیوزها (بیت های پیکربندی) به همان روشی که در شکل 2 نشان داده شده است تنظیم می شوند. برای کلاک کردن کنترلر از کوارتز 4 مگاهرتز استفاده شده است.
با توجه به اجرای طرح اتصال کنترلر خارجی، اجازه دهید این موضوع را با جزئیات بیشتری بررسی کنیم. به عنوان مثال، مواد راهنمای RFID (E2E_chapter03-rfid-handbook) گرفته شد که اصول اساسی ساخت سیستم های RFID را شرح می دهد. خود سند به مقاله پیوست شده است. مثالی از مدار فرستنده غیرفعال (بخشی از مدار در صفحه 46) را در نظر بگیرید. برای درک، من روی نمودار با رنگ قرمز یادداشت کردم.
مشاهده می شود که ما یک مدار گیرنده روی L1C1 داریم که برای تغذیه مدار ترانسپوندر و ساعت کار می کند. هر چیزی که مربوط به ضد تقسیم کننده IC1 (4024)، عناصر منطقی IC3 (7400) است را می توان با خیال راحت بیرون انداخت - ما به آن نیاز نداریم. تقسیم کننده برای تایمر توسط تنظیمات تایمر بدون تقسیم کننده های خارجی - شمارنده اجرا می شود، قسمت منطقی نیز در نرم افزار پیاده سازی می شود. با این حال، این مثال به شما امکان می دهد تا عملکرد مدار ترانسپوندر غیرفعال را کاملاً درک کنید. حداکثر فاصله خواندن برای این فرمت ترانسپوندر 200 سانتی متر است. در واقع، بیشتر مدارها در فواصل 2-10 سانتی متر کار می کنند. پارامترهای خازن و مدار القایی LC تا حد امکان با دقت بیشتری به فرکانس تشدید 125 کیلوهرتز انتخاب می شوند. به عنوان مثال، یک مدار با ظرفیت 1nF و یک سیم پیچ 60 دور روی یک سنبه با قطر 50 میلی متر با سیم PEV 0.2 استفاده شد. شما می توانید کانتور مورد نظر را در یک برنامه خاص محاسبه کنید (می توانید کانتور را برای یک سیم پیچ مستطیلی، چاپ شده و غیره محاسبه کنید). نکته اصلی این است که رتبه بندی های دقیق را برای فرکانس 125 کیلوهرتز انتخاب کنید، در غیر این صورت فاصله خواندن و حساسیت مدار به طور قابل توجهی بدتر می شود. با مدارهایی که پیکربندی ضعیفی دارند، تنها زمانی کار می کند که سیم پیچ ترانسپوندر به خواننده نزدیک شود. این دستگاه بر اساس اصل Full Duplex (FDX) کار می کند - تولید داده های ترانسپوندر زمانی که مدار تغذیه می شود پیوسته است. مدار از روی ریدر کلاک می شود و داده ها به طور مداوم ارسال می شود. برخی از طرح های ترانسپوندر از طرح عملیات HDX (Half Duplex) استفاده می کنند - خواننده در حالت پالس منتشر می کند، ترانسپوندر داده ها را در فواصل داده های شارژ پالس ها از خواننده ارسال می کند. این امر برای مثال در مورد فرستنده های TIRIS از Texas Instruments صدق می کند.

شماتیک فرستنده غیرفعال بر اساس شماتیک کتابچه راهنمای RFID.


با در نظر گرفتن قسمتی از مدار که بر اساس مدار اصلی نیازی به آن نداریم، مدار اتصال کنترلر را به این شکل بدست می آوریم.



این مقاله را چگونه دوست دارید؟

برترین مقالات مرتبط