Инструменты

Датчик расстояния hc sr04. Дальномер с помощью датчика HC SR04 и Arduino

Датчик расстояния hc sr04. Дальномер с помощью датчика HC SR04 и Arduino

Представленная ниже, схема зажигания автомобиля предназначена для опытных радиолюбителей.

Тем, кто ранее собирал простые схемы блоков зажигания и желающим собрать устройство, из которого, максимально «выжато» все или может почти всё!

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

Основное отличие усовершенствованного блока зажигания от — заметное улучшение его энергетических характеристик. Если у исходного блока максимальная длительность искры не превышала 1,2 мс, причем она могла быть получена лишь на самых низких значениях частоты искрообразования, то у нового длительность искры постоянна во всей рабочей полосе 5…200 Гц и равна 1,2… 1,4 мс. Это значит, что на средних и максимальных оборотах двигателя — а это наиболее часто используемые режимы, длительность искры практически соответствует установившимся и настоящее время требованиям.

Ощутимо изменилась и мощность, подводимая к катушке зажигания. На частоте 20 Гц при катушке Б-115 она достигает 50…52 мДж, а на 200 Гц — около 16 мДж. Расширены также пределы питающего напряжения, в которых блок работоспособен. Уверенное искрообразование при пуске двигателя обеспечивается при бортовом напряжении 3,5 В, но работоспособность блока сохраняется и при 2,5 В. На максимальной частоте искрообразование не нарушается, если питающее напряжение достигает 6 В, а длительность искры — не ниже 0,5 мс.

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

Как видно из принципиальной схемы блока, показанной на рисунке выше, основные ее изменения относятся к преобразователю, т.е. генератору зарядных импульсов, питающих накопитель-конденсатор С2. Упрощена цепь запуска преобразователя, выполненного, как и прежде, по схеме однотактного стабилизированного блокинг-генератора. Функции пускового и разрядного диодов(соответственно VD3 и VD9 по прежней схеме) выполняет теперь один стабилитрон VD1. Такое решение обеспечивает более надежный запуск генератора после каждого цикла искрообразования путем значительного увеличения начального смещения на эмиттерном переходе транзистора VT1. Это не снизило тем не менее общей надежности блока, поскольку режим транзистора ни по одному из параметров не превысил допустимых значений.

Изменена и цепь зарядки конденсатора задержки С1. Теперь он после зарядки накопительного конденсатора заряжается через резистор R1 и стабилитроны VD1 и VD3. Таким образом, в стабилизации участвуют два стабилитрона, суммарным напряжением которых при их открывании и определяется уровень напряжения на накопительном конденсаторе С2. Некоторое увеличение напряжения на этом конденсаторе скомпенсировано соответствующим увеличением числа витков базовой обмотки и трансформатора. Средний уровень напряжения на накопительном конденсаторе уменьшен до 345…365 В, что повышает общую надежность блока и обеспечивает вместе с тем требуемую мощность искры.

В разрядной цепи конденсатора С1 использован стабистор VD2, позволяющий получить такую же степень перекомпенсации при уменьшении бортового напряжения, как три-четыре обычных последовательных диода. При разрядке этого конденсатора стабилитрон VD1 открыт в прямом направлении, (подобно диоду VD9 исходного блока). Конденсатор С3 обеспечивает увеличение длительности и мощности импульса, открывающего тринистор VS1. Это особенно необходимо при большой частоте искрообразования, когда средний уровень напряжения на конденсаторе С2 существенно снижается.

В блоках электронного зажигания с многократной разрядкой накопительного конденсатора на катушку зажигания длительность искры и в определенной степени ее мощность определяет качество тринистора, поскольку все периоды колебаний, кроме первого, создаются и поддерживаются только энергией накопителя. Чем меньше затраты энергии на каждое включение тринистора, тем большее число запусков будет возможно и тем большее количество энергий (и за большее время) будет передано катушке зажигания. Крайне желательно поэтому подобрать тринистор с минимальным открывающим током.
Хорошим можно считать тринистор, если блок обеспечивает начало искрообразования (с частотой 1…2 Гц) при питании блока напряжением 3 В. Удовлетворительному качеству соответствует работа при напряжении 4…5 В. С хорошим тринистором длительность искры равна 1,3…1,5 мс, при плохом — уменьшается до 1… 1,2 мс.


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

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

При нормальной работе блока формированию каждой искры соответствуют 4,5 периода колебаний в катушке зажигания. Это означает, что искра представляет собой девять знакопеременных разрядов в свече зажигания, непрерывно следующих один за другим.

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

В описываемом блоке источник бортового напряжения в колебательном процессе участия не принимает и упомянутых потерь, естественно, не вносит.

Один из наиболее ответственных узлов блока — трансформатор Т1. Его магнитопровод Ш15х12 изготовлен из оксифера НМ2000. Обмотка I содержит 52 витка провода ПЭВ-2 0,8; II — 90 витков провода ПЭВ-2 0,25; III — 450 витков провода ПЭВ-2 0.25.

Зазор между Ш-образными частями магнитопровода должен быть выдержан с максимально возможной точностью. Для этого при сборке между его крайними стержнями помещают, без клея по гетинаксовой (или текстолитовой) прокладке толщиной 1,2+-0,05 мм, после чего детали магнитопровода стягивают прочными нитками.
Снаружи трансформатор необходимо покрыть несколькими слоями эпоксидной смолы, нитроклея или нитроэмали.
Катушку можно выполнить на прямоугольной шпуле без щек. Первой наматывают обмотку III, в которой каждый слой отделяют от следующего тонкой изоляционной прокладкой, а завершают трехслойной прокладкой. Далее наматывают обмотку II. Обмотку I отделяют от предыдущей двумя слоями изоляции. Крайние витки каждого слоя при намотке на шпуле следует фиксировать любым нитроклеем.

Гибкие выводы катушки лучше всего оформить по окончании всей намотки. Выводить концы обмотки I и II следует в сторону диаметрально противоположную концам обмотки III, но все выводы должны быть на одном из торцов катушки. В таком же порядке располагают и гибкие выводы, которые закрепляют нитками и клеем на прокладке из электрокартона (прессшпана). Перед заливкой выводы маркируют.

Кроме КУ202Н, в блоке можно применить тринистор КУ221 с буквенными индексами А-Г. При выборе тринистора следует принять во внимание, что, как показывает опыт, КУ202Н по сравнению с КУ221 имеют в большинстве случаев меньший ток открывания, но более критичны к параметрам импульса запуска (длительности и частоте). Поэтому для случая использования тринистора из серии КУ221 номиналы элементов цепи удлинения искры необходимо скорректировать — конденсатор С3 должен иметь емкость 0,25 мкФ, а резистор R4 — сопротивление 620 Ом.

Транзистор КТ837 может быть с любыми буквенными индексами, кроме Ж, И, К, Т, У, Ф. Желательно, чтобы статический коэффициент передачи тока не был менее 40. Применение транзистора другого типа нежелательно.

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

Стабилитрон VD3 также необходимо устанавливать на теплоотвод. В блоке он представляет собой две полосы размерами 60x25x2 мм, согнутые П-образно и вложенные одна в другую. Стабилитрон Д817Б можно заменить последовательной цепью из двух стабилитронов Д816В; при бортовом напряжении 14 В и частоте искрообразования 20 Гц эта пара должна обеспечивать на накопители напряжение 350…360В. Каждый из них устанавливают на небольшой теплоотвод. Стабилитроны подбирают только после выбора и установки тринистора.

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

Стабистор КС119А (VD2) можно заменить тремя диодами Д223А (или другими кремниевыми диодами с импульсным прямым током не менее 0,5 А), включенными последовательно.

Большинство деталей блока смонтированы на печатной плате из фольгированного стеклотекстолита толщиной 1,5 мм. Чертеж платы показан на рис.2. Плата разработана с учетом возможности монтажа деталей при различных вариантах замены.

Для блока, предназначенного работать в местностях с суровым зимним климатом, оксидный конденсатор С1 желательно использовать танталовый с рабочим напряжением не ниже 10 В. Его устанавливают вместо большой перемычки на плате, при этом точки подключения алюминиевого оксидного конденсатора (он-то и показан на плате), пригодного для работы в подавляющем большинстве климатических зон, следует замкнуть перемычкой соответствующей длины. Конденсатор С2-МБГО, МБГЧ или К73-17 на напряжение 400…600 В.

В случае выбора для блока тринистора из серии КУ221 нижнюю по рис.2 часть платы необходимо скорректировать так, как это показано на рис.3. При монтаже тринистора необходимо один из винтов его крепления изолировать от печатной дорожки общего провода.

Проверку работоспособности и тем более регулировку следует проводить именно с такой катушкой зажигания, с которой блок будет работать в дальнейшем. Следует иметь в виду, что включение блока без катушки зажигания, нагруженной запальной свечой, совершенно недопустимо. Для проверки вполне достаточно измерять пиковым вольтметром напряжение на накопительном конденсаторе С2. Таким вольтметром может служить авометр, имеющий предел постоянного напряжения 500 В. Авометр подключают к конденсатору С2 через диод Д226Б (или подобный), а зажимы авометра шунтируют конденсатором емкостью 0,1…0,5мкф, на напряжение 400…600 В.

При номинальном напряжении питания (14 В) и частоте искрообразования 20 Гц напряжение на накопителе должно находиться в пределах 345…365 В. Если напряжение меньше, то прежде всего подбирают тринистор с учетом сказанного выше. Если после подборки будет обеспечено искрообразоеание при понижении напряжения питания до 3 В, но на конденсаторе С2 при номинальном напряжении питания будет повышенное напряжение, следует подобрать стабилитрон VD3 с несколько пониженным напряжением стабилизации.

Далее проверяют блок на высшей частоте искрообраэования (200 Гц), поддерживая номинальное бортовое напряжение. Напряжение на конденсаторе С2 должно находиться в пределах 185…200 В, а потребляемый блоком ток после непрерывной работы в течение 15…20 мин не должен превышать 2,2 А. Если транзистор за это время нагреется выше 60°С при комнатной окружающей температуре, тёплоотводящую поверхность следует несколько увеличить. Конденсатор С3 и резистор R4 подборки, как правило, не требуют. Однако для отдельных экземпляров тринисторов (как того, так и другого типа) может потребоваться корректировка номиналов, если на частоте 200 Гц будет обнаружена неустойчивость в искрообраэовании. Она проявляется обычно в виде кратковременного сбоя в показаниях вольтметра, подключенного к накопителю, и хорошо заметна на слух.

В этом случае следует увеличить емкость конденсатора С3 на 0,1…0,2 мкФ, а если это не поможет, вернуться к прежнему значению и увеличить сопротивление резистора R4 на 100…200 Ом. Одна из этих мер, а иногда и обе вместе, обычно устраняют неустойчивость запуска. Заметим, что увеличение сопротивления уменьшает, а увеличение емкости увеличивает длительность искры.

Если есть возможность воспользоваться осциллографом, то полезно убедиться в нормальном течении колебательного процесса в катушке зажигания и фактической его длительности. До полного затухания должны быть хорошо, различимы 9-11 полуволн, суммарная длительность которых должна быть равна 1,3…1,5 мс на любой частоте искрообразования. Вход X осциллографа следует подключать к общей точке обмоток катушки зажигания.

Типичный вид осциллограммы показан на рис.4. Всплески посредине минусовых полуволн соответствуют единичным импульсам блокинг-генератора при изменении направления тока в катушке зажигания.

Целесообразно проверить также зависимость напряжения на накопительном конденсаторе от бортового напряжения.

Ее вид не должен заметно отличаться от показанного на рис.5.

Изготовленный блок рекомендуется устанавливать в моторном отсеке в передней, более прохладной его части. Искрогасящий конденсатор прерывателя следует отключить и соединить его вывод с соответствующим контактом розетки разъема Х1. Переход на классическое зажигание выполняют, как и в прежней конструкции, установкой вставки-замыкателя Х1.3.

В заключение отметим, что попытки получить столь же «длинную» искру с трансформатором на стальном магнитопроводе, даже из стали самого высокого качества, не приведут к успеху. Наибольшая длительность, которая может быть достигнута, — 0,8…0,85 мс. Тем не менее блок почти без изменений (сопротивление резистора R1 следует уменьшить до 6…8 Ом) работоспособен и с трансформатором на стальном магнитопроводе с указанными намоточными характеристиками, и эксплуатационный качества блока выше, чем у его прототипа .

Литература:
1. Г. Карасев. Стабилизированный блок электронного зажигания. — Радио, 1988, № 9, с. 17; 1989, №5, с.91
2. П.Гацанюк. Усовершенствованная электронная система зажигания. В сб.: «В помощь радиолюбителю», вып: 101, с. 52, — М.: ДОСААФ.
3. А. Синельников. Электроника в автомобиле. — М.:, Радио и связь, 1985, с.46.
4. Ю. Архипов. Полуавтоматический блок зажигания. — Радио, 1990, № 1, с. 31-34; №2, с. 39-42.

терморегулятор W1209 DC, Релейный модуль, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, датчик движения HC-SR501, Блок питания, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, Радиомодуль NRF24L01, OKI 120A2, SD Card Module, Микросхема контроллера коллекторного электродвигателя, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Mini 360 на схеме LM2596, L293D, Инфракрасные датчики расстояния, Часы реального времени, HC-SR501, блок питания Mini 360 на схеме LM2596, Контроллер L298N, HC-SR501, GSM GPRS, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Модуль Wi-Fi ESP8266-12E, Card Module, Блок питания, Mini 360, L293D, блок питания Mini 360 на схеме LM2596, Радиомодуль, ИК-пульт дистанционного управления, ИК-пульт, Ethernet shield, Микросхема контроллера коллекторного электродвигателя, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, SD Card Module, Радиомодуль NRF24L01, двигатель OKI, L293D, Шаговый двигатель, Блок питания, L293D, блок питания Mini 360 на схеме LM2596, Карта памяти SD, Ethernet shield, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, Шаговый двигатель OKI 120A2, Шаговый двигатель,

Ультразвуковые дальномеры HC-SR04

Познакомимся с датчиками расстояния, которые пригодятся в проектах, рассматриваемых в следующих главах. Ультразвуковой дальномер HC-SR04 - это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Кроме самих приемника и передатчика на плате находится еще и необходимая обвязка, чтобы сделать работу с этим датчиком простой и непринужденной.



Датчик обладает низким энергопотреблением, что также является немаловажным преимуществом в случае с мобильными роботами, не привязанными к розетке. Питается датчик HC-SR04 от 5 В, что тоже удобно при подключении его к Arduino.

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

Измеряемый диапазон - от 2-х до 500 см;

Точность - 0,3 см;

Угол обзора - < 15 °;

Напряжение питания - 5 В.

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

VCC - питание +5 В;

Trig (T) - вывод входного сигнала;

Echo (R) - вывод выходного сигнала;

GND - земля.

Проверка работы датчика

Залить программу

Sketch code

/* Скетч с библиотекой NewPing, которая может использоваться и для датчика HC-SR04

приведенного здесь SRF06 и позволяет подключать ульразвуковые датчики

с помощью одного пина на Arduino. Можно дополнительно подключить конденсатор на 0.1 мкФ к пинам Эхо и Триггер на датчике.*/

#include

#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Максимальное расстояние, которое мы контролируем (в сантиметрах). Максимальное расстояние подобных датчиков находится в диапазоне 400-500см.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Настройка пинов и максимального расстояния

void setup() {
Serial.begin(115200); // Открытие серийного протокола с частотой передачи данных 115200 бит/сек.
}

void loop() {
delay(500); // Задержка в 500 миллисекунд между генерацией волн. 29 миллисекунд – минимально допустимая задержка.
unsigned int uS = sonar.ping(); // Генерация сигнала, получение времени в микросекундах (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Преобразование времени в расстояние и отображение результата (0 соответствует выходу за допустимый диапазон)
Serial.println("cm");
}

Открыть монитор порта

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

В составе дальномера имеются два пьезоэлемента: один работает как излучатель сигнала, другой - как приемник. Излучатель генерирует сигнал, который, отразившись от препятствия, попадает на приемник. Измерив время, за которое сигнал проходит до объекта и обратно, можно оценить расстояние.

Последовательность действий следующая:

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

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

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

Библиотека Ultrasonic

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

Ultrasonic ultrasonic(12,13);

здесь вывод датчика Trig подключен к 12-му пину Arduino, а Echo - к 13-му.

Библиотека имеет один метод Ranging, в качестве параметра которому задается, во что пересчитывать расстояние до объекта: в сантиметры или в дюймы:

#define CM 1

#define INC 0

Таким образом строчка ultrasonic.Randing(CM)вернет расстояние до объекта (типа long) в сантиметрах.

Файлы библиотеки вы можете найти в папке libraries/Ultrasonic сопровождающего книгу электронного архива. Для использования библиотеки в своих проектах поместим ее в папку libraries каталога установки Arduino.

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

Sketch code

#include "Ultrasonic.h"

// sensor connected to:

// Trig - 12, Echo - 13 Ultrasonic ultrasonic(12, 13);

Serial.begin(9600);

float dist_cm = ultrasonic.Ranging(CM); Serial.println(dist_cm);

Подключение датчика HC–SR04 к Arduino

Ультразвуковой датчик HC–SR04 определяет расстояние и выводит полученные значения в окно серийного монитора в среде Arduino IDE.

Небольшое примечание: в свободном доступе существует отличная библиотека NewPing , которая еще больше облегчает использование HC–SR04, пример ее использование тоже приведен ниже. // Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH:

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Считываем данные с ультразвукового датчика: значение HIGH, которое

// зависит от длительности (в микросекундах) между отправкой

// акустической волны и ее обратном приеме на эхолокаторе.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// преобразование времени в расстояние

cm = (duration/2) / 29.1;

inches = (duration/2) / 74;

Serial.print(inches);

Serial.print("in, ");

Serial.print(cm);

Serial.print("cm");

Serial.println();

Sketch code

#include

#define TRIGGER_PIN 12

#define ECHO_PIN 11

#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Настройка пинов и максимального расстояния.

Serial.begin(9600);

unsigned int uS = sonar.ping_cm();

Serial.print(uS);

Serial.println(“cm”);

Если HC-SR04 не считывает сигнал эхо, выходной сигнал никогда не преобразуется в LOW. Датчики Devantec и Parallax обеспечивают время задержки 36 миллисекунд 28 миллисекунд соответственно. Если вы используете скетч, приведенный выше, программа «зависнет» на 1 секунду. Поэтому желательно указывать параметр задержки.

Датчик HC-SR04 плохо работает при измерении расстояний более 10 футов. Время возврата импульса составляет около 20 миллисекунд, так что рекомендуется в таких случаях выставлять время задержки более 20, напрмер, 25 или 30 миллисекунд.

Можно подключить ультразвуковой датчик расстояния HC-SR04 лишь к одному пину Arduino. Для этого необходимо между пинами Триггера и Эхо установить резистор на 2.2 кОм и подключить к Arduino только пин Триггера.

Дальномер — это устройство для измерения расстояния до некоторого предмета. Дальномер помогает роботам в разных ситуациях. Простой колесный робот может использовать этот прибор для обнаружения препятствий. Летающий дрон использует дальномер для баражирования над землей на заданной высоте. С помощью дальномера можно даже построить карту помещения, применив специальный алгоритм SLAM.

1. Принцип действия

На этот раз мы разберем работу одного из самых популярных датчиков — ультразвукового (УЗ) дальномера. Существует много разных модификаций подобных устройств, но все они работают по принципу измерения времени прохождения отраженного звука. То есть датчик отправляет звуковой сигнал в заданном направлении, затем ловит отраженное эхо и вычисляет время полета звука от датчика до препятствия и обратно. Из школьного курса физики мы знаем, что скорость звука в некоторой среде величина постоянная, но зависящая от плотности среды. Зная скорость звука в воздухе и время полета звука до цели, мы можем рассчитать пройденное звуком расстояние по формуле: s = v*t где v — скорость звука в м/с, а t — время в секундах. Скорость звука в воздухе, кстати, равна 340.29 м/с. Чтобы справиться со своей задачей, дальномер имеет две важные конструктивные особенности. Во-первых, чтобы звук хорошо отражался от препятствий, датчик испускает ультразвук с частотой 40 кГц. Для этого в датчике имеется пьезокерамический излучатель, который способен генерировать звук такой высокой частоты. Во-вторых, излучатель устроен таким образом, что звук распространяется не во все стороны (как это бывает у обычных динамиков), а в узком направлении. На рисунке представлена диаграмма направленности типичного УЗ дальномера. Как видно на диаграмме, угол обзора самого простого УЗ дальномера составляет примерно 50-60 градусов. Для типичного варианта использования, когда датчик детектирует препятствия перед собой, такой угол обзора вполне пригоден. Ультразвук сможет обнаружить даже ножку стула, тогда как лазерный дальномер, к примеру, может её не заметить. Если же мы решим сканировать окружающее пространство, вращая дальномер по кругу как радар, УЗ дальномер даст нам очень неточную и шумную картину. Для таких целей лучше использовать как раз лазерный дальномер. Также следует отметить два серьезных недостатка УЗ дальномера. Первый заключается в том, что поверхности имеющие пористую структуру хорошо поглощают ультразвук, и датчик не может измерить расстояние до них. Например, если мы задумаем измерить расстояние от мультикоптера до поверхности поля с высокой травой, то скорее всего получим очень нечеткие данные. Такие же проблемы нас ждут при измерении дистанции до стены покрытой поролоном. Второй недостаток связан со скоростью звуковой волны. Эта скорость недостаточно высока, чтобы сделать процесс измерения более частым. Допустим, перед роботом есть препятствие на удалении 4 метра. Чтобы звук слетал туда и обратно, потребуется целых 24 мс. Следует 7 раз отмерить, прежде чем ставить УЗ дальномер на летающих роботов.

2. Ультразвуковой дальномер HC-SR04

В этом уроке мы будем работать с датчиком HC-SR04 и контроллером Ардуино Уно. Этот популярный дальномер умеет измерять расстояние от 1-2 см до 4-6 метров. При этом, точность измерения составляет 0.5 — 1 см. Встречаются разные версии одного и того же HC-SR04. Одни работают лучше, другие хуже. Отличить их можно по рисунку платы на обратной стороне. Версия, которая работает хорошо выглядит так:

А вот версия, которая может давать сбои:

3. Подключение HC-SR04

Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и питания (Vcc) еще есть Trig и Echo. Оба этих вывода цифровые, так что подключаем из к любым выводам Ардуино Уно:
HC-SR04 GND VCC Trig Echo
Arduino Uno GND +5V 3 2
Принципиальная схема устройства Внешний вид макета

4. Программа

Итак, попробуем приказать датчику отправить зондирующий ультразвуковой импульс, а затем зафиксируем его возвращение. Посмотрим как выглядит временная диаграмма работы HC-SR04.
На диаграмме видно, что для начала измерения нам необходимо сгенерировать на выводе Trig положительный импульс длиной 10 мкс. Вслед за этим, датчик выпустит серию из 8 импульсов и поднимет уровень на выводе Echo , перейдя при этом в режим ожидания отраженного сигнала. Как только дальномер почувствует, что звук вернулся, он завершит положительный импульс на Echo . Получается, что нам нужно сделать всего две вещи: создать импульс на Trig для начала измерения, и замерить длину импульса на Echo, чтобы потом вычислить дистанцию по нехитрой формуле. Делаем. int echoPin = 2; int trigPin = 3; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { int duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 58; Serial.print(cm); Serial.println(" cm"); delay(100); } Функция pulseIn замеряет длину положительного импульса на ноге echoPin в микросекундах. В программе мы записываем время полета звука в переменную duration. Как мы уже выяснили ранее, нам потребуется умножить время на скорость звука: s = duration * v = duration * 340 м/с Переводим скорость звука из м/с в см/мкс: s = duration * 0.034 м/мкс Для удобства преобразуем десятичную дробь в обыкновенную: s = duration * 1/29 = duration / 29 А теперь вспомним, что звук прошел два искомых расстояния: до цели и обратно. Поделим всё на 2: s = duration / 58 Теперь мы знаем откуда взялось число 58 в программе! Загружаем программу на Ардуино Уно и открываем монитор последовательного порта. Попробуем теперь наводить датчик на разные предметы и смотреть в мониторе рассчитанное расстояние.

Задания

Теперь, когда мы умеем вычислять расстояние с помощью дальномера, сделаем несколько полезных устройств.
  1. Строительный дальномер. Программа каждые 100мс измеряет расстояние с помощью дальномера и выводит результат на символьный ЖК дисплей. Для удобства полученное устройство можно поместить в небольшой корпус и запитать от батареек.
  2. Ультразвуковая трость. Напишем программу, которая будет «пищать» зуммером с различной частотой, в зависимости от измеренного расстояния. Например, если расстояние до препятствия более трех метров — зуммер издает звук раз в пол секунды. При расстоянии 1 метр — раз в 100мс. Менее 10см — пищит постоянно.

Заключение

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

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

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

Для измерения расстояния до объектов, можно воспользоваться ультразвуковым дальномером HC-SR04, который работает по принципу локатора, как у летучих мышей. С помощью подобного датчика можно конструировать различных роботов, которые будут объезжать препятствия, собирать схемы автоматического включения освещения либо другой нагрузки, собирать ультразвуковую охранную систему. Дальномер HC-SR04 представляем из себя готовый модуль, который можно подключать к различным микроконтроллерам, свои примеры буду проводить совместно с китайским аналогом Arduino UNO.

На лицевой стороне датчика находятся два сенсора, передающий (T) и принимающий (R). Передающий сенсор генерирует звуковые импульсы с частотой 40 кГц. Достигнув препятствия, импульс отражается и улавливает принимающим сенсором. С достаточно высокой точностью можно определить расстоянию до объекта, которое может составлять от 2 см до 4 м. На работу датчиков не влияет солнечный свет и цвет объекта.

На обратной стороне датчика находится электроника. Микросхема MAX3232 - управляет передающим сенсором. Операционный усилитель LM324 усиливает сигнал, полученный с принимающего сенсора.

Для подключения к микроконтроллеру, используется 4 пина:

Vcc – подключается к пину 5V Arduino.
Trig – цифровой вход, на него подаётся логическая единица, длительностью 10 мкс. Затем датчик передаёт 8 циклов ультразвукового сигнала на частоте 40 кГц. Когда будет получен отраженный сигнал, будет рассчитано расстояние до объекта.
Echo – цифровой выход. На него будет подана логическая единица, после завершения расчётов. Время подачи логической единицы, пропорционально измеренному расстоянию.
Trig и Echo подключаются к цифровым выводам Arduino, к каким именно, задаётся в скетче.
Gnd – соединяется с соответствующим пином платы Arduino.

Схема подключения HC-SR04 к Arduino, на примере китайского аналога Uno.

Запишем в Ардуино скетч №1 , который будет изменять расстояние до объекта. В примерах, пин «Trig » подключен ко 2 пину Uno, а пин «Echo » на 3 пин.

int TrigPin = 2;//пин Trig подключаем ко 2-му пину Arduino.
int EchoPin = 3;//пин Echo подключаем ко 3-му пину Arduino.

void setup() {
Serial.begin (9600);//Задаём скорость com-порта.
pinMode(TrigPin, OUTPUT);//Устанавливаем пин Trig как выход.
pinMode(EchoPin, INPUT);//Устанавливаем пин Echo как вход.
}
void loop() {
int distance, duration;
.
.
.
.
Serial.print(duration);//Выводим значение дистанции на дисплей.
Serial.println(" cm");
delay(1000);//Ждём 1000 милисекунд.
}

Строка «duration = duration/29/2; » вычисляет расстояние в «см », если нужно производить расчёты в дюймах, строка должна выглядеть так: «duration = duration/74/2; ».

Результат выполнения скетча будет отображаться в окне монитора последовательного порта.

Скетч №2 включает встроенный на плате Uno светодиод, если расстояние до объекта менее 50 см. Светодиод висит на 13 пине.

int TrigPin = 2;
int EchoPin = 3;
int LedPin = 13;

