Как работает ультразвуковой датчик?
Как уже упоминалось, сказано датчик в основном основан на измерение времени между излучением и приемом звукового импульса . Пар Последовательные, ультразвуковые волны находятся отправлено триггером, она подпрыгивает на объект и приемник или эхо обнаруживают волну . В зависимости от времени, которое потребовалось для прохождения волны, можно определить расстояние, которое существует до объекта.
Скорость звука при температуре 20 ° C, влажности 50% и атмосферном давлении на уровне моря составляет 343 м / с. преобразование этих единиц приводит к следующим результатам:
Это значит, что звук поставит 29,2 микросекунды на расстояние одного сантиметра , это позволяет получить расстояние от времени между передачей и приемом импульса.
Для этого необходимо использовать следующее уравнение:
Здесь время следует разделить на две части, потому что при измерении времени дает импульс приходить и уходить , расстояние, пройденное импульсом, в два раза превышает измеряемое расстояние.
Для всего этого необходимо применить следующую электрическую схему:
С другой стороны, сборка представляет собой макет, который будет выглядеть так:
Суть проекта
Мне хотелось сделать дальномер. Во-первых, из-за того, что у меня был ультразвуковой датчик и надо было научиться с ним взаимодействовать. Во-вторых, я хотел выводить всю информацию на OLED-дисплей. В статьях, которые я находил, либо рассказывалось про работу с дисплеем и датчиком по отдельности, либо они являлись частью совершенно другого проекта. Я собрал все необходимое тут и надеюсь, что это сможет как-то помочь другим.
Что понадобится?
Любая плата Arduino (у меня Uno);
Ультразвуковой дальномер HC-SR04;
OLED-дисплей на 0,96 дюймов;
Соединительные провода;
Макетная плата.
Пошаговая инструкция по подключению ультразвукового датчика к плате Arduino с нуля
Если вы хотите начать использовать ультразвуковой датчик на вашей плате Arduino здесь мы объясним, как выполнить эту процедуру быстро и легко. Учтите, что для этого вам понадобится только один Плата Arduino, это может быть любая модель карты, потому что процедура для всех одинакова. В этом случае мы будем работать с Плата Arduino UNO R3 .
Для этого просто выполните каждый из шагов, которые мы укажем ниже:
Первым делом нужно вставить ультразвуковой датчик в макет а с кабелями необходимо выполнить следующие подключения: «Срабатывание датчика на контакте 2 Arduino» et «Эхо датчика на выводе 3 Arduino».
При желании вы также можете подключить модуль напрямую к Arduino, не используя модель.
- Имейте в виду, что все эти подключения всегда должны выполняться с выключенным Arduino , поэтому рекомендуется отключите от ПК или любого другого внешнего источника.
- Позже тебе придется откройте среду программирования Arduino , для них вам нужно перейти к опциям “Орудие труда” затем “Меню”, Оказавшись там, вам нужно выбрать модель используемой платы Arduino. В этом случае вариант «Ардуино Уно» будет выбран .
Когда IDE уже настроена, вы должны начать запланировать наш эскиз , чтобы вы могли лучше все это понять, поехали объясните весь код пошагово.
Первое, что нужно сделать, это настроить контакты и последовательную связь на 9800 бод:
Теперь из пустого цикла вам нужно начать с отправки импульса 10 мкс на триггер датчика:
Впоследствии ответный импульс от датчика будет получен через вывод Echo для измерения импульса, который мы используем функцию Pulseln:
В случае переменная t, вы будет время, необходимое для прибывает ультразвуковое эхо , теперь следующий шаг – вычислить расстояние между ультразвуковым датчиком и объектом.
Для этого следует использовать следующую формулу:
переменная “Скорость” – скорость звука 340 м / с, но в этом случае единицы измерения должны быть см / мкс, так как он будет работать в сантиметрах и микросекундах. Le “время” время, необходимое ультразвуку, чтобы достичь объекта и вернуться к датчику. И, наконец, переменная “Пройденный путь” вдвое больше расстояния до объекта, заменив все эти данные в формуле, мы получим следующее:
Enfin, значение расстояния должны быть отправлены серийно и закончим, поставив паузу 100ms , что выше, чем 60ms рекомендуемые техническими данными датчика.
Здесь вы можете увидеть полный код программы:
Лучшие проекты Arduino с ультразвуковыми датчиками, которые вы можете сделать своими руками
Без сомнения, ультразвуковые датчики позволит создавать поистине потрясающие проекты. Кроме того, этот компонент позволяет создавать самые разные проекты, которые очень полезно на благо людей по-разному. Вот как мы объясним здесь, что такое лучшие проекты Arduino с ультразвуковыми датчиками что вы можете создать сами из дома.
Для этого следуйте всему, что мы объясним вам ниже:
Трость для слепых
Этот проект был разработан для всех, кто хочет помочь другим людям с нарушение зрения . Это очень просто сделать, поэтому для этого не нужно быть экспертом в этой области. Благодаря этому ультразвуковой датчик, можно было спроектировать трость для слепых для идентификации объектов, которые находятся поблизости и могут преградить путь слабовидящий человек . Идеально, чтобы слепые могли ходить по улице без особой опасности.
Умный мусорный бак
Он стал одним из самые практичные и используемые проекты , он может быть создан либо для развлечения, либо для получения большего опыта, поскольку не требует больших финансовых вложений, что делает все проще. Следовательно, эта умная корзина предназначена для активации датчика, чтобы что он открывается сам по себе, когда ты рядом, так что вам не придется прилагать никаких усилий, чтобы поднять крышку.
De плюс, это избавит вас от необходимости прикасаться к мусорному ведру, что для многих неприятно. Этот тип проекта работает с маленькие и большие ящики , только учтите, что чем больше емкость, тем сложнее будет проект электроники.
Парковка автомобиля
Как мы упоминали ранее в статье, эти ультразвуковые датчики в основном используются в автомобилях, потому что они идеально подходят для выполнения различных функций. В данном случае это автомобильный проект что позволяет ему парк, что указывает на то, что автомобиль будет управляться картой Ардуино.
Это проект, который на первый взгляд может показаться очень сложным, но он действительно нуждается в много логики.
Скетч ультразвукового дальномера на arduino с помощью HC-SR04 и TM1637
// подключение индикатора TM1637 #include <TM1637.h> #define CLK 3 #define DIO 2 TM1637 tm1637(CLK,DIO); // пины для HC-SR04 int echoPin = 12; int trigPin = 11; void setup() { Serial.begin (9600); // для вывода в мониторе порта pinMode(trigPin, OUTPUT); // пин отправки сигнала pinMode(echoPin, INPUT); // пин приема сигнала // инициализация индикатора tm1637.init(); tm1637.set(BRIGHT_TYPICAL); } void loop() { int duration, mm; // переменные для хранения расстояния // останавливаем отправку сигнала digitalWrite(trigPin, LOW); delayMicroseconds(2); // отправляем ультрозвуковой сигнал digitalWrite(trigPin, HIGH); // ждем 10 микроскунд delayMicroseconds(10); // останавливаем отправку сигнала digitalWrite(trigPin, LOW); // замеряет длину положительного импульса на пине echoPin duration = pulseIn(echoPin, HIGH); // высчитываем расстояние до препядствия mm = duration / 5.8; // вывод данных в монитор порта Serial.print(mm); Serial.println(" mm"); // вывод данных на индикатор tm1637.display( mm ); delay(100); }
Работа с OLED-дисплеем
OLED-дисплей идеально подходит для DIY-устройств. Во-первых, мы имеем достаточно высокое разрешение экрана — 128×64 пикселя. Во-вторых, дисплей работает без модуля подсветки, что обеспечивает низкое потребление энергии. В-третьих, для подключения используется всего четыре разъема — два для питания и два для обмена информацией. Но несмотря на это, у OLED-дисплеев есть и минусы. Со временем пиксели могут тускнеть и перегорать.
Вот таким образом можно подключить дисплей:
Схема подключения
Есть несколько библиотек для работы с OLED-дисплеями, мне больше нравится OLED_I2C. Мне она кажется очень простой и максимально понятной. Следующим образом выведем классический «Hello, world!» на дисплей:
Если функции без параметров понятны сразу и не вызывают вопросов, то с функциями вывода на дисплей могут быть вопросы. Давайте сразу с ними разберемся, их существует всего три вида:
print(st, x, y) — печать строки на дисплей.Параметры: st: строка для печати; x: координата верхнего левого угла первого символа по горизонтали; y: координата верхнего левого угла первого символа по вертикали.В качестве координат можно использовать как сами координаты, так и литералы LEFT, CENTER, RIGHT.
printNumI(num, x, y, ]) — печать целого числа на дисплей.Параметры: num: Число для вывода на экран (от -2147483648 до 2147483647); x: координата верхнего левого угла первой цифры/знака по горизонтали; y: координата верхнего левого угла первой цифры/знака по вертикали; length: <необязательный параметр> минимальное количество цифр для отображения на экране; filler: <необязательный параметр> Символ для заполнения, чтобы получить минимальную длину. По умолчанию “ “.В качестве координат можно использовать как сами координаты, так и литералы LEFT, CENTER, RIGHT.
printNumF(num, dec, x, y, ]]) — печать числа с плавающей точкой на дисплей.Параметры:num: Число для вывода на экран (от -2147483648 до 2147483647);dec: количество цифр после запятой (в дробной части) (допустимые значения 1-5);x: координата верхнего левого угла первой цифры/знака по горизонтали;y: координата верхнего левого угла первой цифры/знака по вертикали;divider: <необязательный параметр> Одиночный символ для использования в качестве десятичной точки. По умолчанию ‘.’;length: <необязательный параметр> минимальное количество цифр для отображения на экране;filler: <необязательный параметр> Символ для заполнения, чтобы получить минимальную длину. По умолчанию “ “.В качестве координат можно использовать как сами координаты, так и литералы LEFT, CENTER, RIGHT.
Что такое ультразвуковой датчик и для чего он используется при работе с Arduino?
Ультразвуковые датчики с Arduino позволит вам измерить расстояние ультразвук, вот почему теперь стало очень распространено находить их в новые автомобили , поскольку во многих из них они встроены в GPS, что позволяет пользователям знать, какие препятствия перед вами, на случай, если вы не можете видеть вокруг.
Таким же образом мы можем сказать, что датчик на ultrasons это устройство, позволяющее измерять расстояния. Операция в основном основана на отправке высокочастотный импульс , не слышно для людей. Этот импульс отскакивает близлежащие объекты и в конечном итоге отражается от датчика , у которого есть микрофон, подходящий для этой частоты.
Имея возможность измерение времени между импульсами и знание скорости звука , расстояние объекта до поверхности которого ультразвуковой импульс был затронут можно оценить . Таким образом, датчик будет иметь возможность указывать близость удара о любой объект, позволяя пользователю избежать его.
Следует иметь в виду, что эти датчики для большинства бон Марше и, прежде всего, они очень просты в использовании. Что касается диапазона измерения этих датчиков, то он составляет от От 3 см до 3 м на практике , но считается, что фактический диапазон измерения гораздо более ограничен и составляет от От 20 см до 2 метров.
Эти компоненты являются датчиками низкой точности, где ориентация измеряемой поверхности может вызвать отражение волны, искажая указанное измерение. Из-за этого и других факторов они не считаются очень подходящими в среде с большим количеством объектов, так как они могут вызывать звук, отражающийся от объектов. поверхности для создания эхосигналов и ложных измерений . Следовательно, мы можем сказать что они не очень подходят для использования на открытом воздухе.
Хотя они не предлагают точная точность расстояния до объекта , ультразвуковые датчики в настоящее время широко используются для многих типов проекты робототехники , где это уже обычное дело установить один или несколько датчиков . Если при измерении расстояния требуется более высокое давление, предпочтительно, чтобы они сопровождались дальномеры с оптическими и инфракрасными датчиками .
Ультразвуковой дальномер Arduino HC-SR04
Ультразвуковой датчик (ещё его часто называют сонаром или ультразвуковым дальномером) определяет расстояние до объекта так же, как это делают летучие мыши или дельфины. Датчик HC-SR04 генерирует узконаправленный сигнал на частоте 40 кГц и ловит отраженный сигнал (эхо). По времени распространения звука до объекта и обратно можно достаточно точно определить расстояние до него.
По этому же принципу работает множество приборов для исследования пространства — эхолот, сонар, радиолокатор и даже полицейский радар для определения скорости автомобиля. Все эти приборы излучают узконаправленный ультразвуковой сигнал и получают обратно отраженный сигнал. В отличии от инфракрасных дальномеров (IR), на показания ультразвукового датчика (сонара) не влияет цвет объекта.
Принцип работы ультразвукового дальномера HC-SR04
Но при настройке ультразвукового датчика на Ардуино могут возникнуть трудности с определением расстояния до звукопоглощающих объектов, поскольку они способны полностью погасить излучаемый сигнал. Для идеальной точности измерения расстояния, поверхность изучаемого объекта должна быть ровной и гладкой. Принцип работы ультразвукового датчика hc-sr04 показан на рисунке выше.
Выбор дальномера для подключения к arduino
Для определения расстояния есть несколько способов – инфракрасный датчик приближения, лазерный дальномер и ультразвуковой дальномер. Возможно, есть еще какие-то варианты, но я их сходу не нашел. Поэтому выбирал из трех вариантов. Датчик приближения был сразу забракован, поскольку он не умеет измерять, а только настраивается на определение конкретных расстояний. Лазерный датчик умеет делать измерения и довольно точно, но стоит он не мало, из-за этого выбор был остановлен на ультразвуковом датчике, который стоит в 8-10 раз дешевле лазерного, а точность измерения отличается не на много.
Очевидно, что выбор пал на более дешевый датчик HC-SR04, который стоит 50 руб и способен измерять расстояние от 2 до 400 см с точностью до 3 мм, а эффективный угол наблюдения 15 градусов.
Узнайте, как быстро и легко запрограммировать ультразвуковой датчик, подключенный к плате Arduino.
Зная, как подключить ультразвуковой датчик к вашей плате Arduino, вот как это запрограммировать.
Для этого просто следуйте инструкциям, которые мы покажем вам ниже:
- Первое, что нужно сделать, это подключить Arduino UNO , затем загрузите программу.
- После этого, Ардуино и датчик уже должно работать. отображать данные, вам нужно получить доступ к инструменту и открыть там монитор последовательного порта.
Внутри последовательного монитора вы найдете все значения расстояния. полученный HC-SR04 или ультразвуковой датчик . Теперь вы должны поместить объект впереди и изменить расстояние от датчика и проверьте расстояние который будет отображаться на мониторе, чтобы узнать, правильно он или нет.
Принцип действия
На этот раз мы разберем работу одного из самых популярных датчиков — ультразвукового (УЗ) дальномера. Существует много разных модификаций подобных устройств, но все они работают по принципу измерения времени прохождения отраженного звука. То есть датчик отправляет звуковой сигнал в заданном направлении, затем ловит отраженное эхо и вычисляет время полета звука от датчика до препятствия и обратно.
Из школьного курса физики мы знаем, что скорость звука в некоторой среде величина постоянная, но зависящая от плотности среды. Зная скорость звука в воздухе и время полета звука до цели, мы можем рассчитать пройденное звуком расстояние по формуле:
где v — скорость звука в м/с, а t — время в секундах. Скорость звука в воздухе, кстати, равна 340.29 м/с.
Чтобы справиться со своей задачей, дальномер имеет две важные конструктивные особенности. Во-первых, чтобы звук хорошо отражался от препятствий, датчик испускает ультразвук с частотой 40 кГц. Для этого в датчике имеется пьезокерамический излучатель, который способен генерировать звук такой высокой частоты. Во-вторых, излучатель устроен таким образом, что звук распространяется не во все стороны (как это бывает у обычных динамиков), а в узком направлении. На рисунке представлена диаграмма направленности типичного УЗ дальномера.
Как видно на диаграмме, угол обзора самого простого УЗ дальномера составляет примерно 50-60 градусов. Для типичного варианта использования, когда датчик детектирует препятствия перед собой, такой угол обзора вполне пригоден. Ультразвук сможет обнаружить даже ножку стула, тогда как лазерный дальномер, к примеру, может её не заметить.
Если же мы решим сканировать окружающее пространство, вращая дальномер по кругу как радар, УЗ дальномер даст нам очень неточную и шумную картину. Для таких целей лучше использовать как раз лазерный дальномер.
Также следует отметить два серьезных недостатка УЗ дальномера. Первый заключается в том, что поверхности имеющие пористую структуру хорошо поглощают ультразвук, и датчик не может измерить расстояние до них. Например, если мы задумаем измерить расстояние от мультикоптера до поверхности поля с высокой травой, то скорее всего получим очень нечеткие данные. Такие же проблемы нас ждут при измерении дистанции до стены покрытой поролоном.
Второй недостаток связан со скоростью звуковой волны. Эта скорость недостаточно высока, чтобы сделать процесс измерения более частым. Допустим, перед роботом есть препятствие на удалении 4 метра. Чтобы звук слетал туда и обратно, потребуется целых 24 мс. Следует 7 раз отмерить, прежде чем ставить УЗ дальномер на летающих роботов.
Работа с ультразвуковым дальномером
Ультразвуковой датчик расстояния работает по принципу эхолокации — посылает пучок ультразвука и получает его отражение с некоторой задержкой, с помощью которой и можно высчитать расстояние до объекта. Работает датчик от напряжения в 5V на расстоянии от 2 до 400 сантиметров.
Для получения данных с датчика необходимо:
Подать на выход Trig импульс длительностью 10 микросекунд;
Трансмиттер отправит 8 импульсов с частотой 40 кГц;
Когда импульсы отразятся от препятствия и будут приняты ресивером, то на выходе Echo образуется входной сигнал;
С помощью формулы данные преобразуются в расстояние. Чтоб получить расстояние в сантиметрах, нам необходимо разделить ширину импульса на 58, для получения расстояния в дюймах — на 148.
Подключить датчик к плате можно следующим образом:
Схема подключения
Ультразвуковой датчик и светодиод Ардуино
Представленный скетч работает без библиотеки, поэтому в коде многовато строчек. Мы воспользуемся библиотекой для ультразвуковых дальномеров, что позволит нам значительно упростить скетч. Для начала установите библиотеку Ultrasonic (инструкция по установке библиотек в Arduino IDE) и загрузите следующую программу в Ардуино. Ссылка на скачивание архива со скетчами и библиотекой Ultrasonic.h — здесь.
Подключите дополнительно к плате RGB светодиод или несколько светодиодов, для создания мини проекта. Цвета светодиода будут переключаться, в зависимости от расстояния от датчика расстояния до предмета. Для управления светодиодами от УЗ датчика в программе используется условные операторы if. После сборки схемы, как на картинке выше, загрузите в микроконтроллер следующую программу.
Скетч с использованием библиотеки Ultrasonic.h
#include <Ultrasonic.h> // подключаем библиотеку Ultrasonic Ultrasonic ultrasonic(8,9); // назначаем выходы для Trig и Echo void setup() { Serial.begin(9600); // подключаем монитор порта pinMode (11, OUTPUT); // подключаем к пину светодиод pinMode (12, OUTPUT); // подключаем к пину светодиод } void loop () { int dist = ultrasonic.Ranging(CM); Serial.print(dist); // выводим расстояние в сантиметрах Serial.println(" cm"); // переключаем цвета светодиода if (dist < 50) {digitalWrite(12,0); digitalWrite(11,1);} if (dist < 50) {digitalWrite(12,1); digitalWrite(11,0);} delay(100); }
Пояснения к коду:
- команда назначает имя для нашего датчика «ultrasonic» и назначаем выходы на Ардуино для Trig и Echo.
- расстояние при котором будут переключаться светодиоды можно изменить.
Предисловие
Так получилось, что в университете я изучаю C/C++. Для души пробую делать небольшие проекты на Python. Я много слышал про платформу Arduino, смотрел видео на YouTube, частенько посещал Arduino Project Hub и вот мне стало интересно самому поэкспериментировать, углубясь в разработку под микроконтроллеры. Купив стартовый набор с самой платой и горстью электронных компонентов и попробовав собрать проекты из обучающей брошюры, понял, что надо двигаться дальше. Продумав саму идею следующей самоделки, отправился на просторы Google и обнаружил, что не могу найти всего, что мне нужно на одном ресурсе. Безусловно, мне несложно было посетить несколько сайтитов и блогов с информацией, но я бы сильно сэкономил время, если бы нашел все в одном месте. Так и появилась эта статья-туториал.
Характеристики ультразвукового датчика HC-SR04
Большим превосходством такого ультразвукового датчика над инфракрасными является то,
что на ультразвуковые датчики не влияют источники света или цвет препятствие.
Могут возникнуть проблемы с измерением расстояния до тонких или пушистых объектов.
Хотелось бы сказать, что скорость звука в воздухе зависит от температуры.
Следовательно, погрешность измерения будет меняться от повышения или понижения температуры.
- Рабочее напряжение 4,8 В до 5,5 В (± 0.2В макс).
- Диапазон измерения: от 2 см до 400 см.
- Диапазон рабочих температур: 0 ° С до 60 ° С (± 10%).
- Ток потребления в режимах ожидания до 2 мА.
- Ток потребления в режимах работы 15 мА.
- Ультразвуковой диапазон работы на частоте 40 кГц.
- Угол обзора 15 градусов.
- Измеряемое расстояние от 0,03 до 0,6 мс разрешающей способностью 3 мм.
- От 0,6 до 5 погрешность увеличивается.
Датчик имеет 4 вывода:
- VCC: “+” питание
- TRIG (T): вывод входного сигнала
- ECHO (R): вывод выходного сигнала
- GND: “-” питание
Программирование ультразвукового датчика HC-SR04
#define
Trig 8 /* Обозначаем пин подачи импульса*/
#define
Echo 9 /* Обозначаем пин приема импульса*/
void
setup() {
pinMode
(Trig, OUTPUT); /*инициируем как выход */
pinMode
(Echo, INPUT); /*инициируем как вход */
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); /* Выводим значение на порт программы */
delay
(200);
}
После того как вы вставили этот код, загрузите его в программу и включите “монитор порта”.
Там вы увидите расстояние от датчика до препятствия, поэкспериментируйте с изменением расстояния объекта.
Вот что должно у вас получиться!
Надеюсь у вас все получилось! Если у вас остались вопросы,
можете написать нам в
На фотографии не видно, но выходы Trig
и Echo
подключены ко 2 и 3 выходу Arduino соответственно. Ну а VCC
и GND
– 5v и земля.
После успешного подключения можно быстро набросать код, который будет высчитывать расстояние в сантиметрах. Код прокомментирован, так что вопросов быть не должно.
// задаем пины
int echoPin = 2;
int trigPin = 3;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// отключаем подачу импульса
digitalWrite(trigPin, LOW);
}
void loop() {
int duration, cm;
// подаем импульс
digitalWrite(trigPin, HIGH);
// ждем 10 микросекунд
delayMicroseconds(10);
// отключаем подачу импульса
digitalWrite(trigPin, LOW);
// считываем длину сигнала
duration = pulseIn(echoPin, HIGH);
// пересчитываем в сантиметры
Serial.print(duration / 58);
Serial.println(” cm”);
// ждем пол секунды до следующего измерения
delay(500);
}
Подключается по данной схеме
Если запустить его и периодически подносить к нему руку, то в консоли можно увидеть следующие измерения:
Если вам вдруг понадобятся миллиметры или дюймы, то это можно легко исправить, переписав в коде пару строк примерно на следующие:
Но у нас получается слишком много кода, а если нам потребуется подключить 2 таких дальномера? А если 10? В таком случае разработка превратится в рутину, а в случае какой-то ошибки придется менять все сразу.
Именно здесь нам на помощь приходит библиотека Ultrasonic .
Используя ее, весь прошлый код можно написать следующим образом: