آموزش آردوینوپروژه های آردوینو

ربات ماشین دوری کننده از مانع با آردوینو (آموزش جامع)

دوری کردن از موانع یک عمل کلیدی در رباتیک است. دوری کردن از موانع یعنی ربات ها به طور مستقل تلاش کنند تا بدون برخورد با اجشام به مقصد خود برسند. نوعی از ربات های مستقل که تقریبا خوب عمل میکند و باهوش اند، ماشین دوری کننده از مانع با آردوینو است. این ربات قادر به تشخیص موانع و پیدا کردن مسیرهای جدید برای برخورد نکردن با آن هاست. ما در پروژه های گذشته، ربات های مختلفی با آردوینو ساخته ایم. از جمله ربات عدم برخورد به مانع با آردوینو و سنسور التراسونیک. اگر علاقه مند به مطالعه آن هستید، کافی است آن را در سایت ما جست و جو کنید.

در این راهنمای جامع، پروسه ساخت ماشین دوری کننده از مانع با آردوینو را برایتان توضیح خواهیم داد.

این وسیله نقلیه خلاقانه، از یک سنسور التراسونیک که بر روی یک سروو نصب شده و میتواند اجسام را هم در جلو و هم در دو طرف چپ و راست تشخیص بدهد، استفاده میکند. همچنین یک درایور یا راه انداز موتور L298N DC را هم به کار میگیرد که به عنوان نیرو محرکه موتور 4 دنده ای عمل میکند. برای این پروژه به یک کیت ماشین دوری کننده از مانع هم نیاز خواهید داشت.

مدار اتصال ماشین دوری کننده از مانع با آردوینو

مدار اتصال کامل این ربات دوری کننده از مانع 2WD، مطابق شکل زیر است. همان که میتوانید مشاهده کنید، از یک سنسور التراسونیک به همراه یک سروو موتور برای اندازه گیری فاصله در سه جهت استفاده میشود. براساس اندازه گیری های انجام شده، ربات تصمیم میگیرد که به جلو برود، به سمت چپ بپیچد یا به سمت راست.

مدار اتصال ماشین دوری کننده از مانع با آردوینو

سنسورالتراسونیک نقش مهمی در این پروژه ایفا میکند. به این صورت که سیگنال های فراصوت 40 کیلوهرتزی را ارسال میکند . این سیگنال ها هنگامی که به جسمی برخورد کردند، برمیگردند. با تجزیه و تحلیل پژواک های برگشتی، سنسور فاصله بین ربات و مانع را به صورت همزمان محاسبه میکند. هنگامی که یک جسم شناسایی شد، ماشین به طور خودکار تغییر مسیر میدهد. ماشین دوری کننده ار مانع با آردوینو بعد از ساخت، ظاهری مانند تصویر پایین خواهد داشت.

ساختار ربات دوری از مانع آردوینو

ما برای ساخت بدنه ربات خود، از شاسی بدنه و کیت رباتیک آردوینو استفاده کردیم. کیت های رباتیک متفاوتی در بازار موجود است که میتوانید به سلیقه خود یکی را خریداری کنید. اما ما در این پروژه، از این کیت استفاده خواهیم کرد. به دلیل اینکه بیشتر شبیه به یک ماشین بدون سپر جلو، اسپویلر و دیگر اجزاست. در ساخت ربات دنبال کننده انسان و ربات بذار و بردار با آردوینو هم از همین کیت استفاده کرده بودیم. اگر علاقه مند به مطالعه این مطالب هستید، کافی است آن ها را در سایت ما جست و جو کنید.

قطعات لازم

  1. آردوینو Uno
  2. یک عدد سرووموتور دنده فلزی MG90
  3. سنسور التراسونیک HC-SR04
  4. 3 عدد RGB LED
  5. راه انداز موتور L298N
  6. شاسی بدنه و کیت رباتیک آردوینو 2WD آردوینو (برش لیزری)
  7. باتری لیتویم-یون 12 ولتی
  8. مبدل باک Lm2596 DC-DC
  9. کلید
  10. سیم های جامپر
  11. برد بورد یا PCB
  12. پیچ و مهره و اسپیسر

اتصالات و سیم کشی ربات دوری کننده از مانع با آردوینو

ساخت ربات دوری کننده از ماتع با آردوینو کار ساده ای است. برای آسان تر شدن درک موضوع، در پاراگراف های بعدی، نحوه اتصال هر عنصر مدار به آردوینو را توضیح میدهیم.

همچنین میتوانید برای یادگیری بهتر، مدار پایین را همراه با توضیحات دنبال کنید.

