Подвижный сонар на Arduino

Почти во всех интернет магазинах, специализирующихся на микроконтроллерах, можно найти ультразвуковые датчики расстояния типа HC-SR04 или HY-SRF05. Как их подключить к arduino для банального измерения расстояния до ближайшей точки в зоне видимости примеров в интернете полно, а я расскажу как с помощью такого дальномера и шагового двигателя 28BYJ-48 собрать круговой сонар, схожий с теми, что устанавливаются на морских суднах. Зачем такое делать пока не знаю, тем более что зона видимости модуля всего 5 метров, но для интереса можно и повозиться.

Что нам понадобится:

  • Arduino любой модификации с USB;
  • Дальномер HC-SR04 или аналогичный;
  • Драйвер шагового мотора (подойдет  UNL 2003);
  • Шаговый двигатель;
  • Станина для двигателя (подойдет даже кусок деревянной доски);
  • Провода.

Для начала нужно закрепить ультразвуковой датчик на двигателе. Я взял крышку от пластиковой бутылки, сделал два диаметрально-противоположных надреза и отверстие по центру для шкива двигателя. В надрез вставляем дальномер, насаживаем на шкив и закрепляем стяжкой. Примитивно, но держаться будет. Провода подключаем непосредственно к модулю и Ардуино, полный круг наш сонар делать не будет, поэтому тоже сойдет.

Уже готовый подвижный модуль крепим к чему-то тяжелому, чтоб не перемещался по столу во время движения.

Как соединять… Разъем двигателя вставляем в соответствующий разъем драйвера (трудно ошибиться). Питание драйвера и дальномера (GRD и 5+) скручиваем (паяем, соединяем) в кучу и тыкаем в соответствующие выходы Ардуино. Входы драйвера подсоединяем к пинам A0, A1, A2, A3, A4. Я не стал заморачиваться с проводами и воткнул драйвер прямо в Ардуино. Tring дальномера тыкаем во второй пин Ардуины, а echo — в третий пин.

Вот что получилось:

В принципе все собрано, теперь заливаем скетч:

#include <Stepper.h>
Stepper myStepper(64, A3, A1, A2, A0); //Входы шагового двигателя
int trigPin = 3; //Триггер
int echoPin = 2; //Эхо
long duration;//Задержка аудиоволвы
int ugol=0, vekt=1, poverPr=0, pover=0;//Текущий угол сонара, Направление движения, Состояние работает - не работает
void setup() {
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 myStepper.setSpeed(128);//задаем скорость мотора
 Serial.begin(9600);//Открываем серийный порт
}
void loop() {
if (vekt==1&&pover==1){
 myStepper.step(16);//Делаем 16 шагов влево
 ugol=ugol+4;//Меняем значение переменной ugol
}
if (vekt==0&&pover==1){
 myStepper.step(-16);//Делаем 16 шагов вправо
 ugol=ugol-4;//Меняем значение переменной ugol
}
if (ugol<=0){
 vekt=1;//Если достигаем крайней левой точки - меняем направление движения
 if(Serial.available()>0){poverPr=Serial.read()-48;}
 if (poverPr==0||poverPr==1){pover=poverPr;}// если мы прочитали из серийного порта 0 или 1 - пишем это в переменную pover
}
if (ugol>=128){
 vekt=0;//Если достигаем крайней правой точки - меняем направление движения
 }
delay(100); 
 Serial.println(0x01);//Пишем в серийный порт контрольный байт
 Serial.println(cm());//Пишем расстояние до объекта (выполняется функция ниже)
 Serial.println(ugol);//Угол, на который сейчас повернута голова
 
}
int cm(){
 digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считываем данные с ультразвукового датчика: значение HIGH, которое
// зависит от длительности (в микросекундах) между отправкой
// акустической волны и ее обратном приеме на эхолокаторе.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// преобразование времени в расстояние
return (duration/2) / 29.1;
}

На компьютере открываем программу (просьба сильно не пинать, ибо сделана на коленке) – sonar_na_arduino и вписываем
порт, к которому подключен наш сонар. Жмем кнопку старт и видим, как в окне программы прорисовываются точки удаленные от центра аналогично расстоянию до препятствий на пути звуковых волн сонара:

Перед тем как выдергивать питание, нужно нажимать стоп в окне программы, чтоб «голова» сонара успела вернуться в исходное положение.
Ну, вот и все, удачи в ваших самоделках!

 

 

Один комментарий к “Подвижный сонар на Arduino&rdquo

  1. а, построение карты, для движения робота ,на этой основе можно сделать?

Добавить комментарий для Олег Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *