সুচিপত্র:

AVR/Arduino RFID রিডার UART কোড সহ C: 4 টি ধাপে
AVR/Arduino RFID রিডার UART কোড সহ C: 4 টি ধাপে

ভিডিও: AVR/Arduino RFID রিডার UART কোড সহ C: 4 টি ধাপে

ভিডিও: AVR/Arduino RFID রিডার UART কোড সহ C: 4 টি ধাপে
ভিডিও: Battery less power supply and battery life calculation for embedded devices II 2024, নভেম্বর
Anonim
C তে UART কোড সহ AVR/Arduino RFID রিডার
C তে UART কোড সহ AVR/Arduino RFID রিডার

আরএফআইডি হল ক্রেজ, সর্বত্র পাওয়া যায় - ইনভেন্টরি সিস্টেম থেকে ব্যাজ আইডি সিস্টেম পর্যন্ত। আপনি যদি কখনও কোন ডিপার্টমেন্টাল স্টোরে গিয়ে থাকেন এবং প্রবেশদ্বার/প্রস্থান পয়েন্টে সেই মেটাল-ডিটেক্টর-দেখানো জিনিসগুলির মধ্য দিয়ে হেঁটেছেন, তাহলে আপনি আরএফআইডি দেখেছেন। আরএফআইডি স্থাপনের জন্য ভাল তথ্য খুঁজে পাওয়ার জন্য বেশ কয়েকটি জায়গা রয়েছে এবং এই নির্দেশযোগ্য একটি AVR- এ প্যারালাক্স আরএফআইডি রিডার (সিরিয়াল টিটিএল) ইনস্টল করার উপর দৃষ্টি নিবদ্ধ করে, সিরিয়াল ইনপুট পড়ার জন্য প্রয়োজনীয় সি কোডের উপর জোর দিয়ে। কোডটি সি তে আছে এবং কোন বাহ্যিক লাইব্রেরি ব্যবহার করে না। আসলে, এটি আরএফআইডি রিডারের বড রেটের সাথে সিঙ্ক্রোনাইজ করে এবং এটির সাথে সংযুক্ত ডিজিটাল পিন পড়ে ইউআরএটি ব্যবহার না করে সরাসরি 2400 বড কথা বলে। উত্তেজিত? আমিও.

ধাপ 1: পণ্য পান

জিনিসপত্র পান
জিনিসপত্র পান

