Ультразвуковой датчик расстояния Ардуино HC-SR04. Ультразвуковой датчик измерения расстояния HC-SR04 Примеры использования датчика расстояния

Статья посвящена ультразвуковому датчику расстояния HC–SR04.

Объясняется принцип его действия, технические характеристики, приведен пример его подключения к Arduino и программы для прошивки микроконтроллера.

Описание HC-SR04

Ультразвуковой датчик расстояния - модуль HC-SR04 использует акустическое излучение для определения расстояния до объекта. Этот бесконтактный датчик обеспечивает высокую точность и стабильность измерений. Диапазон измерений составляет: от 2 см до 400 см. На показания датчика практически не влияют солнечное излучение и электромагнитные шумы. Модуль продается в комплекте с трансмиттером и ресивером.

Технические характеристики HC-SR04

  • Напряжение питания: +5В – постоянный ток;
  • Сила тока покоя: < 2 мА;
  • Рабочая сила тока: 15 мА;
  • Эффективный рабочий угол: < 15°;
  • Расстояние измерений: от 2 см до 400 см (1 – 13 дюймов);
  • Разрешающая способность: 0.3 см;
  • Угол измерений: 30 градусов;
  • Ширина импульса триггера: 10 микросекунд;
  • Размеры: 45 мм x 20 мм x 15 мм.

Общий вид датчика HC-SR04

  • VCC: +5 вольт (постоянный ток)
  • Trig: Триггер (INPUT)
  • Echo: Эхо (OUTPUT)
  • GND: Земля

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

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

Основная цель данного примера – помочь вам понять принцип действия датчика для дальнейшего использования в более комплексных проектах.

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

Схема подключения HC–SR04 к Arduino

Программа для Arduino

