Повороты робота slide

Повороты влево, вправо

Описание Повороты влево, вправо

Рассмотрим идеальный случай.

При этом колеса не проскальзывают по поверхности. Скорость движения стабильная.
При правильных расчетах робот точно выполняет все команды.
 

Вариант поворота №1.

Поворот осуществляется левым колесом. Правое колесо остановлено и является центром радиуса поворота.
 
Прежде, чем писать программу поворота, попробуем графически изобразить движение робота при повороте вправо на 90 градусов.


поворот робота


Из рисунка следует, что радиус поворота равняется расстоянию между центрами колес. И длина хода левого колеса равна одной четверти длины окружности.
Измерив расстояние между центрами колес на нашем роботе мы получим радиус окружности. Зная радиус мы сможем найти путь, который должно пройти левое колесо для поворота направо на 90 градусов.
 
Радиус окружности –
Длина пути левого колеса –
Время вращения левого колеса -
 
Пишем код.
 

#define DIR_R   2
#define SPEED_R  3 
#define DIR_L  4     
#define SPEED_L 5
 
void setup()
{
  pinMode (DIR_R, OUTPUT);
  pinMode (SPEED_R, OUTPUT);
  pinMode (DIR_L, OUTPUT);
  pinMode (SPEED_L, OUTPUT);
 
}
 
 void loop()
{
  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек
  
  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, LOW);
// Низкий уровень запрещает вращение моторов
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, LOW);
  delay(2000);
//останов 2 сек.
 
//далее левое колесо вращаем 1 сек., правое колесо остановлено
//после поворота направо робот сразу начинает движение вперед без паузы.

  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, LOW);
  delay(1000);
// Вращаем 1 сек
 
//вращаем оба колеса 1 сек.
  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек
 
//вращаем правое колесо 1 сек., левое колесо остановлено
  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, LOW);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек.
  }

 
Скопируйте текст программы и вставьте его в Arduino IDE.
После проверки загрузите код в контроллер. Установите контроллер в блок R-5 и включите питание робота.



Вариант поворота №2
 
Во втором варианте для поворота мы будем вращать колеса в разные стороны.  В этом случае значительно уменьшается радиус поворота. Робот разворачивается практически вокруг своей оси.
 
На рисунке видно, что радиус разворота равен половине расстояния между серединами колес.
 
Таким образом мы сможем посчитать время для поворота.
Половина расстояния между серединами колес (радиус поворота) –
Длина окружности поворота –
Четверть длины окружности –
Время прохождения участка поворота при средней измеренной скорости – 



разворот робота
 

Пишем код.
 

#define DIR_R   2
#define SPEED_R  3 
#define DIR_L  4     
#define SPEED_L 5
 
void setup()
{
  pinMode (DIR_R, OUTPUT);
  pinMode (SPEED_R, OUTPUT);
  pinMode (DIR_L, OUTPUT);
  pinMode (SPEED_L, OUTPUT);
 
}
 
 void loop()
{
  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек
 

  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, LOW);
// Низкий уровень запрещает вращение моторов
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, LOW);
  delay(2000);
//останов 2 сек.
 
//далее левое колесо вращаем 1 сек. вперед, правое колесо вращаем назад
//после поворота направо робот сразу начинает движение вперед без паузы.

  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, LOW);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек
 
//вращаем оба колеса 1 сек.
  digitalWrite (DIR_R, HIGH);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек
 
//вращаем правое колесо 1 сек. назад, левое колесо вращаем вперед
  digitalWrite (DIR_R, LOW);
  digitalWrite (SPEED_R, HIGH);
  digitalWrite (DIR_L, HIGH);
  digitalWrite (SPEED_L, HIGH);
  delay(1000);
// Вращаем 1 сек
  }
 
Скопируйте текст программы и вставьте его в Arduino IDE.
После проверки загрузите код в контроллер. Установите контроллер в блок R-5 и включите питание робота.
 


 

Другие проекты