हम कार्यालयों, शॉपिंग मॉल और कई अन्य स्थानों पर जानते हैं, जहां केवल प्राधिकरण कार्ड वाले व्यक्ति को कमरे में प्रवेश करने की अनुमति है। ये सिस्टम RFID संचार प्रणाली का उपयोग करते हैं। आरएफआईडी का उपयोग शॉपिंग मॉल में चोरी रोकने के लिए किया जाता है क्योंकि उत्पादों को आरएफआईडी चिप के साथ टैग किया जाता है और जब कोई व्यक्ति आरएफआईडी चिप के साथ इमारत को छोड़ देता है तो एक अलार्म स्वचालित रूप से उठाया जाता है। RFID टैग को रेत के हिस्से के रूप में छोटा बनाया गया है। RFID प्रमाणीकरण प्रणाली डिजाइन करना आसान है और लागत में सस्ते हैं। आजकल कुछ स्कूल और कॉलेज RFID आधारित उपस्थिति प्रणाली का उपयोग करते हैं ।
इस परियोजना में हम सुरक्षा उद्देश्यों के लिए एक RFID आधारित टोल संग्रह प्रणाली डिजाइन करने जा रहे हैं। इसलिए यह प्रणाली गेट खोलती है और केवल अधिकृत आरएफआईडी टैग के साथ लोगों को अनुमति देती है। अधिकृत टैग धारक आईडी को ATMEGA माइक्रोकंट्रोलर में क्रमादेशित किया जाता है और केवल उन धारकों को परिसर छोड़ने या प्रवेश करने की अनुमति होती है।
अवयव आवश्यक
हार्डवेयर: ATmega32 माइक्रोकंट्रोलर, बिजली की आपूर्ति (5v), AVR-ISP प्रोग्रामर, JHD_162ALCD (16x2 LCD मॉड्यूल), 100uF संधारित्र (बिजली की आपूर्ति से जुड़े), बटन, 10KF रोकनेवाला, 100nF संधारित्र, LED (दो टुकड़े), EM-18 (RFID रीडर मॉड्यूल), L293D मोटर ड्राइवर IC, 5V DC मोटर।
सॉफ्टवेयर: Atmel स्टूडियो 6.1, progisp या फ़्लैश मैजिक।
सर्किट आरेख और कार्य स्पष्टीकरण
में आरएफआईडी टोल संग्रहण प्रणाली सर्किट ऊपर दिखाए गए, ATmega32 के PORTA एलसीडी के डेटा बंदरगाह से जुड़ा है। यहां हमें फ्यूज बाइट्स को बदलकर, PORTC में ATMT में JTAG संचार को अक्षम करना याद रखना चाहिए, यदि हम PORTC को एक सामान्य संचार पोर्ट के रूप में उपयोग करना चाहते हैं। 16x2 एलसीडी में, बैक लाइट होने पर सभी में 16 पिन होते हैं, अगर बैक लाइट नहीं है तो 14 पिन होंगे। हम बैक लाइट पिंस को पावर या छोड़ सकते हैं। अब 14 पिनों में 8 डेटा पिन (7-14 या D0-D7), 2 पावर सप्लाई पिन (1 & 2 या VSS & VDD या gnd & + 5v), कंट्रास्ट कंट्रोल के लिए 3 rd पिन (VEE- कंट्रोल कितना मोटा है) पात्रों को दिखाया जाना चाहिए), 3 नियंत्रण पिन (आरएस और आरडब्ल्यू और ई)।
सर्किट में, आप देख सकते हैं कि मैंने केवल दो नियंत्रण पिन लिए हैं। इससे बेहतर समझ का लचीलापन मिलता है। कंट्रास्ट बिट और READ / WRITE का उपयोग अक्सर नहीं किया जाता है, ताकि उन्हें जमीन पर छोटा किया जा सके। यह एलसीडी को कंट्रास्ट और रीड मोड में डालता है। हमें केवल वर्ण और डेटा भेजने के लिए सक्षम और आरएस पिन को नियंत्रित करने की आवश्यकता है।
एलसीडी के लिए जो कनेक्शन दिए गए हैं, वे नीचे दिए गए हैं:
PIN1 या VSS जमीन पर
PIN2 या VDD या VCC से + 5v पावर
पिन 3 या वीईई को ग्राउंड (शुरुआती के लिए अधिकतम विपरीत देता है)
MC4 के PD6 को PIN4 या RS (रजिस्टर चयन)
पिन 5 या आरडब्ल्यू (पढ़ें / लिखें) को जमीन पर रखें (रीड मोड में एलसीडी लगाता है उपयोगकर्ता के लिए संचार को आसान बनाता है)
माइक्रोकंट्रोलर के PD5 को PIN6 या E (इनेबल)
PIN7 या D0 से PA0
PIN8 या D1 से PA1
PIN9 या D2 से PA2
PIN10 या D3 से PA3
PIN11 या D4 से PA4
PIN12 या D5 से PA5
PIN13 या D6 से PA6
PIN14 या D7 से PA7
सर्किट में, आप देख सकते हैं कि हमने 8bit संचार (D0-D7) का उपयोग किया है। हालाँकि यह अनिवार्य नहीं है और हम 4bit संचार (D4-D7) का उपयोग कर सकते हैं लेकिन 4 बिट संचार कार्यक्रम थोड़ा जटिल हो जाता है, इसलिए मैंने 8 बिट संचार को प्राथमिकता दी।
इसलिए उपरोक्त तालिका के मात्र अवलोकन से हम एलसीडी के 10 पिन को कंट्रोलर से जोड़ रहे हैं जिसमें 8 पिन डेटा पिन और 2 पिन नियंत्रण के लिए हैं।
आगे बढ़ने से पहले, हमें धारावाहिक संचार के बारे में समझने की आवश्यकता है। यहां आरएफआईडी मॉड्यूल धारावाहिक में नियंत्रक को डेटा भेजता है। इसमें संचार की अन्य विधा है लेकिन आसान संचार के लिए हम RS232 को चुन रहे हैं। मॉड्यूल का RS232 पिन ATMEGA के RXD पिन से जुड़ा है।
RFID मॉड्यूल द्वारा भेजा गया डेटा निम्नानुसार है:
अब RFID मॉड्यूल इंटरफ़ेस के लिए, निम्नलिखित विशेषताएं आवश्यक हैं:
1. नियंत्रक का RXD पिन (डेटा प्राप्त करने की सुविधा) सक्षम होना चाहिए।
2. चूंकि संचार धारावाहिक है, हमें यह जानने की आवश्यकता है कि जब भी डेटा बाय प्राप्त होता है, ताकि हम प्रोग्राम को पूर्ण बाइट प्राप्त होने तक रोक सकें। यह डेटा को पूर्ण व्यवधान प्राप्त करने में सक्षम करके किया जाता है।
3. RFID 8bit मोड में कंट्रोलर को डेटा भेजता है। इसलिए एक बार में दो अक्षर कंट्रोलर को भेजे जाएंगे। यह ऊपर दिए गए आंकड़े में दिखाया गया है।
4. उपरोक्त आंकड़े से, समता बिट्स नहीं हैं, मॉड्यूल द्वारा भेजे गए डेटा में एक स्टॉप बिट है।
उपरोक्त विशेषताएं नियंत्रक रजिस्टरों में सेट की गई हैं; हम उनकी संक्षिप्त चर्चा करने जा रहे हैं,
RED (RXEN): यह बिट डेटा सुविधा प्राप्त करता है। नियंत्रक द्वारा प्राप्त किए जाने वाले मॉड्यूल से डेटा के लिए यह बिट सेट होना चाहिए। यह कंट्रोलर के RXD पिन को भी इनेबल करता है।
BROWN (RXCIE): सफल डेटा रिसेप्शन के बाद एक अंतर प्राप्त करने के लिए इस बिट को सेट किया जाना चाहिए। इस बिट को सक्षम करके हमें पता चलता है, 8 बिट डेटा प्राप्त होने के ठीक बाद।
PINK (URSEL): यह बिट UCSRC में अन्य बिट्स को सक्षम करने से पहले सेट किया जाना चाहिए। स्थापित करने के बाद, UCSRC, URSEL में अन्य आवश्यक बिट्स को अक्षम किया जाना चाहिए या शून्य पर रखा जाना चाहिए।
YELLOW (UCSZ0, UCSZ1, UCSZ2): इन तीन बिट्स का उपयोग हम एक ही बार में प्राप्त या भेज रहे डेटा बिट्स की संख्या को चुनने के लिए करते हैं।
चूंकि RFID मॉड्यूल द्वारा भेजा गया डेटा 8bit डेटा प्रकार है, इसलिए हमें UCSZ0, UCSZ1 को एक और UCSZ2 को शून्य पर सेट करना होगा।
ORANGE (UMSEL): यह बिट इस आधार पर सेट होता है कि क्या सिस्टम एसिंक्रोनस रूप से संचार कर रहा है (दोनों अलग-अलग घड़ी का उपयोग करते हैं) या सिंक्रोनाइज़ (दोनों एक ही घड़ी का उपयोग करते हैं)।
चूंकि मॉड्यूल और नियंत्रक अलग-अलग घड़ी का उपयोग करते हैं, इसलिए इस बिट को शून्य पर सेट किया जाना चाहिए या अकेले छोड़ दिया जाना चाहिए क्योंकि वे डिफ़ॉल्ट रूप से शून्य पर सेट हैं।
GREEN (UPM1, UPM0): ये दोनों बिट्स बिट समता के आधार पर समायोजित किए जाते हैं जिनका हम संचार में उपयोग कर रहे हैं।
चूंकि RFID मॉड्यूल बिना समता के डेटा भेजता है, हमने UPM1, UPM0 दोनों को शून्य पर सेट किया है या उन्हें अकेले छोड़ा जा सकता है क्योंकि किसी भी रजिस्टर में सभी बिट्स डिफ़ॉल्ट रूप से शून्य पर सेट हैं।
BLUE (USBS): इस बिट का उपयोग संचार के दौरान हमारे द्वारा उपयोग किए जाने वाले स्टॉप बिट्स की संख्या को चुनने के लिए किया जाता है।
चूंकि RFID मॉड्यूल एक स्टॉप बिट के साथ डेटा भेजता है, इसलिए हमें सिर्फ USBS बिट को अकेला छोड़ना होगा।
अब अंत में हमें बॉड दर निर्धारित करने की आवश्यकता है, ऊपर के आंकड़े से यह स्पष्ट है कि आरएफआईडी मॉड्यूल बॉड को 9600bps (प्रति सेकंड बिट्स) की बॉड दर के साथ डेटा भेजता है।
बॉड दर को उचित UBRRH चुनकर नियंत्रक में सेट किया गया है।
UBRRH मान को बॉड दर और CPU क्रिस्टल आवृत्ति को संदर्भित करके क्रॉस के द्वारा चुना जाता है, इसलिए क्रॉस संदर्भ द्वारा UBRR मान को '6' के रूप में देखा जाता है, और इसलिए बॉड दर सेट की जाती है।
अब जैसा कि चित्र में दिखाया गया है, नियंत्रक से दो पिन L293D को जाता है, जो कि कम बिजली डीसी मोटर्स के लिए रोटेशन की गति और दिशा को नियंत्रित करने के लिए उपयोग किया जाने वाला एक एच-ब्रिड है।
L293D एक H-BRIDGE IC है जिसे कम पॉवर वाली DC मोटर्स को चलाने के लिए डिज़ाइन किया गया है और यह आंकड़ा में दिखाया गया है, इस IC में दो h-bridges हैं और इसलिए यह दो DC मोटर्स को ड्राइव कर सकता है। इसलिए इस आईसी का उपयोग माइक्रोकंट्रोलर के संकेतों से रोबोट मोटर्स को चलाने के लिए किया जा सकता है।
अब जैसा कि इस आईसी के सामने चर्चा है कि डीसी मोटर के रोटेशन की दिशा को बदलने की क्षमता है। यह INPUT1 और INPUT2 पर वोल्टेज के स्तर को नियंत्रित करके हासिल किया जाता है।
पिन सक्षम करें |
इनपुट पिन १ |
इनपुट पिन २ |
मोटर दिशा |
उच्च |
कम |
उच्च |
दायें मुड़ो |
उच्च |
उच्च |
कम |
बांए मुड़िए |
उच्च |
कम |
कम |
रुकें |
उच्च |
उच्च |
उच्च |
रुकें |
तो जैसा कि ऊपर तालिका में दिखाया गया है, क्लॉक वाइज रोटेशन के लिए 2 ए अधिक होना चाहिए और 1 ए कम होना चाहिए। इसी तरह एंटी क्लॉकवाइज के लिए 1 ए ज्यादा और 2 ए कम होना चाहिए।
जब भी किसी अधिकृत कार्ड को मॉड्यूल के पास लाया जाता है, तो मोटर को एक सेकंड के लिए दक्षिणावर्त स्थानांतरित करने के लिए प्रोग्राम किया जाता है, यह दिखाने के लिए कि टोल गेट बंद होने के बाद एक सेकंड के बाद उसे खोला जाता है। टोल प्लाजा की कार्यप्रणाली को नीचे दिए गए C कोड के चरण दर चरण समझाया गया है।
प्रोग्रामिंग स्पष्टीकरण
नीचे RFID टोल संग्रह प्रणाली के कोड के लिए लाइन टू लाइन स्पष्टीकरण है । आप नीचे दिए गए कोड को पढ़कर इस परियोजना की अवधारणा और कार्य को समझ सकते हैं। डाउनलोड या कॉपी करने के लिए, आप पेज के नीचे पूरा कोड पा सकते हैं।
पिनों पर डेटा प्रवाह नियंत्रण को सक्षम करने के लिए #include // हैडर
#define F_CPU 1000000 // कंट्रोलर क्रिस्टल फ्रिक्वेंसी को बताना
#शामिल
#Dfine E 5 // PORTD के 5 वें पिन को "इनेबल" नाम देना, क्योंकि यह एलसीडी इनेबल पिन से जुड़ा है
#define RS 6 // PORTD के 6 वें पिन को "registerselection" नाम दे रहा है, क्योंकि यह LCD पिन पिन से जुड़ा है
शून्य send_a_command (अहस्ताक्षरित char कमांड);
शून्य send_a_character (अहस्ताक्षरित वर्ण);
void send_a_string (char * string_of_characters);
इंट मेन (शून्य)
{{
DDRA = 0xFF; // आउटपुट पिंस के रूप में पोर्टा डाल रहा है
DDRD = 0b11111110;
_delay_ms (50); // 50ms की देरी दे रही है
DDRB = 0b11110000; // कुछ पोर्टबी पिन को इनपुट के रूप में लेना।
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC और = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // बॉड दर सेट करना। // इसमें टैग की आईडी शामिल है, इन्हें अलग-अलग टैग के लिए बदला जाना चाहिए, परियोजना के काम करने के लिए इन्हें अपडेट किया जाना चाहिए
/ * कंट्रोलर में प्रोग्राम को डंप करने के बाद एक कार्ड लेना होगा जो अधिकृत होना चाहिए और टैग आईडी प्राप्त करना होगा। ये आरएफआईडी मॉड्यूल के पास टैग रखकर प्राप्त किए जाते हैं और आईडी स्क्रीन पर दिखाई जाएगी। आईडी प्राप्त करने के बाद, प्रोग्राम को नीचे दिए गए आईडी नंबर को नए आईडी नंबर के साथ बदलकर अपडेट किया जाना चाहिए।
char ADMIT = {{(0x97), (0xa1), (0x90)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x90)}}; |
अब ऊपर हम केवल पाँच कार्डों को अधिकृत कर रहे हैं, इन्हें किसी भी संख्या में बदला जा सकता है।
उदाहरण के लिए विचार करें कि डिफ़ॉल्ट प्रोग्राम कंट्रोलर में डंप है, कार्ड प्राप्त करें जिन्हें अधिकृत किया जाना चाहिए। मॉड्यूल के पास एक के बाद एक रखें, आपको xxxxxxxx (907a4F87) के रूप में प्रत्येक के लिए आईडी मिलेगी, अगर हमारे पास 7 टैग हैं, तो हमारे पास 7 आठ बिट आईडी होंगे। * /
// अब सात कार्ड के लिए यह जाता है // चार ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // मॉड्यूल द्वारा आईडी भेजने के लिए मेमोरी आवंटित करना int i = 0; int वोट = 0; int k = 0; send_a_command (0x01); // स्पष्ट स्क्रीन 0x01 = 00000001 _delay_ms (50); send_a_command (0x38); // एलसीडी बताने से हम 8bit कमांड / डेटा मोड का उपयोग कर रहे हैं _delay_ms (50); send_a_command (0b00001111); // एलसीडी स्क्रीन पर और निमिष निमिष चार मेम; // टैग की पूरी आईडी स्टोर करने के लिए मेमोरी आवंटित करना send_a_string ("RFID NUMBER"); // तार भेजना send_a_command (0x80 + 0x40 + 0); // दूसरी लाइन में चलकर आंगन जबकि (1) {{ जबकि (! (UCSRA & 1 <)
{{ } कूंटा = यूडीआर; // UDR प्राप्त आठ बिट डेटा को संग्रहीत करता है और इसे पूर्णांक में ले जाया जाता है। MEM = COUNTA; // पहले दो अक्षर मेमोरी में अपडेट किए जाते हैं itoa (COUNTA, SHOWA, 16); // एलसीडी में वेरिएबल नंबर डालने के लिए कमांड (वेरिएबल नंबर, जिसमें कैरेक्टर को रिप्लेस करना है, कौन सा बेस वेरिएबल है (दस यहां जैसे हम बेस 10 में नंबर गिन रहे हैं)) send_a_string (शोवा); // एलसीडी पर आंगन की स्थिति के बाद दूसरे व्यक्ति के चरित्र को दिखाने के लिए (चर संख्या द्वारा प्रतिस्थापित) प्रदर्शन को बताना जबकि (! (UCSRA & 1 <)
{{ } कूंटा = यूडीआर; itoa (COUNTA, SHOWA, 16); send_a_string (शोवा); MEM = COUNTA; // तीसरे और चौथे अक्षर को मेमोरी में अपडेट किया जाता है जबकि (! (UCSRA & 1 <)
{{ } कूंटा = यूडीआर; itoa (COUNTA, SHOWA, 16); send_a_string (शोवा); MEM = COUNTA; // पांचवें और छठे वर्णों को मेमोरी में अपडेट किया जाता है जबकि (! (UCSRA & 1 <)
{{ } कूंटा = यूडीआर; itoa (COUNTA, SHOWA, 16); send_a_string (शोवा); MEM = COUNTA; // सातवें और आठ अक्षर मेमोरी में अपडेट किए जाते हैं send_a_string (""); send_a_command (0x80 + 0x40 + 0); UCSRB और = ~ (1 <
के लिए (i = 0; मैं <5; मैं ++) {{ यदि ((MEM == ADMIT) और (MEM == ADMIT) और (MEM == ADMIT) और (MEM == ADMIT) {स्मृति के पात्रों के साथ एक बार में दो वर्णों की तुलना करते हुए प्राधिकरण के लिए चेक जाँच PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // विलंब _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); PORTB & = ~ (1 <
PORTB - = (1 <
} } UCSRB - = (1 <
} } शून्य send_a_command (अहस्ताक्षरित चार कमांड) {{ पोर्तो = आज्ञा; पोर्ट और = ~ (1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
पोर्टा = 0; } शून्य send_a_character (अहस्ताक्षरित वर्ण) {{ पोर्टा = चरित्र; PORTD - = 1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
पोर्टा = 0; } शून्य send_a_string (char * string_of_characters) {{ जबकि (* string_of_characters> 0) {{ send_a_character (* string_of_characters ++); } } |