/*Ультразвуковой датчик расстояния и Arduino – полный гайд

Распиновка ультразвукового датчика расстояния:

Trig: Триггер (INPUT) – 11 пин

Echo: Эхо (OUTPUT) – 12 пин

int trigPin = 11; //Триггер – зеленый проводник

int echoPin = 12; //Эхо – желтый проводник

long duration, cm, inches;

//Serial Port begin

Serial.begin (9600);

//Инициализирум входы и выходы

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

// Датчик срабатывает и генерирует импульсы шириной 10 мкс или больше

// Генерируем короткий 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();

#include

#define TRIGGER_PIN 12

#define ECHO_PIN 11

#define MAX_DISTANCE 200

Serial.begin(9600);

Serial.print(uS);

Serial.println(“cm”);

Использование библиотеки NewPing

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

#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 только пин Триггера.

Подключение ультразвукового датчика расстояния к Arduino с использованием 1 пина!

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

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

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

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

// К Arduino подключается пин Триггер

#include

#define PING_PIN 12 // Пин с Arduino подключен к пинам trigger и echo на ультразвуковом датчике расстояния

#define MAX_DISTANCE 200 // Максимальное расстояние, которое мы контролируем (в сантиметрах). Максимальное расстояние подобных датчиков находится в диапазоне 400-500см.

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

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

delay(50); // Задержка в 50 миллисекунд между генерацией волн. 29 миллисекунд – минимально допустимая задержка.

unsigned int uS = sonar.ping(); // Генерация сигнала, получение времени в микросекундах (uS).

Serial.print("Ping: ");

Serial.print(uS / US_ROUNDTRIP_CM); // Преобразование времени в расстояние и отображение результата (0 соответствует выходу за допустимый диапазон)

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

Принцип активации (работы) датчиков при этом может быть любым – индуктивные (приближения), оптические (фотоэлектрические), и т.д.

В первой части были описаны возможные варианты выходов датчиков. По подключению датчиков с контактами (релейный выход) проблем возникнуть не должно. А по транзисторным и с подключением к контроллеру не всё так просто.

Схемы подключения датчиков PNP и NPN

Отличие PNP и NPN датчиков в том, что они коммутируют разные полюсы источника питания. PNP (от слова “Positive”) коммутирует положительный выход источника питания, NPN – отрицательный.

Ниже для примера даны схемы подключения датчиков с транзисторным выходом. Нагрузка – как правило, это вход контроллера.

Датчика. Нагрузка (Load) постоянно подключена к “минусу” (0V), подача дискретной “1” (+V) коммутируется транзистором. НО или НЗ датчик – зависит от схемы управления (Main circuit)

Датчика. Нагрузка (Load) постоянно подключена к “плюсу” (+V). Здесь активный уровень (дискретный “1”) на выходе датчика – низкий (0V), при этом на нагрузку подается питание через открывшийся транзистор.

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

На схемах ниже показано в принципе то же самое. Акцент уделён на отличия в схемах PNP и NPN выходов.

Схемы подключения NPN и PNP выходов датчиков

На левом рисунке – датчик с выходным транзистором NPN . Коммутируется общий провод, который в данном случае – отрицательный провод источника питания.

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

Как проверить индуктивный датчик?

Для этого нужно подать на него питание, то есть подключить его в схему. Затем – активировать (инициировать) его. При активации будет загораться индикатор. Но индикация не гарантирует правильной работы индуктивного датчика. Нужно подключить нагрузку, и измерить напряжение на ней, чтобы быть уверенным на 100%.

Замена датчиков

Как я уже писал, есть принципиально 4 вида датчиков с транзисторным выходом, которые подразделяются по внутреннему устройству и схеме включения:

  • PNP NO
  • PNP NC
  • NPN NO
  • NPN NC

Все эти типы датчиков можно заменить друг на друга, т.е. они взаимозаменяемы.

Это реализуется такими способами:

  • Переделка устройства инициации – механически меняется конструкция.
  • Изменение имеющейся схемы включения датчика.
  • Переключение типа выхода датчика (если имеются такие переключатели на корпусе датчика).
  • Перепрограммирование программы – изменение активного уровня данного входа, изменение алгоритма программы.

Ниже приведён пример, как можно заменить датчик PNP на NPN, изменив схему подключения:

PNP-NPN схемы взаимозаменяемости. Слева – исходная схема, справа – переделанная.

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

А что там свежего в группе ВК СамЭлектрик.ру ?

Подписывайся, и читай статью дальше:

Итак, схема слева. Предположим, что тип датчика – НО. Тогда (независимо от типа транзистора на выходе), когда датчик не активен, его выходные “контакты” разомкнуты, и ток через них не протекает. Когда датчик активен, контакты замкнуты, со всеми вытекающими последствиями. Точнее, с протекающим током через эти контакты)). Протекающий ток создает падение напряжения на нагрузке.

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

Если внутренней нагрузки в датчике нет, и коллектор “висит в воздухе”, то это называют “схема с открытым коллектором”. Эта схема работает ТОЛЬКО с подключенной нагрузкой.

Так вот, в схеме с PNP выходом при активации напряжение (+V) через открытый транзистор поступает на вход контроллера, и он активизируется. Как того же добиться с выходом NPN?

Бывают ситуации, когда нужного датчика нет под рукой, а станок должен работать “прям щас”.

Смотрим на изменения в схеме справа. Прежде всего, обеспечен режим работы выходного транзистора датчика. Для этого в схему добавлен дополнительный резистор, его сопротивление обычно порядка 5,1 – 10 кОм. Теперь, когда датчик не активен, через дополнительный резистор напряжение (+V) поступает на вход контроллера, и вход контроллера активизируется. Когда датчик активен – на входе контроллера дискретный “0”, поскольку вход контроллера шунтируется открытым NPN транзистором, и почти весь ток дополнительного резистора проходит через этот транзистор.

В данном случае происходит перефазировка работы датчика. Зато датчик работает в режиме, и контроллер получает информацию. В большинстве случаев этого достаточно. Например, в режиме подсчета импульсов – тахометр, или количество заготовок.

Да, не совсем то, что мы хотели, и схемы взаимозаменяемости npn и pnp датчиков не всегда приемлемы.

Как добиться полного функционала? Способ 1 – механически сдвинуть либо переделать металлическую пластинку (активатор). Либо световой промежуток, если речь идёт об оптическом датчике. Способ 2 – перепрограммировать вход контроллера чтобы дискретный “0” был активным состоянием контроллера, а “1” – пассивным. Если под рукой есть ноутбук, то второй способ и быстрее, и проще.

Условное обозначение датчика приближения

На принципиальных схемах индуктивные датчики (датчики приближения) обозначают по разному. Но главное – присутствует квадрат, повёрнутый на 45° и две вертикальные линии в нём. Как на схемах, изображённых ниже.

НО НЗ датчики. Принципиальные схемы.

На верхней схеме – нормально открытый (НО) контакт (условно обозначен PNP транзистор). Вторая схема – нормально закрытый, и третья схема – оба контакта в одном корпусе.

Цветовая маркировка выводов датчиков

Существует стандартная система маркировки датчиков. Все производители в настоящее время придерживаются её.

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

Вот эта маркировка.

  • Синий (Blue) – Минус питания
  • Коричневый (Brown) – Плюс
  • Чёрный (Black) – Выход
  • Белый (White) – второй выход, или вход управления, надо смотреть инструкцию.

Система обозначений индуктивных датчиков

Тип датчика обозначается цифро-буквенным кодом, в котором зашифрованы основные параметры датчика. Ниже приведена система маркировки популярных датчиков Autonics. / Каталог датчиков приближения Omron, pdf, 1.14 MB, скачан:1282 раз./

/ Чем можно заменить датчики ТЕКО, pdf, 179.92 kB, скачан:1032 раз./

/ Датчики фирмы Turck, pdf, 4.13 MB, скачан:1362 раз./

/ Схема включения датчиков по схемам PNP и NPN в программе Splan/ Исходный файл., rar, 2.18 kB, скачан:2216 раз./

Реальные датчики

Датчики купить проблематично, товар специфический, и в магазинах электрики такие не продают. Как вариант, их можно купить в Китае, на АлиЭкспрессе.

А вот какие я встречаю в своей работе.

Всем спасибо за внимание, жду вопросов по подключению датчиков в комментариях!

Является ультразвуковым датчиком расстояния - дальномером. Принцип работы датчика очень похож на работу сенсоров летучих мышей или дельфинов. Датчик излучает пакет звуковых импульсов на ультразвуковой частоте. Отраженные от препятствий звуковые волны возвращаются обратно к датчику. Микрофон датчика улавливает первый пришедший импульс. По времени прохождения импульса можно вычислить расстояние до препятствия. Ультразвук не слышен человеческим ухом, по этому датчик не производит никаких слышимых шумов. Исходя из принципа работы можно определить основные особенности измерения расстояния таким датчиком. Во первых, датчик измеряет расстояние в определенном секторе пространства перед собой, равный 15 градусам, и любой предмет, помещенный в этот сектор, способен отразить звуковую волну. Если предмет достаточно маленький, то мощности отраженной волны может не хватить для определения расстояния до такого предмета, и он становится «не видим» для датчика. Некоторые поверхности, если они расположены под углом к датчику, отражают звуковые волны в сторону, как зеркало. В этом случае датчик так же может давать ложные данные.

Датчик HC-SR04 имеет два контакта для подключения к микроконтроллеру: TRIG и ECHO. Для начала процесса измерения необходимо на вход TRIG подать сигнал высокого уровня длительностью 10 мкс. Датчик излучит в пространство серию ультразвуковых импульсов. После приема отраженного сигнала, датчик формирует на выводе ECHO импульс высокого уровня, длительность которого пропорционально расстоянию до преграды (150мкс-25мс). После одного цикла работы датчика, волны продолжают распространяться по помещению и отражаться. Если в этот момент снова активизировать измерение, вполне вероятно, что сенсор датчика зафиксирует отраженные волны от предыдущей серии импульсов и результат измерения будет не верным.


Для пересчета в длины импульса в расстояние используется формула:
S=F/58,
где:
S - дистанция в сантиметрах,
F - длительность импульса ECHO в микросекундах.

На рисунке приведен один из возможных вариантов подключения дальномера HC-SR04 к Ардуино. Контакт TRIG дальномера подключен к Pin 9, контакт ECHO к Pin 8. Дальномер запитан от напряжения питания 5 вольт, взятое с платы Arduino.

Для работы с дальномером HC-SR04 c Arduino удобно использовать функцию pulseIn. При помощи этой функции меряется длительность импульса на контакте ECHO. Ниже приведен пример программы для Arduino, которая опрашивает дальномер HC-SR04 и передает измеренное значение в сантиметрах в последовательный порт. Данные из последовательного порта считываем монитором, входящим в комплект программы IDE Arduino.

#define Trig 9
#define Echo 8

Void setup()
{
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
Serial.begin(9600);
}

Void loop()
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
unsigned int impulse=pulseIn(Echo, HIGH);
unsigned int distance=impulse/58;
Serial.println(distance);
delay(1000);

  • макетная плата (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.

    Принцип работы ультразвукового дальномера основан на испускании ультразвука и его отражения от впереди находящихся предметов. Исходя из времени возвращения звука, по простой формуле, можно рассчитать расстояние до объекта. Дальномер 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 мс. */ }

    Просмотров