Подключение дальномера HC-SR04 к Arduino
Содержание
Пошаговая инструкция по подключению ультразвукового дальномера HC-SR04 к Arduino.
Часто в проектах на Arduino необходимо определить расстояние до препятствия. Для этих целей обычно используют инфракрасные или утразвуковые дальномеры.
Под рукой у меня есть только ультразвуковой сонар HC-SR04, поэтому в этой статье я опишу как с ним работать.
Подключение HC-SR04 к Arduino
В модели HC-SR04 есть 4 контакта, которые мы и будем использовать для подключения к Arduino.
- VCC подключим к +5V на Arduino
- Trig к цифровому пину 8 на Arduino
- Echo к цифровому пину 9 на Arduino
- GND к GND на Arduino
Для наглядности я еще подключил светодиод между GND и 11 цифровым пином Arduino. Если у вас светодиода под рукой не оказалось, то тогда можете использовать светодиод на 13 пине Arduino.
В результате должно получиться что-то подобное:
Теперь нам надо загрузить скетч. Он написан так, что при расстоянии менее 50 сантиметров наш светодиод загорается, а в окне Serial Monitor выводилось расстояние в сантиметрах.
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_sm50) // Если расстояние менее 50 сантиметром
<
digitalWrite(ledPin, 1); // Зажигаем светодиод
>
else
<
digitalWrite(ledPin, 0); // иначе тушим
>delay(100);
>
Демонстрация работы
- Автор: source
- Миниатюра:
- Рубрика: Arduino от А до ЯArduino, HC-SR04, дальномер, ультразвук —>
- Опубликовано: 18.04.2020
- Обновлено: 18.04.2020
- Комментариев: 31
- Просмотров: 55 624
Дата Бот
Похожие записи
Комментариев: 31
Спасибо за статью! Всё работает, комментарии в программе дают ясное представление о алгоритме работы.
Спасибо!
Легко и понятно.
Такой вопрос. Код работает на любом дальномере или именно на этом?
Только на HC-SR04
А для работы с другими видами в скетче что изменить надо? или это зависит от модели дальномера?
От модели. В разных датчиках могут быть использованы разные шины передачи данных.
Замечательная статья!! Благодарю! А то голову изломал — сори не программист =).
Удачи в Ваших проектах!
добрый день, такой вопрос, а какова минимальная величина объекта обнаружения??интерес составляет например с помощью таких сенсоров нескольких собрать схему которая будет определять расположение в пространстве обьекта
не могу вам ответить
на мелких объектах не проверял
Спасибо.
Очень логично и без излишеств.
Спасибо большое! Всё работет как надо, пояснения оч. в тему.
Спасибо, все понятно! А я думал нужно библиотеку подключать Ultrasonic. А какие возможности она дает?
Ultrasonic, как и любая другая библиотека создана для сокращения количества кода.
Подскажите пожалуйста, вместо диода можно подключить реле какое-нибудь, например чтобы моторчик крутило? Спасибо.
Спасибо за статью. Все работает. Но я еще прикрутил дисплей 128*64 пишет расстояние и рисует линию — это так для визуализации)))
а как вы это сделали можно подробно пожалуйста !?
Спасибо автору сайта. На днях получил свой первый Arduino Uno и собрал в тот же день первый свой проект с помощью этой статьи. Потом добавил звуковое оповещение в зависимости от дистанции — дети были счастливы при попытке незаметно проскользнуть на "охраняемую" территорию 🙂
Подключил к ArduinoMega два таких датчика. Соответственно изменил код. Второй датчик всегда показывает 0. Экспериментальным путем выяснил, что работает только тот из 2 датчиков, для которого раньше прописана функция pulseIn в скетче. Не подскажете, как решить проблему?
Код покажи — аборт по телефону трудно делать.
Подскажите код что бы удерживла 20сек и сробатывала толь ко в темноте.
Удерживала что. После того как датчик обнаружит присутствие, то зажигает светодиод на 20 сек., я правильно понял. для этого нужно сделать задержку сразу после того как зажигается светодиод. А что бы срабатывал в темноте, необходимо использовать фоторезистор.
На ECHO постоянно висит в 5В, несмотря на все старания: я перепробовал все выходы дурино, отпаивал R1 и притягивал ECHO к нулю — то же самое.
Осциллографа у меня нет, триггер на ECHO делать не хочется — уверен: там постоянно +5В.
Грешу на датчик.
Есть иные мнения?
Поделитесь пож-ста.
Привет подскажите как перевести значение не в сантиметры а в проценты
Скажем что 1150 см = 0%, а 15 см= 100% ну дальше как то так
Был ли у кого-нибудь опыт работы с несколькими датчиками? По поиску все сводится с сдвиговым регистрам и мультиплексорам.
Кому интересно — некоторое время игрался с датчиками оценивая точность измерения ( с шагом 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) имеет по сравнению с использованием мультиплексоров/СР. или можно так работать?
Источник: