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_Ultrasonic_HC-SR-04_connection

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

Программа с пояснениями для 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);

}