Последние комментарии
-
09.03.2023 10:51
Спасибо!Драйвер установил,и все заработало.
-
25.01.2023 16:05
Спасибо. Хорошая статья. Хотелось бы увидеть как ...
-
21.01.2023 22:58
Доброго дня! Як можна замовити? І чи є схема або ...
-
05.05.2022 19:14
Спасибо автору, понял почему блинк не работал
-
21.04.2022 13:18
В моём случае он используется совместно с AGP ...
Самое читаемое
- Многофункциональный программатор на CH341A
- Переходник USB to TTL (RS232) YP-01 на чипе PL2303HX
- Знакомство с Arduino Pro mini на примере китайского аналога
- Подключаем мощную нагрузку к Arduino, через реле модуль
- Твердотельное реле из симистора для коммутации мощной нагрузки через Ардуино
- Знакомство с Arduino Micro (ATmega32U4) на примере китайского аналога Pro Micro
- Знакомство с Arduino Nano на примере китайского аналога
- Знакомство с Arduino UNO на примере китайского аналога
- Обход блокировки Одноклассников, Вконтакте, Яндекс и Маил.ру с помощью OpenVPN
- Управляем Arduino через Bluetooth HC-06, с компьютера или смартфона
Подключаем ультразвуковой дальномер HC-SR04 к Arduino
Для измерения расстояния до объектов, можно воспользоваться ультразвуковым дальномером 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; 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"); 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); } |
Если вместо светодиода, подключить лампу накаливания, как это описано в статье «Подключаем мощную нагрузку к Arduino, через реле модуль», у нас получится простая система автоматического освещения. Разместив подобную конструкцию в каком то помещении, при попадании посетителя в зону действия дальномера, в помещении автоматически включится свет. Ток покоя дальномера составляет менее 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 сантиметром { tone(BeepPin, 500); // включаем пьезоизлучатель c частотой 500 Гц } 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°.
Комментарии
Думаю возможно, но нужно иметь полное представление о вашем проекте, что бы какие то конкретные соображения приходили в голову.
До 2-х метров от земли можно пробовать, но нужно учитывать что бы отражающая поверхность была под нужным углом. Управлять спутником на орбите не получится, там я думаю нужно использовать барометр, которым можно замерять высоту над уровнем моря.
Здравствуйте,
Скорость звука 331 м/с при 0°C. Чем выше температура, тем выше скорость звука, при +15°C скорость звука 340 м/с
RSS лента комментариев этой записи