У всех есть, так пусть и у меня будет ИЛИ робот, объезжающий препятствия

sonar_arduino_robotВсе, кто начинает увлекаться arduino, рано или поздно делают подобного робота, вот и я решил, а почему бы и мне не сделать такого робота? На самом деле, один раз я уже собирал подобное, с готовым скетчем, запустил его, он стукнулся в стену и я разобрал его. На тот момент у меня не было никакого интереса , а сейчас маленько появился.
Пожалуй, перейдем к делу, вдруг моя статья будет полезной какому-нибудь новичку.

Поведение робота: Замеряем длину импульса, если расстояние до препятствия больше 35 см, едем прямо, если меньше 35 см, поворачиваем направо, пока значения до препятствия не будет больше 35 см.

Теперь схема подключения.
 sonar_bb

На схеме я не указал какой аккумулятор, это 2S Lipo на 7.4 Вольт от РУ модели.

А вот и скетч.
#define Trig 8
#define Echo 9
const int in1 = 3; // подключаеми пины в моем случае на ардуино mega
const int in2 = 4; // к драйверу двигателей L298N
const int in3 = 5; //
const int in4 = 6; //
const int ena = 2; //~ PWM pin для изменения скорости
const int enb = 7; //~ подключаем к пинам с ~ рядом.

void setup()
{
  //servo.attach(10); // серву подключаем к 10 пину
  pinMode(Trig, OUTPUT); // выход
  pinMode(Echo, INPUT); // вход
  pinMode(in1, OUTPUT); // выход на L298n
  pinMode(in2, OUTPUT); // выход на L298n
  pinMode(in3, OUTPUT); // выход на L298n
  pinMode(in4, OUTPUT); // выход на L298n
  //  Serial.begin(9600);// если хотим посмотреть растояние а мониторе порта
}
unsigned int impulseTime = 0;
unsigned int distance_sm = 0;

void loop() {
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10); // 10 микросекунд
  digitalWrite(Trig, LOW);
  impulseTime = pulseIn(Echo, HIGH); // замеряем и записываем в переменную длину импульса сонара
  distance_sm = impulseTime / 58; // переводим в сантиметры

  if (distance_sm > 35) // если расстояние более 35 сантиметров едем прямо 
  {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(ena, 120);
    analogWrite(enb, 120);
  }
  else // поворачиваем на право
  {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(ena, 120);
    analogWrite(enb, 120);
  }
//  Serial.println(distance_sm); // если хотим посмотреть растояние а мониторе порта
  delay(200);
}

Вот и, наверно все. Робот, конечно, туповат. Это все из-за маленького угла обзора ультразвукового сонара. Ну, ничего страшного, в следующий раз прибавим ему ума.

Немного фоток
robot_na_arduino_sonar3 robot_na_arduino_sonar2 robot_na_arduino_sonar

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.