Arduino и ультразвуковой датчик расстояния HC-SR04
Ультразвуковой датчик расстояния HC-SR04 является неплохим бюджетным вариантом для ваших проектов.
Правда, после покупки этого замечательного девайса, оказалось, что простых и незамысловатых примеров его подключения и тестирования в интернете, а особенно в рунете, нет. Так что изложенный ниже проект с использованием датчика HC-SR04 и Arduino многим будет полезен.
Помимо ультразвукового датчика, в проекте используются два светодиода. Итак, приступим.
Для проекта вам понадобятся
- Плата Arduino UNO R3 (или ее аналог)
- 1 Ультразвуковой датчик расстояния HC-SR04 (Ultrasonic Sensor)
- 1 красный светодиод
- 1 зеленый светодиод
- 2 резистора по 560 Ом (Зеленый, голубой, коричневый, золотой)
- Макетная плата
- 8 проводников папа-папа
- Линейка для измерения расстояния
Схема подключения HC-SR04 к Arduino
Подключите компоненты с помощью проводников так, как указано на рисунке. Ничего особенного в подключении датчика нет. Для приемника используется один пин, для передатчика, который генерирует ультразвук, второй.
Программа с пояснениями для Arduino
Для реализации нашего простенького, но наглядного проекта, достаточно скопировать приведенный ниже скетч и загрузить его на плату через Arduino IDE.
Просмотрев результат на видео ниже, вы, кстати, поймете зачем нам нужна линейка.
/*
HC-SR04 ультразвуковой датчик расстояния
VCC подключается к пину 5v, GND к GND на плате Arduino
Echo к 13 пину на Arduino Trig к 12 пину на Arduino
Позитивная нога красного светодиода к 11 пину на Arduino
Позитивная нога зеленого светодиода к 10 пину на Arduino
Резисторы на 560 Ом к обеим отрицательным ногам светодиодов и рельсе GRD на макетной плате
*/
#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 4) { // На этом этапе происходит вкл/выкл светодиода digitalWrite(led,HIGH); // когда загорается красный, зеленый обязан выключится
digitalWrite(led2,LOW); } else { digitalWrite(led,LOW); digitalWrite(led2,HIGH); } if (distance >= 200 || distance <= 0){
Serial.println("Out of range"); // Можно придумать что-то на русском – вроде "Вне диапазона"
}
else {
Serial.print(distance);
Serial.println(" cm"); // тут тоже можно указать " см"
}
delay(500);
}