Arduino uno पर रोबोट। तैयार Arduino रोबोट

आज के लेख में मैं आपको बताऊंगा कि अपने हाथों से Arduino माइक्रोकंट्रोलर पर आधारित बाधाओं से बचने वाला रोबोट कैसे बनाया जाए।



घर पर रोबोट बनाने के लिए आपको माइक्रोकंट्रोलर बोर्ड और एक अल्ट्रासोनिक सेंसर की आवश्यकता होगी। यदि सेंसर किसी बाधा का पता लगाता है, तो सर्वो उसे बाधा के चारों ओर जाने की अनुमति देगा। दाएं और बाएं स्थान को स्कैन करके, रोबोट बाधा से बचने के लिए सबसे पसंदीदा रास्ता चुनेगा।

कोडबेंडर एक ब्राउज़र-आधारित आईडीई है, जो ब्राउज़र से अपने रोबोट को प्रोग्राम करने का सबसे आसान तरीका है। आपको "Run on Arduino" बटन पर क्लिक करना होगा और बस, इससे आसान कुछ नहीं हो सकता।

बैटरी को डिब्बे में डालें और फ़ंक्शन बटन को एक बार दबाएं और रोबोट आगे बढ़ना शुरू कर देगा। गतिविधि को रोकने के लिए, बटन को फिर से दबाएँ।

/* एक सर्वो मोटर और एक अल्ट्रासोनिक सेंसर HC-SR04 एलईडी और बजर के साथ Arduino बाधा से बचने वाला रोबोट */ //लाइब्रेरी #शामिल #शामिल "अल्ट्रासोनिक.एच" //स्थिरांक स्थिरांक बटन = 2; // बटन पिन टू पिन 2 कॉन्स्ट इंट एलईडी = 3; //एलईडी पिन (प्रतिरोधक के माध्यम से) पिन करने के लिए 3 स्थिरांक इंट बजर = 4; //ट्वीटर पिन टू पिन 4 कॉन्स्ट इंट मोटरए1= 6; //मोटर ए से पिन 6 (पीडब्लूएम) का सकारात्मक (+) पिन (मॉड्यूल एल298 से!) स्थिरांक मोटरए2= 9; //मोटर ए से पिन 9 (पीडब्लूएम) का नकारात्मक पिन (-) स्थिरांक मोटरबी1=10; // मोटर बी का पॉजिटिव (+) पिन टू पिन 10 (पीडब्लूएम) कॉन्स्ट इंट मोटरबी2=11; // मोटर बी से पिन 11 (पीडब्लूएम) का नकारात्मक पिन (-) अल्ट्रासोनिक अल्ट्रासोनिक (ए 4, ए 5); // एक ऑब्जेक्ट अल्ट्रासोनिक (ट्रिग पिन, इको पिन) सर्वो मायसर्वो बनाएं; //सर्वो को नियंत्रित करने के लिए एक सर्वो ऑब्जेक्ट बनाएं //वेरिएबल्स int दूरी; //ऑब्जेक्ट int checkRight से दूरी संग्रहीत करने के लिए वेरिएबल; int checkLeft; पूर्णांक फ़ंक्शन=0; //रोबोट फ़ंक्शन को संग्रहीत करने के लिए वेरिएबल: "1" - गति या "0" - रुका हुआ। डिफ़ॉल्ट रूप से रोका गया int बटनस्टेट=0; //बटन स्थिति को स्टोर करने के लिए वेरिएबल। डिफ़ॉल्ट "0" int pos=90; // सर्वो स्थिति को संग्रहीत करने के लिए चर। डिफ़ॉल्ट रूप से 90 डिग्री - सेंसर आगे दिखेगा int flag=0; //बटन जारी होने पर बटन की स्थिति को संग्रहीत करने के लिए उपयोगी ध्वज शून्य सेटअप() (myservo.attach(5); //सर्वो पिन पिन 5 myservo.write(pos) से जुड़ा है; // सर्वो को बताता है वेरिएबल "पॉज़" में स्थिति पर जाने के लिए पिनमोड(बटन, INPUT_PULLUP); पिनमोड(बजर, आउटपुट); पिनमोड(मोटरए2,आउटपुट); आउटपुट); पिनमोड(मोटरबी2, आउटपुट) ) शून्य लूप() ( //बटन स्थिति की जांच करना बटनस्टेट = डिजिटलरीड(बटन); अहस्ताक्षरित लंबा करंटमिलिस = मिलिस(); //गिनती... //मुख्य फ़ंक्शन को बदलता है ( रुका/चल रहा है) जब बटन दबाया जाता है यदि (बटनस्टेट = = कम) (//यदि बटन एक बार दबाया जाता है...विलंब(500); यदि (ध्वज == 0)( फ़ंक्शन = 1; ध्वज=1; / /फ़्लैग वेरिएबल बदलें) अन्यथा यदि (फ़्लैग == 1)( //यदि बटन दो बार दबाया जाता है तो फ़ंक्शन = 0; फ़्लैग=0; //फ़्लैग वेरिएबल फिर से बदलें)) यदि (फ़ंक्शन == 0)( // यदि बटन को दो बार छोड़ा या दबाया जाता है, तो: myservo.write(90); //सर्वो 90 डिग्री के लिए सेट - सेंसर आगे रुकेगा(); //रोबोट गतिहीन रहता है नोटोन(बजर); // बीपर बंद है डिजिटल राइट (एलईडी, हाई); // और डायोड चालू है) अन्यथा यदि (फ़ंक्शन == 1) (// यदि बटन दबाया जाता है, तो: // दूरी पढ़ें... दूरी = Ultrasonic.Ranging(CM); //टिप: सेंटीमीटर के लिए "CM" और इंच के लिए "INC" का उपयोग करें //वस्तुओं की जांच करें। .. यदि (दूरी > 10)(आगे(); //सबकुछ स्पष्ट है, चलो आगे बढ़ते हैं! नोटोन(बजर); डिजिटलराइट(एलईडी,लो); ) अन्यथा यदि (दूरी<=10){ stop(); //Обнаружен объект! Останавливаемся и проверяем слева и справа лучший способ обхода! tone(buzzer,500); // издаём звук digitalWrite(led,HIGH); // включаем светодиод //Начинаем сканировать... for(pos = 0; pos =0; pos-=1){ //идём от 180 градусов к 0 myservo.write(pos); // говорим серво пройти на позицию в переменной "pos" delay(10); // ждём 10 мс, пока сервопривод достигнет нужной позиции } checkRight= ultrasonic.Ranging(CM); myservo.write(90); // Датчик снова смотрит вперёд //Принимаем решение – двигаться влево или вправо? if (checkLeft checkRight){ right(); delay(400); // задержка, меняем значение при необходимости, чтобы заставить робота повернуться. } else if (checkLeft <=10 && checkRight <=10){ backward(); //Дорога перекрыта... возвращаемся и идём налево;) left(); } } } } void forward(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void backward(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void left(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void right(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void stop(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); }

"संपादित करें" बटन पर क्लिक करके, आप अपनी आवश्यकताओं के अनुरूप स्केच को संपादित कर सकते हैं।

उदाहरण के लिए, सेमी में एक बाधा के लिए मापी गई दूरी के मान "10" को बदलकर, आप उस दूरी को कम या बढ़ा देंगे जिसे रोबोट Arduino एक बाधा की तलाश में स्कैन करेगा।

यदि रोबोट नहीं चलता है, तो यह इलेक्ट्रिक मोटर (मोटरए1 और मोटरए2 या मोटरबी1 और मोटरबी2) के संपर्कों को बदल सकता है।

चरण 7: पूर्ण रोबोट

Arduino माइक्रोकंट्रोलर पर आधारित आपका घरेलू बाधा-रोधी रोबोट तैयार है।

आइए इस बारे में बात करें कि आप सेगवे की तरह संतुलन बनाने वाला रोबोट बनाने के लिए Arduino का उपयोग कैसे कर सकते हैं।

अंग्रेजी से सेगवे. सेगवे एक दो-पहिया खड़ा वाहन है जो इलेक्ट्रिक ड्राइव से सुसज्जित है। इन्हें होवरबोर्ड या इलेक्ट्रिक स्कूटर भी कहा जाता है।

क्या आपने कभी सोचा है कि सेगवे कैसे काम करता है? इस ट्यूटोरियल में हम आपको यह दिखाने का प्रयास करेंगे कि एक Arduino रोबोट कैसे बनाया जाए जो सेगवे की तरह ही खुद को संतुलित करता है।

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

अंतिम परिणाम कुछ इस प्रकार होना चाहिए:

रोबोट आरेख

L298N मोटर चालक मॉड्यूल:

पहिया के साथ डीसी गियर मोटर:

एक स्व-संतुलन रोबोट मूलतः एक उल्टा पेंडुलम है। यदि द्रव्यमान का केंद्र पहिए की धुरी के सापेक्ष अधिक हो तो यह बेहतर संतुलित हो सकता है। द्रव्यमान के एक उच्च केंद्र का अर्थ है द्रव्यमान की जड़ता का एक उच्च क्षण, जो कम कोणीय त्वरण (धीमी गिरावट) से मेल खाता है। इसलिए हम बैटरी पैक को ऊपर रखते हैं। हालाँकि, रोबोट की ऊंचाई सामग्री की उपलब्धता के आधार पर चुनी गई थी :)

स्व-संतुलन रोबोट का पूर्ण संस्करण उपरोक्त चित्र में देखा जा सकता है। शीर्ष पर पीसीबी को पावर देने के लिए छह Ni-Cd बैटरियां हैं। मोटरों के बीच में मोटर चालक के लिए 9 वोल्ट की बैटरी का उपयोग किया जाता है।

लिखित

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

पीआईडी ​​नियंत्रक आउटपुट को लगातार समायोजित करके त्रुटि को न्यूनतम संभव मान तक कम कर देता है। हमारे Arduino सेल्फ-बैलेंसिंग रोबोट में, इनपुट (जो डिग्री में वांछित झुकाव है) सॉफ्टवेयर द्वारा सेट किया गया है। MPU6050 रोबोट के वर्तमान झुकाव को पढ़ता है और इसे PID एल्गोरिदम को फीड करता है, जो मोटर को नियंत्रित करने और रोबोट को सीधा रखने के लिए गणना करता है।

पीआईडी ​​को Kp, Ki और Kd मानों को इष्टतम मानों पर समायोजित करने की आवश्यकता होती है। इंजीनियर इन मूल्यों की स्वचालित रूप से गणना करने के लिए MATLAB जैसे सॉफ़्टवेयर का उपयोग करते हैं। दुर्भाग्य से, हम अपने मामले में MATLAB का उपयोग नहीं कर सकते क्योंकि यह परियोजना को और भी अधिक जटिल बना देगा। इसके बजाय, हम पीआईडी ​​मानों को समायोजित करेंगे। यह कैसे करना है यहां बताया गया है:

  1. Kp, Ki और Kd को शून्य के बराबर करें।
  2. केपी समायोजित करें बहुत छोटा केपी रोबोट के गिरने का कारण बनेगा क्योंकि सुधार पर्याप्त नहीं है। बहुत अधिक Kp रोबोट को बेतहाशा आगे-पीछे करने का कारण बनता है। एक अच्छा केपी रोबोट को काफी आगे-पीछे करेगा (या थोड़ा दोलन करेगा)।
  3. एक बार Kp सेट हो जाने पर, Kd समायोजित करें। एक अच्छा केडी मान दोलनों को कम कर देगा जब तक कि रोबोट लगभग स्थिर न हो जाए। इसके अलावा, सही केडी धक्का दिए जाने पर भी रोबोट को पकड़ कर रखेगा।
  4. अंत में, Ki इंस्टॉल करें। चालू होने पर, केपी और केडी सेट होने पर भी रोबोट दोलन करेगा, लेकिन समय के साथ स्थिर हो जाएगा। सही Ki मान रोबोट को स्थिर करने के लिए आवश्यक समय को कम कर देगा।

रोबोट का व्यवहार नीचे दिए गए वीडियो में देखा जा सकता है:

स्व-संतुलन रोबोट के लिए Arduino कोड

हमें अपना रोबोट बनाने के लिए चार बाहरी पुस्तकालयों की आवश्यकता थी। PID लाइब्रेरी P, I और D मानों की गणना को सरल बनाती है। LMotorController लाइब्रेरी का उपयोग L298N मॉड्यूल के साथ दो मोटरों को नियंत्रित करने के लिए किया जाता है। I2Cdev लाइब्रेरी और MPU6050_6_Axis_MotionApps20 लाइब्रेरी को MPU6050 से डेटा पढ़ने के लिए डिज़ाइन किया गया है। आप इस रिपॉजिटरी में लाइब्रेरी सहित कोड डाउनलोड कर सकते हैं।

#शामिल करना #शामिल करना #शामिल "I2Cdev.h" #शामिल "MPU6050_6Axis_MotionApps20.h" #अगर I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #शामिल "वायर.h" #endif #MIN_ABS_SPEED 20 MPU6050 mpu परिभाषित करें; // एमपीयू नियंत्रण/स्थिति संस्करण बूल डीएमपीरेडी = गलत; // यदि DMP init सफल रहा तो सही सेट करें uint8_t mpuIntStatus; // MPU uint8_t devStatus से वास्तविक व्यवधान स्थिति बाइट रखता है; // प्रत्येक डिवाइस ऑपरेशन के बाद स्थिति लौटाएं (0 = सफलता, !0 = त्रुटि) uint16_t पैकेट आकार; // अपेक्षित डीएमपी पैकेट आकार (डिफ़ॉल्ट 42 बाइट्स है) uint16_t fifoCount; // FIFO uint8_t fifoBuffer में वर्तमान में सभी बाइट्स की गिनती; // फीफो स्टोरेज बफर // ओरिएंटेशन/मोशन वर्र्स क्वाटरनियन क्यू; // क्वाटरनियन कंटेनर वेक्टरफ्लोट ग्रेविटी; //गुरुत्वाकर्षण वेक्टर फ्लोट YPR; //यॉ/पिच/रोल कंटेनर और ग्रेविटी वेक्टर //पीआईडी ​​डबल ओरिजिनलसेटपॉइंट = 173; डबल सेटपॉइंट = मूलसेटपॉइंट; डबल मूविंगएंगलऑफ़सेट = 0.1; दोहरा इनपुट, आउटपुट; // इन मानों को अपने स्वयं के डिज़ाइन डबल केपी = 50 में फिट करने के लिए समायोजित करें; डबल केडी = 1.4; डबल की = 60; पीआईडी ​​पीआईडी ​​(और इनपुट, और आउटपुट, और सेटपॉइंट, केपी, की, केडी, डायरेक्ट); डबल मोटरस्पीडफैक्टरलेफ्ट = 0.6; डबल मोटरस्पीडफैक्टरराइट = 0.5; //मोटर नियंत्रक int ENA = 5; पूर्णांक IN1 = 6; पूर्णांक IN2 = 7; पूर्णांक IN3 = 8; पूर्णांक IN4 = 9; पूर्णांक ईएनबी = 10; एलमोटरकंट्रोलर मोटरकंट्रोलर(ENA, IN1, IN2, ENB, IN3, IN4, मोटरस्पीडफैक्टरलेफ्ट, मोटरस्पीडफैक्टरराइट); अस्थिर बूल एमपीयूइंटरप्ट = गलत; // इंगित करता है कि क्या एमपीयू इंटरप्ट पिन उच्च शून्य dmpDataReady() ( mpuInterpt = true; ) शून्य सेटअप() ( // I2C बस में शामिल हो गया है (I2Cdev लाइब्रेरी स्वचालित रूप से ऐसा नहीं करती है) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE वायर.बेगिन( ); , न्यूनतम संवेदनशीलता के लिए स्केल किया गया mpu.setXGyroOffset(220); mpu.setYGyroOffset(-85); चिप // सुनिश्चित करें कि यह काम करता है (यदि ऐसा है तो 0 लौटाता है) ( // डीएमपी चालू करें, अब यह तैयार है mpu.setDMPEnabled(true); // Arduino इंटरप्ट डिटेक्शनइंटरप्ट सक्षम करें(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // हमारे DMP रेडी फ़्लैग को मुख्य पर सेट करें लूप() फ़ंक्शन जानता है कि इसका उपयोग करना ठीक है dmpReady = true; // बाद में तुलना के लिए अपेक्षित DMP पैकेट आकार प्राप्त करें पैकेट आकार = mpu.dmpGetFIFOPacketSize(); //सेटअप पीआईडी ​​pid.SetMode(स्वचालित); pid.SetSampleTime(10); पिड. SetOutputLimits(-255, 255); ) अन्यथा ( // त्रुटि! // 1 = प्रारंभिक मेमोरी लोड विफल // 2 = डीएमपी कॉन्फ़िगरेशन अपडेट विफल // (यदि यह टूटने वाला है, तो आमतौर पर कोड 1 होगा) सीरियल.प्रिंट (एफ ("डीएमपी इनिशियलाइज़ेशन विफल (कोड ")); सीरियल.प्रिंट(devStatus); सीरियल.प्रिंटएलएन(एफ(")")); ) ) शून्य लूप() ( // यदि प्रोग्रामिंग विफल रही, तो कुछ भी करने का प्रयास न करें यदि (!dmpReady) ) वापसी; // एमपीयू इंटरप्ट या अतिरिक्त पैकेट उपलब्ध होने की प्रतीक्षा करें (!mpuInterpt && fifoCount< packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is >1 पैकेट उपलब्ध // (इससे हमें बिना किसी व्यवधान की प्रतीक्षा किए तुरंत और अधिक पढ़ने की सुविधा मिलती है) fifoCount -= पैकेट आकार; mpu.dmpGetQuatermion(&q, fifoBuffer); mpu.dmpGetGravity(&गुरुत्वाकर्षण, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); इनपुट = वाईपीआर * 180/एम_पीआई + 180; ) )

Kp, Ki, Kd मान काम कर भी सकते हैं और नहीं भी। यदि वे नहीं करते हैं, तो ऊपर दिए गए चरणों का पालन करें। ध्यान दें कि कोड में झुकाव 173 डिग्री पर सेट है। यदि आप चाहें तो आप इस मान को बदल सकते हैं, लेकिन ध्यान दें कि यह झुकाव कोण है जिसे रोबोट को बनाए रखना चाहिए। इसके अलावा, यदि आपकी मोटरें बहुत तेज़ हैं, तो आप motorSpeedFactorLeft और motorSpeedFactorRight मानों को समायोजित कर सकते हैं।

अभी के लिए इतना ही। फिर मिलते हैं।

हमारे प्रिय पाठकों, हम Arduino पर आधारित रोबोट बनाने के लिए समर्पित लेखों की एक श्रृंखला खोल रहे हैं। यह माना जाता है कि पाठक एक नौसिखिया है और उसे विषय का केवल बुनियादी ज्ञान है। हम हर चीज़ को यथासंभव विस्तृत और स्पष्ट रूप से प्रस्तुत करने का प्रयास करेंगे।

तो, समस्या का एक परिचय:

आइए अवधारणा से शुरू करें: हम एक ऐसा रोबोट चाहते हैं जो रास्ते में आने वाली सभी बाधाओं से बचते हुए स्वतंत्र रूप से कमरे के चारों ओर घूम सके। कार्य निर्धारित था.

अब आइए जानें कि हमें क्या चाहिए:

  1. प्लेटफार्म (शरीर)। यहां विकल्प हैं: सब कुछ स्वयं करें, हिस्से खरीदें और उन्हें जोड़ें, या तैयार-तैयार खरीदें। आप जो चाहते हैं उसे चुनें

किट में आमतौर पर दो ड्राइविंग पहियों (कैटरपिलर) के लिए एक प्लेटफॉर्म और एक मोटर और बैटरी के लिए एक कम्पार्टमेंट शामिल होता है। ऑल-व्हील ड्राइव विकल्प हैं - 4 पहियों के लिए मोटर के साथ। शुरुआती लोगों के लिए, हम टैंक-प्रकार के प्लेटफ़ॉर्म लेने की सलाह देते हैं

दो ड्राइविंग पहिए और एक तीसरा सपोर्ट व्हील।

  1. इसके बाद, हमें एक रेंजफाइंडर की आवश्यकता है। सोनार (उर्फ रेंजफाइंडर, उर्फ ​​अल्ट्रासोनिक मॉड्यूल) एक रेंजफाइंडर के रूप में, शुरू में विकल्प अल्ट्रासोनिक और इन्फ्रारेड के बीच था। चूंकि अल्ट्रासोनिक विशेषताएं काफी बेहतर हैं (अधिकतम सीमा लगभग 4-5 मीटर है, बनाम 30-60 सेमी), और कीमत लगभग समान है, विकल्प अल्ट्रासोनिक पर गिर गया। सबसे आम मॉडल HC-SR04 है।

  1. मोटर चालक।

मुझे क्या करना चाहिए? पहली बात जो दिमाग में आती है वह है माइक्रोकंट्रोलर के आउटपुट पर एक ट्रांजिस्टर लगाना और उससे मोटरों को पावर देना। बेशक यह अच्छा है, लेकिन अगर हम मोटर को दूसरी दिशा में मोड़ना चाहते हैं तो यह काम नहीं करेगा... लेकिन एच-ब्रिज, जो ट्रांजिस्टर की एक जोड़ी की तुलना में थोड़ा अधिक जटिल सर्किट है, अच्छी तरह से सामना करेगा इस कार्य। लेकिन इस मामले में तैयार एकीकृत सर्किट के रूप में उनमें से बहुत सारे हैं, इसलिए मुझे लगता है कि पहिये को फिर से बनाने की कोई आवश्यकता नहीं है - हम एक तैयार-तैयार खरीद लेंगे। इसके अलावा, कीमत 2-3 डॉलर है... चलिए आगे बढ़ते हैं। इन उद्देश्यों के लिए, हम एक L293D चिप, या उससे भी बेहतर, उस पर आधारित एक मोटर शील्ड खरीदेंगे।

L298N चिप पर मोटर शील्ड

  1. ध्वनि उत्पादन - पीजो उत्सर्जक

ध्वनि उत्पन्न करने का सबसे सरल विकल्प पीजो एमिटर का उपयोग करना है।

पीजोसेरेमिक उत्सर्जक (पीजो उत्सर्जक) इलेक्ट्रोकॉस्टिक ध्वनि प्रजनन उपकरण हैं जो पीजोइलेक्ट्रिक प्रभाव का उपयोग करते हैं। (यांत्रिक तनाव (प्रत्यक्ष पीजोइलेक्ट्रिक प्रभाव) के प्रभाव के तहत एक ढांकता हुआ के ध्रुवीकरण का प्रभाव। एक उलटा पीजोइलेक्ट्रिक प्रभाव भी होता है - एक विद्युत क्षेत्र के प्रभाव में यांत्रिक विकृतियों की घटना।

प्रत्यक्ष पीजोइलेक्ट्रिक प्रभाव: पीजो लाइटर में, स्पार्क गैप में उच्च वोल्टेज प्राप्त करने के लिए;

रिवर्स पीजोइलेक्ट्रिक प्रभाव: पीजो उत्सर्जकों में (उच्च आवृत्तियों पर प्रभावी और छोटे आयाम होते हैं);)

पीजो एमिटर का व्यापक रूप से विभिन्न इलेक्ट्रॉनिक उपकरणों - अलार्म घड़ियों, टेलीफोन, इलेक्ट्रॉनिक खिलौने और घरेलू उपकरणों में उपयोग किया जाता है। पीज़ोसेरेमिक एमिटर में एक धातु की प्लेट होती है जिस पर पीज़ोइलेक्ट्रिक सिरेमिक की एक परत लगाई जाती है, जिसके बाहर एक प्रवाहकीय कोटिंग होती है। प्लेट और स्प्रे दो संपर्क हैं। पीजो एमिटर का उपयोग पीजोइलेक्ट्रिक माइक्रोफोन या सेंसर के रूप में भी किया जा सकता है।

सबसे पहले हमें बस यही चाहिए। सबसे पहले, आइए अलग-अलग पाठों के रूप में देखें कि इन भागों को कैसे जोड़ा जाए और अलग-अलग काम किया जाए।

पाठ 2. अल्ट्रासोनिक दूरी मापने वाले सेंसर (रेंज फाइंडर) के साथ काम करना

पाठ 3. L298N पर आधारित Arduino और मोटर शील्ड

पाठ 4. ध्वनि पुनरुत्पादन - पीजो उत्सर्जक

पाठ 5. रोबोट को असेंबल करना और प्रोग्राम को डीबग करना

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

हिस्सों की सूची:
1. 1.5 मिमी प्लेक्सीग्लास से बना शरीर के अंगों और पंजों का एक सेट।
2. Arduino मेगा या यूनो (मेगा का उपयोग किया जाता है) - 1 पीसी।
3. माइक्रो सर्वो ड्राइव (टॉवरप्रो SG90 का उपयोग किया जाता है) - 8 पीसी।
4. अल्ट्रासोनिक रेंजफाइंडर HC-SR04 - 1 पीसी।
5. बैटरी का आकार 18560, 3.7V (ट्रस्टफायर 2400 एमएएच का उपयोग किया जाता है) - 2 पीसी।
6. बैटरी धारक आकार 18560 (परिवर्तित कंटेनर का उपयोग करके - पैकेजिंग) - 1 पीसी।
7. 25 मिमी पीसीबी स्टैंड। (ऐसे स्टैंड का उपयोग किया जाता है) - 4 पीसी।
8. ब्रेडबोर्ड का भाग.
9. जम्पर तार.
10. स्क्रू DIN 7985 M2, 8 मिमी। - 18 पीस।
11. नट डीआईएन 934 एम2 - 18 पीसी।

Z-रोबोडॉग रोबोट की असेंबली:

1. रोबोट का शरीर 1.5 मिमी की मोटाई के साथ पारदर्शी प्लेक्सीग्लास से बना है। कोरलड्रॉ में बने चित्र के अनुसार सभी भागों को लेजर कट किया गया है:

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


3. छेदों को चिह्नित करें और ड्रिल करें (2 मिमी ड्रिल बिट)। बोल्ट और नट्स (सूची से आइटम 10, 11) का उपयोग करके सर्वो को आवास में सुरक्षित करें। सामने का सर्वो शाफ्ट सामने की दीवार के करीब होना चाहिए। रियर सर्वो ड्राइव शाफ्ट पिछली दीवार के करीब हैं।




4.1. पंजे इकट्ठा करो. पंजे के ऊपरी हिस्से (दो छेद वाले) लें। भाग के मध्य को चिह्नित करें. सर्वो ड्राइव रॉकर रखने के बाद, स्क्रू और ड्रिल छेद (1.5 मिमी ड्रिल) के साथ बढ़ते बिंदुओं को चिह्नित करें। रॉकर्स को इस तरह बांधें कि स्क्रू हेड्स सीटों के किनारे पर हों। रॉकर्स को अलग-अलग तरफ से ठीक करें और शाफ्ट के लिए सीटें विपरीत दिशा में थीं।


4.2. सर्वो (2 मिमी ड्रिल बिट) को माउंट करने के लिए छेदों को चिह्नित करें और ड्रिल करें। संलग्न सर्वो के शाफ्ट पंजे के संकीर्ण किनारे के करीब होने चाहिए।


4.3. उदाहरण के लिए, पंजों को फिसलने से बचाने के लिए उन पर रबर चिपका दें। लेकिन आपको पंजे के अगले हिस्से को चिपकाना नहीं चाहिए; जब कुत्ता कदम रखता है, तो वह पकड़ा जा सकता है और फंस सकता है। मैंने कार से चिपचिपी चटाई की पट्टियों को चिपका दिया।

5. अल्ट्रासोनिक रेंजफाइंडर (2 मिमी ड्रिल) को जोड़ने के लिए छेदों को चिह्नित करें और ड्रिल करें। ऊपर की ओर इशारा करते हुए संपर्क पैरों के साथ रेंजफाइंडर स्थापित करें।

6. बैटरी होल्डर को इस प्रकार स्थापित करें कि वह केस के मध्य में स्थित हो। Arduino बोर्ड को सुरक्षित करें और सभी घटकों को कनेक्ट करें। ब्रेडबोर्ड के एक हिस्से का उपयोग बिजली वितरण के लिए किया गया था।

Z-रोबोडॉग रोबोट की स्थापना और लॉन्चिंग:

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

मेरे कुत्ते के पंजे सर्वो कोणों (चर zs1, zs2, zs3, आदि) के चरम बिंदुओं पर ऐसे दिखते हैं। अपने पंजों को फोटो की तरह रखने की कोशिश करें। देखने में पंजे एक ही स्थिति में होने चाहिए।

मुख्य मुद्रा में आप अपने पंजे भी बाहर रख सकते हैं। उसके बाद, रॉकर्स को सर्वो शाफ्ट पर स्क्रू करना न भूलें।


Z-रोबोडॉग का सॉफ़्टवेयर भाग:

कोड बहुत सरल है, टिप्पणियाँ हर जगह जोड़ी जाती हैं। सभी गतिविधियाँ एक सरणी में हैं, ताकि संख्याओं में भ्रमित न हों, मैंने प्रत्येक सर्वो के लिए चर का उपयोग किया। उदाहरण के लिए, s1 सर्वो 1 है, s2 सर्वो 2 है इत्यादि। इसे समझना आसान बनाने के लिए, मैं आपको यह आरेख प्रस्तुत करता हूँ।

आरेख में पंजों को क्रमांकित किया गया है; पंजे का प्रत्येक भाग एक सर्वो ड्राइव से जुड़ा है जो इसे चलाता है। इसके अलावा, प्रत्येक पंजे के लिए, गति की दिशाएं इंगित की जाती हैं; प्लस और माइनस चिह्न इंगित करते हैं कि कोण बढ़ने या घटने पर पंजा कहां चलेगा। शुरुआती कोण मुख्य पोस्ट (एस1, एस2, एस3, आदि) के कोने थे। उदाहरण के लिए, यदि आपको दूसरे पंजे का विस्तार करने की आवश्यकता है, तो आपको कोण s3 और s4 को बढ़ाना होगा, सरणी में यह इस तरह दिखेगा (s1, s2, s3+100, s4+50, s5, s6, s7, s8) . यहाँ पूरा स्केच है. कोड मेरे ज्ञान के आधार पर लिखा गया था, कृपया मुझे बताएं कि क्या मैंने गलत कार्यान्वयन पथ चुना है।

वीडियो:


संग्रह में स्केच: आपके पास हमारे सर्वर से फ़ाइलें डाउनलोड करने की पहुंच नहीं है

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

आगे बढ़ने से पहले, कृपया निम्नलिखित पर ध्यान दें: विनिर्माण के दौरान शिल्पलेजर कटर का प्रयोग किया गया। यदि आपके पास अपने हाथों से काम करने का पर्याप्त अनुभव है तो आप लेजर कटर का उपयोग करने से बच सकते हैं। परिशुद्धता परियोजना को सफलतापूर्वक पूरा करने की कुंजी है!

चरण 1: यह कैसे काम करता है?

रोबोट के 4 पैर हैं, जिनमें से प्रत्येक पर 3 सर्वो हैं, जो इसे अपने अंगों को 3 डिग्री की स्वतंत्रता में स्थानांतरित करने की अनुमति देते हैं। वह "रेंगने वाली चाल" के साथ चलता है। यह धीमा हो सकता है, लेकिन यह सबसे सहज में से एक है।

सबसे पहले, आपको रोबोट को आगे, पीछे, बाएँ और दाएँ चलना सिखाना होगा, फिर एक अल्ट्रासोनिक सेंसर जोड़ना होगा, जो बाधाओं/बाधाओं का पता लगाने में मदद करेगा, और फिर एक ब्लूटूथ मॉड्यूल, जिसकी बदौलत रोबोट का नियंत्रण एक नए स्तर पर पहुँच जाएगा। .

चरण 2: आवश्यक भाग

कंकाल 2 मिमी मोटे प्लेक्सीग्लास से बना।

घरेलू उत्पाद के इलेक्ट्रॉनिक भाग में निम्न शामिल होंगे:

  • 12 सर्वो;
  • Arduino nano (किसी अन्य Arduino बोर्ड से बदला जा सकता है);

  • सर्वो को नियंत्रित करने के लिए शील्ड;
  • बिजली की आपूर्ति (परियोजना में 5V 4A बिजली की आपूर्ति का उपयोग किया गया था);

  • अतिध्वनि संवेदक;
  • एचसी 05 ब्लूटूथ मॉड्यूल;

ढाल बनाने के लिए आपको आवश्यकता होगी:

  • सर्किट बोर्ड (अधिमानतः बिजली और जमीन की सामान्य लाइनों (बसों) के साथ);
  • इंटर-बोर्ड पिन कनेक्टर - 30 पीसी;
  • प्रति बोर्ड सॉकेट - 36 पीसी;

  • तार.

औजार:

  • लेजर कटर (या कुशल हाथ);
  • सुपर गोंद;
  • गर्म पिघलता एधेसिव।

चरण 3: कंकाल

आइए कंकाल के घटकों को चित्रित करने के लिए एक ग्राफ़िक्स प्रोग्राम का उपयोग करें।

उसके बाद, हमने किसी भी उपलब्ध विधि का उपयोग करके भविष्य के रोबोट के 30 हिस्सों को काट दिया।

चरण 4: असेंबली

काटने के बाद, प्लेक्सीग्लास से सुरक्षात्मक कागज़ का आवरण हटा दें।

आगे हम पैरों को जोड़ना शुरू करते हैं। कंकाल के हिस्सों में निर्मित बन्धन तत्व। बस भागों को एक साथ जोड़ना बाकी है। कनेक्शन काफी कड़ा है, लेकिन अधिक विश्वसनीयता के लिए आप फास्टनिंग तत्वों पर सुपरग्लू की एक बूंद लगा सकते हैं।

फिर आपको सर्वो को संशोधित करने की आवश्यकता है (सर्वो शाफ्ट के विपरीत एक स्क्रू चिपकाएँ)।

इस संशोधन से हम रोबोट को और अधिक स्थिर बना देंगे। केवल 8 सर्वो को संशोधित करने की आवश्यकता है; शेष 4 को सीधे शरीर से जोड़ा जाएगा।

हम पैरों को कनेक्टिंग तत्व (घुमावदार भाग) से जोड़ते हैं, और यह, बदले में, शरीर पर सर्वो ड्राइव से जोड़ते हैं।

चरण 5: ढाल बनाना

यदि आप चरण में प्रस्तुत तस्वीरों का अनुसरण करते हैं तो बोर्ड बनाना काफी सरल है।

चरण 6: इलेक्ट्रॉनिक्स

आइए सर्वो ड्राइव पिन को आर्डिनो बोर्ड से जोड़ें। पिनों को सही क्रम में जोड़ा जाना चाहिए, अन्यथा कुछ भी काम नहीं करेगा!

चरण 7: प्रोग्रामिंग

फ्रेंकस्टीन को जीवन में लाने का समय आ गया है। सबसे पहले, लेग्स_इनिट प्रोग्राम को लोड करें और सुनिश्चित करें कि रोबोट चित्र में दिखाई गई स्थिति में है। इसके बाद, आइए यह जांचने के लिए quattro_test लोड करें कि क्या रोबोट बुनियादी गतिविधियों, जैसे कि आगे, पीछे, बाएँ और दाएँ जाने पर प्रतिक्रिया करता है।

महत्वपूर्ण: आपको arduino IDE में एक अतिरिक्त लाइब्रेरी जोड़ने की आवश्यकता है। लाइब्रेरी का लिंक नीचे दिया गया है:

रोबोट को 5 कदम आगे बढ़ना होगा, 5 कदम पीछे जाना होगा, बाएं 90 डिग्री मुड़ना होगा, 90 डिग्री दाएं मुड़ना होगा। यदि फ्रेंकस्टीन सब कुछ ठीक करता है, तो हम सही दिशा में आगे बढ़ रहे हैं।

पी. एस: रोबोट को स्टैंड की तरह कप पर रखें, ताकि आपको इसे हर बार शुरुआती बिंदु पर न रखना पड़े। एक बार परीक्षणों से पता चला कि रोबोट सामान्य रूप से काम कर रहा है, तो हम इसे जमीन/फर्श पर रखकर परीक्षण जारी रख सकते हैं।

चरण 8: व्युत्क्रम गतिकी

व्युत्क्रम गतिकी वास्तव में रोबोट को चलाती है (यदि आप इस परियोजना के गणित पक्ष में रुचि नहीं रखते हैं और परियोजना को समाप्त करने की जल्दी में हैं, तो आप इस चरण को छोड़ सकते हैं, लेकिन यह जानना कि रोबोट को क्या चलाता है, हमेशा उपयोगी होगा)।

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

इसी तरह के लेख