جدول المحتويات:

قارئ AVR / Arduino RFID مع كود UART في C: 4 خطوات
قارئ AVR / Arduino RFID مع كود UART في C: 4 خطوات

فيديو: قارئ AVR / Arduino RFID مع كود UART في C: 4 خطوات

فيديو: قارئ AVR / Arduino RFID مع كود UART في C: 4 خطوات
فيديو: Biometric Fingerprint Based Attendance System 2024, شهر نوفمبر
Anonim
قارئ AVR / Arduino RFID مع كود UART في C
قارئ AVR / Arduino RFID مع كود UART في C

RFID هو الجنون ، الموجود في كل مكان - من أنظمة المخزون إلى أنظمة معرف الشارة. إذا كنت قد ذهبت من قبل إلى متجر متعدد الأقسام وسرت عبر تلك الأشياء التي تشبه أجهزة الكشف عن المعادن عند نقاط الدخول / الخروج ، فقد رأيت RFID. هناك عدة أماكن للعثور على معلومات جيدة حول إعداد RFID ، وتركز هذه التعليمات على تثبيت قارئ Parallax RFID (Serial TTL) على AVR ، مع التركيز على كود C المطلوب لقراءة الإدخال التسلسلي. الكود موجود في لغة سي ولا يستخدم أي مكتبات خارجية. في الواقع ، يتحدث 2400 باود مباشرة دون استخدام UART من خلال المزامنة مع معدل الباود الخاص بقارئ RFID وقراءة الدبوس الرقمي المتصل به. متحمس؟ أنا أيضا.

الخطوة 1: احصل على البضائع

احصل على البضائع
احصل على البضائع

