Датчик расстояния для ардуино. Ультразвуковой датчик расстояния Ардуино HC-SR04

В данное статье рассмотрим принцип работы ультразвукового дальномера HC-SR04.

Принцип работы ультразвукового дальномера основан на испускании ультразвука и его отражения от впереди находящихся предметов. Исходя из времени возвращения звука, по простой формуле, можно рассчитать расстояние до объекта. Дальномер HC-SR04 является самым дешевым дальномером для хоббийного использования. При малой цене обладает хорошими характеристиками, способен измерять расстояние в диапазоне от 2 до 450см.

Используемые компоненты (купить в Китае):

Принцип работы датчика можно условно разделить на 4 этапа:

1. Подаем импульс продолжительностью 10 мкс, на вывод Trig.

2. Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через "T глазик"

3. Дойдя до препятствия, посланные импульсы отражаются и принимаются "R глазиком". Получаем выходной сигнал на выводе Echo.

4. Непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:

ширина импульса (мкс) / 58= дистанция (см)

ширина импульса (мкс) / 148= дистанция (дюйм)

Подключение к Arduino

Модуль оборудован четырех-пиновым разъемом стандарта 2.54мм

VCC : "+" питания

TRIG (T) : вывод входного сигнала

ECHO (R) : вывод выходного сигнала (Длина сигнала зависит от расстояния объекта до датчика)

GND : "-" питания

Подключив датчик к Arduino остается только залить скетч для работы. В приведенном ниже скетче информация о расстоянии будет отсылаться в порт компьютера, а также при дистанции менее 30 сантиметров зажигать светодиод подключенный к 13 пину.

пример программного кода:

#define Trig 9 #define Echo 8 #define ledPin 13 void setup //инициируем как выход pinMode (Echo, INPUT ); //инициируем как вход pinMode (ledPin, OUTPUT ); Serial .begin (9600); /* задаем скорость общения. В нашем случае с компьютером */ } unsigned int impulseTime=0; unsigned int distance_sm=0; void loop () { digitalWrite (Trig, HIGH ); /* Подаем импульс на вход trig дальномера */ delayMicroseconds (10); // равный 10 микросекундам digitalWrite (Trig, LOW ); // Отключаем impulseTime=pulseIn (Echo, HIGH ); // Замеряем длину импульса distance_sm=impulseTime/58; Serial .println (distance_sm); // Выводим на порт if (distance_sm<30) // Если расстояние менее 30 сантиметром { digitalWrite (ledPin, HIGH ); // Светодиод горит } else { digitalWrite (ledPin, LOW ); // иначе не горит } delay (100); /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс. */ }

Дополнительный пример работы:

Взаимодействие дальномера и сервопривода. Дистанция, измеряемая дальномером преобразуется в угол поворота сервопривода

Пример программного кода

//Тестировалось на Arduino IDE 1.0.1 #include #define coef 10 //(коэффициент соответствия 10 градусов на 1см) #define dead_zone 4 #define max_value 22 #define Trig 9 #define Echo 8 #define ledPin 13 #define servoPin 11 Servo myservo; void setup () { pinMode (Trig, OUTPUT ); //инициируем как выход pinMode (Echo, INPUT ); //инициируем как вход pinMode (ledPin, OUTPUT ); myservo.attach (servoPin); myservo.write (0); } unsigned int impulseTime=0; unsigned int distance_sm=0; void loop () { digitalWrite (Trig, HIGH ); /* Подаем импульс на вход trig дальномера */ delayMicroseconds (10); // равный 10 микросекундам digitalWrite (Trig, LOW ); // Отключаем impulseTime = pulseIn (Echo, HIGH ); // Замеряем длину импульса distance_sm = impulseTime/58; // Пересчитываем в сантиметры if (distance_sm >= dead_zone && distance_sm <= max_value) { myservo.write (coef * (distance_sm - dead_zone)); } else if (distance_sm < dead_zone)// если дистанция менее 4 см, серва в положении ноль градусов { myservo.write (0); } else { myservo.write (180); } delay (100); /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс. */ }

Здесь же я отдельно вынес такой важный практический вопрос, как подключение индуктивных датчиков с транзисторным выходом, которые в современном промышленном оборудовании – повсеместно. Кроме того, приведены реальные инструкции к датчикам и ссылки на примеры.

Принцип активации (работы) датчиков при этом может быть любым – индуктивные (приближения), оптические (фотоэлектрические), и т.д.

В первой части были описаны возможные варианты выходов датчиков. По подключению датчиков с контактами (релейный выход) проблем возникнуть не должно. А по транзисторным и с подключением к контроллеру не всё так просто.

Схемы подключения датчиков PNP и NPN

Отличие PNP и NPN датчиков в том, что они коммутируют разные полюсы источника питания. PNP (от слова “Positive”) коммутирует положительный выход источника питания, NPN – отрицательный.

Ниже для примера даны схемы подключения датчиков с транзисторным выходом. Нагрузка – как правило, это вход контроллера.

Датчика. Нагрузка (Load) постоянно подключена к “минусу” (0V), подача дискретной “1” (+V) коммутируется транзистором. НО или НЗ датчик – зависит от схемы управления (Main circuit)

Датчика. Нагрузка (Load) постоянно подключена к “плюсу” (+V). Здесь активный уровень (дискретный “1”) на выходе датчика – низкий (0V), при этом на нагрузку подается питание через открывшийся транзистор.

Призываю всех не путаться, работа этих схем будет подробно расписана далее.

На схемах ниже показано в принципе то же самое. Акцент уделён на отличия в схемах PNP и NPN выходов.

Схемы подключения NPN и PNP выходов датчиков

На левом рисунке – датчик с выходным транзистором NPN . Коммутируется общий провод, который в данном случае – отрицательный провод источника питания.

Справа – случай с транзистором PNP на выходе. Этот случай – наиболее частый, так как в современной электронике принято отрицательный провод источника питания делать общим, а входы контроллеров и других регистрирующих устройств активировать положительным потенциалом.

Как проверить индуктивный датчик?

Для этого нужно подать на него питание, то есть подключить его в схему. Затем – активировать (инициировать) его. При активации будет загораться индикатор. Но индикация не гарантирует правильной работы индуктивного датчика. Нужно подключить нагрузку, и измерить напряжение на ней, чтобы быть уверенным на 100%.

Замена датчиков

Как я уже писал, есть принципиально 4 вида датчиков с транзисторным выходом, которые подразделяются по внутреннему устройству и схеме включения:

  • PNP NO
  • PNP NC
  • NPN NO
  • NPN NC

Все эти типы датчиков можно заменить друг на друга, т.е. они взаимозаменяемы.

Это реализуется такими способами:

  • Переделка устройства инициации – механически меняется конструкция.
  • Изменение имеющейся схемы включения датчика.
  • Переключение типа выхода датчика (если имеются такие переключатели на корпусе датчика).
  • Перепрограммирование программы – изменение активного уровня данного входа, изменение алгоритма программы.

Ниже приведён пример, как можно заменить датчик PNP на NPN, изменив схему подключения:

PNP-NPN схемы взаимозаменяемости. Слева – исходная схема, справа – переделанная.

Понять работу этих схем поможет осознание того факта, что транзистор – это ключевой элемент, который можно представить обычными контактами реле (примеры – ниже, в обозначениях).

А что там свежего в группе ВК СамЭлектрик.ру ?

Подписывайся, и читай статью дальше:

Итак, схема слева. Предположим, что тип датчика – НО. Тогда (независимо от типа транзистора на выходе), когда датчик не активен, его выходные “контакты” разомкнуты, и ток через них не протекает. Когда датчик активен, контакты замкнуты, со всеми вытекающими последствиями. Точнее, с протекающим током через эти контакты)). Протекающий ток создает падение напряжения на нагрузке.

Внутренняя нагрузка показана пунктиром неспроста. Этот резистор существует, но его наличие не гарантирует стабильную работу датчика, датчик должен быть подключен к входу контроллера или другой нагрузке. Сопротивление этого входа и является основной нагрузкой.

Если внутренней нагрузки в датчике нет, и коллектор “висит в воздухе”, то это называют “схема с открытым коллектором”. Эта схема работает ТОЛЬКО с подключенной нагрузкой.

Так вот, в схеме с PNP выходом при активации напряжение (+V) через открытый транзистор поступает на вход контроллера, и он активизируется. Как того же добиться с выходом NPN?

Бывают ситуации, когда нужного датчика нет под рукой, а станок должен работать “прям щас”.

Смотрим на изменения в схеме справа. Прежде всего, обеспечен режим работы выходного транзистора датчика. Для этого в схему добавлен дополнительный резистор, его сопротивление обычно порядка 5,1 – 10 кОм. Теперь, когда датчик не активен, через дополнительный резистор напряжение (+V) поступает на вход контроллера, и вход контроллера активизируется. Когда датчик активен – на входе контроллера дискретный “0”, поскольку вход контроллера шунтируется открытым NPN транзистором, и почти весь ток дополнительного резистора проходит через этот транзистор.

В данном случае происходит перефазировка работы датчика. Зато датчик работает в режиме, и контроллер получает информацию. В большинстве случаев этого достаточно. Например, в режиме подсчета импульсов – тахометр, или количество заготовок.

Да, не совсем то, что мы хотели, и схемы взаимозаменяемости npn и pnp датчиков не всегда приемлемы.

Как добиться полного функционала? Способ 1 – механически сдвинуть либо переделать металлическую пластинку (активатор). Либо световой промежуток, если речь идёт об оптическом датчике. Способ 2 – перепрограммировать вход контроллера чтобы дискретный “0” был активным состоянием контроллера, а “1” – пассивным. Если под рукой есть ноутбук, то второй способ и быстрее, и проще.

Условное обозначение датчика приближения

На принципиальных схемах индуктивные датчики (датчики приближения) обозначают по разному. Но главное – присутствует квадрат, повёрнутый на 45° и две вертикальные линии в нём. Как на схемах, изображённых ниже.

НО НЗ датчики. Принципиальные схемы.

На верхней схеме – нормально открытый (НО) контакт (условно обозначен PNP транзистор). Вторая схема – нормально закрытый, и третья схема – оба контакта в одном корпусе.

Цветовая маркировка выводов датчиков

Существует стандартная система маркировки датчиков. Все производители в настоящее время придерживаются её.

Однако, нелишне перед монтажом убедиться в правильности подключения, обратившись к руководству (инструкции) по подключению. Кроме того, как правило, цвета проводов указаны на самом датчике, если позволяет его размер.

Вот эта маркировка.

  • Синий (Blue) – Минус питания
  • Коричневый (Brown) – Плюс
  • Чёрный (Black) – Выход
  • Белый (White) – второй выход, или вход управления, надо смотреть инструкцию.

Система обозначений индуктивных датчиков

Тип датчика обозначается цифро-буквенным кодом, в котором зашифрованы основные параметры датчика. Ниже приведена система маркировки популярных датчиков Autonics. / Каталог датчиков приближения Omron, pdf, 1.14 MB, скачан:1282 раз./

/ Чем можно заменить датчики ТЕКО, pdf, 179.92 kB, скачан:1032 раз./

/ Датчики фирмы Turck, pdf, 4.13 MB, скачан:1362 раз./

/ Схема включения датчиков по схемам PNP и NPN в программе Splan/ Исходный файл., rar, 2.18 kB, скачан:2216 раз./

Реальные датчики

Датчики купить проблематично, товар специфический, и в магазинах электрики такие не продают. Как вариант, их можно купить в Китае, на АлиЭкспрессе.

А вот какие я встречаю в своей работе.

Всем спасибо за внимание, жду вопросов по подключению датчиков в комментариях!

Всех приветствую.
В этом мини обзорчике, мы посамодельничаем с ультразвуковым модулем измерения расстояния…

Сразу извиняюсь, упаковок и распаковок не будет. Сам не люблю их в других обзорах, свои портить не буду. Разве что какой заказ прибудет в экстраординарной упаковке или супер непотребном виде…
Возникла идея автоматически включать свет при посещении сортира и так же выключать при покидании оного. Был заказан pir-выключатель для этих целей, а так же pir-датчик отдельно, на всякий…



Выключатель был установлен в однозначно посещаемом всеми членами семьи помещении и…
И оказалось, что плясать лезгинку, при выполнении процедур характерных для посещения сортира, никто не в состоянии, а замирание в привычной позе характерно для всех. Тут и подстерегала бяка. Только задумался о добром и вечном, свет хлоп и выключился, что довольно досадно.
Перепробованы все способы регулировок выключателя, но желаемого результата достичь не удалось.
Не удалось обмануть себя и физику, подменив необходимый датчик присутствия, на датчик обнаружения.
Так что выключатель и неиспользованный pir-датчик были отправлены на длительное хранение до лучших времен, а их место занял…
Комбинированный радар для воротных систем , пока никуда не пристроенный.


Микроволновый блок естественно был отключен, зачем нам подставлять макушку под микроволны. Осталась только ИК матрица.
Штука довольна специфическая. Минимальная зона у него размером с помещение. Свет включает и выключает при посещении на ура. Но есть один недостаток. Датчик очень педантичен и любит, чтобы все стояло на своих местах. Передвинул рулончик бумажки или опустил/поднял стульчак, требуется перенастройка. Да и ценник у него не сортирный.
Так что поиск решения был продолжен.
На просторах интернета набрел на сайт и с темой о простом автоматическом выключателе света на ультразвуковом датчике.
Тема показалась интересной, тем более изобретать велосипед с прошивкой не надо, автор постарался за нас, за что ему спасибо.
Схема есть, прошивки есть. Осталось сделать печатку и получить на выходе полноценный датчик присутствия. Или не получить… посмотрим…
Датчик был заказан на banggood"e. Нравится мне этот магазин стабильностью сроков доставки. Безтреком 28-30 дней и заказ у меня.
Приехал безтреком в срок. Упаковка для посылок без трека у banggood"а стандартная, мусорный мешок и все…
Датчик был упакован в антистатик, что подозреваю и спасло его от почтовых неприятностей. :0)
К сожалению мусорный мешок выбросил по пути домой, а антистатик уже дома, так что показать кроме датчика вам нечего, да и сам датчик уже потрепался (ножки выпрямил) в процессе изготовления устройства.
ТТХ датчика:
- 45*20*23 мм. ДхШхГ (Г - с выпрямленными ножками)
- вес - 8,28 грамм
- напряжение питания - DC 5V
- ток потребления - 15mA
- минимальное рабочее расстояние - 2 см.
- максимальное рабочее расстояние - 4 метра
- угол зоны обнаружения - 15 градусов
Кратко.
Датчик работает по принципу эха. Один пьезик датчика излучает пакет импульсов с частотой 40 кГц, сигнал отражается от поверхности перед датчиком, отраженный сигнал принимает другой пьезик, блок обработки обрабатывает полученные данные и на выходе выдает импульс длинной пропорциональной расстоянию прохождения УЗ сигнала.
Т.е. на выходе мы имеем импульс, длительность которого нам и важна.
В изготавливаемом нами автоматическом включателе/выключателе мы сравниваем длительность импульса занесенного в память микроконтроллера, с длительностью нового отраженного импульса. Если длительность нового импульса меньше того что в памяти, микроконтроллер решает, что в зоне обнаружение есть объект и нужно включить нагрузку… Если длинна импульса больше, то ничего не делаем или выключаем нагрузку, если она включена.
Далее:
Сам датчик.


Маркировка на микросхемах стерта.


Быстренько перерисовываем готовую схему в Diptrace, там же рисуем печатку, изготавливаем платку для опытов.

Процесс изготовления спрятал под спойлер, по тому как думаю многих уже притомил процессами.
Один раз я уже показывал, как делаю платки. В этот же раз наделал фоток, жалко выкидывать.
Больше народ процессами мучить не буду, если есть вопросы по платам, пишите пожалуйста в личку.
ссылка на скачивание того, что я собрал по теме, плюс схема и печатка платки в Diptrace.
Несколько фоток.
Подготавливаем платку и шаблон. Фоторезист нанесен.


Засвечиваем, промываем, травим.


Травим, смываем фоторезист.


Наносим маску, засвечиваем шаблон.


Режем платку, сверлим.



Сама платка.
Собрана схема на ATtiny13.
Зачем для тестов такая красивая? Просто она делалась попутно с другой платой, под эл. нагрузку.
Почему так бестолково расположены радиоэлементы? По тому что тестовая. Чтобы проверить, рабочее ли устройство в сборе. Не было смысла разводить и компоновать.


Припаиваем датчик к платке.


Программируем.


В результате получаем готовый бескорпусной датчик присутствия с питанием пять вольт, кушающее 30mA, способное обнаруживать посторонние предметы в заранее запрограммированной зоне обнаружения с углом в 15 градусов и расстоянием от 2 сантиметров, до 3,5 метров. При обнаружении включать светодиод.
Принцип работы прост. Направляем датчик, куда нам нужно. Нажимаем кнопку.
Настроечный светодиод (у меня он красненький) начинает мигать.
Мигает он в 3-х режимах:
10% светодиод включен- объект вне зоны действия, нагрузка выключена.
90% светодиод включен- объект в зоне действия, нагрузка включена.
50% светодиод включен- зона обнаружения свободна, идет отсчет 60 или 10 секунд, или одна секунда, в зависимости от прошивки, до выключения, лампа включена.
Дальше у вас есть 10 секунд чтобы уйти из зоны обнаружения.
Можно ограничить зону. Для этого нужно в момент запоминания настроек встать на границе зоны, тем самым зона будет ограничена.
Паспортные минимальные 2 сантиметра я подтверждаю. Если ограничить зону как на фото, то при просовывании пальца между коробкой и датчиком светодиод загорается, убираем палец, гаснет.
Если подвинуть коробку на полсантиметра ближе, то свтодиод загорается, устройство настраиваться отказывается.


Максимальные 4 метра подтвердить не удалось. Максимальное расстояние которое удалось подтвердить, где устройство уверенно фиксирует человека равно 3.5 метра. На з-х метрах уверенно фиксирует мою руку с коробкой 15х15 сантиметров. Включает нагрузку и не отключает, пока коробку не уберешь.
Выводы.
- Получившийся датчик присутствия мне понравился.
- Простейшая и удобная настройка.
- Реально работает.
- Дешево и сердито.
В общем, вот такое получилось годное устройство на ультразвуковом модуле измерения расстояния HY-SRF05.
В недалеком будущем я приспособлю его по месту, только коробку подберу.
Теперь можно будет замирать в нужной позе не боясь отключения света.
Желающие думаю могут придумать еще множество способов его использования. Особенно ардуинщики, для кого этот датчик в принципе и разработан. А может и не для них… Планирую купить +41 Добавить в избранное Обзор понравился +41 +81

Новые статьи

● Проект 23: Ультразвуковой датчик расстояния HC-SR04. Принцип работы, подключение, пример

В этом эксперименте мы рассмотрим ультразвуковой датчик для измерения расстояния и создадим проект вывода показаний датчика на экран ЖКИ WH1602.

Необходимые компоненты:

Ультразвуковой дальномер HC-SR04 (рис. 23.1) - это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Излучатель генерирует сигнал, который, отразившись от препятствия, попадает на приемник. Измерив время, за которое сигнал проходит до объекта и обратно, можно оценить расстояние. Кроме самих приемника и передатчика, на плате находится еще и необходимая обвязка, чтобы сделать работу с этим датчиком простой и удобной.

Характеристики ультразвукового дальномера HC-SR04:

Измеряемый диапазон - от 2 до 500 см;
. точность - 0,3 см;
. угол обзора - < 15°;
. напряжение питания - 5 В.

Датчик имеет 4 вывода стандарта 2,54 мм:

VCC - питание +5 В;
. Trig (T) - вывод входного сигнала;
. Echo (R) - вывод выходного сигнала;
. GND - земля.

Последовательность действий для получения данных такова:

Подаем импульс продолжительностью 10 мкс на вывод Trig;
. внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 кГц и посылается вперед через излучатель T;
. дойдя до препятствия, посланные импульсы отражаются и принимаются приемником R, в результате получаем выходной сигнал на выводе Echo;
. непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:

Ширина импульса (мкс) / 58 = дистанция (см);
-- ширина импульса (мкс) / 148 = дистанция (дюйм).

В нашем эксперименте мы создадим звуковую сигнализацию, которая будет включаться при приближении к плате Arduino на расстояние меньше 1 м. Датчик размещен на кронштейне вращающейся сервы и контролирует пространство с углом обзора 180°. Если датчик обнаруживает объект в радиусе 1 м, подается звуковой сигнал на пьзоизлучатель, вращение сервы прекращается. Схема соединения элементов представлена на рис. 23.2.

Рис. 23.2. Схема соединения элементов для звуковой сигнализации

При написании скетча будем использовать библиотеку Servo для работы с сервоприводом и библиотеку Ultrasonic.
Для работы Arduino с датчиком HC-SR04 имеется готовая библиотека - Ultrasonic.
Конструктор Ultrasonic принимает два параметра: номера пинов, к которым подключены выводы Trig и Echo, соответственно:

Ultrasonic ultrasonic(12,13);

Содержимое скетча показано в листинге 23.1.

#include // подключение библиотеки Servo Servo servo1; const int pinServo=8 ; // пин для подключения сервопривода int pos = 0 ; // переменная для хранения позиции сервопривода int dir =1 ; // направление перемещения сервопривода // Выводы для подключения HC-SR04 Trig - 12, Echo - 13 Ultrasonic ultrasonic (12 , 13 ) ; float dist_cm; // переменная для дистанции, см // подключить динамик к pin 9 int speakerPin = 9 ; void setup () { // подключить переменную servo1 к выводу pinServo1 servo1.attach(pinServo1); pinMode(speakerPin, OUTPUT); } void loop () { servo1.write(pos); // поворот сервоприводов на полученный угол delay(15 ); // пауза для ожидания поворота сервоприводов float dist_cm = ultrasonic.Ranging(CM); if (dist_cm<100 && dist_cm>20 ) tone(speakerPin,); // включить пьезозуммер else { tone(speakerPin,0 ); // отключить пьезозуммер pos=pos+dir; // изменение переменной положения сервопривода if (pos==0 || pos==180 ) dir=dir*(-1 ); // изменение направления движения } }
Порядок подключения:

1. Закрепляем датчик расстояния HC-SR04 на сервоприводе.
2. Подключаем датчик HC-SR04, пьезозуммер и сервопривод к плате Arduino по схеме на рис. 23.2.
3. Загружаем в плату Arduino скетч из листинга 23.1.
4. Наблюдаем за циклическим перемещением сервопривода, при попадании объекта в поле зрения датчика HC-SR04 пьезозуммер издает сигнал, сервопривод останавливается, при исчезновении объекта из поля зрения датчика сервопривод возобновляет движение.

Листинги программ

Просмотров