Ультразвуковой датчик расстояния hc-sr04. датчики. ардуино
Содержание:
- Используемые компоненты
- Схема подключения HC-SR04 к Arduino
- Код датчика
- Выбор дальномера для подключения к arduino
- Как подключить ИК приемник к Ардуино
- Шаг 3: теория
- Обзор аппаратного обеспечения
- Датчик расстояния в проектах Arduino
- Пример работы
- Как работает на самом деле ультразвуковой датчик HC-SR04
- Подключение датчика HC SR04
- Принцип работы ультразвукового датчика HC-SR04
- Управление устройствами с помощью хлопков
Используемые компоненты
Список деталей:
1 х Arduino NANO
1 х Модуль с датчиком VL53L0X
1 х Повышающий преобразователь
1 х Шаговый мотор
1 х Драйвер шагового мотора на микросхеме A4988
1 х Скользящие контакты (slip ring) на 6 проводов. Диаметр 12.5мм, длина 15мм или меньше
1 х 6710ZZ подшипник
1 х Датчик Холла 49E
1 х Макетная плата
1 х 100 мкФ электролитический конденсатор
1 х 5 мм х 1 мм неодимовый магнит
Так же понадобиться резистор на 10К, немного M3 винтов, гаек, вставных гаек (резьбовые вставки, insert nuts), «пасик» и напечатанный на 3D-принтере корпус, припой и паяльник.
3D-файлы для печати можно скачать по следующей
. Для печати использовался PLA пластик. Вместо стального подшипника можно использовать напечатанный (стальные шарики продаются пакетами, к примеру, как запасные для линейных направляющих). Модель для печати можно начертить самостоятельно или попробовать поискать на сайте
,
и т.д., к примеру введя в поиск «parametric bearing». Вместо подшипника можно распечатать просто пластиковое кольцо, например, из PLA, PETG, нейлона или пэт. Если используемый пластик будет недостаточно скользить или переживаете, что со временем из-за трения протрёт, сверху и снизу можно наклеить липкую ленту или кольцо из какого-нибудь материала (плёнки для ламинации, плёнки для лазерной печати, упаковки для фломастеров, тонкостенной коробочки и т.д.).
Повышающий стабилизатор нужен для шагового мотора. Такие моторы обычно потребляют максимум сотни миллиампер. Стабилизатор желательно взять с запасом, допустим на 1А или больше. Выходное напряжение питания у стабилизатора, 12В или более. Выбирая стабилизатор, так же учитывайте, что они не должен быть слишком большой, иначе его нельзя будет поместить внутри корпуса.
Схема подключения HC-SR04 к Arduino
Подключение ультразвукового датчика расстояния HC-SR04 к Arduino достаточно просто. Схема подключения показана на рисунке.Контакт земли подключаем к выводу GND на плате Arduino, вывод питания соединяем с 5V. Trig и Echo подсоединяем к цифровым пинам платы.
Arduino | HC-SR04 |
---|---|
VCC | Vcc |
13 | Trig |
12 | Echo |
GND | Gnd |
Пример скетча
Ну а теперь после подключения ультразвуковой дальномера HC-SR04 к Arduino разберемся с программной частью. Для начала мы используем простой скетч, который поможет нам определить расстояние до объекта в сантиметрах без использования библиотек.
#define ECHO_PIN 12
#define TRIG_PIN 13
void setup() {
/*
задаем скорость общения с компьютером
*/
Serial.begin (9600);
/*
инициируем как выход TRIG пин
*/
pinMode(TRIG_PIN, OUTPUT);
/*
инициируем как вход ECHO пин
*/
pinMode(ECHO_PIN, INPUT);
}
void loop() {
int duration, cm;
/*
для большей точности установим значение LOW на пине Trig
*/
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
/*
установим высокий уровень на пине Trig
*/
digitalWrite(TRIG_PIN, HIGH);
/*
Подождем 10 μs
*/
delayMicroseconds(10);
/*
установим низкий уровень на пине Trig
*/
digitalWrite(TRIG_PIN, LOW);
/*
Узнаем длительность высокого сигнала на пине Echo
*/
duration = pulseIn(ECHO_PIN, HIGH, 30000);
/*
Рассчитаем расстояние в сантиметрах
*/
cm = duration / 58;
/*
Отправляем полученные данные на компьютер
*/
Serial.print(cm);
Serial.println(» cm»);
/*
Ждём четверть секунды и повторяем снова
*/
delay(250);
}
1 |
#define ECHO_PIN 12 voidsetup(){ /* задаем скорость общения с компьютером Serial.begin(9600); /* инициируем как выход TRIG пин pinMode(TRIG_PIN,OUTPUT); /* инициируем как вход ECHO пин pinMode(ECHO_PIN,INPUT); } voidloop(){ intduration,cm; /* для большей точности установим значение LOW на пине Trig digitalWrite(TRIG_PIN,LOW); delayMicroseconds(2); /* установим высокий уровень на пине Trig digitalWrite(TRIG_PIN,HIGH); /* Подождем 10 μs delayMicroseconds(10); /* установим низкий уровень на пине Trig digitalWrite(TRIG_PIN,LOW); /* Узнаем длительность высокого сигнала на пине Echo duration=pulseIn(ECHO_PIN,HIGH,30000); /* Рассчитаем расстояние в сантиметрах cm=duration58; /* Отправляем полученные данные на компьютер Serial.print(cm); Serial.println(» cm»); /* Ждём четверть секунды и повторяем снова delay(250); } |
Код датчика
Скопировать или скачать код датчика движения Ардуино вы можете ниже:
#include <Wire.h> #include <LiquidCrystal_I2C.h> // Set the LCD address to 0x27 for a 16 chars and 2 line display LiquidCrystal_I2C lcd(0x27, 16, 2); int Sensor = 12; //Input Pin int LED = 3; // Led pin for Indication int Buzzer =2; int flg = 0; //Change detection flag void setup() { Serial.begin(9600); // initialize the LCD lcd.begin(); lcd.clear(); lcd.print("...MAKER.PRO..."); delay(3000); // Turn on the blacklight and print a message. lcd.backlight(); pinMode (Sensor, INPUT); //Define Pin as input pinMode (Buzzer, OUTPUT); //Led as OUTPUT pinMode (LED, OUTPUT); //Led as OUTPUT Serial.println("Waiting for motion"); } void loop() { int val = digitalRead(Sensor); //Read Pin as input if((val > 0) && (flg==0)) { digitalWrite(LED, HIGH); digitalWrite(Buzzer, HIGH); lcd.clear(); Serial.println("Motion Detected"); lcd.print("Motion Detected"); flg = 1; } if(val == 0) { digitalWrite(LED, LOW); digitalWrite(Buzzer, LOW); lcd.clear(); Serial.println("NO Motion"); lcd.print("NO Motion "); flg = 0; } delay(100); }
Получилось примерно так:
На этом всё. Хороших вам работающих проектов.
Выбор дальномера для подключения к arduino
Для определения расстояния есть несколько способов – инфракрасный датчик приближения, лазерный дальномер и ультразвуковой дальномер. Возможно, есть еще какие-то варианты, но я их сходу не нашел. Поэтому выбирал из трех вариантов. Датчик приближения был сразу забракован, поскольку он не умеет измерять, а только настраивается на определение конкретных расстояний. Лазерный датчик умеет делать измерения и довольно точно, но стоит он не мало, из-за этого выбор был остановлен на ультразвуковом датчике, который стоит в 8-10 раз дешевле лазерного, а точность измерения отличается не на много.
Очевидно, что выбор пал на более дешевый датчик HC-SR04, который стоит 50 руб и способен измерять расстояние от 2 до 400 см с точностью до 3 мм, а эффективный угол наблюдения 15 градусов.
Как подключить ИК приемник к Ардуино
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- IR приемник;
- пульт ДУ;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа» и «папа-мама».
Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A0. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.
Схема подключения ИК приемника к аналоговому порту Ардуино
Скетч для ИК приемника Arduino со светодиодом
#include <IRremote.h> // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала Serial.begin(9600); // подключаем монитор порта pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output») pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput») } void loop() { if (irrecv.decode(&results)) // если данные пришли выполняем команды { Serial.println(results.value); // отправляем полученные данные на порт // включаем и выключаем светодиод, в зависимости от полученного сигнала if (results.value == 16718055) { digitalWrite(12, HIGH); } if (results.value == 16724175) { digitalWrite(12, LOW); } irrecv.resume(); // принимаем следующий сигнал на ИК приемнике } }
- библиотека содержит набор команд и позволяет упростить скетч;
- оператор присваивает получаемым сигналам от пульта дистанционного управления имя переменной .
ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях .
Скетч для ИК приемника Ардуино и серовомотора
#include <IRremote.h> // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; #include <Servo.h> // подключаем библиотеку для серво Servo myservo; // создаем объект для управления серво void setup() { irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала Serial.begin(9600); // подключаем монитор порта myservo.attach(9); // указываем пин для подключения серво } void loop() { if (irrecv.decode(&results)) // если данные пришли выполняем команды { Serial.println(results.value); // отправляем полученные данные на порт // поворачиваем серво, в зависимости от ИК сигнала if (results.value == 16718055) { myservo.write(0); } if (results.value == 16724175) { myservo.write(90); } irrecv.resume(); // принимаем следующий сигнал на ИК приемнике } }
Шаг 3: теория
Рисунок 6 – Область обнаружения объектаРисунок 7 – Формулы
Диаграммы направленности лучей
На левом рисунке 6 выше показаны наложенные диаграммы направленности для преобразователя A и преобразователя B.
Датчик A получит эхо от любого объекта в «красной зоне».
Датчик B будет получать эхо, только если объект находится в «лиловой зоне». Вне этой зоны определить координаты объекта невозможно (целевая зона может быть полностью «освещена» звуком, если расположить датчики ниже базовой линии).
Большие «лиловые» зоны обнаружения возможны, если датчики расставлены широко.
Расчеты
Что касается правого рисунка 7 выше.
Площадь любого треугольника может быть вычислена по формуле:
\[площадь = основание \cdot высота/2 \qquad (1)\]
Преобразование уравнения (1) дает нам высоту (координату Y):
\[высота = площадь \cdot 2 / основание \qquad (2)\]
Пока всё хорошо… Но как мы вычислим площадь?
Ответ заключается в том, чтобы разместить два ультразвуковых преобразователя на известном расстоянии друг от друга (базовая линия) и измерить расстояние, на котором каждый датчик находится от объекта, используя ультразвук.
На рисунке 7 показано, как это сделать.
Преобразователь A посылает импульс, который отражается от объекта во всех направлениях. Этот импульс слышат оба преобразователя, и A, и B. Преобразователь B не передает импульсов, он только слушает.
Обратный путь к преобразователю A показан красным цветом. Если разделить его на два и учесть скорость звука, мы можем рассчитать расстояние d1 с помощью формулы:
\[d1 _{(см)} = время_{(микросекунды)}/59 \qquad (3)\]
Значение 59 для константы получается следующим образом:
- Скорость звука составляет примерно 340 м/с, что составляет 0,034 см/мкс (сантиметр/микросекунда).
- Обратное значение 0,034 см/мкс составляет 29,412 мкс/см, которое при умножении на 2 (чтобы получить длину обратного пути) дает в результате 58,824 или 59 при округлении.
- Это значение можно подстроить вверх/вниз, чтобы учесть температуру, влажность и давление воздуха.
Путь к преобразователю B показан синим цветом. Если из этого пути вычесть расстояние d1, мы получим расстояние d2. Формула для d2 будет следующей:
\[d2 _{(см)} = время_{(микросекунды)}/29,5 — d1 \qquad (4)\]
Величина 29,5 для константы получается следующим образом:
Тут нет обратного пути, поэтому мы используем 29,5, что является половиной значения, используемого в формуле (3) выше.
Теперь у нас есть длины всех сторон треугольника ABC… погуглите «Герон».
Формула Герона
Формула Герона использует нечто, называемое «полу-периметром», в который вы добавляете каждую из трех сторон треугольника и делите результат на два:
\[s = (a + b + c)/2 \qquad (5)\]
Теперь полощадь может быть рассчитана по следующей формуле:
\
Как только мы узнаем эту площадь, мы сможем вычислить высоту (координату Y) из формулы (2) выше.
Теорема Пифагора
Теперь координату X можно вычислить, отложив из вершины треугольника перпендикулярную линию до базовой линии, чтобы получить прямоугольный треугольник. Теперь координату X можно вычислить с помощью теоремы Пифагора:
\
Обзор аппаратного обеспечения
Звуковой датчик представляет собой небольшую плату, которая объединяет микрофон (50 Гц – 10 кГц) и схему обработки для преобразования звуковых волн в электрические сигналы.
Этот электрический сигнал подается на встроенный высокоточный компаратор LM393 для его оцифровки и выводится на выход (вывод OUT).
Рисунок 2 – Регулировка чувствительности датчика звука и компаратора
Для регулировки чувствительности выходного сигнала модуль содержит встроенный потенциометр.
С помощью этого потенциометра вы можете установить пороговое значение. Таким образом, когда амплитуда звука превысит это пороговое значение, модуль выдаст низкий логический уровень, в остальных случаях будет выдаваться высокий логический уровень.
Эта настройка очень полезна, когда вы хотите запустить какое-то действие при достижении определенного порога. Например, когда амплитуда звука пересекает пороговое значение (при обнаружении стука), вы можете активировать реле для управления освещением. Вот вам идея!
Совет: поворачивайте движок потенциометра против часовой стрелки, чтобы увеличить чувствительность, и по часовой стрелке, чтобы ее уменьшить.
Рисунок 3 – Светодиодные индикаторы питания и состояния
Помимо этого, модуль имеет два светодиода. Индикатор питания загорится, когда на модуль подается напряжение питания. Светодиод состояния загорится, когда на цифровом выходе будет низкий логический уровень.
Датчик расстояния в проектах Arduino
Способность ультразвукового датчика определять расстояние до объекта основано на принципе сонара – посылая пучок ультразвука, и получая его отражение с задержкой, устройство определяет наличие объектов и расстояние до них. Ультразвуковые сигналы, генерируемые приемником, отражаясь от препятствия, возвращаются к нему через определенный промежуток времени. Именно этот временной интервал становится характеристикой помогающей определить расстояние до объекта.
Внимание! Так как в основу принципа действия положен ультразвук, то такой датчик не подходит для определения расстояния до звукопоглощающих объектов. Оптимальными для измерения являются предметы с ровной гладкой поверхностью
Описание датчика HC SR04
Ультразвуковой дальномер HC SR04 имеет такие технические параметры:
- Питающее напряжение 5В;
- Рабочий параметр силы т ока – 15 мА;
- Сила тока в пассивном состоянии < 2 мА;
- Обзорный угол – 15°;
- Сенсорное разрешение – 0,3 см;
- Измерительный угол – 30°;
- Ширина импульса – 10-6 с.
Датчик оснащен четырьмя выводами (стандарт 2, 54 мм):
- Контакт питания положительного типа – +5В;
- Trig (Т) – выход сигнала входа;
- Echo (R) – вывод сигнала выхода;
- GND – вывод «Земля».
Схема взаимодействия с Arduino
Для получения данных, необходимо выполнить такую последовательность действий:
- Подать на выход Trig импульс длительностью 10 микросек;
- В ультразвуковом дальномере hc sr04 подключенном к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;
- Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты приемником R, что обеспечит наличие входного сигнала на выходе Echo;
- На стороне контроллера полученный сигнал при помощи формул следует перевести в расстояние.
При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 – в дюймах.
Подключение HC SR04 к Arduino
Выполнить подключение ультразвукового датчика расстояния к плате Arduino достаточно просто. Схема подключения показана на рисунке.
Контакт земли подключаем к выводу GND на плате Arduino, выход питания соединяем с 5V. Выходы Trig и Echo подсоединяем к arduino на цифровые пины. Вариант подключения с помощью макетной платы:
Библиотека для работы с HC SR04
Для облегчения работы с датчиком расстояния HC SR04 на arduino можно использовать библиотеку NewPing. Она не имеет проблем с пинговыми доступами и добавляет некоторые новые функции.
К особенностям библиотеки можно отнести:
- Возможность работы с различными ультразвуковыми датчиками;
- Может работать с датчиком расстояния всего через один пин;
- Отсутствие отставания на 1 секунду при отсутствии пинга эха;
- Для простой коррекции ошибок есть встроенный цифровой фильтр;
- Максимально точный расчет расстояния.
Скачать бибилотеку NewPing можно здесь
Точность измерения расстояния датчиком HC SR04
Точность датчика зависит от нескольких факторов:
- температуры и влажности воздуха;
- расстояния до объекта;
- расположения относительно датчика (согласно диаграммы излучения);
- качества исполнения элементов модуля датчика.
В основу принципа действия любого ультразвукового датчика заложено явление отражения акустических волн, распространяющихся в воздухе. Но как известно из курса физики, скорость распространения звука в воздухе зависит от свойств этого самого воздуха (в первую очередь от температуры). Датчик же, испуская волны и замеряя время до их возврата, не догадывается, в какой именно среде они будут распространяться и берет для расчетов некоторую среднюю величину. В реальных условиях из-за фактора температуры воздуха HC-SR04 может ошибаться от 1 до 3-5 см.
Фактор расстояния до объекта важен, т.к. растет вероятность отражения от соседних предметов, к тому же и сам сигнал затухает с расстоянием.
Также для повышения точности надо правильно направить датчик: сделать так, чтобы предмет был в рамках конуса диаграммы направленности. Проще говоря, “глазки” HC-SR04 должны смотреть прямо на предмет.
Для уменьшения ошибок и погрешности измерений обычно выполняются следующие действия:
- усредняются значения (несколько раз замеряем, убираем всплески, потом находим среднее);
- с помощью датчиков (например, DHT11 или DHT22) определяется температура и вносятся поправочные коэффициенты;
- датчик устанавливается на серводвигатель, с помощью которого мы “поворачиваем голову”, перемещая диаграмму направленности влево или вправо.
Пример работы
Рассмотрим как работает дальномер.
- Для того чтобы инициализировать отправку сигнала дальномером, необходимо подать высокий сигнал длительностью 10 μs на пин .
- После получения высокого сигнала длительностью 10 μs на пин , модуль генерирует пучок из восьми сигналов частотой 40 кГц и устанавливает высокий уровень на пине .
- После получения отраженного сигнала модуль устанавливает на пине низкий уровень.
Зная продолжительность высокого сигнала на пине можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).
Функция позволяет узнать длительность импульса в . Запишем результат работы этой функции в переменную
duration.
Теперь вычислим расстояние переведя скорость из м/с в см/мкс:
Преобразуем десятичную дробь в обыкновенную
Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2
Оформим в код всё вышесказанное и выведем результат в Serial Monitor
- ultrasonic.ino
-
// Укажем, что к каким пинам подключено int trigPin = 10; int echoPin = 11; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { int duration, distance; // для большей точности установим значение LOW на пине Trig digitalWrite(trigPin, LOW); delayMicroseconds(2); // Теперь установим высокий уровень на пине Trig digitalWrite(trigPin, HIGH); // Подождем 10 μs delayMicroseconds(10); digitalWrite(trigPin, LOW); // Узнаем длительность высокого сигнала на пине Echo duration = pulseIn(echoPin, HIGH); // Рассчитаем расстояние distance = duration 58; // Выведем значение в Serial Monitor Serial.print(distance); Serial.println(" cm"); delay(100); }
Работа с библиотекой
Количество строк кода можно существенно уменьшить, используя библиотеку для работы с дальномером.
- ultrasonic_lib.ino
-
#include <NewPing.h> #define TRIGGER_PIN 10 #define ECHO_PIN 11 #define MAX_DISTANCE 400 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); void setup() { Serial.begin(9600); } void loop() { delay(50); Serial.print("Ping: "); Serial.print(sonar.ping_cm()); Serial.println("cm"); }
Работа с Iskra JS
var sonic = require('@amperka/ultrasonic') .connect({trigPin P10, echoPin P11}); sonic.ping(function(err, value) { if (err) { console.log('An error occurred:', err); } else { console.log('The distance is:', value, 'millimeters'); } }, 'mm');
Как работает на самом деле ультразвуковой датчик HC-SR04
Временные диаграммы работы датчика представлены на следующем рисунке.
Датчик имеет контакты Trigger и Echo, которые используются для измерения расстояния как показано на представленных диаграммах. Сначала мы должны подать запускающий в работу датчик импульс длительностью 10 мкс на контакт Trigger, после этого датчик излучает в пространство серию из 8 ультразвуковых импульсов. Эти импульсы отражаются от препятствия и возвращаются обратно к датчику.
На временных диаграммах показано, что после того как приемник осуществит прием этих импульсов датчик устанавливает напряжение высокого уровня на контакте Echo на длительность, равную времени распространения ультразвуковой волны до препятствия и обратно.
Но мы более детально исследовали работу этого датчика и установили, что датчик не ждет возвращения ультразвуковой волны назад. Он устанавливает напряжение высокого уровня на контакте Echo сразу после излучения серии импульсов и снимает это напряжение (то есть возвращает состояние контакта в 0) после того как ультразвуковая волна вернется назад. Поэтому правильные временные диаграммы работы этого датчика должны быть такими, какими они показаны на следующем рисунке.
Как сделать так чтобы датчик HC-SR04 работал только как передатчик
Как следует из представленных временных диаграмм для этого нужно объявить контакт Trigger выходным контактом и подать на него напряжение высокого уровня в течение 10 микросекунд. Это приведет к тому что датчик начнет излучать серию ультразвуковых импульсов. То есть всегда, когда нам нужно задействовать датчик HC-SR04 только в качестве передатчика, нам нужно просто подать импульс высокого уровня длительностью 10 мкс на его контакт Trigger.
Как сделать так чтобы датчик HC-SR04 работал только как приемник
Как следует из временных диаграмм прямым способом мы это сделать не можем поскольку мы не можем непосредственно управлять появлением сигнала на контакте Echo. Но мы можем использовать следующий «лайфхак». Мы можем просто заклеить передающую часть датчика непрозрачной лентой как показано на рисунке ниже, что приведет к тому что ультразвуковая волна не будет излучаться и, следовательно, не будет влиять на состояние контакта Echo.
Теперь чтобы подать на контакт echo напряжение высокого уровня нам теперь просто нужно подать импульс длительностью 10 мкс на контакт-«пустышку» trigger. Теперь напряжение низкого уровня появится на контакте echo только тогда, когда наш приемный датчик примет ультразвуковую волну от нашего передающего датчика.
Подключение датчика HC SR04
С подключением датчика не должно возникнуть никаких проблем. Достаточно с помощью проводников соединить пин на питание с источником или МК, а ввод и вывод, соответственно, присоединить непосредственно к МК. Воспользуйтесь схемой ниже для сборки схемы:
У самого сенсора SR04 следующие характеристики от которых вам стоит отталкиваться:
- Напряжение для питания – 5В.
- Работает в цепях с силой тока 15 мА.
- Если датчик не используется, то для поддержания его в пассивном состоянии всё ещё требуется до 2 мА.
- Угол обзора у модуля небольшой, всего 15 градусов.
- Разрешение сенсора – 3 десятых см.
- А вот угол для измерений составляет уже приятные 30 градусов.
Также на датчике имеются четыре вывода по стандарту 2.54 мм. В них входит контакт для питания с положительным напряжением +5В, пины для ввода и вывода сигнала и заземление.
В конечном варианте выглядеть устройство должно примерно таким образом:
Принцип работы ультразвукового датчика HC-SR04
Ультразвуковой датчик HC-SR04 используется для измерения расстояний в диапазоне 2-400 см с точностью 3 мм. Датчик состоит из ультразвукового передатчика, ультразвукового приемника и схемы управления.
Ультразвуковой датчик HC-SR04 обеспечивает на своем выходе сигнал, пропорциональный дистанции до препятствия. Датчик генерирует звуковые колебания в ультразвуковом диапазоне (после получения управляющего импульса) и после этого ждет когда они вернутся к нему (эхо), отразившись от какого-нибудь препятствия. Затем, основываясь на скорости звука (340 м/с) и времени, необходимом для того чтобы эхо достигло источника (нашего датчика), датчик обеспечивает на своем выходе сигнал, пропорциональный расстоянию до препятствия.
Как показано на рисунке сначала нам нужно инициировать датчик для измерения расстояний, для этого на его триггерный контакт (trigger pin) необходимо подать логический сигнал высокого уровня длительностью не менее 10 мкс, после этого датчик генерирует серию звуковых колебаний и после получения отраженного сигнала (эхо) датчик обеспечивает на своем выходе сигнал, пропорциональный расстоянию между ним и препятствием.
Ультразвуковой сигнал отражается от поверхности, возвращается обратно и улавливается приемником ультразвукового сигнала датчика. После этого на контакте Echo датчика устанавливается напряжение высокого уровня (high) на время, пропорциональное расстоянию до препятствия.
После этого расстояние до препятствия можно рассчитать по следующей формуле:
Distance= (Time x Speed of Sound in Air (343 m/s))/2
Также на нашем сайте вы можете посмотреть другие проекты, в которых был использован ультразвуковой датчик.
Для изготовления робота в этом проекте были использованы компоненты, которые достаточно легко приобрести. Для изготовления шасси робота можно использовать детскую игрушку или можно купить уже готовые шасси робота на AliExpress.
Управление устройствами с помощью хлопков
В нашем следующем проекте мы будем использовать звуковой датчик в качестве «детектора хлопков», который включает устройства, питающиеся от сети переменного тока, хлопком в ладоши.
В данном проекте для управления питанием устройств используется одноканальный модуль реле, который будет коммутировать переменное напряжение сети 220 В.
Схема соединений
Схема соединений в этом проекте очень проста.
Предупреждение: |
Сначала необходимо подать питание на датчик и модуль реле. Подключите их выводы VCC к выводу 5V на Arduino, и выводы GND к выводу GND на Arduino.
Затем подключите выходной вывод (OUT) звукового датчика к цифровому выводу 7 на Arduino, а управляющий вывод (IN) на модуле реле к цифровому выводу 8 Arduino.
Вам также необходимо поместить модуль реле в линию питания устройства, которым вы хотите управлять. Вам придется разрезать один провод в кабеле питания и подключить один конец отрезанного провода (идущий от вилки) к выводу COM (общий) модуля реле, а другой к выводу NO (нормально разомкнутый).
Схема соединений показана на следующем рисунке.
Рисунок 7 – Схема подключения датчика звука и модуля реле к плате Arduino
Код Arduino
Ниже приведен скетч для управления устройствами с помощью хлопков.
После того, как вы загрузили программу в Arduino, и всё включили, датчик должен включать или выключать управляемое устройство каждый раз, когда вы хлопаете.
Объяснение
Если вы сравните этот скетч с предыдущим, вы заметите много общего, кроме нескольких вещей.
В начале мы объявляем вывод Arduino, к которому подключен вывод управления реле (IN). Мы также определили новую переменную для хранения состояния реле.
В функции мы настраиваем вывод как выходной.
Теперь, когда мы обнаруживаем звук хлопка, вместо того, чтобы печатать сообщение в мониторе последовательного порта, мы просто переключаем состояние реле.