نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

بودجه خوان UHF RFID و توسعه آن. خواننده RFID: صحبت در مورد فناوری

هر سیستم شناسایی فرکانس رادیویی (RFID) از یک دستگاه خواندن (خواننده، خواننده یا بازپرس) و یک فرستنده (همچنین به عنوان برچسب RFID شناخته می شود، گاهی اوقات از اصطلاح برچسب RFID نیز استفاده می شود) تشکیل شده است. در این مقاله به یک دستگاه ساده برای خواندن کلیدهای RFID می پردازیم که از پروتکل EM4100 پشتیبانی می کنند و در فرکانس 125 کیلوهرتز کار می کنند. این نوع کلید RFID می تواند به صورت جا کلیدی یا کارت اعتباری باشد (شکل 1).

مؤلفه اصلی خواننده است میکروکنترلر AVR، که شماره شناسایی منحصر به فرد 10 رقمی کلید را خوانده و به آن ارسال می کند رمزگذاری اسکیتوسط رابط سریال(UART) در 2400 bps به دستگاه میزبان. به عبارت دیگر، خواننده است ماژول جداگانه، به پردازنده یا میکروکنترلر اصلی سیستم متصل است (شکل 2).

نمودار شماتیک خواننده RFID در شکل 3 نشان داده شده است.

شکل 3.

بیایید ویژگی های اصلی مدار را در نظر بگیریم. میکروکنترلر از یک مدولاتور داخلی PWM برای تولید خروجی PB0 استفاده می کند پالس های مستطیلیبا فرکانس 125 کیلوهرتز اگر خروجی PB0 log باشد. 0 (لبه سقوط پالس)، ترانزیستور T1 در حالت بسته است و ولتاژ تغذیه +5 ولت از طریق مقاومت R1 به سیم پیچ L1 اعمال می شود. لبه بالارونده در خروجی PB0 (log 1) ترانزیستور T1 را باز می کند و ترمینال بالایی سیم پیچ به زمین متصل می شود. در این لحظه، سیم پیچ به موازات خازن C2 متصل می شود و یک ژنراتور LC (مدار نوسانی) را تشکیل می دهد. ترانزیستور 125000 بار در ثانیه سوئیچ می کند (125 کیلوهرتز). در نتیجه، سیم پیچ یک سیگنال سینوسی با فرکانس 125 کیلوهرتز تولید می کند (شکل 4).

ماژول خواننده یک میدان الکترومغناطیسی تولید می کند که انرژی آن برای تغذیه کلید RFID استفاده می شود. انتقال انرژی بین کلید RFID و خواننده بر اساس اصل عملکرد یک ترانسفورماتور معمولی است: سیم پیچ اولیه ترانسفورماتور یک emf القایی را در سایر سیم پیچ ها ایجاد می کند. برای مورد ما، سیم پیچ اولیه سیم پیچ خواننده است و سیم پیچ ثانویه سیم پیچ کلید RFID است. عناصر D1، C3 و R5 یک دمدولاتور سیگنال مدولاسیون دامنه را تشکیل می دهند.

تبادل داده بین کلید و خواننده

فرآیند تبادل داده بین کلید RFID و خواننده بسیار ساده است، اما تا کوچکترین جزئیات فکر شده است. اگر کلید RFID باید گزارشی را ارسال کند. 0، سپس یک "بار" معین را به منبع برق خود متصل می کند، که به انرژی بیشتری نیاز دارد که توسط خواننده منتقل می شود. این باعث افت ولتاژ جزئی در سمت خواننده می شود. این سطح است که توسط خواننده به عنوان یک گزارش درک می شود. 0 (شکل 5).

کلید RFID در مورد کلی 64 بیت داده را به ترتیب زیر ارسال می کند (شکل 6):

  1. 9 بیت اول (همیشه log. 1) بیت های شروع هستند که شروع تبادل داده را نشان می دهد.
  2. 4 بیت - کم اهمیت ترین بیت های مهمسفارشی شماره شناسایی(D00 - D03).
  3. 1 بیت (P0) - بیت برابری 4 بیت قبلی.
  4. 4 بیت مهم ترین بیت های شماره شناسایی کاربر (D04 - D07) هستند.
  5. 1 بیت (P1) - بیت برابری 4 بیت قبلی.
  6. 4 بیت - قسمت اول 32 بیت شماره سریالکلید RFID (D08 - D11).
  7. 1 بیت (P2) - بیت برابری 4 بیت قبلی.
  8. در مرحله بعد، گروه های 4 بیتی زیر از شماره سریال کلید ارسال می شوند که هر کدام یک بیت برابری دارند.
  9. سپس 4 بیت برابری ستون به ستون منتقل می شود. به عنوان مثال، بیت برابری PC0 برای بیت های D00، D04، D08، D12، D16، D20، D24، D28، D32 و D36.
  10. 1 بیت استاپ

یکپارچگی داده ها توسط میکروکنترلر با محاسبه بیت های برابری برای هر سطر و ستون و مقایسه آن با داده های دریافتی از کلید RFID بررسی می شود.

طراحی کویل.

سلف فریم لس در خواننده با قطر 120 میلی متر با سیمی به قطر 0.5 میلی متر پیچیده شده و دارای 58 چرخش است، اما نویسنده توصیه می کند هنگام سیم پیچی 2 تا 3 دور دیگر اضافه کنید. به منظور بهبود راندمان سیم پیچ و افزایش فاصله خواندن کلید RFID، لازم است کالیبراسیون انجام شود. مدار نوسانی. اگر با اتصال یک اسیلوسکوپ به نقطه اتصال بین R1 و L1، پیک های تحریف شده را روی صفحه دستگاه مشاهده کردید (شکل 7)، این نشان دهنده نیاز به کالیبره کردن سیم پیچ L1 است.

پس از برق رسانی به ماژول، کالیبراسیون را می توان به دو صورت انجام داد.

  1. پروب های اسیلوسکوپ را به نقطه اتصال بین R1 و L1 وصل کنید و با افزایش یا کاهش تعداد دور سیم پیچ L1، اعوجاج سیگنال را از بین ببرید.
  2. اگر اسیلوسکوپ ندارید، کلید RFID را به آرامی روی سیم پیچ حرکت دهید تا کلید شناسایی شود، همانطور که با یک بوق نشان داده می شود. اگر کلید از فاصله 2 سانتی متری تشخیص داده شود، باید چندین چرخش اضافه/حذف شود و سپس دوباره فاصله ای را که می توان کلید را با اطمینان خوانده شود بررسی کرد. با استفاده از کالیبراسیون، نویسنده طرح به خواندن قابل اعتماد کلید RFID از 3 سانتی متر دست یافت.

هنگام برنامه ریزی میکروکنترلر، لازم است پیکربندی فیوز بیت های زیر را تنظیم کنید: بایت کم 0x7A و بایت بالا 0x1F (میکروکترلر از یک ژنراتور ساعت داخلی 9.6 مگاهرتز، تقسیم کننده کار می کند. فرکانس ساعتاز کار افتاده در 8). کد برنامه 1024 بایت را در حافظه میکروکنترلر اشغال می کند - از کل ظرفیت حافظه موجود میکروکنترلر ATtiny13 استفاده می شود. بنابراین، در آینده، هنگام گسترش عملکرد خواننده، بهتر است به عنوان مثال از یک میکروکنترلر AVR 8 پین دیگر استفاده کنید.

دانلودها:

کد منبع برنامه میکروکنترلر (AVRStudio 6)، سیستم عامل (.hex) و مدار -

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


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

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

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

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

برای کار با ماژول می توانید استفاده کنید کتابخانه استاندارد RFID گنجانده شده است آردوینو IDEبا این حال، کتابخانه دیگری وجود دارد که به طور خاص برای این ماژول نوشته شده است - MFRC522 (1 مگابایت). هر دو کتابخانه بسیار راحت هستند، اما 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; int serNum2; 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) شماره کارت را با شماره کارت قبلی مقایسه کنید (/ * اگر کارت جدید است، */ 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( )", ")؛ سریال .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.print(""); 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(&2.uid)5 ) ) void ShowReaderDetails() ( // دریافت شماره نسخه ماژول بایت v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("MFRC522 Software Version: 0x")); Serial.print(v, HEX); if (v == 0x91) Serial.print(F(" = v1.0")); other if (v == 0x92) Serial.print(F(" = v2.0"))؛ در غیر اینصورت Serial.print( F (" (نامشخص)")); Serial.println("")؛ // وقتی 0x00 یا 0xFF دریافت می کنیم، انتقال داده خراب می شود اگر ((v == 0x00) || (v == 0xFF)) ( سریال println.

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

در نتیجه، با خواندن داده ها از کارت، نوع، شناسه و داده های آن را از 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 نیز استفاده می شود) تشکیل شده است.

این آموزش از یک تگ RFID با آردوینو استفاده می کند. دستگاه شناسه منحصر به فرد (UID) هر تگ RFID را که در کنار خواننده قرار می دهیم می خواند و آن را روی صفحه نمایش OLED نمایش می دهد. اگر UID تگ باشد مقدار از پیش تعریف شدهکه در حافظه آردوینو ذخیره می شود، سپس پیغام Unlocked را روی نمایشگر خواهیم دید. اگر شناسه منحصربه‌فرد با مقدار از پیش تعریف‌شده برابر نباشد، پیام "قفل نشده" ظاهر نمی‌شود - عکس زیر را ببینید.

قلعه بسته است

قفل باز است

قطعات مورد نیاز برای ایجاد این پروژه:

  • خواننده RFID RC522
  • صفحه نمایش OLED
  • تخته نان
  • سیم ها

توضیحات بیشتر:

  • باتری (پاوربانک)

هزینه کل اجزای پروژه تقریباً 15 دلار بود.

مرحله 2: RFID Reader RC522

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

همین تراشه در برچسب‌های فوب کلید RFID نیز وجود دارد.

هر تگ RFID دارای یک شماره منحصر به فرد است که آن را شناسایی می کند. این UID است که بر روی صفحه نمایش OLED نشان داده شده است. به جز این UID، هر تگ می تواند داده ها را ذخیره کند. این نوع کارت می تواند تا 1000 داده را ذخیره کند. چشمگیر است، اینطور نیست؟ این ویژگی امروز مورد استفاده قرار نخواهد گرفت. امروزه تنها چیزی که مورد توجه است شناسایی یک کارت خاص توسط UID آن است. هزینه ریدر RFID و این دو کارت RFID حدود 4 دلار است.

مرحله 3: صفحه نمایش OLED

این درس از یک نمایشگر 0.96 اینچی 128x64 I2C OLED استفاده می کند.

این خیلی نمایشگر خوببرای استفاده با آردوینو این صفحه نمایش OLEDو این بدان معنی است که او دارد مصرف برق کم. مصرف برق این نمایشگر حدود 10-20 میلی آمپر است و بستگی به تعداد پیکسل دارد.

رزولوشن صفحه نمایش 128 در 64 پیکسل و ابعاد بسیار کوچکی دارد. دو گزینه نمایش وجود دارد. یکی از آنها تک رنگ است و دیگری، مانند آنچه در درس استفاده می شود، می تواند دو رنگ را نمایش دهد: زرد و آبی. بالای صفحه فقط می تواند زرد باشد و قسمت پایین- آبی.

این صفحه نمایش OLED بسیار روشن است و دارای یک کتابخانه عالی و بسیار زیبا است که Adafruit برای این نمایشگر ساخته است. علاوه بر این، صفحه نمایش از رابط I2C استفاده می کند، بنابراین اتصال به آردوینو فوق العاده آسان است.

فقط باید دو سیم به جز Vcc و GND وصل کنید. اگر با آردوینو تازه کار هستید و می خواهید از یک صفحه نمایش ارزان و ساده در پروژه خود استفاده کنید، از اینجا شروع کنید.

مرحله 4: اتصال تمام قطعات

مشخصات:
فرکانس برچسب: 125 کیلوهرتز
منبع تغذیه: +5 VDC
داده های خروجی: سریال، 2400 bps 8N1. شماره سریال تگ 10 رقمی صادر می شود.

تصویر 1:شکل 2:

معرفی

این خواننده RFID با برچسب های 125 کیلوهرتز در کارت های کارت اعتباری و کلیدهای 125 کیلوهرتز کار می کند (شکل 1). این از پروتکل EM4100 استفاده می کند. هنگامی که یک تگ RFID (4-5 سانتی متر) را به سیم پیچ خواننده (L1) نزدیک می کنید، خواننده شناسه منحصر به فرد 10 رقمی برچسب را می خواند و آن را به عنوان ارسال می کند. کاراکترهای اسکیاز طریق خروجی سریال در 2400 bps.

مدار شامل یک زنگ هشدار است که متناوب منتشر می کند سیگنال های صوتیوقتی تگ با موفقیت خوانده شد

شرح

من سعی می کنم در چند کلمه توضیح دهم که چگونه یک خواننده RFID کار می کند. کنترلر ATtiny13 از عملکرد PWM برای ایجاد سیگنال موج مربعی 125 کیلوهرتز استفاده می کند. این سیگنال از پین PB0 خارج می شود. در لبه سقوط پالس در پین PB0 (صفر منطقی "0")، ترانزیستور T1 بسته است. بنابراین، سیم پیچ L1 از طریق مقاومت R1 (نامی 100 اهم) از ولتاژ +5 ولت برانگیخته می شود. هنگامی که پالس در پایه PB0 افزایش می یابد (واحد منطقی "1")، ترانزیستور T1 باز می شود و یکی از پایانه های سیم پیچ L1 به GND متصل می شود. خازن C2 به صورت موازی به سیم پیچ L1 متصل می شود و یک نوسان ساز LC ایجاد می کند. داده های سوئیچینگ سیم پیچ L1 از منطق یک به منطق صفر 125000 بار در ثانیه (125 کیلوهرتز) رخ می دهد.

شکل 3:نوسانات سیگنال با فرکانس 125 کیلوهرتز که از سیم پیچ L1 و خازن C2 منتقل می شود.

خواننده RFID با ایجاد میدان الکترومغناطیسی انرژی را به فرستنده (برچسب) منتقل می کند. انتقال انرژی بین خواننده RFID و برچسب بر اساس همان اصل عملیات انجام می شودمبدل ها به لطف میدان مغناطیسی ایجاد شده توسط سیم پیچ اولیه، ولتاژ 220 ولت AC را به 12 ولت AC تبدیل می کند. در مورد ما، سیم پیچ اولیه خواننده RFID است و سیم پیچ ثانویه تگ RFID است. تنها تفاوت این است که در مدار خواننده RFID مدار مغناطیسی فولادی بین دو سیم پیچ وجود ندارد (یک سیم پیچ در سمت خواننده و سیم پیچ دیگر در برچسب RFID قرار دارد). اجزای D1، C3 و R5 دمدولاتور را تشکیل می دهندسیگنال AM (AM = مدولاسیون دامنه).

انتقال داده بین برچسب ها و خواننده

برچسب ها چگونه داده ها را به خواننده منتقل می کنند؟ بسیار ساده! هنگامی که یک تگ می خواهد یک منطقی صفر "0" را به خواننده ارسال کند، یک "بار" را به خط منبع تغذیه خود اعمال می کند تا توان بیشتری را از خواننده بگیرد. این باعث افت ولتاژ کوچک در سمت خواننده RFID می شود. این سطح ولتاژ منطقی صفر "0" است (شکل 4 را ببینید). همزمان با ارسال سیگنال توسط ریدر با فرکانس 125 کیلوهرتز، ولتاژ را می خواند. سیگنال ارسال شدهاز طریق فیلترهای D1، C3 و R5، C1. هنگامی که برچسب ولتاژ را کاهش می دهد، همانطور که قبلاً گفته شد، خواننده این افت ولتاژ را به عنوان صفر منطقی "0" می خواند. اگر برچسب به انرژی اضافی نیاز نداشته باشد، باعث افت ولتاژ نمی شود. این با منطق یک "1" مطابقت دارد (شکل 3). طول "یکها" یا "صفرها" به سرعت انتقال داده سریال بستگی دارد. به عنوان مثال، برای فرکانس حامل 125 کیلوهرتز، ما نرخ داده 125000 بیت در ثانیه را دریافت نمی کنیم! انتقال داده از برچسب به خواننده بین 500 تا 8000 بیت در ثانیه متغیر است.

شکل 4:اسکرین شات داده های ارسالی...10101...شکل 5


  • یک تگ RFID 125 کیلوهرتز 64 بیت را ارسال می کند.
    1. 9 بیت اول، بیت های شروع انتقال هستند (همیشه "1").
    2. 4 بیت بعدی کم اهمیت ترین بیت های شناسه کاربری هستند (D00,..., D03).
    3. 1 بیت بعدی (P0) بیت برابری 4 بیت قبلی است.
    4. 4 بیت بعدی مهم ترین بیت های شناسه کاربری (D04,..., D07) هستند.
    5. 1 بیت بعدی (P1) بیت برابری 4 بیت قبلی است.
    6. 4 بیت بعدی اولین قسمت از شماره سریال 32 بیتی برچسب (D08,..., D11) است.
    7. بیت PC0 بیت برابری بیت‌های D00، D04، D08، D12، D16، D20، D24، D28، D32 و D36 است (بیت‌ها در یک ستون قرار دارند).
    8. بیت های PC1، PC2، PC3 بیت های برابری سه ستون بعدی هستند.

تأیید داده ها با استفاده از کنترلر ATtiny13 با محاسبه بیت برابری هر سطر و هر ستون با بیت های برابری دریافت شده در داده های برچسب RFID ارسال شده انجام می شود.

ساخت کلاف

سیم پیچ دارای قطر 120 میلی متر و 58 دور می باشد. در هر صورت، کمی رها کنید سیم مسیبرای 2-3 دور اضافی (مجموع 60-61 چرخش). برای موفقیت حداکثر فاصلهبین تگ RFID و خواننده (بین تگ و سیم پیچ آنتن خواننده)، باید سیم پیچ را کالیبره کنید. اگر اسیلوسکوپ را به نقطه اتصال مشترک بین R1 و L1 وصل کنید، محل مشخص شده با دایره قرمز را در شکل سمت چپ مشاهده خواهید کرد. این بدان معنی است که سیم پیچ L1 باید کالیبره شود.

چگونه سیم پیچ L1 را کالیبره کنیم؟

خواننده RFID را روشن کنید:

1. پس از اتصال پروب اسیلوسکوپ به نقطه مشترک R1، L1، سعی کنید به آرامی حذف یا اضافه کنید. سیم مسی(تعداد چرخش ها را کم یا زیاد کنید) تا نویز از بین برود.

2. اگر اسیلوسکوپ ندارید، سعی کنید تگ RFID را به سیم پیچ L1 نزدیک کنید تا تگ توسط خواننده تشخیص داده شود. اگر علامت شما در فاصله 2 سانتی متری از سیم پیچ L1 تشخیص داده شد، سعی کنید چند دور سیم مسی را به سیم پیچ L1 اضافه کنید تا مطمئن شوید که علامت در فاصله طولانی تری (مثلا 3 سانتی متر) شناسایی می شود.

همین مراحل را با برداشتن سیم پیچ های سیم مسی از سیم پیچ L1 امتحان کنید. به این ترتیب حداکثر فاصله بین علامت ها و سیم پیچ L1 را به دست خواهید آورد.

من یک سیم پیچ L1 با قطر 120 میلی متر با 58 چرخش ساختم، اما متعاقباً می خواستم آن را اندازه کوچکتر کنم. بنابراین سیم پیچ را از وسط خم کردم تا به شکل "شکل هشت" (شکل شکل هشت) به نظر برسد و دوباره کالیبره کردم. بنابراین، سیم پیچ L1 در تصاویر در واقع قطری کمتر از 120 میلی متر دارد.

سیم پیچ L1 در تصویر دارای قطر 60 میلی متر و تقریبا 116 دور می باشد.

برنامه نويسيATtiny13

مجموعه بیت های پیکربندی (فیوز) برای ATtiny13: فیوز بالا: 0x1F و فیوز پایین: 0x7A. این مجموعهتنظیمات ATtiny13 با یک اسیلاتور داخلی با فرکانس 9.6 مگاهرتز کار می کند. عملکرد تقسیم بر 8 ساعت سیستم غیرفعال است.

نسخه سیستم عامل نسخه 1.00 1024 بایت طول می کشد و 100٪ از حافظه فلش کنترلر ATtiny13 را اشغال می کند. اگر می‌خواهید برخی ویژگی‌ها را به کد منبع اضافه کنید، شاید تغییر به هر AVR 8 پین دیگری مانند ATtiny85 ایده خوبی باشد.

این پروژه توسط:واسیلیس سراسیدیس ( واسیلیس سراسیدیس) 18 آگوست 2012
زبان برنامه نویسی:با
محیط توسعه:
میکروکنترلر:ATtiny13 (اسیلاتور داخلی 9.6 مگاهرتز)

فهرست عناصر رادیویی

تعیین تایپ کنید فرقه تعداد توجه داشته باشیدخرید کنیددفترچه یادداشت من
IC1 MK AVR 8 بیتی

ATtiny13

1 به دفترچه یادداشت
IC2 تقویت کننده عملیاتی

LM358

1 به دفترچه یادداشت
IC3 تنظیم کننده خطی

LM78L05

1 به دفترچه یادداشت
T1 ترانزیستور ماسفت

BS170

1 به دفترچه یادداشت
T2 ترانزیستور دوقطبی

BC547B

1 به دفترچه یادداشت
D1 دیود یکسو کننده

1N4148

1 به دفترچه یادداشت
C1 خازن12 nF1 به دفترچه یادداشت
C2 خازن1.5 nF1 به دفترچه یادداشت
C3 خازن4.7 nF1 به دفترچه یادداشت
C4، C5 خازن الکترولیتی100μF2 به دفترچه یادداشت
C6 خازن100 nF1 به دفترچه یادداشت
R1 مقاومت

100 اهم

1 به دفترچه یادداشت
R2 مقاومت

1 کیلو اهم

1 به دفترچه یادداشت
R3 مقاومت

390 کیلو اهم

1 به دفترچه یادداشت
R4، R8 مقاومت

33 کیلو اهم

2 به دفترچه یادداشت
R5 مقاومت

270 کیلو اهم

1 به دفترچه یادداشت
R6 مقاومت

پس از چندین سال کار بر روی موضوعات RFID و توسعه خوانندگان مختلف برای مدل های ترانسپوندر استانداردهای محبوب مانند Mifare، EMMARINE، TIRIS... اغلب با این سوال - به معنای واقعی کلمه - گیج می شدم. سال گذشتهمحبوبیت گسترده ای به دست آورد انواع مختلفشبیه سازها برای تگ های پروتکل محبوب و دستگاه های کپی کلید/کلید فوب مختلف.

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

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

برچسب‌های غیرفعال کاملاً کم مصرف هستند و برای تغذیه آنها به یک مولد خواننده نسبتاً قدرتمند نیاز دارند؛ ویژگی‌های انتشار امواج رادیویی در این فرکانس‌ها نیز محدودیت‌های عملکرد این سیستم را محدود می‌کند. محدوده قرائت واقعی فرستنده ها به ندرت برای استانداردهای 125 کیلوهرتز مانند EmMarine، مثلاً استاندارد EM4001، از 20 سانتی متر بیشتر می شود؛ برای پروتکل های دیگر مانند Mifare (13.56 مگاهرتز) می تواند طولانی تر باشد (1.5 متر برای iso15693). قابل دستیابی است فاصله بیشترخواندن برای خوانندگان فرکانس پایین اگر اندازه سیم پیچ و ولتاژ تغذیه را به ترتیب افزایش دهید و قدرت خواننده را افزایش دهید. با این حال، چنین سیستم هایی حجیم هستند و معمولاً به سختی قابل حمل هستند. به عنوان یک قاعده، چنین سیستم هایی فقط به طور دائمی اجرا می شوند - به عنوان مثال، برای اتومبیل ها.

بنابراین، در حال حاضر در مورد معماری واقعی سیستم RFID ما. کنترل‌کننده atmel atmega8 برای آزمایش‌ها انتخاب شد. برای اهداف ساخت ترانسپوندر، این امر بیش از حد به نظر می رسد. با این حال، در این مورد، وظیفه اصلی توسعه یک رابط جدید بر روی یک برد توسعه آماده با atmega حل شد و به دنبال آن این کد به کنترلرهای ارزان‌تری مانند tiny13 منتقل شد. برای ترانسپوندر، الگوریتم عملیاتی بر اساس حالت تولید PWM با استفاده از تایمر T1 در حالت CTC با وقفه و تنظیم مجدد همزمان با OCR1 ساخته شد. هنگامی که کنترلر روشن است، داده های انتقال ترانسپوندر از EEPROM خوانده می شود. در مجموع، فرستنده 10 بایت انتقال می دهد. محتویات فرستنده EEPROM روی آن قابل مشاهده است شکل 1.اولین بایت 0xE7 یک هدر بسته مورد نیاز است، زیرا وجود آن ابتدا زمانی که خواننده بسته را تجزیه می کند بررسی می شود.

8 بایت اول محتویات بسته ترانسپوندر است، 2 بایت آخر شامل جمع کنترلی CRC16 از هشت بایت اول بسته است. به عنوان مثال، داده های زیر در فرستنده ما ثبت شد: بسته 0xE7، 0x05، 0xE8، 0x93، 0x43، 0x7F، 0x20، 0xFF و بر این اساس، جمع کنترل 0xF5 0xA8. برای ساختن ترانسپوندر منحصر به فرد خود، علاوه بر بایت اول 0xE7، باید هفت بایت بعدی را نیز در EEPROM بنویسید و سپس مجموع بررسی هشت بایت اول را محاسبه کنید. پس از این، دو بایت CRC16 در انتهای بسته به EEPROM بنویسید. اولین بایت را بدون تغییر می گذاریم - 0xE7. هنگامی که فرستنده روشن می شود، داده های این بایت ها به بیت ها تقسیم می شوند و با طول پالس مناسب مطابق با مقدار ثبت OCR کدگذاری می شوند. برای انتقال، از 2 فرکانس 2 کیلوهرتز و 5 کیلوهرتز برای انتقال "0" و "1" منطقی استفاده می شود. علاوه بر این، داده ها با پالس های همگام سازی - علائم شروع بسته ها جدا می شوند.

عکس. 1محتویات بسته ترانسپوندر.


شکل 2تخلیه ترانسپوندر در صفحه اسیلوسکوپ مجازی.

نمودار فرستنده را می توان در مشاهده کرد شکل 3.فرکانس اسیلاتور اصلی 8 مگاهرتز. منبع تغذیه کنترلر +5 ولت. می توانید از یک کنترلر mega8 با علامت "L" استفاده کنید، سپس برق را می توان از آن تامین کرد باتری لیتیومی 3v (پارامترهای چنین تراشه ای +2.7 .... +3.5 است). به جای این ترانزیستور می توانید از هر کم مصرف دیگری استفاده کنید ترانزیستور NPN. سیم پیچ ترانسپوندر بر روی سنبه ای به قطر 50 میلی متر با سیم 0.22 میلی متر پیچیده شده و دارای 50 دور می باشد. در حال حاضر ترانسپوندر فعال می شود - با منبع تغذیه خارجی. در مرحله بعدی برنامه ریزی شده است که یک نسخه غیرفعال ترانسپوندر بسازید که بسیار ساده است - یک جداسازی برای برق از این سیم پیچ ایجاد کنید، دیودهای پل یکسو کننده و تثبیت کننده را اضافه کنید.


شکل 3مدار ترانسپوندر.

حالا بیایید در مورد مدار خواننده این ترانسپوندر صحبت کنیم. مدار بر اساس کارت خوان EMMARINE که قبلا استفاده شده بود، تطبیق داده شد. بخشی از مدار با ژنراتور روی 74hc4060 در این مرحله با خیال راحت حذف می شود، زیرا در حال حاضر از یک برچسب فعال استفاده می کنیم. با این حال، ما بعداً به این قسمت از مدار نیاز خواهیم داشت، زمانی که یک تگ غیرفعال می سازیم و نیاز به دریافت برق از خواننده داریم. در غیر این صورت، مدار تفاوت قابل توجهی با مدار خواننده EMMARINE ندارد: آشکارساز پیک غیرفعال - فیلتر - تقویت کننده - مقایسه کننده. مدار دارای بیشترین سادگی ممکن است و به شما امکان می دهد تا داده های ترانسپوندر را در فاصله 10-12 سانتی متری با مدارهای به خوبی تنظیم شده بخوانید.

می توانید مدار را حتی بیشتر ساده کنید و فقط یک آشکارساز و یک فیلتر باقی بگذارید و یک ترانزیستور را در خروجی قرار دهید که نقش مقایسه کننده را بازی می کند ، اما من این کار را نکردم. در خروجی که می گیریم سیگنال باینریبه شکل مستطیل مطابق با مدت زمان رمزگذاری شده پالس های ارسال شده توسط ترانسپوندر. انحراف مجاز مقادیر عناصری که مدار در آن عملیاتی است 5-10٪ است. منبع تغذیه برای کنترلر و opamp +5V. فرکانس کوارتز اسیلاتور اصلی کنترلر 12 مگاهرتز است. خروجی مقایسه کننده در LM358 به پین ​​وقفه خارجی کنترلر INT0 متصل است. برنامه کنترل کننده طوری پیکربندی شده است که یک وقفه در لبه بالارونده در پین وقفه خارجی INT0 فراخوانی کند. کنترل کننده وقفه پالس های ساعت را بررسی می کند و سپس هدر بسته را بررسی می کند و محتویات را در بافر کنترلر می نویسد. داده های بسته های خوانده شده از طریق رابط RS232 به رایانه شخصی منتقل می شود. برای پیکربندی ترمینال، پارامترهای زیر را مشخص می کنیم: سرعت 57.6Kb/s، 8 بیت داده، 1 بیت توقف، بدون برابری.

هنگام دریافت بسته، کنترلر جمع چک بایت های دریافتی را محاسبه کرده و داده ها را به ترمینال (بسته و CRC) ارسال می کند. اگر همسانی وجود دارد چک جمع هاتوسط کنترلر محاسبه شده و در بسته دریافت می شود، یک سیگنال به پین ​​PORTB.0 (14) کنترلر (LED1 در نمودار) خروجی می شود. قابل اتصال به این نقطهیک توییتر با یک ژنراتور داخلی یا یک LED از طریق یک مقاومت. هنگام خواندن کلید صحیح، کنترل کننده وقفه های خارجی را غیرفعال می کند و قبل از خواندن بعدی یک ثانیه تاخیر ایجاد می کند. حالت عملکرد این خواننده به عنوان پایه قفل RFID نیز ارائه شده است. برای انجام این کار، لازم است کل بایت های تخلیه ترانسپوندر را در EEPROM کنترل کننده خواننده - 10 بایت بنویسید. داده ها به همان روشی که در فرستنده EEPROM روی خواننده EEPROM نوشته می شود. در این حالت، هنگامی که فرستنده بعدی خوانده می شود و با آنچه در EEPROM خواننده نوشته شده مطابقت دارد، یک سیگنال به پین ​​PORTB.1 (15) کنترلر (LED2 در نمودار) خروجی می شود. می توانید یک LED را از طریق یک مقاومت یا یک کلید خروجی (ترانزیستور) روی رله محرک به این نقطه وصل کنید. اکنون یک قفل RFID برای یک کلید خاص و یک خواننده معمولی در یک بطری داریم.


شکل 4نمودار تگ خوان RFID. (بزرگنمایی نمودار)

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

دانلود سیستم عامل:
شما به دانلود فایل ها از سرور ما دسترسی ندارید

بهترین مقالات در این زمینه