मिकी, दृष्टि के साथ रोबोट

मिकी, द विजन के साथ रोबोट: 9 कदम

पिक्सी कैमरा विजन सिस्टम का उपयोग करके मिकी रोबोट "मेंढक को देखता है"। पिक्सी की कीमत लगभग $ 70 है। और आसानी से Arduino के लिए एक शामिल केबल के साथ इंटरफेस। पिक्सी को सात अलग-अलग रंगों को पहचानने के लिए "प्रशिक्षित" किया जा सकता है। पिक्सी किसी ऑब्जेक्ट के चौड़ाई और ऊंचाई के साथ, एक प्रशिक्षित ऑब्जेक्ट के केंद्र का x, y निर्देशांक देता है। पिक्सी खुला स्रोत है और सभी हार्डवेयर और सॉफ्टवेयर cmucam.org के माध्यम से उपलब्ध हैं।

मेरे सेटअप में, पिक्सी एक Arduino के साथ संचार करता है जिसे मैं "सेंसर इंटरफ़ेस" कहता हूं। जब लक्ष्य का केंद्र (मेंढक) दाईं ओर (> 319 में से 170) होता है, तो लाल एलईडी रोशन होता है और रोबोट दाईं ओर मुड़ता है। जब मेंढक बाईं ओर (<319 में से 150) होता है, तो सफेद एलईडी रोशनी करता है और रोबोट बाईं ओर मुड़ता है। जब मेंढक केंद्र (> 150 और <170) में बहुत अधिक होता है, दोनों एल ई डी रोशन करते हैं और रोबोट आगे बढ़ता है।


हिस्से:

Pixy Camera---Amazon.com

4WD Arduino कम्पैटिबल मोबाइल प्लेटफॉर्म-Makershed.com

Arduino Motor Shield--Makershed.com

(२) अर्डुइनो अनोइ -अमेज़न.कॉम

(() NiMh AA बैटरी-Amazon.com

विविध: लाल एलईडी, सफेद एलईडी, (2) 220 ओम प्रतिरोधक, SPST टॉगल स्विच

आपूर्ति:

चरण 1:

मोबाइल प्लेटफॉर्म पर मोटर्स को तारों को टांका लगाने से शुरू करें। मैंने यह सुनिश्चित करने के लिए एक एए बैटरी का उपयोग किया कि लाल तार पर सकारात्मक और काले पर नकारात्मक प्रत्येक मोटर को प्लेटफॉर्म को आगे बढ़ने के लिए प्रेरित करेगा। इसके लिए सभी मोटर्स (जिसका अर्थ है कि लाल तार शायद दाईं ओर की मोटरों के ऊपर और बाईं ओर की मोटरों के नीचे होगा) पर संगत होना चाहिए।

चरण 2:

शिकंजा के साथ निचली प्लेट को सुरक्षित करें, यह सुनिश्चित करते हुए कि मोटर तारों को खुले छेद के माध्यम से आता है।

चरण 3:

बैटरी धारक जोड़ें। मेरी (7) एए बैटरी का चुनाव भविष्य के रिचार्जिंग होम बेस से संबंधित है (जो मिकी अपनी दृष्टि का उपयोग करके पता लगाएगा - जल्द ही)।

चरण 4:

ऊपरी प्लेट, स्विच, दो Arduinos (शीर्ष पर एक मोटर ढाल के साथ एक) और पिक्सी कैमरा जोड़ें।

3 डी प्रिंटेड स्विच होल्डर की फाइलें यहां देखी जा सकती हैं:

http://www.thingiverse.com/thing:331319

पिक्सी एक साधारण केबल (पिक्सी के साथ शामिल) के साथ Arduino से जुड़ा हुआ है। पिक्सी को जोड़ने के बारे में अधिक जानकारी यहां पाई जा सकती है:

http: //cmucam.org/projects/cmucam5/wiki/Hooking_up ...

चरण 5: प्रशिक्षण पिक्सी

एक रंग के लिए पिक्सी को प्रशिक्षित करना मुख्य रूप से एक बटन पकड़ने का सवाल है (पहले रंग के लिए लाल, नारंगी दूसरा, पीला तीसरा, हरा चौथा, सियान पांचवां, नीला छठा, बैंगनी सातवां) फिर जारी करना। ऑब्जेक्ट को कैमरे के सामने रखें। जब एलईडी वस्तु का रंग बहुत अधिक होता है, तो जल्दी से बटन दबाएं और छोड़ दें। अगर पिक्सी ने "वस्तु" खरीदी तो एलईडी कुछ समय बाद लाल हो जाएगी। बस।

चरण 6: योजनाबद्ध

यह योजनाबद्ध है।

चरण 7: सेंसर सॉफ्टवेयर

Arduino के लिए सेंसर सॉफ्टवेयर उनके "हैलो वर्ल्ड" स्केच का एक संशोधित संस्करण है।

यहां Arduino लाइब्रेरी "arduino_pixy-x.y.z.zip" डाउनलोड करें।

http: //cmucam.org/attachments/download/958/arduino ...

Arduino IDE को लाएं और Arduino IDE में SketchmImport Library को चुनकर Pixy लाइब्रेरी को इम्पोर्ट करें, और उसके बाद Pixy.zip फाइल में ब्राउजिंग करें जिसे आपने अभी डाउनलोड किया है।

//
// start लाइसेंस हेडर // // यह फाइल पिक्सी CMUcam5 का हिस्सा है या लघु के लिए "पिक्सी" // // सभी पिक्सी स्रोत कोड // GNU जनरल पब्लिक लाइसेंस v2 (http: // www) की शर्तों के तहत प्रदान किया गया है। .gnu.org / लाइसेंस / जीपीएल-2.0.html)। // विभिन्न लाइसेंस शर्तों के तहत पिक्सी स्रोत कोड, सॉफ्टवेयर और / या // तकनीकों का उपयोग करने के इच्छुक लोगों को हमसे // [email protected] पर संपर्क करना चाहिए। इस तरह के लाइसेंसिंग नियम // यहाँ प्रस्तुत पिक्सी कोडबेस के सभी भागों के लिए उपलब्ध हैं। // // एंड लाइसेंस हेडर //

# अकेला छोड़ दो

पिक्सी पिक्सी;

int सामान = 0; int स्थिति = 150; const int red = 5; const int white = 9; const int redled = 3; const int श्वेतपत्र = 8;

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

पिनमोड (लाल, बाहर); पिनमोड (सफेद, बाहर); पिनमोड (रेडआउट, OUTPUT); pinMode (whiteled, आउटपुट); digitalWrite (redled, HIGH); // राइट टेस्ट digitalWrite (श्वेतसूचीबद्ध, उच्च); // वाम परीक्षण देरी (2000); digitalWrite (redled, LOW); // digitalWrite (श्वेतसूचीबद्ध, LOW) से दाएं; // digitalWrite (लाल, LOW) को छोड़ दिया; digitalWrite (सफेद, कम); देरी (2000);

Serial.begin (9600); Serial.print ( "शुरू ... n"); }

शून्य लूप () {स्थिर int i = 0; इंट जे; uint16_t ब्लॉक; char buf [32]; ब्लॉक = pixy.getBlocks (); अगर (ब्लॉक) {i ++; if (i% 50 == 0) {// sprintf (buf, "डिटेक्ट% d: n", ब्लॉक); // Serial.print (buf); // के लिए (j = 0; j170) {digitalWrite (लाल, उच्च); digitalWrite (redled, उच्च); देरी (1000); digitalWrite (लाल, कम); digitalWrite (redled, कम); } अगर (pixy.blocks [j] .x <150) {digitalWrite (सफेद, हाई); digitalWrite (whiteled, उच्च); देरी (1000); digitalWrite (सफेद, कम); digitalWrite (whiteled, कम); } अगर (pixy.blocks [j] .x> 149 && pixy.blocks [j] .x <171) {digitalWrite (सफेद, हाई); digitalWrite (whiteled, उच्च); digitalWrite (लाल, उच्च); digitalWrite (redled, उच्च); देरी (1000); digitalWrite (सफेद, कम); digitalWrite (whiteled, कम); digitalWrite (लाल, कम); digitalWrite (redled, कम); }}}}}}

चरण 8: मोटर सॉफ्टवेयर

यह स्केच Arduino में लोड किया गया है जिसमें शीर्ष पर एक मोटर ढाल है।

ध्यान दें कि "कूद = 1" कार्यक्रम के दूसरे भाग में जाता है, जहां रोबोट मेंढक का पीछा करता है। कार्यक्रम के पहले भाग का उपयोग रोबोट को बिना अटक जाने के लिए सक्षम करने के लिए किया जाता है (भविष्य में वृद्धि - जल्द ही आ रहा है)।

int val = 0;
int val1 = 0; int valm = 0; int valm1 = 0; int कूद = 1;

const int pwmA = 3; const int pwmB = 11; const int ब्रेकअ = 9; const int ब्रेकबी = 8; const int dirA = 12; const int dirB = 13; const int right = 5; const int left = 7;

शून्य सेटअप () {pinMode (dirA, OUTPUT); पिनमोड (ब्रेकआ, आउटपूट); पिनमोड (dirB, OUTPUT); पिनमोड (ब्रेकबी, आउटपूट); pinMode (ठीक है, इनपुट); pinMode (छोड़ दिया, इनपुट); digitalWrite (dira, हाई); // फॉरवर्ड a digitalWrite (ब्रेकअ, LOW); // रिलीज़ ब्रेकअ एनालॉगवाइट (pwmA, 100); // सेट स्पीड A digitalWrite (dirB, हाई); // फॉरवर्ड B मोटर digitalWrite (ब्रेकबी) LOW); // analogWrite (pwmB, 100); // सेट स्पीड B देरी (700);

}

शून्य लूप () {if (कूद == 0) {valm = analogRead (0); valm1 = analogRead (1); if (valm> 500 या valm1> 500) {valm = analogRead (0); valm1 = analogRead (1); if (valm> 450 या valm1> 450) {digitalWrite (ब्रेकअ, हाई); digitalWrite (ब्रेकबी, हाई); digitalWrite (dira, LOW); // रिवर्स A digitalWrite (ब्रेकए, LOW); // analogWrite (pwmA, 200); digitalWrite (dirB, कम); digitalWrite (brakeB, कम); analogWrite (pwmB, 200); देरी (700); // बैकअप डिजिटलवर्ट (ब्रेकअ, हाई); // एक पहिया एनालॉगवर्ट बंद करो (pwmA, 0); देरी (1000); digitalWrite (ब्रेकबी, हाई); // अन्य पहिया को रोकें // दोनों पहियों को आगे शुरू करें digitalWrite (dirA, HIGH); digitalWrite (brakeâ, कम); analogWrite (pwmA, 140); digitalWrite (dirB, उच्च); digitalWrite (brakeB, कम); analogWrite (pwmB, 140); देरी (1000); }}} // कूद एक समान एनालॉगवर्इट (pwmA, 0); analogWrite (pwmB, 0); वैल = digitalRead (दाएं); VAL1 = digitalRead (बाएं); if (वैल == हाई एंड& val1 == हाई) {एनालॉगवर्इट (pwmA, 140); analogWrite (pwmB, 140); देरी (1000); } अगर (वैल == हाई एंड& val1 == कम) {एनालॉगवर्इट (pwmA, 140); analogWrite (pwmB, 50); देरी (1000); } अगर (VAL1 == हाई एंड& val == कम) {एनालॉगवर्इट (pwmB, 140); analogWrite (pwmA, 50); देरी (1000); }

}

चरण 9:

मुझे उम्मीद है कि मिकी को कमांड पर बाहर आने, इधर-उधर भागने और फिर से काम करने के लिए (अपने दम पर) रिचार्ज करने में सक्षम होना चाहिए।

पिक्सी दृष्टि होने से इन सभी कार्यों को सरल बनाना चाहिए।


मैंने सॉफ़्टवेयर के पिक्सी भाग को थोड़ा बदल दिया है ताकि खाली ब्लॉकों को पढ़ने में समय बर्बाद न हो। इसके अलावा, मैंने पिक्सी और मोटर शील्ड दोनों के लिए Arduino फाइलें शामिल की हैं।