ستحتاج إلى قائمة الأجزاء التالية:

  • قارئ RFID (المنظر # 28140 39.99 دولارًا)
  • علامة RFID (المنظر # 32397 $ 0.99)
  • استنساخ AVR أو Arduino (إذا كنت تستخدم AVR مخزونًا ، فستحتاج أيضًا إلى مكثفات بحد أقصى 232 و 5 × 1 فائق التوهج وموصل DE9)
  • لوح لحام

اختياري

  • 4 رأس الموضع
  • الأسلاك

(و max232 وما إلى ذلك لتوصيل معلومات العلامة) يمكنك أيضًا توصيل شاشة LCD المفضلة لديك بدلاً من إرسال بيانات العلامة عبر RS232.

الخطوة 2: قم بتوصيل الأجزاء

قم بتوصيل الأجزاء
قم بتوصيل الأجزاء
قم بتوصيل الأجزاء
قم بتوصيل الأجزاء
قم بتوصيل الأجزاء
قم بتوصيل الأجزاء

الجانب المادي للأشياء سهل جدًا. بدلاً من وضع قارئ RFID مباشرة في اللوح الخاص بي ، اخترت عمل كبل سريع حتى أتمكن من تحريك قارئ RFID بشكل أفضل قليلاً. لذلك ، قمت فقط بقطع 4 وظائف من شريط رأس مقبس أنثى كنت قد كذبت حوله ولحمت بثلاثة أسلاك. أكمل الشريط الكهربائي موصل الغيتو. يحتوي قارئ RFID على 4 وصلات:

  • Vcc
  • ممكن
  • خارج
  • Gnd

كما خمنت على الأرجح ، قم بتوصيل Vcc بـ + 5V و Gnd بالأرض. نظرًا لأن قارئ RFID يستهلك قدرًا كبيرًا من الطاقة ، يمكنك ضرب دبوس ENABLE لإيقاف تشغيله وتشغيله على فترات زمنية مختلفة. أنا ببساطة اخترت الاحتفاظ بها. نظرًا لأنه مقلوب ، يمكنك سحبه منخفضًا لتنشيطه. بدلاً من ذلك ، يمكنك توصيله بالأرض. لقد قمت بتوصيله بـ PIND3 لإعطائي خيارات للتمكين / التعطيل إذا قررت ذلك. دبوس OUT هو المكان الذي يرسل فيه القارئ بياناته التسلسلية بعد أن يقرأ العلامة. لقد قمت بتوصيله بـ PIND2. لاحظ ، في Parallax Universe ، اللون الأحمر يعني الانتقال. أي أن مؤشر LED الأخضر يعني أن الوحدة غير نشطة وخاملة ، بينما يشير مؤشر LED الأحمر إلى أن الوحدة نشطة. * هز كتفي * اذهب الرقم.

الخطوة 3: اكتب الكود

اكتب الكود
اكتب الكود

لقراءة البيانات من قارئ RFID ، يجب أن تعرف متى يتم إرسال العلامة ، ثم اسحب البيانات من المنفذ التسلسلي ، ثم أرسلها في مكان ما.

تنسيق بيانات قارئ RFID

يرسل قارئ Parallax RFID البيانات بوتيرة جليدية ثابتة تبلغ 2400 باود. علامة RFID هي 10 بايت. من أجل السماح باكتشاف / تصحيح الأخطاء ، نظرًا لأنه يمكن للقارئ أن ينطلق من الضوضاء العشوائية ، فإن RFID 10 بايت مقيد ببدء وإيقاف الحارس. حارس البداية هو تغذية سطر (0x0A) وحارس الإيقاف هو حرف إرجاع (0x0D). تبدو هكذا:

[بدء الحارس | البايت 1 | البايت 2 | البايت 3 | البايت 4 | البايت 5 | البايت 6 | البايت 7 | البايت 8 | البايت 9 | البايت 10 | وقف الحارس]هذه هي الخطوات الثلاث الأساسية.

تعرف متى تم تقديم العلامة

لقد استخدمت Pin Change Interrupt على AVR الذي يخطر البرنامج الثابت بحدوث تغيير على دبوس مراقب. يعد تكوين AVR لذلك أمرًا سهلاً ويتطلب إعداد العلامة وإخبار MCU بالدبوس الذي تريد مراقبته وتعيين بت المقاطعة العام. تكوين PCINT

BSET (PCICR ، PCIE2) ؛ // سجل التحكم في تغيير المقاطعة PCIE2 BSET (PCMSK2 ، PCINT18) ؛ // تمكين مقاطعة تغيير الدبوس لـ PCINT18 (PD2) BSET (SREG، 7) ؛ // تعيين SREG أنا بتاكتب روتين خدمة المقاطعة الخاص بك تريد أن تبقي ISR الخاص بك قصيرًا ، لذا في متجه المقاطعة الخاص بي ، قرأت البايت بأكمله ، شيئًا فشيئًا ، وأخزن البايت في مصفوفة أحرف عالمية متغيرة. أفعل ما يلي في كل مقاطعة:

  • تحقق للتأكد من أنني في البداية
  • قم بتوسيط التوقيت على النبضة الوسطى عند 2400 باود (سرعة قارئ RFID)
  • تخطي بت البداية وتوقف مؤقتًا إلى منتصف البت التالي
  • اقرأ كل بت في عدد صحيح بدون إشارة
  • عندما يكون لدي 8 بتات ، ضع البايت في مصفوفة أحرف
  • عندما جمعت 12 بايت ، دع MCU تعرف أن العلامة قد تمت قراءتها لاكتشاف الأخطاء.

لقد قمت بتعديل كود SoftSerial من Mikal Hart الذي قام بتعديل الكود من David Mellis للتأخيرات المحددة تجريبياً في الإجراءات التسلسلية.

إخراج تحليل RS232

يحتوي روتين PCINT على رمز قراءة خرج RS232 من قارئ RFID. عندما أحصل على 12 بايت (10 بايت RFID بالإضافة إلى الحراس) ، قمت بتعيين bDataReady على 1 واترك الحلقة الرئيسية تعالج البيانات وتعرضها.

// هذا هو معالج المقاطعة ISR (PCINT2_vect) {if (BCHK (PIND ، RFID_IN)) // بت البداية تذهب منخفضة العائد ؛ uint8_t بت = 0 ؛ TunedDelay (CENTER_DELAY) ، // توسيط بت البداية لـ (uint8_t x = 0 ؛ x <8 ؛ x ++) {TunedDelay (INTRABIT_DELAY) ؛ // تخطي قليلاً يا أخي … إذا (BCHK (PIND ، RFID_IN)) BSET (بت ، x) ؛ آخر BCLR (بت ، س) ؛ } TunedDelay (INTRABIT_DELAY) ، // تخطي بت التوقف RFID_tag [rxIdx] = بت ؛ ++ rxIdx ؛ إذا (rxIdx == 12) bDataReady = 1 ؛}

عرض علامتك

في () ، أثناء حلقة for (ever) ، أتحقق لمعرفة ما إذا كان bDataReady قد تم ضبطه ، مما يشير إلى أنه تم إرسال بنية RFID بالكامل. ثم أتحقق لمعرفة ما إذا كانت علامة صالحة (على سبيل المثال ، أحرف البداية والإيقاف هي 0x0A و 0x0D ، على التوالي) ، وإذا كان الأمر كذلك ، فأنا أرسلها إلى اتصال RS232.

لـ (؛ ؛) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Start byte:") ؛ 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)) ؛ إذا (x! = 10) USART_tx (& apos: & apos) ؛ } USART_tx_S ("\ n") ؛ } rxIdx = 0 ؛ bDataReady = 0 ، }}

الخطوة 4: الكود والوداع

تحتوي هذه الصفحة على ملف مضغوط يحتوي على الكود ذي الصلة. تمت كتابته في AVR Studio 4.16. إذا كنت تستخدم مفكرة المبرمج أو الكسوف أو السادس (أو أي شيء آخر) ، فستحتاج إلى نسخ ملف Makefile موثوق به في الدليل وإضافة هذه الملفات إلى سطر المصدر. لاحظ أيضًا أن توقيت قسم القراءة التسلسلية يعتمد على 16 ميجا هرتز MCU. إذا كنت تعمل بتردد ساعة مختلف ، فستحتاج إلى تحديد التأخيرات المضبوطة بشكل تجريبي للتركيز على نبضات معدل البث بالباود ، وآمل أن تساعدك هذه التعليمات بطريقة ما. إذا كان لديك أي اقتراحات حول كيفية تحسينه ، فلا تتردد في إخباري!

موصى به: