Главная » Arduino » Arduino и ультразвуковой дальномер HC-SR04

Arduino и ультразвуковой дальномер HC-SR04

ультразвук дальномер HC SR04 Arduino  arduino  Часто в проектах на Arduino необходимо определить расстояние до препятствия. Для этих целей обычно используют инфракрасные или утразвуковые дальномеры.

Под рукой у меня есть только ультразвуковой сонар HC-SR04, поэтому в этой статье я опишу как с ним работать.

ультразвук дальномер HC SR04 Arduino  arduino

В модели HC-SR04 есть 4 контакта, которые мы и будем использовать для подключения к Arduino.

  • VCC подключим к +5V на Arduino
  • Trig к цифровому пину 8 на Arduino
  • Echo к цифровому пину 9 на Arduino
  • GND к GND на Arduino

Для наглядности я еще подключил светодиод между GND и 11 цифровым пином Arduino. Если у вас светодиода под рукой не оказалось, то тогда можете использовать светодиод на 13 пине Arduino.

В результате должно получиться что-то подобное:

ультразвук дальномер HC SR04 Arduino  arduino

Теперь нам надо загрузить скетч. Он написан так, что при расстоянии менее 50 сантиметров наш светодиод загорается, а  в окне Serial Monitor выводилось расстояние в сантиметрах.

ультразвук дальномер HC SR04 Arduino  arduino

Код скетча:

const int Trig = 8;
const int Echo = 9;
const int ledPin = 11;  // 13 – если будете использовать встроенный в Arduino светодиод

void setup()
{
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(ledPin, OUTPUT);
 
Serial.begin(9600);
}

unsigned int time_us=0;

unsigned int distance_sm=0;

void loop()
{
digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера
delayMicroseconds(10); // Удерживаем 10 микросекунд
digitalWrite(Trig, LOW); // Затем убираем
time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=time_us/58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт

if (distance_sm<50) // Если расстояние менее 50 сантиметром
{
   digitalWrite(ledPin, 1); // Зажигаем светодиод
}
else
{
   digitalWrite(ledPin, 0); // иначе тушим
}
 
delay(100);
}

Демонстрация работы

Похожие записи
Подключение микрофонного модуля к Arduino... В этой статье я опишу процесс подключение микрофонного модуля к контроллеру Arduino. Данный проект будет использоваться в качестве индикатора акуст...
Подключаем MP3 Shield v.2.0 к Arduino В этой статье я опишу основные нюансы работы Arduino с MP3 Shield v.2.0. Саму плату MP3 Shield я купил у китайцев довольно давно, но только сегодня с...
Детектор электромагнитного поля на Arduino... Данное устройство поможет вам без труда обнаружить источники электромагнитных излучений, которыми являются все электроприборы, которые нас окружают. ...
WeMos D1 R2 на ESP8266 – первое знакомство... Подробный обзор Arduino совместимого контроллера WeMos D1 R2 на базе ESP8266. На днях получил посылку из Китая с платой контроллера WeMos D1 R2 на ба...
This entry was posted in Arduino and tagged , , , . Bookmark the permalink.

29 комментариев: Arduino и ультразвуковой дальномер HC-SR04

  1. Евгений говорит:

    Спасибо за статью! Всё работает, комментарии в программе дают ясное представление о алгоритме работы.

  2. Александр говорит:

    Спасибо!
    Легко и понятно.

  3. Фахри говорит:

    Такой вопрос. Код работает на любом дальномере или именно на этом?

  4. Константин говорит:

    Замечательная статья!! Благодарю! А то голову изломал - сори не программист =).
    Удачи в Ваших проектах!

  5. asci говорит:

    Спасибо большое!

  6. Strannix говорит:

    добрый день, такой вопрос, а какова минимальная величина объекта обнаружения??интерес составляет например с помощью таких сенсоров нескольких собрать схему которая будет определять расположение в пространстве обьекта

  7. Серж говорит:

    Спасибо.
    Очень логично и без излишеств.

  8. Евгений говорит:

    Спасибо большое! Всё работет как надо, пояснения оч. в тему!!!

  9. Станислав говорит:

    Спасибо, все понятно! А я думал нужно библиотеку подключать Ultrasonic. А какие возможности она дает?

    • source™ говорит:

      Ultrasonic, как и любая другая библиотека создана для сокращения количества кода.

  10. noob говорит:

    Подскажите пожалуйста, вместо диода можно подключить реле какое-нибудь, например чтобы моторчик крутило? Спасибо.

  11. Константин говорит:

    Спасибо за статью. Все работает. Но я еще прикрутил дисплей 128*64 пишет расстояние и рисует линию - это так для визуализации)))

  12. Илья говорит:

    Спасибо автору сайта. На днях получил свой первый Arduino Uno и собрал в тот же день первый свой проект с помощью этой статьи. Потом добавил звуковое оповещение в зависимости от дистанции - дети были счастливы при попытке незаметно проскользнуть на "охраняемую" территорию :)

  13. николай говорит:

    Подключил к ArduinoMega два таких датчика. Соответственно изменил код. Второй датчик всегда показывает 0. Экспериментальным путем выяснил, что работает только тот из 2 датчиков, для которого раньше прописана функция pulseIn в скетче. Не подскажете, как решить проблему?

  14. Александр говорит:

    спасибо. заработало

  15. Виктор говорит:

    Подскажите код что бы удерживла 20сек и сробатывала толь ко в темноте.

    • Владимир говорит:

      Удерживала что??? После того как датчик обнаружит присутствие, то зажигает светодиод на 20 сек., я правильно понял??? для этого нужно сделать задержку сразу после того как зажигается светодиод. А что бы срабатывал в темноте, необходимо использовать фоторезистор.

  16. vasilii говорит:

    Всех приветствую !

    Такая проблема :

    На ECHO постоянно висит в 5В, несмотря на все старания: я перепробовал все выходы дурино, отпаивал R1 и притягивал ECHO к нулю - то же самое.
    Осциллографа у меня нет, триггер на ECHO делать не хочется - уверен: там постоянно +5В.
    Грешу на датчик.
    Есть иные мнения?
    Поделитесь пож-ста.

  17. Андрей говорит:

    Привет подскажите как перевести значение не в сантиметры а в проценты
    Скажем что 1150 см = 0%, а 15 см= 100% ну дальше как то так

  18. Kanan говорит:

    Был ли у кого-нибудь опыт работы с несколькими датчиками? По поиску все сводится с сдвиговым регистрам и мультиплексорам.

    Кому интересно - некоторое время игрался с датчиками оценивая точность измерения ( с шагом 1 см). Итог:
    - в 90% случаев, начиная от 4 см погрешность ~ -1 см. Т.е как-бы с запасом.
    - если датчики рядом друг с другом и есть пересечение направлений работы - данные скачут
    - если расстояние до цели больше 60-70 см резко увеличивается частота появления нулевых результатов. Это для меня стало понятно не сразу, но оказалось причиной "зависания" - т.е. сенсор долго ждет сигнала, что воспринимается как зависание, а не получив его выдает 0

    Есть задача: Нужно подключить около 50-ти таких датчиков.
    В связи с чем, не обладая глубокими познаниями, пока что пытаюсь решить следующие вопросы:
    1) Т.к. нужно много входов - берется Arduino Mega. Возможен ли такой вариант работы: каждый выход Echo на каждом датчике получает свой вход на ардуине. В то же время, для экономии выходов - все входы Trig получают сигнал от одного выхода на ардуине. Пробовал с 2-мя датчиками - работает. Жду прихода остальных 48 - к каким проблемам готовиться? В итоге на 50 датчиков: занят 50 входов + 1 выход.
    2) Предполагаю, что на такое количество датчиков будет нужно доп питание для сенсоров - из каких пропорций исходить? Что посоветуете?
    3) Уже потратил время на входные сдвиговые регистры. Принцип работает, но с датчиками типа 0/1. Для hs-sr04 в таком виде не подходит - выдает 0 (при минимальном расстоянии)/1. НО! Т.к. при стандартном подключении используются цифровые входы - предполагаю что и в случае со сдвиговыми регистрами есть способ заставить это работать... при наличии головы)) Так ли это?
    4) какие минусы решение за счет увеличения количества портов (-> mega 2560) имеет по сравнению с использованием мультиплексоров/СР... или можно так работать?

  19. Андрей говорит:

    Здравствуйте. А как сделать так, чтобы светодиод зажигался плавно?

  20. геннадий говорит:

    Загрузил свиип аудио генератор с целью определения расстояния уз локатор о тональности свиппа желательно по логарифмичнской зависимомти подскажите пожалуйста.

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

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