"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

понедельник, 11 декабря 2017 г.

ЗОНА АРДУИНО: Учим робота сделать поворот

На прошлом уроке мы провели исследования робота в ходе которого мы научили робота останавливаться перед препятствием, которое он обнаруживает ультро-звуковым датчиком прямо по ходу движения. Кроме этого Вы устранили неправильное подключение ультро-звукового датчика, научились писать команды замера дистанции, внесли изменения в нашу ДРАКОН-СХЕМУ, сгенерировали новый скетч №3.
Дальнейшая наша работа предполагает создание скетча управления, который заставляет робота отворачивать от препятствия в сторону более свободного пространства. 
В нашем роботе ультро-звуковой дальномер закреплен на подвижной платформе сервомотора. Сервопривод это точный исполнитель который получая на вход значение управляющего параметра стремится создать и поддерживать значение на выходе исполнительного элемента.
Подключение сервопривода от внешнего источника напряжения
Управляющий сигнал представляет из себя импульсы с нужной нам шириной, которые посылаются с определенной частотой. Для рассматриваемых нами сервоприводов частота посылания импульса почти всегда будет около 50 Гц (это примерно 1 раз в 20мс), а ширина импульса будет лежать в пределе от 544мкс до 2400мкс.

Как видно из картинке, импульс шириной в 544мкс выставит выводной вал в положение 0°, 1520мск соответствует углу в 90°, а 2400мкс соответствует 180°. 

Для подключения к контроллеру от сервопривода тянется 3 провода обжатых стандартным 3 пиновым разъемом с шагом 2.54мм . Цвета проводов могут варьироваться. Коричневый или черный - земля (GND), красный - плюс источника питания (VTG), оранжевый или белый - управляющий сигнал (SIG).
Изображение Сервопривод Tower Pro 9g SG90
Типовой скетч сервопривода

#include <Servo.h>

// для дальнейшей работы назовем 9 пин как servoPin
#define servoPin 9
// 544 это эталонная длина импульса при котором сервопривод должен принять положение 0°
#define servoMinImp 544 
// 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180°
#define servoMaxImp 2400 
//  объявляем наш сервопривод
Servo myServo;
void setup()
{
myServo.attach(servoPin, servoMinImp, servoMaxImp);
// устанавливаем пин как вывод управления сервоприводом,
// а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов.
// импульсы с большей или меньшей длиной восприниматься не будут.
// для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440.
// поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода.

}

void loop() {  

  // устанавливаем угол 0°  
  myservo.write(0);  
  delay(2000);
  // устанавливаем угол 90°  
  myservo.write(90);  
  delay(2000);
  // устанавливаем угол 180°  
  myservo.write(180);  
  delay(2000);

}

Словарик
myservo.read();
Считывает текущий угол поворота сервопривода, возвращает значение типа int — угол от 0 до 180 градусов.

myservo.attached();
Проверяем, привязан ли сервопривод. Возвращает логическое значение bool.

myservo.detach();
Отключает сервопривод от пина.
Предлагаемый алгоритм программы робота


























Но для начала необходимо написать скетч проверки и настройки работы сервомотора