Как подключить ультразвуковой дальномер HC-SR04 к Arduino. Ардуино: ультразвуковой дальномер HC-SR04 Hc sr04 подключение к atmega8

  • макетная плата (breadboard);
  • персональный компьютер со средой разработки Arduino IDE.
  • 1 Принцип действия ультразвукового дальномера HC-SR04

    Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.

    Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности логической единицы на ножке ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.

    Диапазон измерения расстояния дальномера HC-SR04 - до 4 метров с разрешением 0,3 см. Угол наблюдения - 30°, эффективный угол - 15°. Ток потребления в режиме ожидания 2 мА, при работе - 15 мА.

    2 Схема подключения датчика расстояния

    Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, мы подключим к 11 и 12.



    3 Получение дистанции до объекта с датчика HC-SR04

    Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO - это 12 и 11 пины. Затем объявляем триггер как выход, а эхо - как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.

    Const int trigPin = 12; const int echoPin = 11; void setup() { pinMode(trigPin, OUTPUT); // триггер - выходной пин pinMode(echoPin, INPUT); // эхо - входной digitalWrite(trigPin, LOW); Serial.begin(9600); // инициализация послед. порта } void loop() { long distance = getDistance(); // получаем дистанцию с датчика Serial.println(distance); // выводим в последовательный порт delay(100); } // Определение дистанции до объекта в см long getDistance() { long distacne_cm = getEchoTiming() * 1.7 * 0.01; return distacne_cm; } // Определение времени задержки long getEchoTiming() { digitalWrite(trigPin, HIGH); // генерируем 10 мкс импульс запуска delayMicroseconds(10); digitalWrite(trigPin, LOW); // определение на пине echoPin длительности уровня HIGH, мкс: long duration = pulseIn(echoPin, HIGH); return duration; }

    Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт тот 10-микросекундный импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.

    Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V×t Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duration ). Чтобы получить время duration в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние - до объекта и обратно - нужно ещё разделить результат пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек × duration / 1 000 000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче.

    Операцию умножения микроконтроллер выполняет быстрее, чем операцию деления, поэтому :100 я заменил на эквивалентное ×0,01 .

    4 Библиотека для работы с эхолокатором HC-SR04

    Также для работы с ультразвуковым дальномером написано множество библиотек. Например, вот эта библиотека Ultrasonic . Установка библиотеки происходит стандартно: скачать, разархивировать в директорию /libraries/ , которая находится в папке с Arduino IDE. После этого библиотекой можно пользоваться.

    Установив библиотеку, напишем новый скетч.

    #include // подключаем библиотеку Ultrasonic ultrasonic(12, 11); // Trig - 12, Echo - 11 void setup() { Serial.begin(9600); // инициализация послед. порта } void loop() { float dist_cm = ultrasonic.Ranging(CM); // дистанция в см Serial.println(dist_cm); // выводим дистанцию в порт delay(100); }

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

    Если в скетче написать float dist_cm = ultrasonic.Ranging(INC); - дистанция будет отображаться в дюймах.

    5 Выводы по работе с сонаром HC-SR04

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

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

    Приобрести ультразвуковой дальномер по хорошей цене можно

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

    Ну что, приступим! Начнем мы с характеристики дальномера.

    Характеристики ультразвукового датчика 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: "-" питание

    Необходимые компоненты для подключения ультразвукового дальномера

    • Arduino (в нашем случае - UNO)
    • Breadboard (макетная плата для удобного подключения приборов к Arduino)
    • Провода
    • Ультразвуковой датчик HC-SR04

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


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

    Схема подключение дальномера к Arduino

    Вам представлена схема подключения ультразвукового датчика к Ардуино. Как вы можете заметить, она очень проста и очень интересна. Но следует не забывать о правильном подключении. Мой совет: никогда не торопитесь подключать прибор потому, что вы больше затратите времени на поиск ошибки в подключении.


    Следующим этапом является изучение скетча программы

    Программирование ультразвукового датчика 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);
    }

    После того как вы вставили этот код, загрузите его в программу и включите "монитор порта". Там вы увидите расстояние от датчика до препятствия, поэкспериментируйте с изменением расстояния объекта.

    Вот что должно у вас получиться!



    Надеюсь у вас все получилось! Если у вас остались вопросы, можете написать нам в

    Для измерения расстояния до объектов, можно воспользоваться ультразвуковым дальномером 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°.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Новые статьи

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Ultrasonic ultrasonic(12,13);

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

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

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

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