اتصال سرووموتور به آردوینو:

برای اتصال سرووموتورر به آردوینو، کافی است سیم سیگنال را به هر کدام از پایه های 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 دنده ای استفاده میکند. به طور خلاصه، ماشین دوری کننده از مانع، اصول بنیادی ربات های مستقل را نشان میدهد و آن را به یک ابزار آموزشی عالی و یک پروژه جالب برای علاقه مندان به رباتیک و الکترونیک تبدیل میکند.

این ربات میتواند کابردهای زیادی در عملیات پیچیده تری مثل تحویل غذا، مدیریت انبار، ربات تله متریک و غیره داشته باشد و امکانات هیجان انگیز رباتیک را برجسته کند.

اگر علاقه مند به ساخت ربات های جذاب بیشتری مانند این ربات هستید، پروژه های دیگر رباتیک ما را مطالعه کنید.

موارد موجود در فایل : سورس کامل

5 (10 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

16 نظر

  1. ببخشید این برنامه برای من کار نمی کنه یعنی همش اشتباه می گیره

  2. سلام وقت شما بخیر
    ببخشید ماشین من مثلا اگر به سمت شمال حرکت کند و شمال و غرب مانع باشد سنسور به طرفین میچرخد اما بدون اینکه به فاصله توجه کند مثلا به غرب میرود و بعدش دوباره به سمت شمال حرکت میکند به فاصله ای که بعد از مانع باید توجه کند محاسبه نمی کند و موتور َA و B به نوبت فعال میشوند سورس را هم بدون اینکه دستکاری کنم آپلود کرده ام

  3. سلام خسته نباشید
    ببخشید من حداکثر خط #define MIN_DISTANCE_BACK 12
    عدد 12 را تا چقدر میتوانم افزایش دهم

    1. سلام عزیز
      تا حد اندازه گیری ماژول التراسونیک ولی باید با توجه به شرایط و آزمون و خطا مقدار مناسب را پیدا کنید

    2. سلام وقت شما بخیر

      ببخشید من میتوانم به این سورس یه خطی اضافه کنم که وقتی مانعی را شناسایی کرد دو یا سه ثانیه چرخ‌هایش معکوس حرکت کنند یعنی به طرف عقب تا این طوری به مانع برخورد نکند مثلا قبل از اینکه به سروو موتور دستور دهد یه چند ثانیه‌ای معکوس حرکت کند بعد به سرو دستور بدهد
      اگر در این زمینه مرا راهنمایی فرمایید واقعا ممنون شما میشوم چون برنامه‌نویسی بلد نیستم

    3. چیزی که میخواهید فقط با یک خط راهنمایی من انجام نمیشود برای یادگیری برنامه نویسی میتوانید دوره آموزش آردوینو را مشاهده کنید

  4. سلام وقت شما بخیر
    ببخشید من یک سوال داشتم تاشتم اونم اینکه من ربات را کامل ساختم فقط سنسور اولترا خیلی دیر پاسخ میدهدیعنی تا مانع را تشخیص میدهد حدود پنج سانت با مانع فاصله دارد و تا می ایستد ماشین به مانع برخورد میکند چکار کنم ممنون میشم راعنماییم کنید

    1. سلام عزیز
      در این خط
      #define MIN_DISTANCE_BACK 12

      مقدار 12 را بیشتر کنید

    2. سلام خسته نباشید این پروزه در دوره آردوینو هست یا نه

  5. سلام شاسی بدنه و کیت رباتیک آردوینو 2WD آردوینو (برش لیزری) رو از هر جا دیدم مثل سایت نبود.میتونم از سایت شما تهیه کنم؟

  6. سلام من میخوام این رباتو بسازم ولی ازقبل برای راه اندازی ماژول l298nیه کد نوشتم که دوتا موتور رو به صورت چپگرد و راستگرد با فاصله زمانی ۳ثانیه کنترل کنه. ولی متاسفانه موتورها فقط در یک جهت عمل میکنن. ضمنا کدها درستن و مشکلی ندارن. سیم کشی هم درسته. نمیدونم مشکل از کجاس. ممنون نیشم راهنماییم کنید
    ورودی های درایور رو به ترتیب از ۱تا۴ به خروجی های ۳۴۵۶آردوینو متصل کردم و کل کدها درست وارد کردم

    1. سلام عزیز
      تصویر مدارتون رو در انجمن ارسال کنید

  7. با سلام این شاسی که شما استفاده کردید رو از کجا میتونم تهیه کنم

    1. سلام عزیز
      باید با برش لیزری قسمت های آن را بسازید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *