विषयसूची:

Arduino और ESP8266 के बीच HC-12: 6 चरणों के बीच MPU6050 का उपयोग करके सर्वो को नियंत्रित करना
Arduino और ESP8266 के बीच HC-12: 6 चरणों के बीच MPU6050 का उपयोग करके सर्वो को नियंत्रित करना

वीडियो: Arduino और ESP8266 के बीच HC-12: 6 चरणों के बीच MPU6050 का उपयोग करके सर्वो को नियंत्रित करना

वीडियो: Arduino और ESP8266 के बीच HC-12: 6 चरणों के बीच MPU6050 का उपयोग करके सर्वो को नियंत्रित करना
वीडियो: Arduino ADXL345 Accelerometer in Hindi | Arduino Programming in Hindi - Tutorial #11 2024, नवंबर
Anonim
HC-12. के साथ Arduino और ESP8266 के बीच MPU6050 का उपयोग करके सर्वो को नियंत्रित करना
HC-12. के साथ Arduino और ESP8266 के बीच MPU6050 का उपयोग करके सर्वो को नियंत्रित करना

इस परियोजना में, हम Arduino UNO और ESP8266 NodeMCU के बीच संचार के लिए mpu6050 और HC-12 का उपयोग करके एक सर्वो मोटर की स्थिति को नियंत्रित कर रहे हैं।

चरण 1: इस परियोजना के बारे में

यह एचसी-12 आरएफ-मॉड्यूल पर आधारित एक अन्य आईओटी परियोजना है। यहाँ, arduino से imu (mpu6050) डेटा का उपयोग सर्वो मोटर (Nodemcu से जुड़ा) को नियंत्रित करने के लिए किया जाता है। यहाँ, डेटा विज़ुअलाइज़ेशन को arduino साइड पर भी किया जाता है जहाँ mpu6050 पिच डेटा (x-अक्ष के बारे में रोटेशन) को प्रोसेसिंग स्केच (बाद में चर्चा की गई) के साथ विज़ुअलाइज़ किया जाता है। मूल रूप से यह परियोजना Arduino और ESP8266 nodemcu के साथ Imu और सर्वो नियंत्रण के विभिन्न पहलुओं को याद रखने के लिए बस थोड़ा गर्म है।

उद्देश्य

इसका उद्देश्य स्पष्ट है, हम IMU के पिच मान का उपयोग करके सर्वो मोटर की स्थिति को नियंत्रित कर रहे हैं। और सभी एक साथ इस पिच और सिंक्रनाइज़ मोटर स्थिति को प्रसंस्करण के साथ देखा जाता है।

चरण 2: हार्डवेयर की आवश्यकता

NodeMCU ESP8266 12E वाईफ़ाई मॉड्यूल

सोल्डरलेस ब्रेडबोर्ड

जम्पर तार

MPU6050 accelo+gyro

एचसी-12 आरएफ मॉड्यूल (जोड़ी)

SG90 सर्वो मोटर

चरण 3: सर्किट और कनेक्शन

सर्किट और कनेक्शन
सर्किट और कनेक्शन
सर्किट और कनेक्शन
सर्किट और कनेक्शन

कनेक्शन सीधे आगे हैं। आप अपने Nodemcu के 3.3V के साथ सर्वो को शक्ति प्रदान कर सकते हैं। आप विन का उपयोग सर्वो को शक्ति देने के लिए भी कर सकते हैं यदि आपके नोडमक्यू में उस पिन पर इतना वोल्टेज है। लेकिन अधिकांश लोलिन बोर्डों में विन (निर्माता पर निर्भर करता है) पर 5V नहीं होता है।

ये सर्किट आरेख EasyADA का उपयोग करके बनाए गए हैं।

चरण 4: काम करना

काम में हो
काम में हो

जैसे ही arduino स्केच शुरू हुआ, यह Nodemcu के hc12 रिसीवर को पिच कोण (जो -45 से 45 तक होता है) भेज देगा जो 0 से 180 डिग्री सर्वो स्थिति के साथ मैप किया जाता है। यहां हमने पिच कोण का उपयोग -45 से +45 डिग्री तक किया ताकि हम इसे आसानी से सर्वो स्थिति में मैप कर सकें।

अब, आप सोच रहे हैं कि हम मानचित्र विधि का उपयोग इस प्रकार क्यों कर सकते हैं: -

इंट पॉज़ = मैप (वैल, -45, 45, 0, 180);

क्योंकि hc12 ट्रांसमीटर द्वारा भेजा गया ऋणात्मक कोण इस प्रकार प्राप्त होता है:

पहली छमाही: (टी) 0 से 45 => 0 से 45 (आर)

दूसरी छमाही: (टी) -45 से -1 => 255 से 210 (आर)

तो आपको इसे 0 से 180 के रूप में मैप करना होगा

if(val>=0 && val<=45) pos = (val*2)+90; अन्य स्थिति = (वैल-२१०)*२;

मैं कुछ अप्रासंगिक त्रुटि के कारण मानचित्र विधि से बच रहा हूं। आप इसे आजमा सकते हैं और टिप्पणी कर सकते हैं कि यह आपके साथ काम करता है

if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); अन्य स्थिति = नक्शा (वैल, 255, 210, 0, 90); // चौथा तर्क 2 हो सकता है (आप जांच सकते हैं)

MPU6050 पिच कोण गणना

मैं MPU6050_tockn लाइब्रेरी का उपयोग कर रहा हूं जो IMU से कच्चा डेटा देने पर आधारित है।

इंट पिचएंगल = mpu6050.getAngleX ()

इससे हमें x-अक्ष के परितः घूर्णन कोण प्राप्त होगा। जैसा कि आपने चित्र में देखा, मेरा इमू ब्रेडबोर्ड पर लंबवत रखा गया है, इसलिए पिच और रोल के साथ भ्रमित न हों। वास्तव में आपको ब्रेकआउट बोर्ड पर हमेशा अक्ष को मुद्रित देखना चाहिए।

इस पुस्तकालय के माध्यम से, आपको विशिष्ट संचालन के लिए विशिष्ट रजिस्टरों को पढ़ने के आंतरिक इलेक्ट्रॉनिक्स के बारे में परेशान नहीं होना पड़ेगा। आप केवल कार्य निर्दिष्ट करते हैं और आपका काम हो गया!

बीटीडब्ल्यू अगर आप कोण की गणना स्वयं करना चाहते हैं। आप इसे इस प्रकार आसानी से कर सकते हैं:

#शामिल

कॉन्स्ट इंट MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; शून्य सेटअप () {वायर.बेगिन (); Wire.beginTransmission (MPU6050_addr); वायर.राइट (0x6B); वायर.राइट (0); वायर.एंडट्रांसमिशन (सच); सीरियल.बेगिन (९६००); } शून्य लूप () {वायर.बेगिनट्रांसमिशन (MPU6050_addr); वायर.राइट (0x3B); वायर.एंडट्रांसमिशन (झूठा); Wire.requestFrom (MPU6050_addr, 14, सच); AcX=वायर.रीड ()<<8|वायर.रीड (); एसीवाई=वायर.रीड ()<<8|वायर.रीड (); AcZ=वायर.रीड ()<<8|वायर.रीड (); Temp=Wire.read()<<8|Wire.read (); GyroX=Wire.read()<<8|Wire.read(); GyroY=Wire.read()<<8|Wire.read(); GyroZ=Wire.read()<<8|Wire.read();

int xAng = नक्शा (AcX, minVal, maxVal, -90, 90); int yAng = नक्शा (AcY, minVal, maxVal, -90, 90); int zAng = नक्शा (AcZ, minVal, maxVal, -90, 90); x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI); सीरियल.प्रिंट ("एंगलएक्स ="); // पिच सीरियल.प्रिंट्लन (एक्स); सीरियल.प्रिंट ("एंगलवाई ="); // रोल सीरियल.प्रिंट्लन (वाई); सीरियल.प्रिंट ("एंगलजेड ="); // Yaw Serial.println (z); }

लेकिन, यह जरूरी नहीं है कि आप एंगल निकालने के लिए इतना कोड ही लिखें। आपको परदे के पीछे के तथ्यों को जानना चाहिए लेकिन कई परियोजनाओं में अन्य लोगों के पुस्तकालय का उपयोग करना बहुत प्रभावी होता है। आप निम्न लिंक से अधिक फ़िल्टर किए गए डेटा प्राप्त करने के लिए इस आईमु और अन्य दृष्टिकोणों के बारे में पढ़ सकते हैं: एक्सप्लोर-एमपीयू 6050।

संचारण छोर पर मेरे arduino कोड में MPU6050_tockn लाइब्रेरी की मदद से केवल 30 लाइनें हैं, इसलिए लाइब्रेरी का उपयोग करना अच्छा है जब तक कि आपको IMU की कार्यक्षमता में कुछ मुख्य परिवर्तनों की आवश्यकता न हो। यदि आप IMU के DMP (डिजिटल मोशन प्रोसेसर) का उपयोग करके कुछ फ़िल्टर किए गए डेटा चाहते हैं, तो Jeff Rowberg द्वारा I2Cdev नाम की एक लाइब्रेरी बहुत मददगार है।

प्रसंस्करण के साथ एकीकरण

यहां प्रोसेसिंग का उपयोग IMU के x-अक्ष के बारे में घूर्णी डेटा की कल्पना के लिए किया जाता है, जैसा कि MPU6050 से आने वाले कच्चे डेटा द्वारा गणना की जाती है। हम सीरियलइवेंट में आने वाले कच्चे डेटा को निम्नलिखित तरीके से प्राप्त करते हैं:

शून्य सीरियलइवेंट (सीरियल मायपोर्ट) {

inString = myPort.readString (); कोशिश करें {// डेटा पार्स करें //println (inString); स्ट्रिंग डेटास्ट्रिंग्स = स्प्लिट (इनस्ट्रिंग, ':'); if (dataStrings.length == 2) {if (dataStrings[0].equals("RAW")) { for (int i = 0; i < dataStrings.length - 1; i++) { raw = float(डेटास्ट्रिंग्स [i + 1]); } } और { प्रिंट्लन (इनस्ट्रिंग); } } } पकड़ें (अपवाद ई) { println ("पकड़ा गया अपवाद"); } }

यहां आप इस चरण में संलग्न छवि में विज़ुअलाइज़ेशन देख सकते हैं। नोडएमसीयू के अंत में प्राप्त स्थिति डेटा को सीरियल मॉनिटर पर भी देखा जाता है जैसा कि छवि में दिखाया गया है।

चरण 5: कोड

मैंने जीथब भंडार संलग्न किया है। आप इसे अपनी परियोजनाओं में उपयोग करने के लिए क्लोन और फोर्क कर सकते हैं।

my_code

रेपो में ट्रांसमीटर (arduino + IMU) और रिसीवर (Nodemcu + सर्वो) के लिए 2 arduino स्केच शामिल हैं।

और एक प्रसंस्करण स्केच। रेपो को तारांकित करें यदि यह आपकी परियोजना में मदद करता है।

इस निर्देशयोग्य में, आर- रिसीवर और टी- ट्रांसमीटर

चरण 6: वीडियो प्रदर्शन

मैं कल वीडियो संलग्न करूंगा। सूचना पाने के लिए मुझे फॉलो करें।

आप सभी को धन्यवाद!

सिफारिश की: