فهرست مطالب:

AVR/Arduino RFID Reader با کد UART در C: 4 مرحله
AVR/Arduino RFID Reader با کد UART در C: 4 مرحله

تصویری: AVR/Arduino RFID Reader با کد UART در C: 4 مرحله

تصویری: AVR/Arduino RFID Reader با کد UART در C: 4 مرحله
تصویری: اموزش راه اندازی ماژول RFID RC522 2024, نوامبر
Anonim
AVR/Arduino RFID Reader با کد UART در C
AVR/Arduino RFID Reader با کد UART در C

RFID شگفت انگیزی است که در همه جا یافت می شود - از سیستم های موجودی گرفته تا سیستم های شناسه نشان. اگر تا به حال به یک فروشگاه بزرگ رفته اید و در نقاط ورودی/خروجی آن چیزهای فلزیاب را دنبال کرده اید ، RFID را دیده اید. چندین مکان برای یافتن اطلاعات خوب در مورد راه اندازی RFID وجود دارد و این دستورالعمل بر نصب RFID خوان Parallax (Serial TTL) بر روی AVR با تأکید بر کد C مورد نیاز برای خواندن ورودی سریال متمرکز است. کد به زبان C است و از هیچ کتابخانه خارجی استفاده نمی کند. در حقیقت ، با همگام سازی با سرعت baud خواننده RFID و خواندن پین دیجیتالی که به آن متصل است ، بدون استفاده از UART مستقیماً 2400 باود صحبت می کند. برانگیخته؟ من هم همینطور.

مرحله 1: کالاها را دریافت کنید

کالاها را دریافت کنید
کالاها را دریافت کنید

شما به لیست قطعات زیر نیاز دارید:

  • RFID Reader (اختلاف منظر #28140 39.99 دلار)
  • برچسب RFID (اختلاف منظر #32397 0.99 دلار)
  • کلون AVR یا Arduino (اگر از AVR انبار استفاده می کنید ، به یک خازن max232 ، 5 x 1uF و یک اتصال DE9 نیز نیاز دارید)
  • تخته نان بدون لحیم

اختیاری

  • هدر 4 موقعیتی
  • سیم

(و max232 و غیره برای ارتباط اطلاعات برچسب) همچنین می توانید به جای ارسال داده های برچسب از طریق RS232 ، صفحه LCD مورد علاقه خود را متصل کنید.

مرحله 2: قطعات را وصل کنید

قطعات را وصل کنید
قطعات را وصل کنید
قطعات را وصل کنید
قطعات را وصل کنید
قطعات را وصل کنید
قطعات را وصل کنید

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

  • Vcc
  • فعال کردن
  • بیرون
  • Gnd

همانطور که احتمالاً حدس زده اید ، Vcc را به +5V و Gnd را به زمین وصل کنید. از آنجا که خواننده RFID قدرت زیادی مصرف می کند ، می توانید پین ENABLE را بکشید تا در فواصل مختلف خاموش و روشن شود. من به سادگی تصمیم گرفتم آن را ادامه دهم. چون معکوس است ، آن را LOW می کشید تا فعال شود. متناوبا ، می توانید آن را به زمین وصل کنید. من آن را به PIND3 متصل کردم تا در صورت تصمیم گزینه های فعال یا غیرفعال کردن را در اختیار من قرار دهد. پین OUT جایی است که خواننده پس از خواندن برچسب ، داده های سریال خود را ارسال می کند. من آن را به PIND2 متصل کردم. توجه داشته باشید ، در جهان اختلاف منظر ، قرمز به معنی رفتن است. یعنی یک LED سبز به این معنی است که واحد غیرفعال و بیکار است ، در حالی که یک LED قرمز به این معنی است که واحد فعال است. * بالا انداختن شانه* رفتن به شکل.

مرحله 3: کد را بنویسید

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

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

فرمت داده RFID Reader

خواننده RFID Parallax داده ها را با سرعت ثابت و یخبندان 2400 باود ارسال می کند. برچسب RFID 10 بایت است. به منظور امکان تشخیص/تصحیح خطا ، از آنجا که خواننده می تواند از سر و صدای تصادفی خارج شود ، RFID 10 بایت توسط نگهبان شروع و توقف محدود می شود. نگهبان شروع تغذیه خط (0x0A) و نگهبان نگهدار بازگشت کالسکه (0x0D) است. به نظر می رسد اینطور است:

[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | نگهبان را متوقف کنید]این سه مرحله اولیه است.

بدانید چه زمانی برچسب ارسال شده است

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

BSET (PCICR ، PCIE2) ؛ // تغییر پین تغییر کنترل کنترل وقفه pcie2 BSET (PCMSK2 ، PCINT18) ؛ // فعال کردن وقفه تغییر پین برای PCINT18 (PD2) BSET (SREG ، 7) ؛ // SREG I-bit را تنظیم کنیدشما می خواهید ISR خود را کوتاه نگه دارید ، بنابراین در بردار وقفه من کل بایت را ذره ذره می خوانم و بایت را در یک آرایه کاراکتر فرار جهانی ذخیره می کنم. در هر وقفه موارد زیر را انجام می دهم:

  • بررسی کنید تا مطمئن شوید که کمی شروع کرده ام
  • زمان را روی نبض میانی 2400 baud (سرعت RFID خوان) متمرکز کنید
  • بیت شروع را رها کرده و تا وسط بیت بعدی مکث کنید
  • هر بیت را در یک عدد صحیح بدون علامت بخوانید
  • وقتی 8 بیت دریافت کردم ، بایت را در یک آرایه کاراکتر قرار دهید
  • وقتی 12 بایت جمع آوری کردم ، به MCU اطلاع دهید که برچسب برای تشخیص خطا خوانده شده است.

من کد SoftSerial را از میکال هارت تغییر دادم که کد دیوید ملیس را برای تأخیرهای تجربی تعیین شده در روالهای سریال تغییر داد.

خروجی RS232 را تجزیه کنید

روال PCINT شامل کد برای خواندن خروجی RS232 از RFID خوان است. هنگامی که من 12 بایت دریافت کردم (RFID 10 بایت به همراه نگهبان) bDataReady را روی 1 تنظیم کردم و اجازه دادم حلقه اصلی داده ها را پردازش کرده و نمایش دهد.

// این handler وقفه است ISR (PCINT2_vect) {if (BCHK (PIND، RFID_IN)) // بیت شروع کم بازده می شود. uint8_t bit = 0؛ تنظیم تاخیر (CENTER_DELAY) ؛ // مرکز شروع بیت برای (uint8_t x = 0 ؛ x <8؛ x ++) {TunedDelay (INTRABIT_DELAY) ؛ // کمی پرش کن برادر… if (BCHK (PIND، RFID_IN)) BSET (bit، x)؛ در غیر این صورت BCLR (بیت ، x) ؛ } TunedDelay (INTRABIT_DELAY) ؛ // پرش از توقف بیت RFID_tag [rxIdx] = بیت ؛ ++ rxIdx؛ if (rxIdx == 12) bDataReady = 1؛}

برچسب خود را نمایش دهید

در حلقه اصلی () ، در طول حلقه (همیشه) ، بررسی می کنم که آیا bDataReady تنظیم شده است یا خیر ، این نشان می دهد که کل ساختار RFID ارسال شده است. سپس بررسی می کنم که آیا یک برچسب معتبر است (یعنی کاراکترهای شروع و توقف به ترتیب 0x0A و 0x0D هستند) ، و اگر چنین است ، اتصال RS232 خود را ارسال می کنم.

برای (؛؛) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("شروع بایت:") ؛ USART_tx_S (itoa (RFID_tag [0] ، & ibuff [0] ، 16)) ؛ ibuff [0] = 0؛ ibuff [1] = 0؛ USART_tx_S ("\ n توقف بایت:") ؛ USART_tx_S (itoa (RFID_tag [11] ، & ibuff [0]، 16))؛#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:")؛ برای (uint8_t x = 1؛ x <11؛ x ++) {USART_tx_S (itoa (RFID_tag [x]، ibuff، 16)) ؛ if (x! = 10) USART_tx (& apos: & apos)؛ } USART_tx_S ("\ n") ؛ } rxIdx = 0؛ bDataReady = 0 ؛ }}

مرحله 4: کد و خداحافظی

این صفحه حاوی یک فایل زیپ با کد مربوطه است. در AVR Studio 4.16 نوشته شده است. اگر از دفترچه یادداشت ، eclipse یا vi (یا چیز دیگری) برنامه نویس استفاده می کنید ، باید یک Makefile مورد اعتماد را در فهرست کپی کرده و این فایل ها را به خط منبع اضافه کنید. همچنین توجه داشته باشید ، زمان بخش خواندن سریال بر اساس MCU 16 مگاهرتز اگر با فرکانس ساعت متفاوتی کار می کنید ، باید به صورت تجربی تاخیرهای تنظیم شده را در مرکز پالس های نرخ baud تعیین کنید. امیدوارم این دستورالعمل به نحوی به شما کمک کرده باشد. اگر پیشنهادی در مورد چگونگی بهبود آن دارید ، لطفاً به من اطلاع دهید دریغ نکنید!

توصیه شده: