- अवयव आवश्यक
- 433 मेगाहर्ट्ज आरएफ ट्रांसमीटर और रिसीवर मॉड्यूल)
- STM32F103C8 के साथ आरएफ ट्रांसमीटर का सर्किट आरेख
- Arduino Uno के साथ RF रिसीवर का सर्किट आरेख
- वायरलेस आरएफ ट्रांसमिशन के लिए प्रोग्रामिंग STM32F103C8
- Arduino UNO को RF रिसीवर के रूप में प्रोग्रामिंग करना
- एसटीएम 32 आधारित आरएफ ट्रांसमीटर और रिसीवर का परीक्षण
एम्बेडेड इलेक्ट्रॉनिक्स में वायरलेस प्रोजेक्ट बनाना बहुत महत्वपूर्ण और सहायक हो जाता है क्योंकि इसमें कोई जंबल्ड तार नहीं होते हैं जो डिवाइस को अधिक आसान और पोर्टेबल बनाता है। ब्लूटूथ, वाईफाई, 433 मेगाहर्ट्ज आरएफ (रेडियो फ्रीक्वेंसी) आदि जैसे विभिन्न वायरलेस तकनीक हैं। हर तकनीक के अपने फायदे और नुकसान हैं जैसे लागत, दूरी या रेंज ट्रांसफर, स्पीड या थ्रूपुट आदि। आज हम STM32 के साथ RF मॉड्यूल का उपयोग करेंगे। वायरलेस तरीके से डेटा भेजना और प्राप्त करना । यदि आप STM32 माइक्रोकंट्रोलर के लिए नए हैं, तो Arduino IDE का उपयोग करके STM32 के साथ ब्लिंकिंग LED से शुरू करें और अन्य सभी STM32 प्रोजेक्ट्स की जाँच करें।
इसके अलावा, हमने कुछ वायरलेस नियंत्रित परियोजनाओं के निर्माण के लिए अन्य माइक्रोकंट्रोलर्स के साथ RF 433Mhz वायरलेस मॉड्यूल का भी उपयोग किया है:
- RF नियंत्रित घरेलू उपकरण
- रास्पबेरी पाई का उपयोग करके आरएफ रिमोट नियंत्रित एल ई डी
- RF नियंत्रित रोबोट
- Arduino के साथ Interfacing आरएफ मॉड्यूल
- आरएफ मॉड्यूल का उपयोग करके PIC टू PIC संचार
यहां हम STM32F103C8 माइक्रोकंट्रोलर के साथ एक 433 मेगाहर्ट्ज आरएफ वायरलेस मॉड्यूल को इंटरफेस करेंगे । परियोजना को दो भागों में विभाजित किया गया है। ट्रांसमीटर STM32 के साथ interfaced किया जाएगा और रिसीवर Arduino संयुक्त राष्ट्र संघ के साथ interfaced किया जाएगा । दोनों सर्किट के लिए अलग-अलग सर्किट आरेख और रेखाचित्र होंगे और साथ ही प्राप्त करने वाले भाग भी होंगे।
इस ट्यूटोरियल में, RF ट्रांसमीटर रिसीवर की तरफ दो मान भेजता है: अल्ट्रासोनिक सेंसर और पोटेंटियोमीटर ADC मान (0 से 4096) का उपयोग करके मापी गई दूरी जिसे 0 (100 से 100) के रूप में मैप किया जाता है। Arduino का RF रिसीवर दोनों मान प्राप्त करता है और उन दूरी और संख्या मानों को 16x2 LCD डिस्प्ले में वायरलेस तरीके से प्रिंट करता है।
अवयव आवश्यक
- STM32F103C8 माइक्रोकंट्रोलर
- Arduino UNO
- 433 मेगाहर्ट्ज आरएफ ट्रांसमीटर और रिसीवर
- अल्ट्रासोनिक सेंसर (HC-SR04)
- 16x2 एलसीडी डिस्प्ले
- 10k पोटेंशियोमीटर
- ब्रेड बोर्ड
- तारों को जोड़ना
433 मेगाहर्ट्ज आरएफ ट्रांसमीटर और रिसीवर मॉड्यूल)
आरएफ ट्रांसमीटर पिनआउट:
433 मेगाहर्ट्ज आरएफ ट्रांसमीटर |
पिन विवरण |
चींटी |
एंटीना कनेक्ट करने के लिए |
GND |
GND |
VDD |
3.3 से 5 वी |
डेटा |
रिसीवर को प्रेषित किया जाने वाला डेटा यहां दिया गया है |
आरएफ रिसीवर पिनआउट:
433Mhz आरएफ रिसीवर |
उपयोग |
चींटी |
एंटीना कनेक्ट करने के लिए |
GND |
GND |
VDD |
3.3 से 5 वी |
डेटा |
ट्रांसमीटर से प्राप्त किया जाने वाला डेटा |
सीई / डीओ |
यह एक डेटा पिन भी है |
433 मेगाहर्ट्ज मॉड्यूल विनिर्देशों:
- रिसीवर ऑपरेटिंग वोल्टेज: 3 वी से 5 वी
- ट्रांसमीटर ऑपरेटिंग वोल्टेज: 3 वी से 5 वी
- ऑपरेटिंग आवृत्ति: 433 मेगाहर्ट्ज
- ट्रांसमिशन दूरी: 100 मीटर (अधिकतम) के लिए 3 मीटर (एंटीना के बिना)
- मॉड्यूलेटिंग तकनीक: ASK (एम्प्लिट्ट शिफ्ट कीइंग)
- डेटा ट्रांसमिशन की गति: 10Kbps
STM32F103C8 के साथ आरएफ ट्रांसमीटर का सर्किट आरेख
आरएफ ट्रांसमीटर और STM32F103C8 के बीच सर्किट कनेक्शन:
STM32F103C8 |
आरएफ ट्रांसमीटर |
5 वी |
VDD |
GND |
GND |
PA10 |
डेटा |
एनसी |
चींटी |
अल्ट्रासोनिक सेंसर और STM32F103C8 के बीच सर्किट कनेक्शन:
STM32F103C8 |
अल्ट्रासोनिक सेंसर (HC-SR04) |
5 वी |
वीसीसी |
पीबी 1 |
ट्रिग |
पीबी ० |
गूंज |
GND |
GND |
एक 10k पोटेंशियोमीटर STM32 के ADC पिन PA0 को इनपुट एनालॉग वैल्यू (0 से 3.3V) प्रदान करने के लिए STM32F103C8 से जुड़ा हुआ है।
Arduino Uno के साथ RF रिसीवर का सर्किट आरेख
आरएफ रिसीवर और Arduino संयुक्त राष्ट्र संघ के बीच सर्किट कनेक्शन:
Arduino UNO |
RF रिसीवर |
5 वी |
VDD |
GND |
GND |
1 1 |
डेटा |
एनसी |
चींटी |
16x2 LCD और Arduino UNO के बीच सर्किट कनेक्शन:
एलसीडी पिन नाम |
Arduino UNO पिन नाम |
ग्राउंड (Gnd) |
ग्राउंड (जी) |
वीसीसी |
5 वी |
वी |
कंट्रास्ट के लिए पोटेंशियोमीटर के केंद्र से पिन |
रजिस्टर का चयन करें (RS) |
२ |
पढ़ें / लिखें (RW) |
ग्राउंड (जी) |
सक्षम (EN) |
३ |
डेटा बिट 4 (DB4) |
४ |
डेटा बिट 5 (DB5) |
५ |
डेटा बिट 6 (DB6) |
६ |
डेटा बिट 7 (DB7) |
। |
एलईडी सकारात्मक |
5 वी |
एलईडी नकारात्मक |
ग्राउंड (जी) |
कोडिंग को नीचे संक्षेप में समझाया जाएगा। स्केच के दो भाग होंगे जहां पहला भाग ट्रांसमीटर सेक्शन और दूसरा रिसीवर सेक्शन होगा। इस ट्यूटोरियल के अंत में सभी स्केच फाइलें और काम करने वाला वीडियो दिया जाएगा। Arduino Uno के साथ RF मॉड्यूल को इंटरफेस करने के बारे में अधिक जानने के लिए, लिंक का अनुसरण करें।
वायरलेस आरएफ ट्रांसमिशन के लिए प्रोग्रामिंग STM32F103C8
STM32F103C8 को Arduino IDE का उपयोग करके प्रोग्राम किया जा सकता है। कोड को STM32F103C8 पर अपलोड करने के लिए एक FTDI प्रोग्रामर या ST-Link की आवश्यकता नहीं है। बस STM32 के यूएसबी पोर्ट के माध्यम से पीसी से कनेक्ट करें और ARDUINO IDE के साथ प्रोग्रामिंग शुरू करें । आप लिंक का अनुसरण करके Arduino IDE में अपना STM32 प्रोग्रामिंग सीख सकते हैं।
ट्रांसमीटर सेक्शन में 'सेमी' में ऑब्जेक्ट की दूरी को अल्ट्रासोनिक सेंसर और पोटेंशियोमीटर का उपयोग करके सेट (0 से 100) की संख्या के मान से मापा जाता है जो कि एसटीएम 32 के साथ हस्तक्षेप किए गए आरएफ ट्रांसमीटर के माध्यम से प्रेषित होता है।
पहले रेडियोहेड लाइब्रेरी शामिल है, इसे यहां से डाउनलोड किया जा सकता है। जैसा कि यह पुस्तकालय डेटा संचारित और प्राप्त करने के लिए ASK (एम्प्लिट्ट शिफ्ट कीइंग तकनीक) का उपयोग करता है। यह प्रोग्रामिंग को बहुत आसान बनाता है। आप स्केच में जाकर लाइब्रेरी को शामिल कर सकते हैं-> लाइब्रेरी में शामिल करें-> Add.zip लाइब्रेरी।
#शामिल
ट्रांसमीटर साइड में इस ट्यूटोरियल में दूरी को मापने के लिए एक अल्ट्रासोनिक सेंसर का उपयोग किया जाता है ताकि ट्रिगर और इको पिंस को परिभाषित किया जा सके।
# डेफिन ट्रिगिन पीबी 1 # डेफिन इकोपिन पीबी 0
RH_ASK लाइब्रेरी के लिए ऑब्जेक्ट नाम के आगे rf_driver को गति (2000), RX पिन (PA9) और TX पिन (PA10) जैसे मापदंडों के साथ सेट किया गया है।
RH_ASK rf_driver (2000, PA9, PA10);
अगले इस कार्यक्रम में आवश्यक स्ट्रिंग्स चर घोषित किए जाते हैं।
स्ट्रिंग ट्रांसमीटर_नंबर; स्ट्रिंग ट्रांसमिट_डिस्टेंस; स्ट्रिंग संचारित;
शून्य सेटअप () में अगला, RH_ASK rf_driver के लिए ऑब्जेक्ट को आरंभीकृत किया गया है।
rf_driver.init ();
उसके बाद ट्रिगर पिन को OUTPUT पिन और PA0 (पोटेंशियोमीटर से जुड़ा) के रूप में सेट किया जाता है और इको पिन को INPUT पिन के रूप में सेट किया जाता है। सीरियल संचार 9600 की बॉड दर से शुरू होता है।
सीरियल.बेगिन (9600); पिनमोड (PA0, INPUT); पिनमोड (इकोपिन, INPUT); पिनमोड (ट्रिगपिन, आउटपूट);
शून्य लूप () में अगला, पोटेंशियोमीटर मान जो कि इनपुट एनालॉग वोल्टेज है, डिजिटल मूल्य (ADC मान पाया जाता है) में परिवर्तित हो जाता है। एसटीएम 32 के एडीसी के रूप में 12-बिट रिज़ॉल्यूशन है। तो, डिजिटल मान (0 से 4096) से भिन्न होता है जिसे मैप किया जाता है (0 से 100)।
int analoginput = analogRead (PA0); int pwmvalue = map (analoginput, 0,4095,0,100);
अगली दूरी को 2 माइक्रोसेकंड की देरी के साथ ट्रिगर उच्च और निम्न सेट करके अल्ट्रासोनिक सेंसर का उपयोग करके मापा जाता है।
digitalWrite (trigPin, LOW); देरीमाइक्रोसेकंड (2); digitalWrite (ट्राइगिन, हाई); देरीमाइक्रोसेकंड (10); digitalWrite (trigPin, LOW);
इको पिन रिफ्लेक्टेड वेव बैक को सेंस करता है, यही वह टाइम पीरियड है जो ट्रिगर वेव परिलक्षित होता है। फॉर्मूला का उपयोग करके ऑब्जेक्ट की दूरी की गणना करने में उपयोग किया जाता है। अधिक जानें कि कैसे अल्ट्रासोनिक संवेदक दूरी की गणना करता है, लिंक का पालन करके।
लंबी अवधि = पल्स इन (इकोपिन, हाई); फ्लोट दूरी = अवधि * 0.034 / 2;
अब मापी गई डेटा संख्या और दूरी दोनों को स्ट्रिंग डेटा में परिवर्तित किया जाता है और संबंधित स्ट्रिंग चर में संग्रहीत किया जाता है।
trans_number = स्ट्रिंग (pwmvalue); trans_distance = स्ट्रिंग (दूरी);
दोनों स्ट्रिंग को एक लाइन के रूप में जोड़ा जाता है और स्ट्रिंग में संग्रहीत किया जाता है जिसे संचारित और अल्पविराम कहा जाता है "," का उपयोग दो तारों को अलग करने के लिए किया जाता है।
ट्रांसमिश = ट्रांसम_प्वम + "," + ट्रांसमिस्डेंस;
प्रेषित स्ट्रिंग को चरित्र सरणी में परिवर्तित किया जाता है।
const char * msg = trans.c_str ();
डेटा प्रेषित होता है और भेजे जाने तक प्रतीक्षा करता है।
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
भेजे गए स्ट्रिंग डेटा को सीरियल मॉनिटर में भी प्रदर्शित किया जाता है।
Serial.println (msg);
Arduino UNO को RF रिसीवर के रूप में प्रोग्रामिंग करना
Arduino UNO को Arduino IDE का उपयोग करके प्रोग्राम किया जाता है। रिसीवर सेक्शन में वह डेटा जो ट्रांसमीटर सेक्शन से प्रसारित होता है और RF रिसीवर मॉड्यूल द्वारा प्राप्त होता है और प्राप्त स्ट्रिंग डेटा को संबंधित डेटा (दूरी और संख्या) में विभाजित किया जाता है और 16x2 एलसीडी डिस्प्ले में प्रदर्शित किया जाता है।
आइए देखें रिसीवर को संक्षिप्त में कोडिंग:
ट्रांसमीटर खंड की तरह पहले रेडियोहेड लाइब्रेरी शामिल है। जैसा कि यह पुस्तकालय डेटा संचारित और प्राप्त करने के लिए ASK (एम्प्लिट्ट शिफ्ट कीइंग तकनीक) का उपयोग करता है। यह प्रोग्रामिंग को बहुत आसान बनाता है।
#शामिल
चूंकि यहां एलसीडी डिस्प्ले का उपयोग किया जाता है इसलिए लिक्विड क्रिस्टल लाइब्रेरी भी इसमें शामिल है।
#शामिल
और Arduino UNO के साथ जुड़े 16x2 एलसीडी डिस्प्ले पिंस निर्दिष्ट हैं और एलसीडी को ऑब्जेक्ट के रूप में उपयोग करके घोषित किया गया है।
लिक्विडकल्चर एलसीडी (2,3,4,5,6,7);
स्ट्रिंग डेटा संग्रहीत करने के लिए स्ट्रिंग डेटा चर के आगे घोषित किए जाते हैं।
स्ट्रिंग str_receive; स्ट्रिंग str_number; स्ट्रिंग str_distance;
रेडियोहेड लाइब्रेरी के लिए ऑब्जेक्ट घोषित किया गया है।
आरएच_एएसके आरएफ;
अब शून्य सेटअप () में, एलसीडी डिस्प्ले 16x2 मोड में सेट किया गया है और एक स्वागत संदेश प्रदर्शित किया गया है और साफ़ किया गया है।
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("STM32 के साथ आरएफ"); देरी (5000); lcd.clear ();
उसके बाद, आरएफ ऑब्जेक्ट को इनिशियलाइज़ किया जाता है ।
rf.init ();
अब शून्य लूप () में, ऐरे बुफ को आकार के रूप में घोषित किया गया है। जैसा कि ट्रांसमीटर से भेजे गए डेटा में "," सहित 7 हैं। इसलिए, इसे उस डेटा के अनुसार परिवर्तित करें जिसे प्रसारित किया जाना है।
uint8_t buf; uint8_t buflen = sizeof (buf);
यदि स्ट्रिंग rf रिसीवर मॉड्यूल पर उपलब्ध है यदि फ़ंक्शन आकार की जांच करता है और यह निष्पादित होता है। Rf.recv () डेटा प्राप्त करने के लिए किया जाता है।
अगर (rf.recv (buf, और buflen))
Buf प्राप्त स्ट्रिंग ऐसा है तो प्राप्त स्ट्रिंग एक में संग्रहीत किया जाता है str_receive स्ट्रिंग चर।
str_receive = स्ट्रिंग ((चार *) buf);
इस के लिए लूप को दो भागों में प्राप्त स्ट्रिंग विभाजित करने के लिए अगर यह ',' के बीच दो तार का पता लगाता है प्रयोग किया जाता है।
for (int i = 0; मैं <str_receive.length (); i ++) { if (str_receive.substring (i, i + 1) == ",") { str_number = str -receive.substring (0, i); str_distance = str_receive.substring (i + 1); टूटना; }
दो मूल्यों के लिए दो चार सरणियों को घोषित किया जाता है और स्ट्रिंग को दो में विभाजित किया जाता है जो स्ट्रिंग को चरित्र सरणी में परिवर्तित करके सम्मानित सरणी में संग्रहीत किया जाता है।
चार नंबरिंग; char distancestring; str_distance.toCharArray (दूरी, 3); str_number.toCharArray (नंबरस्ट्रिंग, 3);
उसके बाद चरित्र सरणी को एटोई () का उपयोग करके पूर्णांक में बदलें
int दूरी = atoi (distancestring); int number = atoi (नंबरस्ट्रिंग);
पूर्णांक मानों में परिवर्तित होने के बाद मान दूरी और संख्या 16x2 एलसीडी डिस्प्ले में प्रदर्शित होती है
lcd.setCursor (0,0); lcd.print ("संख्या:"); lcd.print (संख्या); lcd.setCursor (0,1); lcd.print ("दूरी:"); lcd.print (दूरी); lcd.print ("cm");
क्रमशः STM32 और Arduino UNO में दोनों कोड यानी ट्रांसमीटर और रिसीवर अपलोड करने के बाद, STM32 का उपयोग करके मापा गया नंबर और ऑब्जेक्ट दूरी जैसे डेटा आरएफ ट्रांसमीटर के माध्यम से RF रिसीवर को प्रेषित किया जाता है और प्राप्त मूल्यों को एलसीडी डिस्प्ले में वायरलेस तरीके से प्रदर्शित किया जाता है।
एसटीएम 32 आधारित आरएफ ट्रांसमीटर और रिसीवर का परीक्षण
1. जब संख्या 0 पर हो और वस्तु की दूरी 6 सेमी हो।
2. जब संख्या 47 और वस्तु की दूरी 3 सेमी हो।