विषयसूची:

C: 4 चरणों में UART कोड के साथ AVR/Arduino RFID रीडर
C: 4 चरणों में UART कोड के साथ AVR/Arduino RFID रीडर

वीडियो: C: 4 चरणों में UART कोड के साथ AVR/Arduino RFID रीडर

वीडियो: C: 4 चरणों में UART कोड के साथ AVR/Arduino RFID रीडर
वीडियो: Amazing arduino project 2024, नवंबर
Anonim
C. में UART कोड के साथ AVR/Arduino RFID रीडर
C. में UART कोड के साथ AVR/Arduino RFID रीडर

RFID का क्रेज हर जगह पाया जाता है - इन्वेंट्री सिस्टम से लेकर बैज आईडी सिस्टम तक। यदि आप कभी किसी डिपार्टमेंट स्टोर में गए हैं और प्रवेश/निकास बिंदुओं पर उन मेटल-डिटेक्टर-दिखने वाली चीजों से गुजरे हैं, तो आपने RFID देखा है। RFID स्थापित करने के बारे में अच्छी जानकारी प्राप्त करने के लिए कई स्थान हैं, और यह निर्देशयोग्य AVR पर Parallax RFID रीडर (सीरियल TTL) स्थापित करने पर केंद्रित है, जिसमें सीरियल इनपुट को पढ़ने के लिए आवश्यक C कोड पर जोर दिया गया है। कोड सी में है और किसी बाहरी पुस्तकालय का उपयोग नहीं करता है। वास्तव में, यह आरएफआईडी रीडर की बॉड दर को सिंक्रनाइज़ करके और इससे जुड़े डिजिटल पिन को पढ़कर यूएआरटी के उपयोग के बिना सीधे 2400 बॉड बोलता है। उत्तेजित? मैं भी।

चरण 1: माल प्राप्त करें

माल प्राप्त करें
माल प्राप्त करें

आपको भागों की निम्नलिखित सूची की आवश्यकता होगी:

  • आरएफआईडी रीडर (लंबन #28140 $39.99)
  • आरएफआईडी टैग (लंबन #32397 $0.99)
  • AVR या Arduino क्लोन (यदि आप स्टॉक AVR का उपयोग करते हैं, तो आपको अधिकतम 232, 5 x 1uF कैपेसिटर और DE9 कनेक्टर की भी आवश्यकता होगी)
  • सोल्डरलेस ब्रेडबोर्ड

ऐच्छिक

  • 4 स्थिति शीर्षलेख
  • वायर

(और टैग जानकारी के संचार के लिए अधिकतम 232 आदि) आप आरएस232 के माध्यम से टैग डेटा भेजने के बदले अपनी पसंदीदा एलसीडी स्क्रीन भी कनेक्ट कर सकते हैं।

चरण 2: भागों को कनेक्ट करें

भागों को कनेक्ट करें
भागों को कनेक्ट करें
भागों को कनेक्ट करें
भागों को कनेक्ट करें
भागों को कनेक्ट करें
भागों को कनेक्ट करें

चीजों का हार्डवेयर पक्ष बहुत आसान है। अपने आरएफआईडी रीडर को सीधे अपने ब्रेडबोर्ड में डालने के बजाय मैंने एक त्वरित केबल बनाने का विकल्प चुना ताकि मैं आरएफआईडी रीडर को थोड़ा बेहतर तरीके से स्थानांतरित कर सकूं। उसके लिए, मैंने सिर्फ एक महिला सॉकेट हेडर स्ट्रिप से 4 पदों को काट दिया, जिसके बारे में मैं पड़ा था और तीन तारों पर मिलाप किया था। विद्युत टेप ने यहूदी बस्ती कनेक्टर को पूरा किया। आरएफआईडी रीडर में 4 कनेक्शन हैं:

  • वीसीसी
  • सक्षम
  • बाहर
  • गांधी

जैसा कि आपने शायद अनुमान लगाया था, Vcc को +5V और Gnd को जमीन से कनेक्ट करें। क्योंकि RFID रीडर बहुत अधिक बिजली की खपत करता है, आप विभिन्न अंतरालों पर इसे बंद और चालू करने के लिए ENABLE पिन को हिट कर सकते हैं। मैंने बस इसे चालू रखना चुना। क्योंकि यह उल्टा है, आप इसे सक्रिय करने के लिए इसे कम खींचते हैं। वैकल्पिक रूप से, आप इसे जमीन से जोड़ सकते हैं। यदि मैंने निर्णय लिया है तो मुझे सक्षम/अक्षम करने के विकल्प देने के लिए मैंने इसे PIND3 से जोड़ा। आउट पिन वह जगह है जहां पाठक एक टैग पढ़ने के बाद अपना सीरियल डेटा भेजता है। मैंने इसे PIND2. Note से जोड़ा है, Parallax Universe में, लाल का अर्थ है जाना। यानी हरे रंग की एलईडी का मतलब है कि इकाई निष्क्रिय और निष्क्रिय है, जबकि लाल एलईडी का मतलब है कि इकाई सक्रिय है। * श्रग * गो फिगर।

चरण 3: कोड लिखें

कोड लिखें
कोड लिखें

RFID रीडर से डेटा को पढ़ने के लिए, आपको यह जानना होगा कि टैग कब सबमिट किया गया है, सीरियल पोर्ट से डेटा को हटा दें, फिर कहीं भेज दें।

आरएफआईडी रीडर डेटा प्रारूप

लंबन आरएफआईडी रीडर 2400 बॉड की निश्चित, हिमनद गति से डेटा भेजता है। एक RFID टैग 10 बाइट्स का होता है। त्रुटि का पता लगाने/सुधार करने की अनुमति देने के लिए, चूंकि पाठक को यादृच्छिक शोर से बंद किया जा सकता है, इसलिए 10-बाइट आरएफआईडी एक स्टार्ट और स्टॉप सेंटीनेल से घिरा हुआ है। प्रारंभ प्रहरी लाइन फीड (0x0A) है और स्टॉप प्रहरी कैरिज रिटर्न (0x0D) है। यह इस तरह दिख रहा है:

[स्टार्ट सेंटिनल |बाइट 1|बाइट 2|बाइट 3|बाइट 4|बाइट 5|बाइट 6|बाइट 7|बाइट 8|बाइट 9|बाइट 10| प्रहरी बंद करो]ये तीन प्राथमिक चरण हैं।

जानें कि टैग कब सबमिट किया गया है

मैंने AVR पर एक पिन चेंज इंटरप्ट का उपयोग किया जो फर्मवेयर को सूचित करता है कि एक मॉनिटर किए गए पिन पर एक बदलाव हुआ है। इसके लिए AVR को कॉन्फ़िगर करना आसान है और इसके लिए ध्वज को सेट करने की आवश्यकता होती है, MCU को यह बताना कि आप किस पिन की निगरानी करना चाहते हैं, और ग्लोबल इंटरप्ट बिट सेट करना। पीसीआईएनटी कॉन्फ़िगर करें

बीएसईटी (पीसीआईसीआर, पीसीआईई2); // पिन चेंज इंटरप्ट कंट्रोल रजिस्टर pcie2 BSET (PCMSK2, PCINT18); // PCINT18 (PD2) BSET (SREG, 7) के लिए पिन चेंज इंटरप्ट सक्षम करें; // SREG I-bit सेट करेंअपना इंटरप्ट सर्विस रूटीन लिखें आप अपने ISR को छोटा रखना चाहते हैं इसलिए मेरे इंटरप्ट वेक्टर में मैं पूरी बाइट पढ़ता हूं, थोड़ा-थोड़ा करके, और बाइट को एक वैश्विक अस्थिर वर्ण सरणी में संग्रहीत करता हूं। मैं प्रत्येक रुकावट पर निम्नलिखित कार्य करता हूं:

  • यह सुनिश्चित करने के लिए जांचें कि मैं प्रारंभ बिट पर हूं
  • 2400 बॉड (RFID रीडर की गति) पर समय को मध्य पल्स पर केन्द्रित करें
  • स्टार्ट बिट को छोड़ें और अगले बिट के बीच में रुकें
  • प्रत्येक बिट को एक अहस्ताक्षरित पूर्णांक में पढ़ें
  • जब मेरे पास 8 बिट हों, तो बाइट को कैरेक्टर ऐरे में डाल दें
  • जब मैंने 12 बाइट्स एकत्र कर लिए हैं, तो MCU को बताएं कि त्रुटि का पता लगाने के लिए टैग पढ़ा गया है।

मैंने मिकाल हार्ट से सॉफ्टसेरियल कोड को संशोधित किया, जिसने सीरियल रूटीन में प्रयोगात्मक रूप से निर्धारित देरी के लिए डेविड मेलिस से कोड को संशोधित किया।

पार्स RS232 आउटपुट

PCINT रूटीन में RFID रीडर से RS232 आउटपुट पढ़ने के लिए कोड होता है। जब मुझे 12 बाइट्स (10-बाइट RFID प्लस सेंटीनेल) मिलते हैं, तो मैं bDataReady को 1 पर सेट करता हूं और मुख्य लूप को डेटा को प्रोसेस करने और उसे प्रदर्शित करने देता हूं।

// यह इंटरप्ट हैंडलर ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) है // स्टार्ट बिट कम रिटर्न देता है; uint8_t बिट = 0; ट्यून किया गया विलंब (CENTER_DELAY); // प्रारंभ बिट के लिए केंद्र (uint8_t x = 0; x <8; x++) { TunedDelay(INTRABIT_DELAY); // थोड़ा छोड़ें, भाई … अगर (बीसीएचके (पिन, आरएफआईडी_आईएन)) बीएसईटी (बिट, एक्स); अन्य बीसीएलआर (बिट, एक्स); } ट्यून किया गया विलंब (INTRABIT_DELAY); // स्किप स्टॉप बिट RFID_tag [rxIdx] = बिट; ++आरएक्सआईडीएक्स; अगर (rxIdx == 12) bDataReady = 1;}

अपना टैग प्रदर्शित करें

मुख्य () में, फॉर (एवर) लूप के दौरान, मैं यह देखने के लिए जांच करता हूं कि क्या bDataReady सेट किया गया है, यह दर्शाता है कि संपूर्ण RFID संरचना भेज दी गई है। मैं फिर यह देखने के लिए जांच करता हूं कि यह एक वैध टैग है (यानी प्रारंभ और रोकें वर्ण क्रमशः 0x0A और 0x0D हैं), और यदि ऐसा है, तो मैं इसे अपना आरएस 232 कनेक्शन भेजता हूं।

के लिए (;;) { अगर (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("बाइट प्रारंभ करें:"); USART_tx_S(itoa(RFID_tag[0], &ibuff[0], 16)); इबफ [0] = 0; इबफ [1] = 0; USART_tx_S ("\ n स्टॉप बाइट:"); USART_tx_S(itoa(RFID_tag[11], &ibuff[0], 16));#endif if (ValidTag()) { USART_tx_S("\nRFID Tag:"); for(uint8_t x = 1; x <11; x++) {USART_tx_S(itoa(RFID_tag[x], ibuff, 16)); अगर (एक्स!= 10) USART_tx(&apos:&apos); } USART_tx_S ("\ n"); } rxIdx = 0; बीडाटारेडी = 0; }}

चरण 4: कोड और विदाई

इस पृष्ठ में प्रासंगिक कोड के साथ एक ज़िप फ़ाइल है। यह एवीआर स्टूडियो 4.16 में लिखा गया था। यदि आप प्रोग्रामर के नोटपैड, ग्रहण, या vi (या कुछ और) का उपयोग करते हैं, तो आपको एक विश्वसनीय मेकफ़ाइल को निर्देशिका में कॉपी करना होगा और इन फ़ाइलों को स्रोत लाइन में जोड़ना होगा। यह भी ध्यान दें, सीरियल रीडिंग सेक्शन का समय एक पर आधारित है 16 मेगाहर्ट्ज एमसीयू। यदि आप एक अलग घड़ी आवृत्ति पर चल रहे हैं, तो आपको बॉड दर दालों पर केंद्र में ट्यून किए गए विलंब को प्रयोगात्मक रूप से निर्धारित करने की आवश्यकता होगी। मुझे आशा है कि इस निर्देश ने आपको किसी तरह से मदद की है। यदि आपके पास कोई सुझाव है कि इसे कैसे सुधारा जा सकता है तो मुझे बताने में संकोच न करें!

सिफारिश की: