شاید تا به حال به این موضوع فکر کرده باشید که چه اتفاقی میافتاد اگر همه برای خودشان یک ID خاص دیجیتال داشتند و برای کارهای شخصی خود از همان ID برای کارهای روزمره مثل خرید کردن و کارهای بانکی و … استفاده میکردند. واقعا فکر دور از ذهنی نیست بلکه به راحتی با ماژول RFID RC522 البته در محیط های کوچکتر کاملا قابل پیاده سازی است.
چون در این قسمت از پروژه های آردوینو میخواهیم توسط آردوینو و RFID RC522 این پروژه را برای یک محیط کوچکتر ( خانواده پیاده سازی کنیم) به طوریکه هر شخصی یک کارت مجزا دارد که برای تمامی کارها باید حتما از ID خاص خود استفاده کند در صورتیکه از تگ مورد نظر استفاده نکند RFID RC522 تگ موردنظر را شناسایی نخواهد کرد و در نتیجه سیستم عمل نخواهد کرد.
خب برای اینکه شروع کنیم باید وسایل موردنظر کار را که شامل موارد زیر هستند را تهیه کنیم.
برد آردوینو (فرقی نمیکند چه مدلی باشد مهم بخش کدنویسی است که روی هر آردوینوای جواب میدهد پس زیاد این بخش را سخت نگیرید.)
RFID RC522
RFID TAG ( بسته به نیاز شما کاملا میتواند دلخواه باشد).
خب قبل از اینکه وارد شماتیک و برنامهنویسی شویم بد نیست که در مورد RFID توضیحاتی را بدهیم.(میدونم کسل کنندس برای خیلی از شماها ولی باور کنید دید بهتری میده بهتون)
RFID چیست؟
سامانهٔ بازشناسی با امواج رادیویی ( Radio Frequency Identification) (به اختصار RFID) سامانهٔ شناسایی بیسیمی است که قادر به تبادل دادهها بهوسیلهٔ برقراری اطّلاعات بین یک Tag که به یک کالا، شئ، کارت و… متّصل شدهاست و یک بازخوان (Reader) است. سامانههای RFID از سیگنالهای الکترونیکی و الکترومغناطیسی برای خواندن و نوشتندادهها بدون تماس بهرهگیری میکنند. اصولاً به هر سیستمی که قادر به خواندن و تشخیص اطلاعات افراد یا کالاها باشد سیستم شناسایی یا Identification System گفته میشود.
شاید برای شما مفید باشد: هک تگ آسانسور و همه چیز راجع به هک کارت های Mifare
بطور کلّی شناسایی خودکار و نگهداری دادهها (AIDC) روشی است که طی آن تجهیزات سختافزاری یا نرمافزاری قادر به خواندن و تشخیص دادهها بدون کمک گرفتن از یک فرد هستند. بارکدها، کدهای دو بعدی، سیستمهای انگشت نگاری، سامانهٔ شناسایی با استفاده از فرکانس رادیویی، سیستم شناسایی با استفاده از قرنیه چشم و صدا و… از جمله این راهکارها میباشند. یکی از جدیدترین مباحث مورد توجه دانشمندان جهت شناسایی افراد یا کالاها استفاده از سیستم شناسایی با استفاده از فرکانس رادیویی میباشد. خب در همین حد برای فهم کلی عملکرد کافی است برای اطلاعات بیشتر به ویکیپدیا مراجعه کنید.
شماتیک RFID RC522 توسط برد آردوینو
کدنویسی RFID RC522 با آردوینو
خب طبق معمول به یکی از بخش های جذاب و پرچالش الکترونیک رسیدیم. کدی که میخواهیم بنویسیم شامل موارد زیر میباشد.
- خواندن ID تگ موردنظر
- شناسایی تگ تعریف شده در سیستم
- انجام دستورات موردنظر پس از شناسایی تگ تعریف شده
خب قبل از اینکه وارد کدنویسی شویم ابتدا لازم است که کتابخانه مربوط به این پروژه را اضافه کنیم تا در حین کار با توابع این کتابخانه دچار مشکل نشویم. برای این کار لازم است که طبق تصاویری که در ادامه میگذاریم عمل کنید.
خب پس از نصب کتابخانه مربوط به RFID RC522 نوبت به کدنویسی و ارتباط این ماژول با آردوینو میرسد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <SPI.h> #include <MFRC522.h> اضافه کردن کتابخانه های موردنظر #define SS_PIN 10 #define RST_PIN 9 تعریف پینهای موردنظر جهت برقراری با سختافزار MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { Serial.begin(9600); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 Serial.println("Approximate your card to the reader..."); Serial.println(); pinMode(8,OUTPUT); تنظیمات اولیه جهت اماده سازی ارتباط بین دیوایسها تنظیم خروجی جهت تست سختافزاری } void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } Serial.println(); Serial.print("Message : "); content.toUpperCase(); if (content.substring(1) == "A3 B6 CB 2C") //change here the UID of the card/cards that you want to give access { Serial.println("DAD"); Serial.println(); digitalWrite(8,HIGH); delay(3000); } else if (content.substring(1) == "0B E7 2C 83") //change here the UID of the card/cards that you want to give access { Serial.println("MOM"); Serial.println(); digitalWrite(8,LOW); delay(3000); } else { Serial.println(" Access denied"); delay(3000); } دراین بخش اگر دقت کنید کاملا خوانا است و عملکرد ان به این صورت است که منتظر خواندن تگ میباشد درصورتیکه ID تگ ها برابر با ID که تعریف کردهایم باشد در سریال مانیتور اسم هایی که مشخص شدهاند را نمایش میدهد و در واقع یکی از تگها یک LED را روشن میکند و دیگری LED را خاموش میکند. } |
خب نکته ای که وجود دارد این است که بعد از این آموزش به راحتی میتوانید در پروژههای مختلف از RFID RC522 استفاده کنید. البته با رعایت یک سری اصول بهینه سازی که حتما باید در کد انجام گیرد.
به عنوان یک راهنمایی میخواهیم یک سایت آموزش آردوینو را به شما مخاطبان و همراهان سیسوگ معرفی کنیم که برای شروع کار آموزش های خوبی را دارد که فکر نمیکنم خالی از لطف باشد. برای وارد شدن به سایت اینجا کلیک کنید.
امیدوارم که این اموزش هم برای شما مفید واقع شده باشد.
خییییلییی ممنونممممم!!!
دمتون گرم
سلام
ممنون از برنامه و توضیحاتی که گذاشتید.
برنامه عالی کار کرد.
ولی یه مشکلی داره.
من بعد از چند بار که استفاده کردم دیگه هیچ عکس العملی نشون نمیده تا وقتی که دوباره آردوینو رو ریسیت کنم و دوباره بعد چند بار دوباره از کار می افتاد!!!!
من فکر میکردم که آردوینو مشکل داره و هنگ میکنه ولی با اسکوپ که سیگنال آنتن RC522 رو گرفتم بعد اینکه از کار می افتاد دیگه سیگنالی نداشت و مطمئن شدم که خود RC522 از کار می افتد.
راهی وجود داره که از ماژول فیدبکی داشته باشم و بتونم به طور اتوماتیک ریستش کنم.
ممنون.
سلام دوست عزیزم
من بعد از اینکه کامنت شما رو خوندم کد رو مجددا تست کردم و دقیقا به جرات میتونم بگم خیلی هم تگ ها رو تست کردم تقریبا میشه گفت بیش از 100 بار و مطمن شدم که کد به درستی کار میکنه
من احتمال میدم دوست عزیزم شاید مشکل سختافزاری داشته باشید.
ترجیحا پایه 13 اردوینو رو چک کنید ببینید پالسی رو دریافت میکنید یا خیر؟ این کار رو هم با قرار دادن یک LED میتونید انجام بدید در صورتیکه LED به صورت ثابت روشن باقی موند و زمانیکه شما tag رو زدید باید LED خاموش شه در غیر اینصورت حتما باید LED روشن بمونه که این نشون دهنده اینکه SCK شما پالس رو داره میده.
من باز هم میگم خدمتتون مشکل کاملا سختافزاری است لطفا مجددا سیستم رو چک کنید و از نحوه اتصالات هم کاملا مطمئن شید. من نحوه اتصالات رو مجددا مینویسم براتون امیدوارم که جواب بگیرید.
3.3 => 3.3
RST=> 9
GND=> GND
MISO=> 12
MOSI=> 11
SCK=> 13
SDA=> 10
در ضمن برای این پروژه نیازی به ریست ندارید احتمال زیاد مشکل از سختافزار و یا نحوه اتصالات قطعاتتون است. لطفا مجدد چک کنید.
اما درصورتیکه ریست نیاز دارید که حتما توی سیستمتون باشه پایه RST رو به یک پایه دیگه متصل کنید ودر نهایت اونو توی نرمافزار هر چند دقیقه و یا ساعت و … که مدنظرتون هست پایه موردنظر رو 0 یا 1 کنید( برای این پروژه کار منطقی نیست ترجیحا به توضیحاتی که در ابتدا اشاره کردم سعی کنید مسئله رو حل کنید )
موفق باشید دوست عزیز
سلام
ممنون از پاسخ و توضیحات شما
البته اینو یادم رفت بگم… وقتی یه صفحه فلزی پشت RFID باشه بعد از چندبار این اتفاق می افته.
شکی ندارم که ماژول خاموش میشه!!!
آیا راهی وجود داره که از آردوینو بشه تشخیص داد که RC522 روشن هست یا نه؟
که مثلا اگه خاموش شده با ریست یا هر روش دیگه اون رو روشن کرد؟
ببخشید شرمنده
دمت گرم
ببینید دوست عزیز به خاطر دقیقا صفحه فلزی است که پشت RFID وجود داره و در نهایت همین امر موجب میشه که RFID شما به درستی عمل نکنه راه حل هم اینکه حتما ماژول رو از اون صفحه دور کنید و یا حداقل در یک فاصله معینی که میدونید مشکلی پیش نمی یاد ماژول رو قرار بدید تا جواب رو به درستی دریافت کنید.
موفق باشید
سلام من هم همین مشکل دارم با این تفاوت که با ریست برد اردینو درست نمیشه باید روشن و خاموش کنم تغذیه را لطفاً راهنمایی کنید
احتمالا برای این که بتونید مشکل رو رفع کنید باید ببینید برنامه توی کدوم مرحله گیر میکنه – این کار رو میتونید با قرار دادن پرینت در جاهایی که احتمال میدید برنامه گیر میکنه انجام بدید.
در ضمن فراموش نکنید که پایه ریست ماژول و میکرو رو پول آپ کنید و خازن تغزیه نزدیک ماژول قرار بدید
سلام باتشکر هر دو پایه میکرو و ماژول با هم وصل کنم بعد یک مقاومت ۱۰ کیلو استفاده کنم یا جدا جدا برای پایه ریست ماژول جدا و پایه میکرو جدا پول اپ کنم با تشکر
به هم وصل کنید و پول آپ کنید اوکیه
۴٫۷ کیلو استفاده کنید.
با سلام پایه های میکرو و ماژول باهم وصل کنم و بعد فول اپ کنم یا هر کدوم جدا جدا فول اپ کنم پرینتر ندارم ولی لامپ ال ای دی استفاده کنم خوبه ممنون
اگه دو تا رو به هم وصل کنید و پول آپ کنید هم خوبه
خواهش میکنم
سلام من هم همین مشکل دارم ولی ریست هم میکنم درست نمیشه باید برق تغذیه رابطه وصل کنم تا درست بشه لطفاً راهنمایی کنید با تشکر