ардуино hc sr04 микросервопривод светодиод код тинкеркад
Ультразвуковой дальномер HC-SR04: подключение, схема и примеры работы
Ультразвуковой дальномер рассчитан на определение расстояния до объектов в радиусе четырёх метров.
Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта. Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия.
Подключение ультразвукового дальномера к Arduino
Модуль подключается четырьмя проводами. Контакты VCC и GND служат для подключения питания, а Trig и Echo — для отправки и приема сигналов дальномера. Подключим их к пинам 10 и 11 соответственно.
Напряжение питания дальномера 5 В. Модуль работает и с платами, напряжение которых 3,3 В — в этом случае подключайте его к пинам группы с P8 по P13. Установите джампер выбора питания V2 на Troyka Shield в положение V2+5V. Пин микроконтроллера, соединённый с пином Echo должен быть толерантен к 5 В. Приведённая схема подходит для подключения дальномера к Iskra JS.
Пример работы
Рассмотрим как работает дальномер.
Зная продолжительность высокого сигнала на пине Echo можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).
Теперь вычислим расстояние переведя скорость из м/с в см/мкс:
distance = duration * 340 м/с = duration * 0.034 м/мкс
Преобразуем десятичную дробь в обыкновенную
distance = duration * 1/29 = duration / 29
Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2
distance = duration / 58
Оформим в код всё вышесказанное и выведем результат в Serial Monitor
Работа с библиотекой
Количество строк кода можно существенно уменьшить, используя библиотеку для работы с дальномером.
Ультразвуковой датчик расстояния Ардуино HC-SR04
Ультразвуковые датчики расстояния Ардуино очень востребованы в робототехнических проектах из-за своей относительной простоты, достаточной точности и доступности. Они могут быть использованы как приборы, помогающие объезжать препятствия, получать размеры предметов, моделировать карту помещения и сигнализировать о приближении или удалении объектов. Одним из распространенных вариантов такого устройства является датчик расстояния, в конструкцию которого входит ультразвуковой дальномер HC SR04. В этой статье мы познакомимся с принципом действия датчика расстояния, рассмотрим несколько вариантов подключения к платам Arduino, схему взаимодействия и примеры скетчей.
Датчик расстояния в проектах Arduino
Способность ультразвукового датчика определять расстояние до объекта основано на принципе сонара – посылая пучок ультразвука, и получая его отражение с задержкой, устройство определяет наличие объектов и расстояние до них. Ультразвуковые сигналы, генерируемые приемником, отражаясь от препятствия, возвращаются к нему через определенный промежуток времени. Именно этот временной интервал становится характеристикой помогающей определить расстояние до объекта.
Описание датчика HC SR04
Датчик расстояния Ардуино является прибором бесконтактного типа, и обеспечивает высокоточное измерение и стабильность. Диапазон дальности его измерения составляет от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия. В комплект модуля с HC SR04 arduino также входят ресивер и трансмиттер.
Ультразвуковой дальномер HC SR04 имеет такие технические параметры:
Датчик оснащен четырьмя выводами (стандарт 2, 54 мм):
Где купить модуль SR04 для Ардуино
Датчик расстояния – достаточно распространенный компонент и его без труда можно найти в интернет-магазинах. Самые дешевые варианты (от 40-60 рублей за штуку), традиционно на всем известном сайте.
Схема взаимодействия с Arduino
Для получения данных, необходимо выполнить такую последовательность действий:
При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 – в дюймах.
Подключение HC SR04 к Arduino
Выполнить подключение ультразвукового датчика расстояния к плате Arduino достаточно просто. Схема подключения показана на рисунке.
Контакт земли подключаем к выводу GND на плате Arduino, выход питания соединяем с 5V. Выходы Trig и Echo подсоединяем к arduino на цифровые пины. Вариант подключения с помощью макетной платы:
Библиотека для работы с HC SR04
Для облегчения работы с датчиком расстояния HC SR04 на arduino можно использовать библиотеку NewPing. Она не имеет проблем с пинговыми доступами и добавляет некоторые новые функции.
К особенностям библиотеки можно отнести:
Скачать бибилотеку NewPing можно здесь
Точность измерения расстояния датчиком HC SR04
Точность датчика зависит от нескольких факторов:
В основу принципа действия любого ультразвукового датчика заложено явление отражения акустических волн, распространяющихся в воздухе. Но как известно из курса физики, скорость распространения звука в воздухе зависит от свойств этого самого воздуха (в первую очередь от температуры). Датчик же, испуская волны и замеряя время до их возврата, не догадывается, в какой именно среде они будут распространяться и берет для расчетов некоторую среднюю величину. В реальных условиях из-за фактора температуры воздуха HC-SR04 может ошибаться от 1 до 3-5 см.
Фактор расстояния до объекта важен, т.к. растет вероятность отражения от соседних предметов, к тому же и сам сигнал затухает с расстоянием.
Также для повышения точности надо правильно направить датчик: сделать так, чтобы предмет был в рамках конуса диаграммы направленности. Проще говоря, “глазки” HC-SR04 должны смотреть прямо на предмет.
Для уменьшения ошибок и погрешности измерений обычно выполняются следующие действия:
Примеры использования датчика расстояния
Давайте рассмотрим пример простого проекта с платой Arduino Uno и датчиком расстояния HC SR04. В скетче мы будем получать значение расстояния до предметов и выводить их в монитор порта в среде Arduino IDE. Вы сможете легко изменить скетч и схему подключения, чтобы датчик сигнализировал о приближении или отдалении предмета.
Подключение датчика к ардуино
При написании скетча использовалась следующий вариант распиновки подключения датчика:
Пример скетча
Начнем работу с датчиком сразу с относительного сложного варианта – без использования внешних библиотек.
В данном скетче мы выполняем такую последовательность действий:
Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса – LOW. Так как у некоторых датчиков время задержки варьируется в зависимости от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).
Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.
Скетч с использованием библиотеки NewPing
Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать – создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().
Пример подключения ультразвукового дальномера HC SR04 с одним пином
Подключение HC-SR04 к Arduino может быть выполнено посредством использования одного пина. Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.
Краткие выводы
Ультразвуковые датчики расстояния достаточно универсальны и точны, что позволяет их использовать для большинства любительских проектов. В статье рассмотрен крайне популярный датчик HC SR04, который легко подключается к плате ардуино (для этого следует сразу предусмотреть два свободных пина, но есть вариант подключения и с одним пином). Для работы с датчиком существуют несколько бесплатных библиотек (в статье рассмотрена лишь одна из них, NewPing), но можно обойтись и без них – алгоритм взаимодействия с внутренним контроллером датчика достаточно прост, мы показали его в этой статье.
Исходя из собственного опыта, можно утверждать, что датчик HC-SR04 показывает точность в пределах одного сантиметра на расстояниях от 10 см до 2 м. На более коротких и дальних дистанциях возможно появление сильных помех, что сильно зависит от окружающих предметов и способа использования. Но в большинстве случаев HC-SR04 отлично справлялся со своей работой.
Ардуино: ультразвуковой дальномер HC-SR04
Дальномер — это устройство для измерения расстояния до некоторого предмета. Дальномер помогает роботам в разных ситуациях. Простой колесный робот может использовать этот прибор для обнаружения препятствий. Летающий дрон использует дальномер для баражирования над землей на заданной высоте. С помощью дальномера можно даже построить карту помещения, применив специальный алгоритм SLAM.
Принцип действия
На этот раз мы разберем работу одного из самых популярных датчиков — ультразвукового (УЗ) дальномера. Существует много разных модификаций подобных устройств, но все они работают по принципу измерения времени прохождения отраженного звука. То есть датчик отправляет звуковой сигнал в заданном направлении, затем ловит отраженное эхо и вычисляет время полета звука от датчика до препятствия и обратно.
Из школьного курса физики мы знаем, что скорость звука в некоторой среде величина постоянная, но зависящая от плотности среды. Зная скорость звука в воздухе и время полета звука до цели, мы можем рассчитать пройденное звуком расстояние по формуле:
где v — скорость звука в м/с, а t — время в секундах. Скорость звука в воздухе, кстати, равна 340.29 м/с.
Чтобы справиться со своей задачей, дальномер имеет две важные конструктивные особенности. Во-первых, чтобы звук хорошо отражался от препятствий, датчик испускает ультразвук с частотой 40 кГц. Для этого в датчике имеется пьезокерамический излучатель, который способен генерировать звук такой высокой частоты. Во-вторых, излучатель устроен таким образом, что звук распространяется не во все стороны (как это бывает у обычных динамиков), а в узком направлении. На рисунке представлена диаграмма направленности типичного УЗ дальномера.
Как видно на диаграмме, угол обзора самого простого УЗ дальномера составляет примерно 50-60 градусов. Для типичного варианта использования, когда датчик детектирует препятствия перед собой, такой угол обзора вполне пригоден. Ультразвук сможет обнаружить даже ножку стула, тогда как лазерный дальномер, к примеру, может её не заметить.
Если же мы решим сканировать окружающее пространство, вращая дальномер по кругу как радар, УЗ дальномер даст нам очень неточную и шумную картину. Для таких целей лучше использовать как раз лазерный дальномер.
Также следует отметить два серьезных недостатка УЗ дальномера. Первый заключается в том, что поверхности имеющие пористую структуру хорошо поглощают ультразвук, и датчик не может измерить расстояние до них. Например, если мы задумаем измерить расстояние от мультикоптера до поверхности поля с высокой травой, то скорее всего получим очень нечеткие данные. Такие же проблемы нас ждут при измерении дистанции до стены покрытой поролоном.
Второй недостаток связан со скоростью звуковой волны. Эта скорость недостаточно высока, чтобы сделать процесс измерения более частым. Допустим, перед роботом есть препятствие на удалении 4 метра. Чтобы звук слетал туда и обратно, потребуется целых 24 мс. Следует 7 раз отмерить, прежде чем ставить УЗ дальномер на летающих роботов.
Ультразвуковой дальномер HC-SR04
В этом уроке мы будем работать с датчиком HC-SR04 и контроллером Ардуино Уно. Этот популярный дальномер умеет измерять расстояние от 1-2 см до 4-6 метров. При этом, точность измерения составляет 0.5 — 1 см.
Встречаются разные версии одного и того же HC-SR04. Одни работают лучше, другие хуже. Отличить их можно по рисунку платы на обратной стороне. Вот одна из версий:
Подключение HC-SR04
Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и питания (Vcc) еще есть Trig и Echo. Оба этих вывода цифровые, так что подключаем из к любым выводам Ардуино Уно:
HC-SR04 | GND | VCC | Trig | Echo |
Arduino Uno | GND | +5V | 3 | 2 |
Принципиальная схема устройства
Внешний вид макета
Программа
Итак, попробуем приказать датчику отправить зондирующий ультразвуковой импульс, а затем зафиксируем его возвращение. Посмотрим как выглядит временная диаграмма работы HC-SR04.
На диаграмме видно, что для начала измерения нам необходимо сгенерировать на выводе Trig положительный импульс длиной 10 мкс. Вслед за этим, датчик выпустит серию из 8 импульсов и поднимет уровень на выводе Echo, перейдя при этом в режим ожидания отраженного сигнала. Как только дальномер почувствует, что звук вернулся, он завершит положительный импульс на Echo.
Получается, что нам нужно сделать всего две вещи: создать импульс на Trig для начала измерения, и замерить длину импульса на Echo, чтобы потом вычислить дистанцию по нехитрой формуле. Делаем.
Функция pulseIn замеряет длину положительного импульса на ноге echoPin в микросекундах. В программе мы записываем время полета звука в переменную duration. Как мы уже выяснили ранее, нам потребуется умножить время на скорость звука:
s = duration * v = duration * 340 м/с
Переводим скорость звука из м/с в см/мкс:
s = duration * 0.034 cм/мкс
Для удобства преобразуем десятичную дробь в обыкновенную:
s = duration * 1/29 = duration / 29
А теперь вспомним, что звук прошел два искомых расстояния: до цели и обратно. Поделим всё на 2:
Теперь мы знаем откуда взялось число 58 в программе!
Загружаем программу на Ардуино Уно и открываем монитор последовательного порта. Попробуем теперь наводить датчик на разные предметы и смотреть в мониторе рассчитанное расстояние.
Задания
Теперь, когда мы умеем вычислять расстояние с помощью дальномера, сделаем несколько полезных устройств.
Заключение
Ультразвуковой дальномер — простой в использовании, дешевый и точный датчик, который отлично выполняет свою функцию на тысячах роботов. Как мы выяснили из урока, у датчика есть недостатки, которые следует учитывать при постройке робота. Хорошим решением может стать совместное использование ультразвукового дальномера в паре с лазерным. В таком случае, они будут нивелировать недостатки друг друга.
Ардуино: ультразвуковой дальномер HC-SR04 : 7 комментариев
«Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и питания (Vcc) еще есть Trig и Echo. Оба этих вывода цифровые, так что подключаем из к любым выводам Ардуино Уно:
OLED дисплей 128×64 GND VCC Trig Echo
Arduino Uno GND +5V 3 2»
-Что-то здесь не так…..не так-ли?
В точку! Исправлено:)
Просто и понятно все объяснено. Автору большое спасибо.
Автор у Вас опечатка в статье.
Переводим скорость звука из м/с в см/мкс:
s = duration * 0.034 м/мкс
В единице измерения допущена неточность. Вы же в см/мкс переводите, а не м/мкс (как у Вас)
всё сделал, но в мониторе порта пишет следующее (x⸮x⸮⸮⸮x⸮x⸮⸮⸮x⸮x⸮⸮⸮x⸮), что делать, как быть?))
Проверьте скорость передачи в мониторе последовательного порта. Она должна совпадать со скоростью в программе.
Должно быть: 9600
Спасибо большое за такое точное и простое обьяснение!
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Урок 7 — Подключаем HC-SR04 к Arduino. Библиотека NewPing
Ультразвуковой датчик HC-SR04 определения расстояния до предметов. Принцип роботы как у сонара, посылается пучок импульсов и получает отражения, и на основании задержки определяется расстояние до предмете. Так как датчик для определения расстояния основан на ультразвуки, он плохо работает для определения расстояния до звукопоглощающих предметов. Идеальными являются предметы с ровной и гладкой поверхностью например ПАНЕЛИ, ВАГОНКА ПВХ.
Описание ультразвукового дальномера HC-SR04
Датчик HC-SR04 является бесконтактным. Точность измерения обеспечивается от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия.
Ультразвуковой дальномер HC-SR04 имеет такие технические параметры:
Управляем Arduino через USB. Библиотека Serial.
Самодельный лазерный гравировальный станок с ЧПУ. Модернизация
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.
#3 Гость: Mark (29 марта, 2020 в 00:14)
А де умова щоб «пнути» таймер?)
#2 Гость: Алексей (3 июня, 2019 в 20:56)
Я хоть дня 4 как чуть натаскался на ардуино, но не люблю я все эти вычисления в loop, мне кажется удобнее отдельной функцией это все вывести )и в loop уже перед проверками условий вызывать
#1 Гость: Олег Богмат (12 марта, 2019 в 19:43)
спасибо за ваш урок, пытаюсь совместить LCD экран от Nokia вот с этими библиотеками Adafruit-PCD8544 Adafruit-GFX
но пока безуспешно, буду очень благодарен если подскажите
Подключение дальномера HC-SR04 к Arduino
Пошаговая инструкция по подключению ультразвукового дальномера HC-SR04 к Arduino.
Часто в проектах на Arduino необходимо определить расстояние до препятствия. Для этих целей обычно используют инфракрасные или утразвуковые дальномеры.
Под рукой у меня есть только ультразвуковой сонар HC-SR04, поэтому в этой статье я опишу как с ним работать.
Подключение HC-SR04 к Arduino
В модели HC-SR04 есть 4 контакта, которые мы и будем использовать для подключения к 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);
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 сантиметром
<
digitalWrite(ledPin, 1); // Зажигаем светодиод
>
else
<
digitalWrite(ledPin, 0); // иначе тушим
>
Демонстрация работы
Похожие записи
Комментариев: 31
Спасибо за статью! Всё работает, комментарии в программе дают ясное представление о алгоритме работы.
Спасибо!
Легко и понятно.
Такой вопрос. Код работает на любом дальномере или именно на этом?
А для работы с другими видами в скетче что изменить надо? или это зависит от модели дальномера?
От модели. В разных датчиках могут быть использованы разные шины передачи данных.
добрый день, такой вопрос, а какова минимальная величина объекта обнаружения??интерес составляет например с помощью таких сенсоров нескольких собрать схему которая будет определять расположение в пространстве обьекта
не могу вам ответить
на мелких объектах не проверял
Спасибо.
Очень логично и без излишеств.
Спасибо большое! Всё работет как надо, пояснения оч. в тему.
Спасибо, все понятно! А я думал нужно библиотеку подключать Ultrasonic. А какие возможности она дает?
Ultrasonic, как и любая другая библиотека создана для сокращения количества кода.
Подскажите пожалуйста, вместо диода можно подключить реле какое-нибудь, например чтобы моторчик крутило? Спасибо.
Подключил к ArduinoMega два таких датчика. Соответственно изменил код. Второй датчик всегда показывает 0. Экспериментальным путем выяснил, что работает только тот из 2 датчиков, для которого раньше прописана функция pulseIn в скетче. Не подскажете, как решить проблему?
Подскажите код что бы удерживла 20сек и сробатывала толь ко в темноте.
Удерживала что. После того как датчик обнаружит присутствие, то зажигает светодиод на 20 сек., я правильно понял. для этого нужно сделать задержку сразу после того как зажигается светодиод. А что бы срабатывал в темноте, необходимо использовать фоторезистор.
Привет подскажите как перевести значение не в сантиметры а в проценты
Скажем что 1150 см = 0%, а 15 см= 100% ну дальше как то так
Был ли у кого-нибудь опыт работы с несколькими датчиками? По поиску все сводится с сдвиговым регистрам и мультиплексорам.
Здравствуйте. А как сделать так, чтобы светодиод зажигался плавно?