Ультразвуковой радар. Следим за всеми. Проекты. Ардуино.

Ультразвуковой радар
Ультразвуковой радар
Ультразвуковой радар

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

Мы уже рассмотрели ультразвуковой датчик и сервоприводы в предыдущих уроках. Сегодня мы будем использовать программы и схемы из них. Так что посмотрите их, если уже забыли или пропустили.

Ультразвуковой датчик расстояния hc-sr04. Датчики. Ардуино

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Ультразвуковой датчик расстояния hc-sr04
  • Сервопривод
  • Резистор номиналом 220 Ом
  • Светодиод 5 мм
  • Конструктор лего
  • Кабель USB

Лего

Готовый проект подразумевает полностью готовой устройство с корпусом, питанием и целью. Несмотря на то, что цель у нас скорее развлекательная, но соорудить корпус мы все-таки постараемся.

Лучше всего для этого подходит конструктор лего. Из него вы легко соберете корпус и детали для любого проекта. И сможете разобрать его, если проект больше будет не нужен. В общем, лего — это необходимая вещь для любого ардуинщика.

Лего для корпуса
Лего для корпуса

Проект

Итак, что мы хотим сделать в этом проекте. Мы подключим к ардуино ультразвуковой датчик. С помощью лего построим для него корпус. Сделаем привод к сервомотору, который будет вращать датчик на 90 градусов. Но если в радиусе действия датчика появится препятствие, сервопривод остановится и зажжется светодиод. Который просигнализирует нам об опасности. Так что, светодиод возьмем красный.

Сервопривод

Будем использовать тот же сервопривод, что и в обучающем уроке. Прочитайте статью о нем, если пропустили ее.

Cервопривод. Датчики. Ардуино

Для вращения датчика расстояния нам понадобится привод для вращающихся деталей лего. Сделаем простейшую его версию из самого технологичного материала, который сможем найти, то есть из веревочки.

Привод для вращения датчика от сервомотора
Привод для вращения датчика от сервомотора

Ультразвуковой датчик расстояния

На вращающуюся часть корпуса прикрепим датчик hc-sr04. Он и будет главной частью нашего ультразвукового радара. Подключаем по схеме из предыдущего урока. Датчик работает от 2 до 400 сантиметров. В программе сделаем так, чтобы сервопривод останавливался и зажигался светодиод, если препятствие появится в пределах 60 сантиметров.

Принципиальная схема подключения
Принципиальная схема подключения

Кроме того подключим несколько батареек АА для питания сервопривода. А питание для датчика расстояния возьмем от ардуино. Не забудьте объединить землю сервопривода и ардуино.

Программа

В прошлый раз мы управляли сервоприводом с помощью потенциометра. Но в этот раз мы хотим сделать автономный ультразвуковой радар. Поэтому сервопривод будет вращаться сам. А управление будет в цикле loop().

Как вы помните, для вращения сервопривода мы отправляем на функцию myservo.write() значение от 0 до 180. Сейчас нам нужно вращать привод на 90 градусов, а при сигнале от датчика расстояния останавливать вращение.

Кроме того, параллельно с вращением сервопривода мы должны считывать сигнал с датчика расстояния. Чтобы не усложнять код, напишем все функции в цикле loop(), тем более, что это будет удобнее.

Для сервопривода объявим две переменные, которые будут отвечать за позицию вала и экземпляр класса Servo. Также подключим модуль Servo.h

#include <Servo.h>
Servo myservo;
int pos=0;
int i=1;

Переменную pos будем передавать в функцию myservo.write(), а переменную счетчика i используем для увеличения и уменьшения переменной pos. Если pos больше 90, или меньше 1 будем менять знак i.

  if (pos < 1 || pos >= 90){i = -i;}
  myservo.write(pos);

Увеличение счетчика i зависит от показаний датчика расстояния. Если расстояние до препятствия больше 60 сантиметров, переменная i увеличивается, если меньше, нет. Но тогда включается светодиод на 7 пине.

duration1 = pulseIn(echoPin1, HIGH); 
  distance1 = duration1 / 58;

  if( distance1 >= 60 ){
    digitalWrite(7, LOW);
    pos+=i;
  }else{
    digitalWrite(7, HIGH);
  }
Готовый ультразвуковой радар
Готовый ультразвуковой радар

Полный текст программы

#include <Servo.h>

Servo myservo;
int pos=0;
int i=1;

int trigPin1 = 13; 
int echoPin1 = 12;
int duration1, distance1;
    
void setup() {
  Serial.begin (9600); 
  myservo.attach(10);
  pinMode(trigPin1, OUTPUT); 
  pinMode(echoPin1, INPUT);
  pinMode(7, OUTPUT); 
}

void loop() {
  digitalWrite(trigPin1, LOW); 
  delayMicroseconds(2); 
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10); 
  digitalWrite(trigPin1, LOW); 
      
  duration1 = pulseIn(echoPin1, HIGH); 
  distance1 = duration1 / 58;

  if( distance1 >= 60 ){
    digitalWrite(7, LOW);
    pos+=i;
  }else{
    digitalWrite(7, HIGH);
  }
  if (pos < 1 || pos >= 90){i = -i;}
  Serial.println(distance1);
  myservo.write(pos);
  delay(15);
}

Заключение

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

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

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