RFID / NFC میکروکنترلر AVR نمایشگر LCD

آموزش خواندن کد کارت RFID با ماژول RF01D توسط میکرو AVR با LCD

RFID-RF01D-with-micro-AVR-digispark-
نوشته شده توسط علی زاهدی

یکی از پرکاربردترین ماژول‌های RFID یا همان کارت‌خوان ماژول RF01D می‌باشد. فقط قابلیت خواندن از کارت‌های مغناطیسی و تگ‌ها را دارا می‌باشد. با نزدیک کردن کارت به ماژول، کد مربوط به کارت را از طریق پروتکل سریال یا همان UART به میکروکنترلر ارسال می‌کند. یکی از انواع میکروکنترلرهای پرمصرف در بازار ایران طبق تجربه بنده، تراشه Atmega8 می‌باشد. مربوط به شرکت ATMEL با نام خانواده AVR می‌باشد. این میکروکنترلر ۸ بیتی به دلیل قابلیت برنامه نویسی توسط کامپایلر با زبان‌های سطح بالا بسیار مورد توجه قرار گرفته‌اند. میکروکنترلر AVR از معماری RISC بهره می‌برد. در این آموزش قصد داریم با استفاده از میکروکنترلر Atmega8 و ماژول Rf01d کد تگ‌ها را بخوانیم و روی نمایشگر LCD نمایش دهیم. در ادامه این آموزش با مرجع تخصصی میکرو به زبان فارسی، دیجی اسپارک همراه باشید.

 


مشخصات ماژول RF01D


ماژول‌های RFID مختلفی در بازار موجود است. یکی از محبوب‌ترین مدل‌هایی که من با آن کار کرده‌ام، ماژول RF01D می‌باشد. سهولت در راه اندازی با استفاده از پروتکل UART در این ماژول بسیار اهمیت دارد. فقط افرادی که با ماژول‌های مختلف توسط میکرو AVR کار کرده‌اند، متوجه این قضیه خواهند شد! از امکانات این ماژول میتوان موارد زیر را نام برد.

· ولتاژ کاری ۵ ولت
· جریان مصرفی ۶۰ میلی آمپر
· فرکانس کاری ۱۲۰ تا ۱۳۰ کیلو هرتز
· چهار مد خروجی دیتا با انتخاب کاربر توسط پین‌ها
· دارای ۲۰۰ حافظه داخلی در سری‌های مموری‌دار
· دارای ۲ مد خروجی رله فلیپ فلاپ و معمولی البته تا زمانی که کارت کنار ماژول قرار دارد.
· خروجی دیتا بصورت ارتباط سریال TTL با نرخ انتقال ۹۶۰۰
· فاصله مفید شناسایی ۸ تا ۱۴ سانتیمتر (انواع تگ)

 

اتصالات مدار

  1. پایه VCC ماژول به ولتاژ مثبت ۵ ولت
  2. پایه GND ماژول به منفی مدار
  3. پایه ۷ میکروکنترلر به ولتاژ مثبت ۵ ولت
  4. پایه ۸ میکروکنترلر به منفی مدار
  5. ِTXD ماژول به پایه ۲ میکروکنترلر (RX)
  6. پایه ۲۳ میکروکنترلر با استفاده از یک مقاومت ۴۷۰ اهم به آند LED و کاتد LED به منفی مدار
  7. پایه های ال سی دی کاراکتری به صورت زیر به میکروکنترلر متصل میشود.

 

rfid with micro avr and rf01d-digispark

 


کد AVR در CodeVision


 جهت ایجاد پروژه جدید در نرم افزار کدویژن ابتدا نرم افزار را باز کنید. از منو فایل گزینه New را انتخاب کنید. پس از ساخت پروژه جدید کدهای زیر را به آن انتقال دهید. سپس از منوی Project گزینه‌ی compile را انتخاب کنید. اگر error مشاهده نکردید، گزینه OK را انتخاب کنید. از همان منو Project گزینه Build All را انتخاب کنید. حال برنامه به زبان ماشین ترجمه شده و  در پوشه‌‌ای به نام exe در جایی که انتخاب کردید با پسوند hex ذخیره شده است.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

 


تحلیل پروژه RFID ماژول RF01D


ابتدا کتابخانه مربوط به پردازنده را اضافه کردیم. سپس کتابخانه تاخیرها اضافه شده است. کتابخانه ال سی دی کاراکتری را اضفه کرده و آن را بر روی پورت B میکروکنترلر پیکربندی کردیم. سپس متغیرهای مورد نیاز برنامه را تعریف شده است. خط بعدی مربوط به وقفه دریافت از پروتکل UART میکروکنترلر می‌باشد. زمانی که اطلاعاتی از سمت ماژول RF01D به میکروکنترلر ارسال شود؛ برنامه به این قسمت پرش می‌کند. کاراکتر دریافتی را داخل رشته‌ی code که دارای ۱۰ خانه میباشد ذخیره می‌کند. تابع main تابع اصلی برنامه در زبان C می‌باشد. در ابتدای این تابع تنطیماتی همچون تعریف ورودی یا خروجی بودن پورت‌ها و فعال کردن پروتکل‌های میکروکنترلر انجام می‌شود. در این بخش ابتدا ال سی دی LCD را معرفی کرده و سپس پایه ۲۳ میکروکنترلر را بعنوان خروجی تعریف کرده و پروتکل UART میکروکنترلر را با باودریت ۹۶۰۰ فعال کرده‌ایم. (“asm(“sei# مربوط به فعال کردن وقفه‌ی سراسری می‌باشد. در حلقه‌ی بی‌نهایت ابتدا عبارت Digispark.ir را در سطر دوم ال سی دی نوشته می‌شود. سپس برنامه منتطر نزدیک شدن تگ به ماژول می‌شود. زمانی که تگ به ماژول نزدیک شود برنامه از این قسمت عبور کرده و کد تگ را در سطر اول ال سی دی نمایش داده و LED خروجی روشن می‌شود. پس از ۳ ثانیه سطر اول پاک میشود و LED خاموش میشود. توجه داشته باشد درهنگام پروگرام کردن کد روی میکروکنترلر AVR ، فیوزبیت‌ها بر روی کریستال ۸ مگاهرتز داخلی تنظیم شود.

 

آموزش خواندن کد کارت RFID با ماژول RF01D توسط میکرو AVR با LCD

 


وسایل مورد نیاز مدار


  1. ماژول RF01D
  2. تگ RFID با فرکانس ۱۲۵Khz
  3. میکروکنترلر ATmega8
  4. کابل فلت
  5. LED
  6. مقاومت ۴۷۰ اهم

 

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۴ دیدگاه

  • یه زمانی میخواستم کارت های شهربازی یا اتوبوس هارو کپی کنم…
    نمیدونم درست رفتم جلو یا نه ولی در نهایت جواب نگرفتم من
    ولی کلا این راه امکان پذیر هست یا نه؟

    مثلا متد من اینطوری بود یه کارت پر مثلا ۱۰ هزار تومانی رو کپی میکردم دیتاشو تو یه کارت دیگه
    چون دیتا ها برابر بودن طبیعتا اون یکی کارت هم ۱۰ هزار تومانی میشد..

    • سلام،
      نه به این صورت نیست که راحت قابل کپی کردن باشه یا تگ هارو به سیستم معرفی میکنن و یا به صورت خاصی تگ هارو رمز گذاری میکنن که قابل کپی کردن نباشه.

      • سلام من یک کیت rfidرا ساختم ولی نمیشه ومز عوظ کرد یا کارت حذف کرد خیلی مهمه چون پروژمه اگه میشه راهنمتیم کنید و زحمت بکشید به ایمیلم بفرستید ممنون میشم

        • با سلام،
          برای این که بتوانم به شما کمک کنم بایستی اطلاعاتی از جمله قطعات و کد پروژه را در اختیار بنده قرار دهید.

    • دوست عزیز جدا از بحث غیر قانونی بودن اینکار توجه داشته باشید هر کارت یک کد منحصر به فرد نیز دارد. (برای هک نیاز به کارت های changeID دارید که در ایران به فروش نمیرسند)

      • من همچین پروژه ای دارم و میخوام ببینم امنیتش چقدره
        چطور میتونم توی سیستمم مشخص کنم کارتی با این کد خاص مثلا ۱۰ هزار تومن اعتبار داره؟
        طبق چیزی که من درست کردم در صورتی که دیتای موجود در کارت با اعتبار کپی بشه دستگاه فکر میکنه کارت دیگری وجود داره که همون قدر اعتبار داره

        • با سلام
          شما میتوانید از تگ هایی که فقط قابلیت خواندن را دارند استفاده کنید و اطلاعات مربوط به تگ را داخل سیستم ذخیره کنید. این روش برای سیستم های کوچک با تعداد تگ محدود قابل اجرا می باشد.

          • سلام و ممنون بابت پاسختنون
            اگر سیسم کمی بزرگتر باشه و برای کم کردن موجودی کارت لازم داشته باشه که روی تگ اطلاعاتی هم بنویسه چه راهکاری برای امنیت وجود داره؟

            • با سلام
              میتوانید رمز گذاری های خاصی بصورت رندم روی تگ ها داشته باشید. یا از فرکانس خاصی از تگ ها استفاده نمایید. برای امنیت بیشتر روش های مختلفی وجود دارد.

  • سلام ببخشید این ماژول RF01D میتونه کد مربوط به تگ RFID رو تا ۴ متری بخونه؟
    نمیدونین کدوم ماژول همچین قدرتی داره؟
    با تشکر

    • سلام،
      متاسفانه این ماژول فقط تا چند سانتی متر بُرد داره، ماژول PK-UHF101 یکی از ماژول هایی هست که متراژ مورد نظر شما رو پوشش میده.

    • با سلام
      فکر نمیکنم کتابخانه این ماژول داخل پروتئوس باشد. میتوانید با استفاده از قطعه COMPIM در پروتئوس این ماژول را با استفاده از مبدل USB to TTL به کامپیوتر متصل نموده و پروژه خود را تست کنید.

  • با سلام و عرض تبریک سال نو
    ببخشید در کد از دستوری به نام main flag استفاده شده میشه یکم توضیح بدید ؟؟

    • باسلام
      زمانی که کد تگ به صورت کامل از ماژول دریافت می‌شود. با استفاده از این متغیر برنامه متوجه دریافت کد می شود.

  • سلام من دقیقا کد شما رو کپی کردم و پروگرام کردم روی میکرو فق به جای atmega8 از atmega16aاستفاده کردم ولی وقتی روشن میکنم فقط عبارت digispark.irنمایش داده میشه ولی با نزدیک کردن تگ هیچ اتفاقی نمیفته

    • با سلام
      ماژول را با مبدل USB to TTL تست کنید. و بررسی کنید که ماژول سالم باشد و فرکانس تگ و ماژول یکی باشد.

  • سلام من میخواستم از ماژول PK-UHF101 استفاده کنم ومداری که میخوام به این صورته که تگ رو بخونه و در رو باز کنه اگر کسی جلوی راهبند قرار گرفت راهبند متوقف بشه تا شخص عبور کنه و یک کلید داشته باشه برای این که اپروتور مدار رو از کار خارج کنه و دستی کار کنه راهبند

    • با سلام
      پس از راه اندازی ماژول PK-UHF101 میتوانید برای تشخص فرد در جلوی راه بند از سنسور هایی مانند فاصلخ سنج التراسونیک SRF05 و یا سنسور هایی که بر پایه مادون قرمز طراحی شده اند استفاده کنید.

  • سلام خیلی عالی بود
    فقط یه سوال اگه ما بخواهیم از یک بلوک مشخصی مثلا بلوک ۲ اطلاعاتی رو بخونیم کدش به این صورت زیر میشه ؟
    serial1.readBlock ( 2 , readbackblock )

    • با سلام
      این ماژول تنها قابلیت خواندن کد کارت های RFID را دارد. برای داشتن دسترسی بیشتر بایستی از ماژول های دیگر موجود در بازار استفاده کنید.

  • سلام وقت بخیر
    من میخواستم همین پروژه رو در پروتئوس شبیه سازی کنم میشه لطفا اسم قطعات رو بگید؟
    و اینکه قطعه RFIDرو از کدوم قسمت پروتئوس باید بیارم؟