- पता करने के लिए nRF24L01 आरएफ मॉड्यूल
- Arduino के साथ nRF24L01 इंटरफैसिंग
- रिसीवर पक्ष: Arduino Uno nRF24L01 मॉड्यूल कनेक्शन
- ट्रांसमीटर की ओर: Arduino नैनो nRF24L01 मॉड्यूल कनेक्शन
- NRF24L01 + वायरलेस ट्रांसीवर मॉड्यूल के साथ काम करना
- Arduino के लिए प्रोग्रामिंग nRF24L01
- NRF24L01 वायरलेस तरीके से सर्वो मोटर को नियंत्रित करना
जबकि इंटरनेट ऑफ थिंग्स (IoT), उद्योग 4.0, मशीन टू मशीन संचार आदि तेजी से लोकप्रिय हो रहे हैं वायरलेस संचार की आवश्यकता लगातार हो गई है, अधिक मशीनों / उपकरणों के साथ एक दूसरे के साथ क्लाउड पर बात करने के लिए। डिजाइनर ब्लूटूथ कम ऊर्जा (BLE 4.0), Zigbee, ESP43 वाई-फाई मॉड्यूल, 433MHz आरएफ मॉड्यूल, लोरा, nRF आदि जैसे कई वायरलेस संचार प्रणालियों का उपयोग करते हैं, और मध्यम का चयन इस बात पर निर्भर करता है कि किस प्रकार के अनुप्रयोग का उपयोग किया जा रहा है।
सभी के बीच, स्थानीय नेटवर्क संचार के लिए एक लोकप्रिय वायरलेस माध्यम nRF24L01 है । ये मॉड्यूल 250GHz से 2Mbps तक बॉड दर के साथ 2.4GHz (ISM बैंड) पर काम करते हैं जो कई देशों में कानूनी है और इसका उपयोग औद्योगिक और चिकित्सा अनुप्रयोगों में किया जा सकता है। यह भी दावा किया जाता है कि उचित एंटेना के साथ ये मॉड्यूल अपने बीच 100 मीटर की दूरी तक संचारित और प्राप्त कर सकते हैं। दिलचस्प सही !! इसलिए, इस ट्यूटोरियल में हम इन nRF24l01 मॉड्यूल्स के बारे में अधिक जानेंगे और इसे कैसेडूइनो की तरह एक माइक्रोकंट्रोलर प्लेटफॉर्म के साथ इंटरफेस करेंगे । हम इस मॉड्यूल का उपयोग करते समय आमतौर पर सामना की जाने वाली समस्याओं के लिए कुछ समाधान भी साझा करेंगे।
पता करने के लिए nRF24L01 आरएफ मॉड्यूल
NRF24L01 मॉड्यूल हैं ट्रांसीवर मॉड्यूल, प्रत्येक मॉड्यूल अर्थ कर सकते हैं दोनों भेजने और डेटा प्राप्त लेकिन जब से वे कर रहे हैं आधा-डुप्लेक्स वे या तो भेज सकते हैं या एक समय में डेटा प्राप्त कर सकते हैं। मॉड्यूल में नॉर्डिक अर्ध-कंडक्टरों से जेनेरिक nRF24L01 आईसी है जो डेटा के प्रसारण और स्वागत के लिए जिम्मेदार है। आईसी एसपीआई प्रोटोकॉल का उपयोग करके संचार करता है और इसलिए किसी भी माइक्रोकंट्रोलर के साथ आसानी से हस्तक्षेप किया जा सकता है। यह Arduino के साथ बहुत आसान हो जाता है क्योंकि पुस्तकालय आसानी से उपलब्ध हैं। एक मानक nRF24L01 मॉड्यूल के pinouts नीचे दिखाया गया है
मॉड्यूल 1.9V से 3.6V (आमतौर पर 3.3V) तक ऑपरेटिंग वोल्टेज पर है और सामान्य ऑपरेशन के दौरान केवल 12mA की बहुत कम वर्तमान खपत करता है जो इसे बैटरी कुशल बनाता है और इसलिए सिक्का कोशिकाओं पर भी चल सकता है। भले ही ऑपरेटिंग वोल्टेज 3.3V है अधिकांश पिन 5V सहिष्णु हैं और इसलिए Arduino जैसे 5V माइक्रोकंट्रोलर्स के साथ सीधे हस्तक्षेप किया जा सकता है। इन मॉड्यूल का उपयोग करने का एक और लाभ यह है कि, प्रत्येक मॉड्यूल में 6 पाइपलाइन हैं। मतलब, प्रत्येक मॉड्यूल डेटा संचारित या प्राप्त करने के लिए 6 अन्य मॉड्यूल के साथ संवाद कर सकता है। यह मॉड्यूल को IoT अनुप्रयोगों में स्टार या मेष नेटवर्क बनाने के लिए उपयुक्त बनाता है। इसके अलावा, उनके पास 125 विशिष्ट आईडी की एक विस्तृत पता सीमा है, इसलिए एक बंद क्षेत्र में हम एक दूसरे के साथ हस्तक्षेप किए बिना इनमें से 125 मॉड्यूल का उपयोग कर सकते हैं।
Arduino के साथ nRF24L01 इंटरफैसिंग
इस ट्यूटोरियल में हम सीखेंगे कि दूसरे Arduino पर पोटेंशियोमीटर को अलग करके एक Arduino के साथ जुड़े सर्वो मोटर को नियंत्रित करके Arduino के साथ nRF24L01 को कैसे इंटरफ़ेस करें । सादगी के लिए हमने एक nRF24L01 मॉड्यूल को ट्रांसमीटर के रूप में उपयोग किया है और दूसरा रिसीवर है, लेकिन प्रत्येक मॉड्यूल को व्यक्तिगत रूप से डेटा भेजने और प्राप्त करने के लिए प्रोग्राम किया जा सकता है।
Arduino के साथ nRF24L01 मॉड्यूल को जोड़ने के लिए सर्किट आरेख नीचे दिखाया गया है। विविधता के लिए, मैंने रिसीवर पक्ष के लिए UNO और ट्रांसमीटर पक्ष के लिए नैनो का उपयोग किया है। लेकिन कनेक्शन के लिए तर्क मिनी, मेगा जैसे अन्य Arduino बोर्डों के लिए भी समान है।
रिसीवर पक्ष: Arduino Uno nRF24L01 मॉड्यूल कनेक्शन
जैसा कि पहले कहा गया था कि nRF24L01 SPI प्रोटोकॉल की मदद से संचार करता है । Arduino नैनो और UNO पर पिन 11, 12 और 13 का उपयोग SPI संचार के लिए किया जाता है। इसलिए हम MRI, MISO और SCK पिनों को nRF से क्रमशः 11, 12 और 13 से जोड़ते हैं। पिन सीई और सीएस उपयोगकर्ता विन्यास योग्य हैं, मैंने यहां पिन 7 और 8 का उपयोग किया है, लेकिन आप प्रोग्राम को बदलकर किसी भी पिन का उपयोग कर सकते हैं। NRF मॉड्यूल Arduino पर 3.3V पिन द्वारा संचालित है, जो ज्यादातर मामलों में काम करेगा। यदि नहीं, तो एक अलग बिजली आपूर्ति की कोशिश की जा सकती है। इसके अलावा nRF को रोकने के लिए मैंने 7 को पिन करने के लिए एक सर्वो मोटर को भी जोड़ा है और इसे Arduino पर 5V पिन के माध्यम से संचालित किया है। इसी प्रकार ट्रांसमीटर सर्किट नीचे दिखाया गया है।
ट्रांसमीटर की ओर: Arduino नैनो nRF24L01 मॉड्यूल कनेक्शन
ट्रांसमीटर के लिए कनेक्शन भी समान हैं, इसके अलावा मैंने Arduino के 5V विज्ञापन ग्राउंड पिन से जुड़े एक पोटेंशियोमीटर का उपयोग किया है। आउटपुट एनालॉग वोल्टेज जो 0-5 वी से भिन्न होगा, नैनो के ए 7 पिन से जुड़ा है। दोनों बोर्ड यूएसबी पोर्ट के माध्यम से संचालित होते हैं।
NRF24L01 + वायरलेस ट्रांसीवर मॉड्यूल के साथ काम करना
हालाँकि, शोर से मुक्त काम करने के लिए हमारे nRF24L01 को बनाने के लिए हम निम्नलिखित बातों पर विचार करना चाहते हैं। मैं इस nRF24L01 + पर लंबे समय से काम कर रहा हूं और निम्नलिखित बिंदुओं को सीखा है जो आपको दीवार पर हिट होने में मदद कर सकते हैं। जब मॉड्यूल सामान्य तरीके से काम नहीं करते हैं, तो आप इन्हें आज़मा सकते हैं।
1. बाजार में nRF24L01 + के अधिकांश मॉड्यूल नकली हैं। ईबे और अमेज़ॅन पर हम जो सस्ते मिल सकते हैं वे सबसे खराब हैं (चिंता न करें, कुछ ट्विक्स के साथ हम उन्हें काम दे सकते हैं)
2. मुख्य समस्या बिजली की आपूर्ति है, न कि आपका कोड। अधिकांश कोड ऑनलाइन ठीक से काम करेंगे, मेरे पास खुद एक काम करने वाला कोड है जिसे मैंने व्यक्तिगत रूप से परीक्षण किया है, मुझे बताएं कि क्या आपको उनकी आवश्यकता है।
3. ध्यान दें क्योंकि जो मॉड्यूल NRF24L01 + के रूप में मुद्रित होते हैं वे वास्तव में Si24Ri (हाँ एक चीनी उत्पाद) हैं।
4. क्लोन और नकली मॉड्यूल अधिक बिजली की खपत करेंगे, इसलिए nRF24L01 + डेटाशीट के आधार पर अपने पावर सर्किट को विकसित न करें, क्योंकि Si24Ri में 250mA के बारे में उच्च वर्तमान खपत होगी।
5. वोल्टेज तरंगों और वर्तमान तरंगों से सावधान रहें, ये मॉड्यूल बहुत संवेदनशील हैं और आसानी से जल सकते हैं। (;-(अब तक 2 मॉड्यूल को तला हुआ)
6. मॉड्यूल के Vcc और Gnd के पार युगल कैपेसिटर (10uF और 0.1uF) जोड़ने से आपकी आपूर्ति शुद्ध होती है और यह अधिकांश मॉड्यूल के लिए काम करता है।
फिर भी अगर आपको टिप्पणी अनुभाग पर रिपोर्ट करने या इसके माध्यम से पढ़ने में समस्या है, या हमारे मंच पर अपने प्रश्न पूछें।
इसके अलावा nRF24L01 का उपयोग करके चैट रूम बनाने पर हमारी व्यापक परियोजना की जाँच करें।
Arduino के लिए प्रोग्रामिंग nRF24L01
गीथहब पर मैनीकबग द्वारा बनाई गई आसानी से उपलब्ध लाइब्रेरी के कारण, Arduino के साथ इन मॉड्यूल का उपयोग करना बहुत आसान है। लाइब्रेरी को ज़िप फ़ोल्डर के रूप में डाउनलोड करने के लिए लिंक पर क्लिक करें और स्केच -> शामिल लाइब्रेरी -> Add.ZIP लाइब्रेरी विकल्प का उपयोग करके अपने Arduino IDE में जोड़ें । लाइब्रेरी जोड़ने के बाद हम प्रोजेक्ट के लिए प्रोग्रामिंग शुरू कर सकते हैं। हमें दो कार्यक्रम लिखने हैं, एक ट्रांसमीटर पक्ष के लिए है और दूसरा रिसीवर पक्ष के लिए है। हालाँकि जैसा कि मैंने पहले बताया कि प्रत्येक मॉड्यूल ट्रांसमीटर और रिसीवर दोनों के रूप में काम कर सकता है। दोनों कार्यक्रम इस पृष्ठ के अंत में दिए गए हैंट्रांसमीटर कोड में रिसीवर के विकल्प पर टिप्पणी की जाएगी और रिसीवर कार्यक्रम में ट्रांसमीटर कोड पर टिप्पणी की जाएगी। आप इसका उपयोग कर सकते हैं यदि आप एक ऐसी परियोजना की कोशिश कर रहे हैं जिसमें मॉड्यूल को दोनों के रूप में काम करना है। कार्यक्रम का काम नीचे समझाया गया है।
हेडर फ़ाइलों को शामिल करके हम सभी कार्यक्रमों को शुरू करते हैं । चूंकि एनआरएफ एसपीआई प्रोटोकॉल का उपयोग करता है इसलिए हमने एसपीआई हेडर और लाइब्रेरी को भी शामिल किया है जिसे हमने अभी डाउनलोड किया है। सर्वो लाइब्रेरी का उपयोग सर्वो मोटर को नियंत्रित करने के लिए किया जाता है।
#शामिल
अगली पंक्ति वह महत्वपूर्ण रेखा है जहाँ हम पुस्तकालय को CE और CS पिन के बारे में निर्देश देते हैं । हमारे सर्किट आरेख में हमने पिन को 7 और सीएस को 8 से पिन करने के लिए जोड़ा है, इसलिए हमने लाइन को सेट किया
RF24 myRadio (7, 8);
सभी चर जो RF लाइब्रेरी से जुड़े हैं, उन्हें एक समग्र परिवर्तनशील संरचना के रूप में घोषित किया जाना चाहिए। इस कार्यक्रम में चर संदेश आरएफ मॉड्यूल से डेटा भेजने और प्राप्त करने के लिए प्रयोग किया जाता है।
संरचना पैकेज { int संदेश; }; typedef संरचना पैकेज पैकेज; पैकेज डेटा;
प्रत्येक आरएफ मॉड्यूल का एक अनूठा पता होता है, जिसका उपयोग करके वह संबंधित डिवाइस को डेटा भेज सकता है। चूंकि हमारे यहां केवल एक जोड़ी है, इसलिए हमने ट्रांसमीटर और रिसीवर दोनों में शून्य को निर्धारित किया है, लेकिन यदि आपके पास कई मॉड्यूल हैं, तो आप आईडी को किसी भी अद्वितीय 6 अंक स्ट्रिंग में सेट कर सकते हैं।
बाइट पते = {"0"};
शून्य सेटअप फ़ंक्शन के अंदर हम आरएफ मॉड्यूल को इनिशियलाइज़ करते हैं और 115 बैंड के साथ काम करने के लिए सेट करते हैं जो शोर से मुक्त होता है और 250Kbps की न्यूनतम गति के साथ न्यूनतम बिजली की खपत मोड में काम करने के लिए मॉड्यूल भी सेट करता है।
शून्य सेटअप () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 बैंड ऊपर WIFI सिग्नल myRadio.setPALevel (RF24_PA_MIN); // MIN पावर कम रेज myRadio.setDataRate (RF24_250KBPS); // न्यूनतम गति myservo.attach (6); Serial.print ("सेटअप आरंभिक"); देरी (500); }
शून्य लिपिडेटा () फ़ंक्शन इसके पास किए गए डेटा को लिखता है । जैसा कि पहले बताया गया है कि nRF में 6 अलग-अलग पाइप हैं जिनसे हम डेटा पढ़ या लिख सकते हैं, यहां हमने डेटा लिखने के लिए पते के रूप में 0xF0F0F0F066 का उपयोग किया है। रिसीवर पक्ष पर हमें जोडेटा लिखा गया था उसे प्राप्त करने के लिए ReadData () फ़ंक्शनपर समान पते का उपयोगकरना होगा।
शून्य लिखता () { myRadio.stopListening (); // प्राप्त करना बंद करो और myRadio.openWritingPipe (0xF0F0F0F066) ट्रांसमिनिट शुरू करो ; // इस 40-बिट एड्रेस myRadio.write (और डेटा, sizeof (डेटा)) पर डेटा भेजता है ; देरी (300); }
शून्य राइटडाटा () फ़ंक्शन डेटा को पढ़ता है और इसे एक चर में डालता है । फिर से 6 अलग-अलग पाइपों का उपयोग करके हम यहां डेटा पढ़ या लिख सकते हैं, हमने डेटा को पढ़ने के लिए पते के रूप में 0xF0F0F0F0AA उपयोग किया है। इसका मतलब है कि अन्य मॉड्यूल के ट्रांसमीटर ने इस पते पर कुछ लिखा है और इसलिए हम इसे उसी से पढ़ रहे हैं।
शून्य रीडडाटा () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // कौन सा पाइप पढ़ना है, 40 बिट एड्रेस myRadio.startListening (); // ट्रांसमिट करना बंद करें और यदि (myRadio.available ()) { जबकि (myRadio.available ())) { myRadio.read (& data, sizeof (data)) फिर से शुरू हो रहा है; } Serial.println (data.text); } }
इन पंक्तियों के अलावा कार्यक्रम में अन्य पंक्तियों का उपयोग पॉट को पढ़ने और मानचित्र फ़ंक्शन का उपयोग करके इसे 0 से 180 में परिवर्तित करने के लिए किया जाता है और इसे रिसीवर मॉड्यूल में भेजते हैं जहां हम तदनुसार नियंत्रण करते हैं। मैंने उन्हें लाइन से नहीं समझाया है क्योंकि हमने पहले ही यह जान लिया है कि हमारे सर्वो इंटरफेसिंग ट्यूटोरियल में।
NRF24L01 वायरलेस तरीके से सर्वो मोटर को नियंत्रित करना
एक बार जब आप प्रोग्राम के साथ तैयार हो जाते हैं तो संबंधित Arduino बोर्डों पर ट्रांसमीटर और रिसीवर कोड (नीचे दिए गए) अपलोड करें और उन्हें USB पोर्ट के साथ पावर दें। आप यह जांचने के लिए कि क्या मूल्य प्राप्त किया जा रहा है और क्या प्राप्त हो रहा है, दोनों बोर्ड के सीरियल मॉनिटर को भी लॉन्च कर सकते हैं। जब आप ट्रांसमीटर की तरफ पॉट नॉब को चालू करते हैं तो सब कुछ अपेक्षा के अनुसार काम कर रहा होता है तो दूसरी तरफ सर्वो भी उसी के अनुसार होना चाहिए।
परियोजना का पूरा काम नीचे दिए गए वीडियो में दिखाया गया है । इन मॉड्यूल को पहली कोशिश पर काम नहीं करने के लिए यह बिल्कुल सामान्य है, अगर आपको किसी भी समस्या का सामना करना पड़ा है तो कोड की जांच करें और फिर से वायरिंग करें और ऊपर दिए गए मुसीबत के दिशा निर्देशों को आज़माएं। यदि कुछ भी काम आपकी समस्या को मंचों पर या टिप्पणी अनुभाग में पोस्ट नहीं करता है और मैं उन्हें हल करने का प्रयास करूंगा।