void setup() {
Serial.begin (9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(LedPin, OUTPUT);
}
void loop() {
int distance, duration;
digitalWrite(TrigPin, HIGH);//На пин Trig подаётся логическая единица.
delayMicroseconds(10);//Удерживается это состояние 10 микросекунд
digitalWrite(TrigPin, LOW);//убирается это состояние
duration = pulseIn(EchoPin, HIGH);//Значение с пина Echo, считывается и записывается в значение duration
duration = duration/29/2;//Подсчёт дистанции. Скорость звука 340 м/с или 29 микросекунд на сантиметр
Serial.print(duration);
Serial.println(" cm");
if (duration<50) // Если расстояние менее 50 сантиметром
{
digitalWrite(LedPin, HIGH); // Светодиод горит
}
else
{
digitalWrite(LedPin, LOW); // иначе не горит
}
delay(1000);
}

Если вместо светодиода, подключить лампу накаливания, как это описано в статье « », у нас получится простая система автоматического освещения. Разместив подобную конструкцию в каком то помещении, при попадании посетителя в зону действия дальномера, в помещении автоматически включится свет. Ток покоя дальномера составляет менее 2 мА.

В скетче №3 заменим светодиод на пьезоэлемент (пищалка, зуммер), которая будет издавать звук, если расстояние до объекта менее 50 см. Таким образом у нас получается простой звуковой радар или звуковая сигнализация.

Подобные «пищалки» применяются в компьютерах для оповещения BIOS, а так же в детских игрушках со звуком.

Схема подключения простая, чёрный провод зуммера подключаем к пину GND ардуино, красный к любому свободному цифровому пину, с функцией ШИМ (3,5,6,9,10,11,13). В примере это пин 5. Подключать пьезоизлучатель будем с помощью функции analogWrite() . С этой функцией нельзя изменять тональность звука, звук будет постоянно на частоте около 980 Гц.

int TrigPin = 2;
int EchoPin = 3;
int BeepPin = 5;

void setup() {
Serial.begin (9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(BeepPin, OUTPUT);
}
void loop() {
int distance, duration;
digitalWrite(TrigPin, HIGH);//На пин Trig подаётся логическая единица.
delayMicroseconds(10);//Удерживается это состояние 10 микросекунд
digitalWrite(TrigPin, LOW);//убирается это состояние
duration = pulseIn(EchoPin, HIGH);//Значение с пина Echo, считывается и записывается в значение duration
duration = duration/29/2;//Подсчёт дистанции. Скорость звука 340 м/с или 29 микросекунд на сантиметр
Serial.print(duration);
Serial.println(" cm");
if (duration<50) // Если расстояние менее 50 сантиметром
{
analogWrite(BeepPin, 50); // включаем пьезоизлучатель
}
else
{
analogWrite(BeepPin, 0); // выключаем пьезоизлучатель
}
delay(1000);
}

Если расстояние до объекта будет менее 50 см, зуммер издаст звук.

В скетче №4 мы так же будем использовать зуммер, но только с функцией tone() , которая будет позволять менять тональность звука, при разных ситуациях.

int TrigPin = 2;
int EchoPin = 3;
int BeepPin = 5;

void setup() {
Serial.begin (9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(BeepPin, OUTPUT);
}
void loop() {
int distance, duration;
digitalWrite(TrigPin, HIGH);//На пин Trig подаётся логическая единица.
delayMicroseconds(10);//Удерживается это состояние 10 микросекунд
digitalWrite(TrigPin, LOW);//убирается это состояние
duration = pulseIn(EchoPin, HIGH);//Значение с пина Echo, считывается и записывается в значение duration
duration = duration/29/2;//Подсчёт дистанции. Скорость звука 340 м/с или 29 микросекунд на сантиметр
Serial.print(duration);
Serial.println(" cm");
if (duration<50) // Если расстояние менее 50 сантиметром
{
}
else
{
noTone(BeepPin); // выключаем пьезоизлучатель
}
delay(1000);
}

В строке " tone(BeepPin, 500) ;" параметром "500 " задаётся частота звука - 500 Гц. Этот параметр можно выставлять от 31 Гц и до пределов, которыми ограничены параметры пьезоизлучателя и человеческого слуха. Данный скетч будет повторять эксперимент скетча №3, только с использованием функции tone(), которая будет устанавливать частоту звука.

В скетче №5 попробуем изменять тональность звука. При расстоянии более 50 см, будет издаваться звук, частотою 1000Гц. Если расстояние до объекта будет менее 50 см, звук изменит частоту на 500Гц.

int TrigPin = 2;
int EchoPin = 3;
int BeepPin = 5;

void setup() {
Serial.begin (9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(BeepPin, OUTPUT);
}
void loop() {
int distance, duration;
digitalWrite(TrigPin, HIGH);//На пин Trig подаётся логическая единица.
delayMicroseconds(10);//Удерживается это состояние 10 микросекунд
digitalWrite(TrigPin, LOW);//убирается это состояние
duration = pulseIn(EchoPin, HIGH);//Значение с пина Echo, считывается и записывается в значение duration
duration = duration/29/2;//Подсчёт дистанции. Скорость звука 340 м/с или 29 микросекунд на сантиметр
Serial.print(duration);
Serial.println(" cm");
if (duration<50) // Если расстояние менее 50 сантиметром
{
tone(BeepPin, 500); // включаем пьезоизлучатель c частотой 500 Гц
}
else
{
tone(BeepPin, 1000); // включаем пьезоизлучатель c частотой 1000 Гц
}

Используя функцию tone() нужно обратить внимание на то, что она мешает использовать ШИМ на пинах 3 и 11 Ардуино, (на платформу Mega это не распространяется). Допустим, в моих примерах функция tone() вызывается на 5 пине, но она может мешать работе ШИМ на выводах 3 и 11, это нужно учитывать при построении дальнейших своих устройств. Ещё один момент, с функцией tone() нельзя одновременно использовать более одного пьезоизлучателя. Для того что бы включить звук на втором пьезоизлучателе, первый обязательно нужно отключить функцией noTone() .

В процессе данных экспериментах выяснил, что более точное определение расстояния производится с расстоянием до 2 м. Так же, дальномер до исследуемого объекта нужно располагать под прямым углом, поскольку эффективный угол наблюдения порядка 15°.