Поворотный радар на основе HC-SR04 и Arduino
Давайте попробуем сделать простой радар используя Arduino, ультразвуковой датчик HC-SR04 (HC-SR05) и сервопривод. Работу скетча можно будет посмотреть в среде разработки Arduino IDE через «Инструменты -> Плоттер по последовательному соединению», либо нажав сочетание клавиш CTRL+Shift+L.
Внимание!!! Этот инструмент появился с версии Arduino IDE 1.6.6
Компоненты:
- Arduino Nano
- HC-SR04 модуль ультразвукового датчика
- Макетная плата
- Соединительные провода
- Клеевой пистолет
- Сервопривод SG90
Схема соединения:
pin Nano | pin HC-SR04 | Сервопривод SG90 |
+5 |
+5 | +5 (красный) |
GND | GND | GND (коричневый) |
D6 | Trig | |
D5 | Echo | |
D9 | SIG (желтый) |
Программный код
Нажмите, что бы увидеть код
#include "Servo.h" //Подключение библиотеки управления сервоприводом
int trigPin = 6;
int echoPin = 5;
long duration;
int distance; //переменная для вычисления расстояния
Servo servo; //создаем объект типа Servo
void setup()
{
//устанавливает режим работы портов на ардуино
// - выход
pinMode(trigPin, OUTPUT);
// - вход
pinMode(echoPin, INPUT);
//Определяем скорость передачи по последовательному порту
Serial.begin(9600);
// Указываем порт для управления сервоприводом
servo.attach(9);
}
void loop()
{
//Функция поворота сервопривода налево
left();
//Функция поворота сервопривода направо
right();
}
void left()
{
for (int pos = 0; pos <= 180; pos += 1)
{
servo.write(pos);
Serial.print(pos);
Serial.print(" ");
distance = echoloop();
Serial.println(distance);
delay(50);
}
}
void right()
{
for (int pos = 180; pos >= 0; pos -= 1)
{
servo.write(pos);
Serial.print(pos);
Serial.print(" ");
distance = echoloop();
Serial.println(distance);
delay(50);
}
}
// функция для определения расстояние до объекта
int echoloop()
{
long duration, cm;
// для большей точности установим значение LOW на пине Trig
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Теперь установим высокий уровень на пине Trig
digitalWrite(trigPin, HIGH);
// Ждем 10 милисекунд
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Узнаем длительность высокого сигнала на пине Echo
duration = pulseIn(echoPin, HIGH);
//вычисляем расстояние до объекта
cm = duration / 58;
return cm;
}
Результат