আপনার নিম্নলিখিত অংশগুলির তালিকা প্রয়োজন হবে:

  • RFID রিডার (লম্বা #28140 $ 39.99)
  • RFID ট্যাগ (লম্বা #32397 $ 0.99)
  • AVR বা Arduino ক্লোন (যদি আপনি একটি স্টক AVR ব্যবহার করেন, আপনার একটি max232, 5 x 1uF ক্যাপাসিটার, এবং একটি DE9 সংযোগকারীও প্রয়োজন হবে)
  • Solderless breadboard

চ্ছিক

  • 4 পজিশন হেডার
  • তারের

(এবং ট্যাগ তথ্যের যোগাযোগের জন্য max232 ইত্যাদি) আপনি RS232 এর মাধ্যমে ট্যাগ ডেটা পাঠানোর পরিবর্তে আপনার প্রিয় LCD স্ক্রিনটি সংযুক্ত করতে পারেন।

ধাপ 2: অংশগুলি সংযুক্ত করুন

যন্ত্রাংশ সংযুক্ত করুন
যন্ত্রাংশ সংযুক্ত করুন
যন্ত্রাংশ সংযুক্ত করুন
যন্ত্রাংশ সংযুক্ত করুন
যন্ত্রাংশ সংযুক্ত করুন
যন্ত্রাংশ সংযুক্ত করুন

জিনিসগুলির হার্ডওয়্যার দিকটি বেশ সহজ। আমার আরএফআইডি রিডারকে সরাসরি আমার রুটিবোর্ডে onুকিয়ে দেওয়ার পরিবর্তে আমি দ্রুত একটি ক্যাবল বানানোর সিদ্ধান্ত নিয়েছি যাতে আমি আরএফআইডি রিডারকে একটু ভালোভাবে সরাতে পারি। এর জন্য, আমি শুধু একটি মহিলা সকেট হেডার স্ট্রিপ থেকে 4 টি অবস্থান কেটে ফেলেছিলাম এবং তিনটি তারে সোল্ডার করেছি। বৈদ্যুতিক টেপ ঘেটো সংযোগকারী সম্পন্ন করেছে। আরএফআইডি রিডারের 4 টি সংযোগ রয়েছে:

  • Vcc
  • সক্ষম করুন
  • আউট
  • Gnd

আপনি সম্ভবত এটি অনুমান করেছেন, Vcc +5V এবং Gnd কে মাটিতে সংযুক্ত করুন। যেহেতু আরএফআইডি রিডার এত বেশি বিদ্যুৎ ব্যবহার করে, আপনি বিভিন্ন পয়েন্টে এটি বন্ধ এবং চালু করতে সক্ষম পিনটি টিপতে পারেন। আমি কেবল এটি চালু রাখা বেছে নিয়েছি। কারণ এটি উল্টানো, আপনি এটিকে সক্রিয় করতে কম টানবেন। বিকল্পভাবে, আপনি এটি মাটিতে সংযুক্ত করতে পারেন। আমি PIND3 এর সাথে সংযুক্ত করেছি যদি আমি সিদ্ধান্ত নিই আমাকে সক্রিয়/নিষ্ক্রিয় করার বিকল্পগুলি দিতে। আউট পিন যেখানে পাঠক একটি ট্যাগ পড়ার পর তার সিরিয়াল ডেটা পাঠায়। আমি এটাকে PIND2 এর সাথে সংযুক্ত করেছি। উল্লেখ্য, লম্বা মহাবিশ্বে লাল মানে গো। অর্থাৎ, সবুজ এলইডি মানে ইউনিট নিষ্ক্রিয় এবং নিষ্ক্রিয়, আর লাল এলইডি মানে ইউনিট সক্রিয়। * কুঁচকে* ফিগার যান।

ধাপ 3: কোড লিখুন

কোড লিখুন
কোড লিখুন

আরএফআইডি রিডার থেকে তথ্য পড়তে, আপনাকে জানতে হবে কখন একটি ট্যাগ জমা দেওয়া হয়েছে, সিরিয়াল পোর্ট থেকে ডেটা টানুন, তারপর এটি কোথাও পাঠান।

RFID রিডার ডেটা ফরম্যাট

প্যারালাক্স আরএফআইডি রিডার একটি নির্দিষ্ট, হিমবাহের গতিতে 2400 বাউডের ডেটা পাঠায়। একটি RFID ট্যাগ হল 10 বাইট। ত্রুটি সনাক্তকরণ/সংশোধন করার অনুমতি দেওয়ার জন্য, যেহেতু পাঠককে এলোমেলো শব্দ থেকে বন্ধ করা যেতে পারে, তাই 10-বাইট আরএফআইডি একটি স্টার্ট এবং স্টপ সেন্টিনেল দ্বারা আবদ্ধ। শুরু সেন্টিনেল হল লাইন ফিড (0x0A) এবং স্টপ সেন্টিনেল হল ক্যারেজ রিটার্ন (0x0D)। এটা এই মত দেখাচ্ছে:

[সেন্টিনেল শুরু করুন | বাইট 1 | বাইট 2 | বাইট 3 | বাইট 4 | বাইট 5 | বাইট 6 | বাইট 7 | বাইট 8 | বাইট 9 | বাইট 10 | সেন্টিনেল বন্ধ করুন]এই তিনটি প্রাথমিক পদক্ষেপ।

কখন একটি ট্যাগ জমা দেওয়া হয়েছে তা জানুন

আমি AVR- এ একটি পিন চেঞ্জ ইন্টারাপ্ট ব্যবহার করেছি যা ফার্মওয়্যারকে জানিয়ে দেয় যে একটি পর্যবেক্ষণ করা পিনে একটি পরিবর্তন ঘটেছে। এর জন্য AVR কনফিগার করা সহজ এবং পতাকা সেট করা প্রয়োজন, MCU কে আপনি কোন পিনটি পর্যবেক্ষণ করতে চান তা বলুন এবং গ্লোবাল ইন্টারাপ্ট বিট সেট করুন। PCINT কনফিগার করুন

BSET (PCICR, PCIE2); // পিন পরিবর্তন ইন্টারাপ্ট কন্ট্রোল রেজিস্টার pcie2 BSET (PCMSK2, PCINT18); // PCINT18 (PD2) BSET (SREG, 7) এর জন্য পিন পরিবর্তন বিরতি সক্ষম করুন; // SREG I-bit সেট করুনআপনার ইন্টারাপ্ট সার্ভিস রুটিন লিখুন আপনি আপনার ISR সংক্ষিপ্ত রাখতে চান তাই আমার ইন্টারাপ্ট ভেক্টরে আমি পুরো বাইট, বিট বাই বিট পড়ি এবং বাইটটি একটি গ্লোবাল ভোলাটাইল ক্যারেক্টার অ্যারেতে সংরক্ষণ করি। আমি প্রতিটি বাধায় নিম্নলিখিতগুলি করি:

  • আমি শুরুতে আছি কিনা তা নিশ্চিত করুন
  • 2400 বউড (আরএফআইডি রিডারের গতি) এ মাঝারি পালসের দিকে সময়কে কেন্দ্র করুন
  • শুরু বিট এড়িয়ে যান এবং পরবর্তী বিটের মাঝখানে থামুন
  • প্রতিটি স্বাক্ষরবিহীন পূর্ণসংখ্যায় পড়ুন
  • যখন আমি 8 বিট পেয়েছি, একটি অক্ষর অ্যারে বাইট রাখুন
  • যখন আমি 12 বাইট সংগ্রহ করেছি, MCU কে জানাতে হবে যে ট্যাগটি ত্রুটি সনাক্তকরণের জন্য পড়া হয়েছে।

আমি মিকাল হার্টের সফটসিরিয়াল কোডটি পরিবর্তন করেছি যিনি সিরিয়াল রুটিনে পরীক্ষামূলকভাবে নির্ধারিত বিলম্বের জন্য ডেভিড মেলিসের কোড পরিবর্তন করেছিলেন।

RS232 আউটপুট পার্স করুন

PCINT রুটিনে RF232 রিডার থেকে RS232 আউটপুট পড়ার কোড থাকে।

// এটি ইন্টারাপ্ট হ্যান্ডলার ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // start bit goes low return uint8_t বিট = 0; TunedDelay (CENTER_DELAY); // কেন্দ্র শুরুতে (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // একটু বাদ দাও, ভাই… যদি (BCHK (PIND, RFID_IN)) BSET (bit, x); অন্যথায় BCLR (বিট, এক্স); } TunedDelay (INTRABIT_DELAY); // skip stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; যদি (rxIdx == 12) bDataReady = 1;}

আপনার ট্যাগ প্রদর্শন করুন

প্রধান (), (চিরকাল) লুপের সময়, আমি দেখতে চাই যে bDataReady সেট করা হয়েছে কিনা, ইঙ্গিত করে যে পুরো RFID কাঠামো পাঠানো হয়েছে। আমি তারপর এটি একটি বৈধ ট্যাগ (অর্থাত্ শুরু এবং স্টপ অক্ষর যথাক্রমে 0x0A এবং 0x0D হয়) দেখতে চেক, এবং যদি তাই হয়, আমি এটি আমার RS232 সংযোগ পাঠান।

জন্য (;;) {যদি (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 ("R 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 স্টুডিও 4.16 এ লেখা হয়েছিল। আপনি যদি প্রোগ্রামারের নোটপ্যাড, গ্রহন, বা vi (বা অন্য কিছু) ব্যবহার করেন তবে আপনাকে একটি বিশ্বস্ত মেকফিলকে ডিরেক্টরিতে অনুলিপি করতে হবে এবং এই ফাইলগুলিকে সোর্স লাইনে যুক্ত করতে হবে। 16MHz MCU যদি আপনি একটি ভিন্ন ঘড়ির ফ্রিকোয়েন্সি চালাচ্ছেন, তাহলে আপনাকে পরীক্ষামূলকভাবে বাউড রেট ডালগুলির কেন্দ্রস্থলে টিউন করা বিলম্বগুলি নির্ধারণ করতে হবে আমি আশা করি এই নির্দেশনাটি আপনাকে কোনভাবে সাহায্য করেছে। এটি কিভাবে উন্নত করা যায় সে সম্পর্কে আপনার কোন পরামর্শ থাকলে আমাকে জানাতে দ্বিধা করবেন না!

প্রস্তাবিত: