विषयसूची:

ZenWheels माइक्रोकार के लिए हैक करने योग्य रिमोट कंट्रोल: 7 कदम
ZenWheels माइक्रोकार के लिए हैक करने योग्य रिमोट कंट्रोल: 7 कदम

वीडियो: ZenWheels माइक्रोकार के लिए हैक करने योग्य रिमोट कंट्रोल: 7 कदम

वीडियो: ZenWheels माइक्रोकार के लिए हैक करने योग्य रिमोट कंट्रोल: 7 कदम
वीडियो: Phone Control RC Car 🔥🔥 #unboxing #rccar #shorts #remotecontrolcar 2024, नवंबर
Anonim
Image
Image
सभा
सभा

इस ट्यूटोरियल में हम ZenWheels माइक्रोकार के लिए एक कस्टम रिमोट कंट्रोल बनाने जा रहे हैं। ZenWheels माइक्रोकार एक 5 सेमी खिलौना कार है जिसे Android या Iphone एप्लिकेशन के माध्यम से नियंत्रित किया जा सकता है। मैं आपको यह दिखाने जा रहा हूं कि संचार प्रोटोकॉल के बारे में पता लगाने के लिए एंड्रॉइड एप्लिकेशन को कैसे रिवर्स इंजीनियर किया जाए और आप आर्डिनो और जाइरोस्कोप का उपयोग करके रिमोट कंट्रोल कैसे बना सकते हैं।

चरण 1: अवयव और उपकरण

भाग:

1. ज़ेनव्हील्स माइक्रोकार

2. Arduino प्रो मिनी 328p

3. ब्रेडबोर्ड

4. MPU6050 जाइरोस्कोप

5. शक्ति स्रोत <=5 v (कुछ बैटरी जिसे हम ब्रेडबोर्ड से जोड़ सकते हैं)

6. यू-आकार के जम्पर केबल (वैकल्पिक)। मैंने इन जम्पर केबल्स का उपयोग किया है क्योंकि वे ब्रेडबोर्ड पर बेहतर दिखते हैं। इसके बजाय नियमित जम्पर केबल का उपयोग किया जा सकता है

7. HC-05 ब्लूटूथ मॉड्यूल (एटी मोड में प्रवेश करने के लिए एक बटन के साथ)

उपकरण:

1. USB से सीरियल FTDI अडैप्टर FT232RL Arduino प्रो मिनी को प्रोग्राम करने के लिए

2. अरुडिनो आईडीई

3. एंड्रॉइड फोन

4. एंड्रॉइड स्टूडियो [वैकल्पिक]

चरण 2: ZenWheels Android एप्लिकेशन को रिवर्स इंजीनियरिंग [वैकल्पिक]

इस भाग को समझने के लिए जावा और एंड्रॉइड का कुछ ज्ञान आवश्यक है।

परियोजना का लक्ष्य जाइरोस्कोप का उपयोग करके माइक्रोकार को नियंत्रित करना है। इसके लिए हमें इस खिलौने और एंड्रॉइड ऐप के बीच ब्लूटूथ संचार के बारे में और जानने की जरूरत है।

इस चरण में मैं समझाऊंगा कि माइक्रोकार और एंड्रॉइड ऐप के बीच संचार प्रोटोकॉल को कैसे रिवर्स इंजीनियर करना है। अगर आप सिर्फ रिमोट बनाना चाहते हैं तो यह कदम जरूरी नहीं है। प्रोटोकॉल को खोजने का एक तरीका स्रोत कोड को देखना है। हम्म लेकिन यह सीधे आगे नहीं है, एंड्रॉइड एप्लिकेशन संकलित हैं और कोई भी Google Play के माध्यम से एपीके इंस्टॉल कर सकता है।

इसलिए मैंने ऐसा करने के लिए एक बुनियादी गाइड बनाया है:

1. एपीके डाउनलोड करें। एक एंड्रॉइड पैकेज किट (संक्षेप में एपीके) मोबाइल ऐप के वितरण और स्थापना के लिए एंड्रॉइड ऑपरेटिंग सिस्टम द्वारा उपयोग किया जाने वाला पैकेज फ़ाइल प्रारूप है

सबसे पहले गूगल प्ले स्टोर पर एप्लिकेशन खोजें, हमारे मामले में "ज़ेनव्हील्स" खोजें और आपको एप्लिकेशन लिंक मिल जाएगा

फिर Google पर "ऑनलाइन एपीके डाउनलोडर" खोजें और एपीके डाउनलोड करने के लिए एक का उपयोग करें। आम तौर पर वे एप्लिकेशन लिंक (जिसे हमने पहले प्राप्त किया है) मांगेंगे, फिर हम एक डाउनलोड बटन दबाएंगे और इसे अपने कंप्यूटर में सहेज लेंगे।

2. एपीके को डीकंपाइल करें। हमारी स्थिति में एक डिकंपेलर एक उपकरण है जो एपीके लेता है और जावा स्रोत कोड का उत्पादन करता है।

काम करने के लिए ऑनलाइन डीकंपलर का उपयोग करना सबसे आसान समाधान है। मैंने "ऑनलाइन डीकंपलर" के लिए Google पर खोज की है और मैंने https://www.javadecompilers.com/ को चुना है। आपको बस वह एपीके अपलोड करना होगा जो आपने पहले प्राप्त किया है और

डीकंपाइल दबाएं। फिर आप केवल स्रोतों को डाउनलोड करें।

3. कोड के माध्यम से इंजीनियर को उलटने का प्रयास करें

प्रोजेक्ट को खोलने के लिए आपको एक टेक्स्ट एडिटर या बेहतर एक IDE (एकीकृत विकास वातावरण) की आवश्यकता होती है। Android प्रोजेक्ट के लिए डिफ़ॉल्ट IDE Android Studio (https://developer.android.com/studio) है। एंड्रॉइड स्टूडियो स्थापित करने के बाद प्रोजेक्ट फ़ोल्डर खोलें।

चूंकि हमारी कार ब्लूटूथ द्वारा नियंत्रित होती है, इसलिए मैंने "ब्लूटूथ" कीवर्ड के साथ डिकंपिल्ड कोड में अपनी खोज शुरू की, जो मैंने पाया है कि "ब्लूटूथसेरियल सर्विस" संचार के हैंडल में थी। यदि यह वर्ग संचार को संभालता है तो उसके पास एक प्रेषण कमांड विधि होनी चाहिए। पता चलता है कि एक लेखन विधि है जो ब्लूटूथ चैनल के माध्यम से डेटा भेजती है:

सार्वजनिक शून्य लिखना (बाइट बाहर)

यह एक अच्छी शुरुआत है, मैंने.लिखने की खोज की है (विधि का उपयोग किया जा रहा है और एक वर्ग "ज़ेनव्हील्समाइक्रोकार" है जो हमारी "ब्लूटूथसेरियल सर्विस" का विस्तार करता है। इस वर्ग में ब्लूटूथ पर हमारे संचार के अधिकांश तर्क शामिल हैं। का दूसरा भाग तर्क नियंत्रकों में है: बेसकंट्रोलर और स्टैंडर्डकंट्रोलर।

बेसकंट्रोलर में हमारे पास सर्विस इनिशियलाइज़ेशन है, और स्टीयरिंग और थ्रॉटल चैनलों की परिभाषाएँ भी हैं, चैनल वास्तव में यह निर्दिष्ट करने के लिए कमांड प्रीफ़िक्स हैं कि कुछ प्रकार के कमांड का पालन किया जाएगा:

संरक्षित ZenWheelsMicrocar microcar = new ZenWheelsMicrocar(this, this.btHandler);

संरक्षित ChannelOutput आउटपुट = {नया TrimChannelOutput (ZenWheelsMicrocar. STEERING_CHANNEL), नया TrimChannelOutput (ZenWheelsMicrocar. THROTTLE_CHANNEL)};

StandardController में स्टीयरिंग को नियंत्रित किया जाता है:

सार्वजनिक शून्य हैंडल संचालन (टचएवेंट टचएवेंट) {

… यह. }

विधि का विश्लेषण करते हुए, SteeringOutput.channel का मान 129 (स्टीयरिंग के लिए उपयोग किया जाने वाला चैनल) और स्टीयरिंगOutput.resolveValue() का मान -90 और 90 के बीच हो सकता है। चैनल मान (129) सीधे भेजा जाता है, और स्टीयरिंग मान को संशोधित किया जाता है। बिटवाइज़ ऑपरेशंस लागू करके:

निजी अंतिम इंट वैल्यू_कनवर्ट_आउट (इंट वैल्यू) {

बूलियन नकारात्मक = झूठा; अगर (मान <0) {ऋणात्मक = f6D; } int value2 = value & ६३; अगर (नकारात्मक) {वापसी मूल्य 2 | 64; } वापसी मूल्य2; }

StandardController नामक एक समान विधि है

सार्वजनिक शून्य हैंडल थ्रॉटल (टचएवेंट टचएवेंट)

चरण 3: अवयव

भाग:

1. Arduino प्रो मिनी 328p 2 $

2. ब्रेडबोर्ड

3. MPU6050 जाइरोस्कोप 1.2$

4. एचसी-05 मास्टर-दास 6 पिन मॉड्यूल 3$

5. 4 बैटरी के साथ 4 x AA बैटरी पैक

6. यू-आकार के जम्पर केबल (वैकल्पिक)। मैंने इन जम्पर केबल्स का उपयोग किया है क्योंकि वे ब्रेडबोर्ड पर बेहतर दिखते हैं, और इस तरह से एल ई डी अधिक दिखाई देते हैं। यदि आपके पास ये केबल नहीं हैं तो आप इन्हें डुपोंट तारों से बदल सकते हैं।

उपरोक्त कीमतें ईबे से ली गई हैं।

उपकरण:

1. USB से सीरियल FTDI अडैप्टर FT232RL Arduino प्रो मिनी को प्रोग्राम करने के लिए

2. अरुडिनो आईडीई

3. एंड्रॉइड स्टूडियो (वैकल्पिक यदि आप स्वयं इंजीनियर को रिवर्स करना चाहते हैं)

चरण 4: विधानसभा

सभा
सभा

असेंबली बहुत सरल है क्योंकि हम इसे ब्रेडबोर्ड पर कर रहे हैं:)

- पहले हम अपने घटकों को ब्रेडबोर्ड पर रखते हैं: माइक्रोकंट्रोलर, ब्लूटूथ मॉड्यूल और जायरोस्कोप

- HC-05 ब्लूटूथ RX और TX पिन को arduino 10 और 11 पिन से कनेक्ट करें। जाइरोस्कोप SDA और SCL को arduino A4 और A5 पिन से जोड़ा जाना चाहिए

- पावर पिन को ब्लूटूथ, जाइरो और आर्डिनो से कनेक्ट करें। पिनों को ब्रेडबोर्ड के किनारे + और - से जोड़ा जाना चाहिए

- आखिरी बार बिजली की आपूर्ति (3.3V से 5V के बीच) को ब्रेडबोर्ड से कनेक्ट करें, मैंने एक छोटी LiPo एक सेल बैटरी का उपयोग किया है, लेकिन कोई भी तब तक करेगा जब तक यह पावर रेंज में है

अधिक जानकारी के लिए कृपया ऊपर दी गई तस्वीरों को देखें

चरण 5: HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें

HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें
HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें
HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें
HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें
HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें
HC-05 ब्लूटूथ को माइक्रोकार से जोड़ें

इसके लिए आपको एक एंड्रॉइड फोन, ब्लूटूथ एचसी-05 मॉड्यूल और तारों के साथ सीरियल एफटीडीआई एडाप्टर की आवश्यकता होगी। साथ ही हम ब्लूटूथ मॉड्यूल के साथ संचार करने के लिए Arduino IDE का उपयोग करेंगे।

सबसे पहले हमें माइक्रोकार ब्लूटूथ एड्रेस का पता लगाना होगा:

- अपने फोन पर ब्लूटूथ सक्षम करें

- कार चालू करें और Android में अपनी सेटिंग के ब्लूटूथ अनुभाग पर जाएं

- नए उपकरणों की खोज करें और "माइक्रोकार" नामक कुछ उपकरण दिखाई दें

- इस डिवाइस के साथ पेयर करें

- फिर ब्लूटूथ मैक निकालने के लिए, मैंने इस ऐप का इस्तेमाल Google Play सीरियल ब्लूटूथ टर्मिनल से किया है

इस ऐप को इंस्टॉल करने के बाद, मेनू -> डिवाइस पर जाएं और वहां आपके पास सभी ब्लूटूथ पेयर्ड डिवाइसेस के साथ एक सूची होगी। हम केवल "माइक्रोकार" खदान के नीचे के कोड में रुचि रखते हैं 00:06:66:49:A0:4B

इसके बाद FTDI अडैप्टर को ब्लूटूथ मॉड्यूल से कनेक्ट करें। पहले VCC और ग्राउंड पिन और फिर FTDI RX से ब्लूटूथ TX और FTDI TX से ब्लूटूथ RX। इसके अलावा ब्लूटूथ मॉड्यूल पर एक पिन होना चाहिए जिसे वीसीसी से जोड़ा जाना चाहिए। ऐसा करने से ब्लूटूथ मॉड्यूल "प्रोग्रामेबल मोड" में प्रवेश करता है। मेरे मॉड्यूल में एक बटन है जो वीसीसी को उस विशेष पिन से जोड़ता है। जब आप FTDI को USB में प्लग इन करते हैं तो यह इस विशेष प्रोग्राम मोड में प्रवेश करने के लिए पिन से जुड़े / दबाए गए बटन के साथ होना चाहिए। ब्लूटूथ हर 2 सेकंड में धीरे-धीरे पलक झपकते ही ऑपरेशन के इस मोड में प्रवेश करने की पुष्टि करता है।

Arduino IDE में सीरियल पोर्ट का चयन करें, फिर सीरियल मॉनिटर (एनएल और सीआर दोनों 9600 बॉड रेट के साथ) खोलें। एटी टाइप करें और मॉड्यूल को "ओके" के साथ पुष्टि करनी चाहिए।

मॉड्यूल को मास्टर मोड में रखने के लिए "AT+ROLE=1" टाइप करें। अपने ब्लूटूथ मॉड्यूल के साथ युग्मित करने के लिए लिखें: "AT+BIND=0006, 66, 49A04B", ध्यान दें कि हमारा "00:06:66:49:A0:4B" कैसे "0006, 66, 49A04B" में बदल जाता है। वैसे आपको अपने ब्लूटूथ मैक के लिए एक ही परिवर्तन करना चाहिए।

अब ज़ेनव्हील्स कार को चालू करें फिर एफटीडीआई को अनप्लग करें और बटन दबाए/विशेष पिन कनेक्ट किए बिना इसे फिर से प्लग करें। थोड़ी देर बाद इसे कार से कनेक्ट होना चाहिए और आप देखेंगे कि कार एक विशिष्ट कनेक्शन को सफल ध्वनि बना रही है।

समस्या निवारण:

- मैंने पाया कि मेरे पास जितने भी ब्लूटूथ मॉड्यूल थे, उनमें से केवल एक बटन वाला एक मास्टर के रूप में काम करता था!

- सुनिश्चित करें कि कार पूरी तरह से चार्ज है

- सुनिश्चित करें कि कार फोन से कनेक्ट नहीं है

- यदि ब्लूटूथ एटी मोड में प्रवेश करता है (धीरे-धीरे झपकाता है) लेकिन यह कमांड का जवाब नहीं देता है तो सुनिश्चित करें कि आपके पास दोनों एनएल और सीआर हैं, और अन्य बीएयूडी दरों के साथ भी प्रयोग करें

- दोबारा जांचें कि RX TX से जुड़ा है और इसके विपरीत

- इस ट्यूटोरियल को आजमाएं

चरण 6: कोड और उपयोग

सबसे पहले आपको दो पुस्तकालयों को डाउनलोड और इंस्टॉल करना होगा:

1. जाइरोस्कोप के लिए MPU6050 पुस्तकालय

2. I2CDev पुस्तकालय स्रोत

फिर मेरी लाइब्रेरी को यहां से डाउनलोड और इंस्टॉल करें या इसे नीचे से कॉपी करें:

/** * पुस्तकालय: * https://github.com/jrowberg/i2cdevlib * https://github.com/jrowberg/i2cdevlib */ #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #include "वायर.h" #include "SoftwareSerial.h"

कॉन्स्ट इंट MAX_ANGLE = 45;

कॉन्स्ट बाइट कमांडस्ट्रिंग = 129; कॉन्स्ट बाइट कमांडस्पीड = १३०;

बूल इनिशियलाइज़ेशन = असत्य; // सही सेट करें यदि DMP init सफल रहा

uint8_t mpuIntStatus; // एमपीयू uint8_t devStatus से वास्तविक इंटरप्ट स्थिति बाइट रखता है; // प्रत्येक डिवाइस ऑपरेशन के बाद वापसी की स्थिति (0 = सफलता, !0 = त्रुटि) uint16_t packageSize; // अपेक्षित डीएमपी पैकेट आकार (डिफ़ॉल्ट 42 बाइट्स है) uint16_t फीफोकाउंट; // वर्तमान में फीफो uint8_t फीफोबफर [64] में सभी बाइट्स की गिनती; // फीफो स्टोरेज बफर क्वाटरनियन क्यू; // [w, x, y, z] क्वाटरनियन कंटेनर वेक्टरफ्लोट ग्रेविटी; // [x, y, z] ग्रेविटी वेक्टर फ्लोट ypr[3]; // [यॉ, पिच, रोल] यॉ/पिच/रोल कंटेनर और ग्रेविटी वेक्टर वोलेटाइल बूल एमपीयूइंटरप्ट = झूठा; // इंगित करता है कि क्या एमपीयू इंटरप्ट पिन उच्च हो गया है

अहस्ताक्षरित लास्ट लास्टप्रिंटटाइम, लास्टमूवटाइम = 0;

SoftwareSerial BTserial(10, 11);

एमपीयू 6050 एमपीयू;

व्यर्थ व्यवस्था()

{ सीरियल.बेगिन (९६००); BTserial.begin(38400); Serial.println ("कार्यक्रम शुरू हुआ"); इनिशियलाइज़ेशन = इनिशियलाइज़ गायरोस्कोप (); }

शून्य लूप () {

अगर (! आरंभीकरण) {वापसी; } एमपीयूइंटरप्ट = झूठा; mpuIntStatus = mpu.getIntStatus (); फीफोकाउंट = mpu.getFIFOCount (); अगर (hasFifoOverflown (mpuIntStatus, फीफोकाउंट)) {mpu.resetFIFO (); वापसी; } अगर (mpuIntStatus और 0x02) { जबकि (फीफोकाउंट <पैकेटसाइज) {फीफोकाउंट = mpu.getFIFOCount (); } mpu.getFIFOBytes (फीफोबफर, पैकेटसाइज); फीफोकाउंट - = पैकेटसाइज; mpu.dmpGetQuaternion(&q, फीफोबफर); mpu.dmpGetGravity(&गुरुत्वाकर्षण, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); स्टीयर (ypr[0] * 180/M_PI, ypr[1] * 180/M_PI, ypr[2] * 180/M_PI); } }

/*

* 0 से 180 तक कोण प्राप्त करता है जहाँ 0 अधिकतम बाएँ है और 180 अधिकतम दाएँ है * -90 से 90 तक गति प्राप्त करता है जहाँ -90 अधिकतम पीछे की ओर है और 90 अधिकतम आगे है */ void moveZwheelsCar(byte angle, int speed) { if (मिली () - lastMoveTime = ९०) {परिणामकोण = नक्शा (कोण, ९१, १८०, १, ६०); } और अगर (कोण 0) {परिणाम गति = नक्शा (गति, 0, 90, 0, 60); } और अगर (गति <0) {परिणाम गति = नक्शा (गति, 0, -90, 120, 60); } Serial.print("actualAngle="); Serial.print(angle); Serial.print("; "); Serial.print("actualSpeed=");Serial.print(resultSpeed);Serial.println("; "); BTserial.write(commandStering); BTserial.write(resultAngle); BTserial.write(commandSpeed); BTserial.write((byte) resultSpeed); lastMoveTime = मिली (); }

शून्य स्टीयर (इंट एक्स, इंट वाई, इंट जेड)

{ एक्स = बाधा (एक्स, -1 * MAX_ANGLE, MAX_ANGLE); वाई = बाधा (वाई, -1 * MAX_ANGLE, MAX_ANGLE); जेड = बाधा (जेड, -MAX_ANGLE, MAX_ANGLE); इंट एंगल = मैप (y, -MAX_ANGLE, MAX_ANGLE, 0, 180); इंट स्पीड = मैप (जेड, -MAX_ANGLE, MAX_ANGLE, 90, -90); प्रिंटडिबग (एक्स, वाई, जेड, कोण, गति); moveZwheelsCar (कोण, गति); }

शून्य प्रिंटडिबग (इंट एक्स, इंट वाई, इंट जेड, इंट एंगल, इंट स्पीड)

{अगर (मिली () - लास्टप्रिंटटाइम <1000) {रिटर्न; } Serial.print("z=");Serial.print(x);Serial.print("; "); Serial.print("y=");Serial.print(y);Serial.print("; "); Serial.print("z=");Serial.print(z);Serial.print("; "); Serial.print("angle=");Serial.print(angle);Serial.print("; "); Serial.print("speed=");Serial.print(speed);Serial.println("; "); लास्टप्रिंटटाइम = मिली (); }

बूल इनिशियलाइज़ गायरोस्कोप ()

{वायर.बेगिन (); mpu.initialize (); Serial.println(mpu.testConnection() ? F("MPU6050 कनेक्शन सफल"): F("MPU6050 कनेक्शन विफल")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); if (devStatus != 0) { Serial.print(F("DMP इनिशियलाइज़ेशन फेल (कोड"));Serial.println(devStatus); रिटर्न असत्य; } mpu.setDMPEnabled(true); Serial.println(F("Enableing) इंटरप्ट डिटेक्शन (Arduino एक्सटर्नल इंटरप्ट 0)… "); अटैचइंटरप्ट (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); सीरियल.प्रिंट्लन (F ("डीएमपी तैयार! पहले इंटरप्ट की प्रतीक्षा कर रहा है …")); पैकेटसाइज़ = mpu.dmpGetFIFOPacketSize (); सही लौटें; }

शून्य dmpDataReady ()

{एमपीयूइंटरप्ट = सच; }

बूलियन में फीफो ओवरफ्लोन (int mpuIntStatus, int फीफोकाउंट)

{ वापसी mpuIntStatus और 0x10 || फीफोकाउंट == 1024; }

FTDI अडैप्टर का उपयोग करके arduino पर कोड अपलोड करें और फिर बैटरी कनेक्ट करें।

रिमोट का उपयोग करना:

Arduino के चालू होने के बाद, कार को भी चालू करें। HC-05 मॉड्यूल को कार से कनेक्ट होना चाहिए, जब ऐसा होता है तो कार एक ध्वनि उत्सर्जित करेगी। यदि यह काम नहीं करता है, तो कृपया पिछले चरण और समस्या निवारण अनुभाग की जाँच करें।

यदि आप ब्रेडबोर्ड को आगे की ओर झुकाते हैं तो कार को आगे बढ़ना चाहिए, दाएं और कार को दाएं चलना चाहिए। यह अधिक क्रमिक गतियां भी करता है जैसे थोड़ा आगे झुकना और थोड़ा बाएं इस मामले में कार धीरे-धीरे बाईं ओर जाएगी।

अगर ब्रेडबोर्ड को झुकाते समय कार कुछ अलग दिशा में जाती है तो पहले ब्रेडबोर्ड को अलग-अलग दिशाओं में पकड़ें।

यह काम किस प्रकार करता है:

स्केच में जाइरोस्कोप हर 100 एमएस में निर्देशांक प्राप्त करता है, गणना करता है और फिर ब्लूटूथ पर कार कमांड को प्रसारित करता है। सबसे पहले एक "स्टीयर" विधि है जिसे कच्चे x, y और z कोणों के साथ बुलाया जाता है। यह विधि स्टीयरिंग को 0 और 180 डिग्री के बीच और त्वरण -90 और 90 के बीच बदल देती है। यह विधि कॉल करती है

void moveZwheelsCar (बाइट एंगल, इंट स्पीड) जो स्टीयरिंग और एक्सेलेरेशन को ZenWheels विनिर्देशों में परिवर्तित करता है और फिर ब्लूटूथ का उपयोग करके कमांड को प्रसारित करता है।

मैंने दो चरणों में परिवर्तन करने का कारण पुन: प्रयोज्य है। अगर मुझे इस स्केच को रिमोट कंट्रोल के लिए किसी अन्य डिवाइस को अनुकूलित करने की आवश्यकता होगी तो मैं आधार विधि "स्टीयर" से शुरू करूंगा जो पहले से ही कुछ उपयोगी मूल्यों के लिए गति और स्टीयरिंग को मैप करता है।

चरण 7: विकल्प

"रिवर्स इंजीनियरिंग" का एक विकल्प। मैंने इस बारे में बात की है कि एंड्रॉइड एप्लिकेशन से शुरू करके प्रोजेक्ट को इंजीनियर कैसे करें। लेकिन इसका एक विकल्प है कि आप एक सीरियल FTDI + ब्लूटूथ स्लेव (नियमित HC-05 मास्टर सेटिंग्स निर्दिष्ट किए बिना) सेट कर सकते हैं। फिर ZenWheels ऐप से "माइक्रोकार" के बजाय HC-05 से कनेक्ट करें।

कमांड को डिकोड करने के लिए आपको स्टीयरिंग व्हील को किसी स्थिति में पकड़ना होगा, फिर एक पायथन स्क्रिप्ट का उपयोग करके सीरियल संचार का विश्लेषण करना होगा। मैं एक अजगर स्क्रिप्ट का सुझाव दे रहा हूं क्योंकि गैर प्रिंट करने योग्य वर्ण हैं और Arduino IDE इसके लिए उपयुक्त नहीं है। आप देखेंगे कि यदि आप पहिया को एक स्थिति में रखते हैं तो ऐप नियमित रूप से समान दो बाइट्स प्रसारित करेगा। यदि आप पहिया की स्थिति बदलते हैं तो मुट्ठी की बाइट वही रहेगी, दूसरी बदल जाएगी। कई परीक्षणों के बाद आप स्टीयरिंग एल्गोरिदम के साथ आ सकते हैं, फिर रिवर्स इंजीनियर थ्रॉटल इत्यादि।

Arduino आधारित रिमोट का एक विकल्प रास्पबेरीपी रिमोट होगा। रास्पबेरी पाई में एक एम्बेडेड ब्लूटूथ मॉड्यूल है जो "मास्टर" मोड में स्थापित करने के लिए दर्द रहित है और पायथन ब्लूटूथ लाइब्रेरी एक आकर्षण की तरह काम करती है। इसके अलावा कुछ और दिलचस्प परियोजनाएं संभव हैं जैसे एलेक्सा इको का उपयोग करके कार को नियंत्रित करना:)

मुझे आशा है कि आपने परियोजना का आनंद लिया है और कृपया नीचे टिप्पणी छोड़ दें!

सिफारिश की: