ربات ماشین دوری کننده از مانع با آردوینو (آموزش جامع)
محتویات
دوری کردن از موانع یک عمل کلیدی در رباتیک است. دوری کردن از موانع یعنی ربات ها به طور مستقل تلاش کنند تا بدون برخورد با اجشام به مقصد خود برسند. نوعی از ربات های مستقل که تقریبا خوب عمل میکند و باهوش اند، ماشین دوری کننده از مانع با آردوینو است. این ربات قادر به تشخیص موانع و پیدا کردن مسیرهای جدید برای برخورد نکردن با آن هاست. ما در پروژه های گذشته، ربات های مختلفی با آردوینو ساخته ایم. از جمله ربات عدم برخورد به مانع با آردوینو و سنسور التراسونیک. اگر علاقه مند به مطالعه آن هستید، کافی است آن را در سایت ما جست و جو کنید.
در این راهنمای جامع، پروسه ساخت ماشین دوری کننده از مانع با آردوینو را برایتان توضیح خواهیم داد.
این وسیله نقلیه خلاقانه، از یک سنسور التراسونیک که بر روی یک سروو نصب شده و میتواند اجسام را هم در جلو و هم در دو طرف چپ و راست تشخیص بدهد، استفاده میکند. همچنین یک درایور یا راه انداز موتور L298N DC را هم به کار میگیرد که به عنوان نیرو محرکه موتور 4 دنده ای عمل میکند. برای این پروژه به یک کیت ماشین دوری کننده از مانع هم نیاز خواهید داشت.
مدار اتصال ماشین دوری کننده از مانع با آردوینو
مدار اتصال کامل این ربات دوری کننده از مانع 2WD، مطابق شکل زیر است. همان که میتوانید مشاهده کنید، از یک سنسور التراسونیک به همراه یک سروو موتور برای اندازه گیری فاصله در سه جهت استفاده میشود. براساس اندازه گیری های انجام شده، ربات تصمیم میگیرد که به جلو برود، به سمت چپ بپیچد یا به سمت راست.
سنسورالتراسونیک نقش مهمی در این پروژه ایفا میکند. به این صورت که سیگنال های فراصوت 40 کیلوهرتزی را ارسال میکند . این سیگنال ها هنگامی که به جسمی برخورد کردند، برمیگردند. با تجزیه و تحلیل پژواک های برگشتی، سنسور فاصله بین ربات و مانع را به صورت همزمان محاسبه میکند. هنگامی که یک جسم شناسایی شد، ماشین به طور خودکار تغییر مسیر میدهد. ماشین دوری کننده ار مانع با آردوینو بعد از ساخت، ظاهری مانند تصویر پایین خواهد داشت.
ما برای ساخت بدنه ربات خود، از شاسی بدنه و کیت رباتیک آردوینو استفاده کردیم. کیت های رباتیک متفاوتی در بازار موجود است که میتوانید به سلیقه خود یکی را خریداری کنید. اما ما در این پروژه، از این کیت استفاده خواهیم کرد. به دلیل اینکه بیشتر شبیه به یک ماشین بدون سپر جلو، اسپویلر و دیگر اجزاست. در ساخت ربات دنبال کننده انسان و ربات بذار و بردار با آردوینو هم از همین کیت استفاده کرده بودیم. اگر علاقه مند به مطالعه این مطالب هستید، کافی است آن ها را در سایت ما جست و جو کنید.
قطعات لازم
- آردوینو Uno
- یک عدد سرووموتور دنده فلزی MG90
- سنسور التراسونیک HC-SR04
- 3 عدد RGB LED
- راه انداز موتور L298N
- شاسی بدنه و کیت رباتیک آردوینو 2WD آردوینو (برش لیزری)
- باتری لیتویم-یون 12 ولتی
- مبدل باک Lm2596 DC-DC
- کلید
- سیم های جامپر
- برد بورد یا PCB
- پیچ و مهره و اسپیسر
اتصالات و سیم کشی ربات دوری کننده از مانع با آردوینو
ساخت ربات دوری کننده از ماتع با آردوینو کار ساده ای است. برای آسان تر شدن درک موضوع، در پاراگراف های بعدی، نحوه اتصال هر عنصر مدار به آردوینو را توضیح میدهیم.
همچنین میتوانید برای یادگیری بهتر، مدار پایین را همراه با توضیحات دنبال کنید.
اتصال سرووموتور به آردوینو:
برای اتصال سرووموتورر به آردوینو، کافی است سیم سیگنال را به هر کدام از پایه های PWM آردوینو که خواستید متصل کنید. همچنین سیم تغذیه سروو را به خروجی 5V مبدل DC-DC و سیم زمین را به یکی از پایه های GND آردوینو متصل کنید.
اتصال آردوینو به سنسور التراسونیک:
سنسور را به آردوینو به این گونه متصل کنید: VCC به 5V، GND به GND، پایه TRIG به پایه 2 دیجیتال و پایه ECHO را به پایه 4 دیجیتال متصل کنید. این نحوه اتصال، به آردوینو امکان برقراری ارتباط با سنسور را میدهد. در ادامه، کد این ربات را خواهیم نوشت و خواهیم دید که ربات قادر است فاصله خود تا جسم پیش رو را اندازه گیری کرده و متناسب با آن، چرخ های خود را کنترل کند. جزییات بیشتر را در بخش کد بررسی خواهیم کرد.
اتصال RGB LED ها به آردوینو:
زمین (کاتد) تمام RGB LED ها را به ریل زمین روی برد بورد متصل کنید. سپس ترمینال قرمز هر RGB LED را به یک پایه آنالوگ آردوینو متصل کنید. (پایه های A1,A2,A3). ترمینال های سبز هر کدام از لامپ ها را به یک پایه دیجیتال آردوینو ( 5و6و13) متصل کنید. این روش پیکربندی به آردوینو امکان کنترل RGB LED ها را میدهد.
اتصال راه انداز موتور L298N به آردوینو:
پایه GND آردوینو را به ریل زمین برد بورد، خروجی 5 ولت LM2596 را به ریل مثبت برد بورد و زمین LM2596 را به ریل زمین برد بورد متصل کنید. در موتور DC اول، IN1 و IN2 را به پایه های 7 و 8 آردوینو و در موتور DC دوم، IN3 و IN4 را به پایه های 11 و 12 آردوینو متصل کنید. کنترل موتور PWM را از طریق اتصال ENA راه انداز به پایه 9 PWM آردوینو و ENB راه انداز را به پایه 10 PWM آردوینو فعال کنید. به این طریق میتوانیم با آردوینو 2 موتور را به طور مستقل کنترل کنیم.
اتصالات تغذیه:
ترمینال مثبت باتری لیتیوم-یون 12 ولتی را به ورودی Vin راه انداز و ترمینال منفی آن را به ریل زمین برد بورد متصل کنید. همچنین، ترمینال مثبت باتری باید به ورودی 12 ولت راه انداز موتور و ترمینال منفی باتری باید به زمین راه انداز موتور متصل شود.
مهم : همیشه در هنگام آپلود کد، تغذیه مدار آردوینو را خاموش کرده و Vin منبع تغذیه خارجی را جدا کنید.
با استفاده از پیچ و مهره و درصورت نیاز اسپیسر، تمام قطعات را به بدنه محکم کنید. از امن بودن تمام اتصالات، عدم وجود احتمال اتصال کوتاه یا سیم های شل در مدار مطمئن شوید. همیشه قبل از روشن کردن مدار، اتصالات خود را دوباره بررسی کنید.
به علاوه، ما چندین عنصر اضافی هم در طراحی مدار گنجانده ایم. از جمله یک کلید on/off تغذیه، سوکت شارژDC 12 ولت و یک نشانگر سطح باتری لیتیوم-یون که در پشت وسیله نقلیه کار گذاشته شده است. همچنین یک کلید کشویی در نزدیکی سوکت DC گذاشته ایم که وقتی کلید تغذیه اصلی خاموش است، بر سطح باتری نظارت میکند.
وقتی میخواهیم باتری را شارژ کنیم، کلید را بالا برده و هنگامی که میخواهیم وضعیت باتری را بررسی کنیم، کلید را پایین می آوریم. توجه داشته باشید هنگامی که کلید پایین است، باتری شارژ نمیشود.
کد ربات دوری کننده از مانع با آردوینو
حال که اتصالات این ربات را تمام کردیم، بیایید نگاهی به کد آردوینو آن بیندازیم. کد نهایی و کامل را میتوانید در انتهای همین مطلب مشاهده کنید. این کد شامل راه اندازی ماژول HC-SR04 و ارسال سیگنال ها به پایه های موتور برای به حرکت درآوردن ربات در جهت مناسب است.
شما میتوانید با ایجاد تغییراتی در کد، آن را شخصی سازی کنید. برای مثال فاصله آستانه ( میدان دید سنسور) را براساس نیاز خود تغییر بدهید و سرعت موتور را کنترل کنید. کتابخانه های لازم را نصب کرده و کد زیر را آپلود کنید.
#include <Servo.h> This block includes the Servo library, which is necessary for controlling the servo motor. // Ultrasonic sensor pins #define trig 2 #define echo 4 // RGB led pins #define LR 9 // Led Right #define LC 13 // Led Center #define LL 10 // Led Left #define LRR A3 // Led Right Red #define LCR A2 // Led Center Red #define LLR A1 // Led Left Red
در این بلوک کد، ثابت های مختلفی را برای نشان دادن اینکه هر پایه از عناصر مدار مثل RGB LED یا سنسور التراسونیک به کدام پایه از آردوینو متصل شده اند، تعریف میکنیم.
// Motor control pins #define LEFT_MOTOR_PIN1 8 #define LEFT_MOTOR_PIN2 7 #define RIGHT_MOTOR_PIN1 12 #define RIGHT_MOTOR_PIN2 11 #define ENA 6 // Enable A pin for motor speed control #define ENB 3 // Enable B pin for motor speed control
در این خطوط، مشخص میکنیم که پایه های دیجیتال آردوینو ( پایه های 7 و8 و 11 و 12) برای کنترل موتورهای DC به وردی های راه انداز موتور L298N متصل شده اند. پایه های in1 و in2 برای کنترل یکی از موتورها و پایه های in3 و in4 برای کنترل موتور دیگر هستند. ENA و ENB سرعت موتور را کنترل میکنند.
// Distance thresholds for obstacle detection #define MIN_DISTANCE_BACK 12
این بلوک کد مقادیر آستانه را تعیین میکند. MIN_DISTANCE_BACK بیانگر حداقل فاصله لازم بین جسم و ربات برای توقف ربات است.
void setup() { // Set motor control pins as outputs pinMode(LEFT_MOTOR_PIN1, OUTPUT); pinMode(LEFT_MOTOR_PIN2, OUTPUT); pinMode(RIGHT_MOTOR_PIN1, OUTPUT); pinMode(RIGHT_MOTOR_PIN2, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(LR, OUTPUT); pinMode(LC, OUTPUT); pinMode(LL, OUTPUT); pinMode(LRR, OUTPUT); pinMode(LCR, OUTPUT); pinMode(LLR, OUTPUT); digitalWrite(LR, LOW); digitalWrite(LC, LOW); digitalWrite(LL, LOW); analogWrite(LRR, 0); analogWrite(LCR, 0); analogWrite(LLR, 0); servoLook.attach(5); //Set the Trig pins as output pins pinMode(trig, OUTPUT); //Set the Echo pins as input pins pinMode(echo, INPUT); analogWrite(ENA, 53.5); // speed for motor A 0-LOW speed, 255-Full speed analogWrite(ENB, 45); // speed for motor B // Initialize the serial communication for debugging Serial.begin(9600); }
در تابع ()setup، مقداردهی های اولیه را انجام میدهیم. در ابتدا پایه های کنترل موتور را پیکربندی میکنیم. پایه های LED و پایه های سنسور را به عنوان پایه های ورودی یا پایه های خروجی تنظیم میکنیم. حالت آغازین LED ها و RGB LED ها را روی صفر یا LOW قرار میدهیم. به علاوه، سرووموتور به پایه 5 متصل شده است. سرعت موتور را با استفاده از تابع ()analogWrite روی پایه ENA و ENB قابل تنظیم است.
ارتباط سریال برای دیباگ کردن و اشکال زدایی برقرار میشود. ( اگر چه این قسمت اختیاری است.)
void loop() { servoLook.write(90); delay(750); int distance = getDistance(); if (distance >= MIN_DISTANCE_BACK) { moveForward(); Serial.println("forward"); } while(distance >= MIN_DISTANCE_BACK) { distance = getDistance(); delay(50); } Stop(); int turnDir = checkDirection(); Serial.println(turnDir); switch(turnDir) { case 0: //Turn left Serial.println("Left"); turnLeft(); delay(425); Stop(); break; case 2: //Turn right Serial.println("Right"); turnRight(); delay(415); Stop(); break; case 3: //move forward Serial.println("Forward"); moveForward(); break; } }
این قسمت، حلقه اصلی کد است که به طور مداوم اجرا میشود. سرووموتور به گونه ای تنظیم شده که کاملا به جلو نگاه کند ( روی 90 درجه) و مدتی طول میکشد ( 750 میلی ثانیه) تا در موقعیت خود قرار گیرد. تابع ()getDistance برای اندازه گیری فاصله با سنسور التراسونیک استفاده میشود. اگر فاصله اندازه گیری شده بزرگتر یا مساوی MIN_DISTANCE_BACK باشد، ربات به حرکت روبه جلو ادامه میدهد. یعنی هنگامی که فاصله اندازه گیری شده با سنسور از فاصله آستانه ای که پیش تر برای ربات تعریف کرده ایم، بیشتر باشد حرکت رو به جلو ادامه پیدا خواهد کرد. هنگامی که فاصله اندازه گیری شده از MIN_DISTANCE_BACK کمتر میشود، تابع Stop() برای متوقف کردن ربات به کار می آید. تابع ()checkDirection برای بررسی اینکه آیا مانعی در سمت چپ، راست یا جلوی ربات وجود دارد و سپس انتخاب مسیر استفاده میشود. براساس جهت تشحیص داده شده، ربات به جلو حرکت کرده یا به سمت چپ یا راست میچرخد.
پیام هایی بر روی سریال مانیتور چاپ میشوند تا به فرآیند اشکال زدایی کمک کنند.
int checkDirection() //Check the left,Front and right directions and decide which way to turn int getDistance() //Measure the distance to an object{ unsigned long pulseTime; //Create a variable to store the pulse travel time int distance; //Create a variable to store the calculated distance digitalWrite(trig, HIGH); //Generate a 10 microsecond pulse delayMicroseconds(10); digitalWrite(trig, LOW); pulseTime = pulseIn(echo, HIGH); //Measure the time for the pulse to return distance = pulseTime / 29 / 2; //Calculate the object distance based on the pulse time Serial.println(distance); return distance;
این تابع، با استفاده از سنسور التراسونیک فاصله تا جسم را می سنجد. یک پالس تحریک و تریگر تولید کرده و مدت زمان لازم برای برگشت پالس را اندازه میگیرد و براساس زمان اندازه گیری شده، فاصله را محاسبه میکند.
int distances [3] = {0,0,0}; //Left ,right and Front distances int turnDir; //Direction to turn, 0 left, 1 turn around, 2 right, 3 forward servoLook.write(180); //Turn servo to look left delay(500); distances [0] = getDistance(); //Get the left object distance servoLook.write(90); //Turn servo to look front delay(500); distances [3] = getDistance(); //Get the front object distance servoLook.write(0); //Turn servo to look right delay(1000); distances [1] = getDistance(); //Get the right object distance if (distances[0]<=25 && distances[1]<=25) //If both directions are blocked, move forward turnDir = 3; else if (distances[0]>=distances[1]) //If left has more space, turn left turnDir = 0; //left else if (distances[0]<distances[1]) //If right has more space, turn right turnDir = 2; //right //else if (distances[0]<=50 && distances[1]<=50 && distances[3]<=50) //If All directions are blocked, turn around //turnDir = 1; return turnDir; }
این بخش از کد، استراتژی دوری ازمانع در حرکت ربات را مدیریت میکند. با استفاده از یک سرووموتور در سه جهت روبه رو، چپ و راست فاصله موجود تا موانع را زیرنظر میگیرد. پس از بررسی، فاصله تا اجسام نزدیک را محاسبه میکند. اگر در هر دو سمت مانعی در نزدیک ربات وجود داشته باشد، ربات به جلو حرکت میکند. اگر در سمت چپ فاصله بیشتری تا مانع وجود داشته باشد، به سمت چپ چرخیده و اگر در سمت راست فاصله بیشتری تا مانع وجود داشته باشد، موتور را به سمت راست میبرد.
اگر در هر سه جهت مانعی وجود داشته باشد ربات یک دوربرگردان انجام میدهد. این سه جهت از طریق برگرداندن سه مقدار مشخص با هم ارتباط برقرار میکنند. 0 برای چپ، 2 برای راست، 3 برای جلو و 1 برای دور برگردان.
// Motor control functions void moveForward() { analogWrite(ENA, 60.5); // speed for motor A analogWrite(ENB, 52); // speed for motor B digitalWrite(LR, HIGH); digitalWrite(LC, HIGH); // All Green light turn on digitalWrite(LL, HIGH); analogWrite(LRR, 0); analogWrite(LCR, 0); // All Red light turn off analogWrite(LLR, 0); digitalWrite(LEFT_MOTOR_PIN1, LOW); digitalWrite(LEFT_MOTOR_PIN2, HIGH); digitalWrite(RIGHT_MOTOR_PIN1, LOW); digitalWrite(RIGHT_MOTOR_PIN2, HIGH); } void moveBackward() { digitalWrite(LR, LOW); digitalWrite(LC, LOW); // All Green light turn off digitalWrite(LL, LOW); analogWrite(LRR, 255); analogWrite(LCR, 255); // All Red light turn on analogWrite(LLR, 255); digitalWrite(LEFT_MOTOR_PIN1, HIGH); digitalWrite(LEFT_MOTOR_PIN2, LOW); digitalWrite(RIGHT_MOTOR_PIN1, HIGH); digitalWrite(RIGHT_MOTOR_PIN2, LOW); } void turnRight() { analogWrite(ENA, 100); // speed for motor A analogWrite(ENB, 90); // speed for motor B digitalWrite(LR, HIGH); digitalWrite(LC, LOW); // right side Green light turn on digitalWrite(LL, LOW); analogWrite(LRR, 0); analogWrite(LCR, 255); // Left and Middle Red light turn on analogWrite(LLR, 255); digitalWrite(LEFT_MOTOR_PIN1, HIGH); digitalWrite(LEFT_MOTOR_PIN2, LOW); digitalWrite(RIGHT_MOTOR_PIN1, LOW); digitalWrite(RIGHT_MOTOR_PIN2, HIGH); } void turnLeft() { analogWrite(ENA, 100); // speed for motor A analogWrite(ENB, 90); // speed for motor B digitalWrite(LR, LOW); digitalWrite(LC, LOW); // left side Green light turn on digitalWrite(LL, HIGH); analogWrite(LRR, 255); analogWrite(LCR, 255); // right and Middle Red light turn on analogWrite(LLR, 0); digitalWrite(LEFT_MOTOR_PIN1, LOW); digitalWrite(LEFT_MOTOR_PIN2, HIGH); digitalWrite(RIGHT_MOTOR_PIN1, HIGH); digitalWrite(RIGHT_MOTOR_PIN2, LOW); } void Stop() { analogWrite(ENA, 0); // speed for motor A analogWrite(ENB, 0); // speed for motor B digitalWrite(LR, LOW); digitalWrite(LC, LOW); digitalWrite(LL, LOW); analogWrite(LRR, 255); analogWrite(LCR, 255); analogWrite(LLR, 255); analogWrite(ENA, 0); // speed for motor A analogWrite(ENB, 0); // speed for motor B digitalWrite(LEFT_MOTOR_PIN1, LOW); digitalWrite(LEFT_MOTOR_PIN2, LOW); digitalWrite(RIGHT_MOTOR_PIN1, LOW); digitalWrite(RIGHT_MOTOR_PIN2, LOW); }
این بلوک ها در قسمت اصلی کد ماشین دوری کننده از مانع با آردوینو (2WD) استفاده میشوند تا جهت و حرکت ماشین را براساس تشخیص مانع کنترل کند.
تابع ()moveForward، ماشین را به سمت جلو به حرکت در می آورد. سرعت موتورهای دوطرف را برای حرکت به جلو کنترل کرده، چراغ های سبز که بیانگر حرکت به جلو هستند را روشن و چراغ های قرمز را که بیانگر ایست یا حرکت به عقب هستند را خاموش میکند.
تابع ()moveBackward، ماشین را به سمت عقب به حرکت درمی آورد. چراغ های سبز را خاموش و چراغ های قرمز را روشن کرده تا حرکت به عقب را مشخص کند. همچنین سرعت موتورها را برای حرکت به عقب تنظیم میکند.
تابع ()turnRight ربات را به سمت راست میچرخاند. سرعت موتورها را برای چرخیدن به سمت راست تنظیم کرده، چراغ های سبز سمت راست را روشن و چراغ های قرمز سمت چپ و وسط را هم روشن کرده تا چرخش به راست را نشان دهد.
تابع ()turnLeft ربات را به سمت چپ میچرخاند. سرعت موتورها را برای چرخش به چپ تنظیم کرده، چراغ سبز سمت چپ را روشن و چراغ قرمز سمت راست و وسط را هم روشن میکند تا چرخش به چپ را نشان دهد.
تابع ()Stop ربات را به ایست کامل وامیدارد. تمامی چراغ ها را خاموش کرده و سرعت دو موتور را صفر و تمام حرکت موتورها را متوقف میکند.
کارکرد ماشین دوری کننده از مانع
عنصر مرکزی مدار که این ماشین را کاربردی میکند، سنسور التراسونیک HC-SR04 است. این سنسور با ارسال موج های صوتی، فاصله اجسام را پیدا میکند. یک سنسور بسیار مفید و کاربردی در پروژه هایی که به اندازه گیری فاصله به صورت سریع و مقرون به صرفه نیاز دارند. این سنسور کوچک است و در هر جایی از بدنه ماشین میتواند نصب شود.
شش بخش اصلی در این پروژه وجود دارد:
کیت آردوینو 2WD دوری کننده از مانع، آردوینو، سنسور التراسونیک، موتورهای DC، یک سروو موتور و یک راه انداز موتور.
هنگامی که آردوینو را روشن کرده و به منبع تغذیه وصل میکنیم، سرووموتور شروع به چرخیدن میکند و فاصله را در سه جهت چپ، راست و روبه رو بررسی میکند. در نهایت به هر جهتی که ربات فاصله بیشتری از مانع خواهد داشت، هدایت میکند.
به محض اینکه ماشین به یک مانع نزدیک شد، حرکت ماشین براساس آن فاصله آستانه ای که خودمان تعریف کرده ایم، تغییر خواهد کرد.
اگر مانع در فاصله ای کمتر از فاصله آستانه قرار گرفته باشد، سنسور التراسونیک به آردوینو اطلاع داده و به محض اینکه آردوینو این سیگنال را دریافت کرد به راه اندار موتور فرمان بازایستادن موتورها از چرخیدن را میدهد. سپس سرووموتورها دوباره فواصل را در هر سه جهت بررسی میکند. بر اساس آنچه که محاسبه کرده، به راه انداز موتور سیگنالی میفرستد و جهت چرخش به چپ یا راست را معلوم میکند و ماشین در همان جهت خواهد چرخید.
سپس، ماشین به حرکت مستقیم خود تا زمانی که به مانع دیگری نزدیک شود ادامه میدهد. تمام این پروسه تا زمانی که منبع تغذیه را قطع نکنید، ادامه می یابد.
سه عدد RGB LED هم در قسمت پایینی ماشین قرار داده شده که جهت حرکت آن را تعیین میکند. هنگامی که ربات می ایستد، تمام LED ها قرمز می شوند. زمانی که به جلو حرکت میکند، همگی سبز میشوند. اگر ربات به راست بچرخد، LED سمت راست سبز شده و دو LED دیگر قرمز میمانند و به طور مشابه همین روند درباره چرخش به چپ وجود دارد.
در این پروژه، ما به طور موفقیت آمیز یک ماشین دوری کننده از مانع با آردوینو را طراحی کرده و ساختیم. این ماشین میتواند به طور مستقل در محیط حرکت کرده و الگوریتم ماز را حل کند. ماشین از سنسور التراسونیک HC-SR04 برای اندازه گیری فاصله، از سرووموتور برای بررسی اطراف و از راه انداز موتور L298N برای کنترل موتور 4 دنده ای استفاده میکند. به طور خلاصه، ماشین دوری کننده از مانع، اصول بنیادی ربات های مستقل را نشان میدهد و آن را به یک ابزار آموزشی عالی و یک پروژه جالب برای علاقه مندان به رباتیک و الکترونیک تبدیل میکند.
این ربات میتواند کابردهای زیادی در عملیات پیچیده تری مثل تحویل غذا، مدیریت انبار، ربات تله متریک و غیره داشته باشد و امکانات هیجان انگیز رباتیک را برجسته کند.
اگر علاقه مند به ساخت ربات های جذاب بیشتری مانند این ربات هستید، پروژه های دیگر رباتیک ما را مطالعه کنید.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام وقت شما بخیر
ببخشید ماشین من مثلا اگر به سمت شمال حرکت کند و شمال و غرب مانع باشد سنسور به طرفین میچرخد اما بدون اینکه به فاصله توجه کند مثلا به غرب میرود و بعدش دوباره به سمت شمال حرکت میکند به فاصله ای که بعد از مانع باید توجه کند محاسبه نمی کند و موتور َA و B به نوبت فعال میشوند سورس را هم بدون اینکه دستکاری کنم آپلود کرده ام
سلام خسته نباشید
ببخشید من حداکثر خط #define MIN_DISTANCE_BACK 12
عدد 12 را تا چقدر میتوانم افزایش دهم
سلام عزیز
تا حد اندازه گیری ماژول التراسونیک ولی باید با توجه به شرایط و آزمون و خطا مقدار مناسب را پیدا کنید
سلام وقت شما بخیر
ببخشید من میتوانم به این سورس یه خطی اضافه کنم که وقتی مانعی را شناسایی کرد دو یا سه ثانیه چرخهایش معکوس حرکت کنند یعنی به طرف عقب تا این طوری به مانع برخورد نکند مثلا قبل از اینکه به سروو موتور دستور دهد یه چند ثانیهای معکوس حرکت کند بعد به سرو دستور بدهد
اگر در این زمینه مرا راهنمایی فرمایید واقعا ممنون شما میشوم چون برنامهنویسی بلد نیستم
چیزی که میخواهید فقط با یک خط راهنمایی من انجام نمیشود برای یادگیری برنامه نویسی میتوانید دوره آموزش آردوینو را مشاهده کنید
سلام وقت شما بخیر
ببخشید من یک سوال داشتم تاشتم اونم اینکه من ربات را کامل ساختم فقط سنسور اولترا خیلی دیر پاسخ میدهدیعنی تا مانع را تشخیص میدهد حدود پنج سانت با مانع فاصله دارد و تا می ایستد ماشین به مانع برخورد میکند چکار کنم ممنون میشم راعنماییم کنید
سلام عزیز
در این خط
#define MIN_DISTANCE_BACK 12
مقدار 12 را بیشتر کنید
سلام خسته نباشید این پروزه در دوره آردوینو هست یا نه
سلام شاسی بدنه و کیت رباتیک آردوینو 2WD آردوینو (برش لیزری) رو از هر جا دیدم مثل سایت نبود.میتونم از سایت شما تهیه کنم؟
خیلی مهم نیست شاسیش چه شکلی باشه
سلام شاسی ربات رو نقشه آن رو از کجا تهیه کنم
سلام من میخوام این رباتو بسازم ولی ازقبل برای راه اندازی ماژول l298nیه کد نوشتم که دوتا موتور رو به صورت چپگرد و راستگرد با فاصله زمانی ۳ثانیه کنترل کنه. ولی متاسفانه موتورها فقط در یک جهت عمل میکنن. ضمنا کدها درستن و مشکلی ندارن. سیم کشی هم درسته. نمیدونم مشکل از کجاس. ممنون نیشم راهنماییم کنید
ورودی های درایور رو به ترتیب از ۱تا۴ به خروجی های ۳۴۵۶آردوینو متصل کردم و کل کدها درست وارد کردم
سلام عزیز
تصویر مدارتون رو در انجمن ارسال کنید
با سلام این شاسی که شما استفاده کردید رو از کجا میتونم تهیه کنم
سلام عزیز
باید با برش لیزری قسمت های آن را بسازید