Датчик расстояния hc-sr04: красивая демонстрация работы

Обзор ультразвукового датчика расстояния HC-SR04 – RobotChip

Автор: vip.sergey.mir · 01.12.2016

В этой статье расскажу о ультразвуковом датчике HC-SR04, из-за небольшой стоимости, часто используется в различных проектах, где есть необходимость измерять расстояние до объекта.

Технические параметры

► Напряжение питания: 4.8 В … 5.5 В
► Потребляемый ток: 15 мА
► Угол обзора: < 15 °
► Измеряемое расстояние: 2 см … 400 см
► Точность: 0.3 см
► Рабочая температура: 0 ° С … + 60 ° С
► Габариты: 45мм х 20мм х 15мм

Общие сведения

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

 В отличии от других датчиков, HC-SR04 не реагирует на солнечный свет или черные предметы, но может давать ложные показания от ткани или тонких предметов.

На передней части HC-SR04 расположено два ультрозвуковых датчика, первый с надписью T (Transmiter) — это передатчик ультрозвуковых волн (TCT40-16T), а второй с надписью R (Receive) — это приемник отраженных ультрозвуковых волн (TCT40-16R), по центру расположен выводной кварцевый генератор на 27 МГц.

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

Назначение контактов: ► VCC: «+» питание модуля ► Trig : вход триггера ► Echo: выход, эхо.

► GND: «-» питание модуля

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

Необходимые детали: ► Arduino UNO R3 x 1 шт. ► Провод DuPont, 2,54 мм, 20 см x 1 шт. ► Кабель USB 2.0 A-B x 1 шт.

► Ультразвуковой датчик расстояния HC-SR04 x 1 шт.

Подключение: 
В данном примере с помощью HC SR04 будем замерять расстояние до объектов и полученные данные отобразим в окне «мониторинг порта» в среде разработки IDE Arduino.

Сборка проекта несложная, нам надо четыре провода, вывод 11 (Arduino UNO) подключаем к выводу Trig (HC SR04), вывод 12 (Arduino UNO) подключаем к выводу Echo (HC SR04), осталось подключить питание VCC к +5V и GND к GND, да наглядности выложу схему таблицу подключения.

Программа
Существует две популярные библиотеки Ultrasonic и NewPing, скачать их можно с официальных сайтов. В это примере они не используются, скопируйте данный код в среду разработки IDE Arduino и загрузите в Arduino UNO.

Источник: http://robotchip.ru/obzor-ultrazvukovogo-datchika-rasstoyaniya-hc-sr04/

Arduino и ультразвуковой датчик расстояния HC-SR04

Ультразвуковой датчик расстояния HC-SR04 является неплохим бюджетным вариантом для ваших проектов.

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

Помимо ультразвукового датчика, в проекте используются два светодиода. Итак, приступим.

Для проекта вам понадобятся

  • Плата Arduino UNO R3 (или ее аналог)
  • 1 Ультразвуковой датчик расстояния HC-SR04 (Ultrasonic Sensor)
  • 1 красный светодиод
  • 1 зеленый светодиод
  • 2 резистора по 560 Ом (Зеленый, голубой, коричневый, золотой)
  • Макетная плата
  • 8 проводников папа-папа
  • Линейка для измерения расстояния

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

Подключите компоненты с помощью проводников так, как указано на рисунке. Ничего особенного в подключении датчика нет. Для приемника используется один пин, для передатчика, который генерирует ультразвук, второй.

Программа с пояснениями для Arduino

Для реализации нашего простенького, но наглядного проекта, достаточно скопировать приведенный ниже скетч и загрузить его на плату через Arduino IDE.

Просмотрев результат на видео ниже, вы, кстати, поймете зачем нам нужна линейка.

/*

HC-SR04 ультразвуковой датчик расстояния

VCC подключается к пину 5v, GND к GND на плате Arduino

Echo к 13 пину на Arduino Trig к 12 пину на Arduino

Позитивная нога красного светодиода к 11 пину на Arduino

Позитивная нога зеленого светодиода к 10 пину на Arduino

Резисторы на 560 Ом к обеим отрицательным ногам светодиодов и рельсе GRD на макетной плате

*/

#define trigPin 13

#define echoPin 12

#define led 11

#define led2 10

void setup() {

Serial.begin (9600);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(led, OUTPUT);

pinMode(led2, OUTPUT);

}

void loop() {

long duration, distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration/2) / 29.1;

if (distance < 4) { // На этом этапе происходит вкл/выкл светодиода digitalWrite(led,HIGH); // когда загорается красный, зеленый обязан выключится

digitalWrite(led2,LOW); } else { digitalWrite(led,LOW); digitalWrite(led2,HIGH); } if (distance >= 200 || distance<\p>

Источник: http://arduino-diy.com/arduino-ultrazvukovoy-datchik-rasstoyaniya-HC-SR04

Работа с ультразвуковым датчиком HC-SR04

В этой статье я хотел бы поделится своим опытом работы с довольно дешевым ультразвуковым датчиком расстояния типа HC-SR04. Этот датчик представляет собой простой ультразвуковой сонар, тем не менее имеет хорошие характеристики.

О работе с ним расписано уже много информации. Вкратце работа с датчиком HC-SR04 заключается в следующем: посылаем с микроконтроллера на вывод Trig короткий импульс (10 микросекунд) и засекаем время, по нарастающему фронту (изменению состояния с 0 на 1), на выводе Echo, останавливаем таймер. Полученное значение, делим на 58 и получаем значение в сантиметрах.

Это краткий алгоритм. На самой плате датчика есть 3 микросхемы.

Одна из них это контроллер, вторая — MAX232 — предназначена для раскачки импульса до амплитуды 10В (передатчик), и третья — TL082 или аналог, предназначена для усиления принятого сигнала(приемник).

Кстати, во всех дешевых китайских модулях микросхема MAX232 — муляж и она не раскачивает напряжение. Если хотите более высоких характеристик (измерение до 4-х метров как в описании), ее нужно менять на настоящую.

Схема датчика HC-SR 04

При поступлении короткого импульса контроллер выдает 8 импульсов на MAX232, где они раскачиваются и поступают в излучатель. Излученный сигнал отражается и принимается вторым ультразвуковым излучателем усиливается до определенного уровня и подается в контроллер, который выдаст на выходе Echo логическую единицу.

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

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

В характеристиках дальномера HC-SR04 указан диапазон от 2 до 400 см. У меня стабильная работа получилась от 5 см, так что советую программно установить такие ограничения. Что касается второго предела, то мне не удавалось протестировать его на 4 м, но 2.

8 м он измерял достаточно стабильно. Нижнее ограничение в 5 см у этого датчика возникает из-за того что при выстреле пачки импульсов излучателем, они моментально попадают и на приемник который имеет высокое усиление.

Поэтому необходимо немного переждать и потом уже отслеживать сигнал приемника. Отсюда и ограничение.

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

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

Если нужно работать во влажной среде советую воспользоваться датчиком JSN-SR04T.

Стоит он на порядок дороже, но он работает с датчиком парктроника который имеет отличную пыле и влагозащиту. Правда в датчике JSN-SR04T, нижний предел измерения — 30 см, это нужно учитывать (это из-за применения вместо двух — одного излучателя, и собственно после излучения нужно больше времени на затухание колебаний).

Алгоритм работы с ним такой же, как и с его собратом. Диаграмма направленности датчика парктроника довольно широкая, это не есть хорошо, выше я писал почему. Но есть выход: применить простейший рупор. Это сузит диаграмму направленности, а еще усилит сигнал.  

Источник: http://elschemo.ru/dlya-nachinayushhix/rabota-s-ultrazvukovym-datchikom-hc-sr04/

HC-SR04 Ультразвуковой модуль измерения расстояния

  • Магазины Китая
  • BANGGOOD.COM
  • Радиотовары
  • Сделано руками

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

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

Был заказан pir-выключатель для этих целей, а так же pir-датчик отдельно, на всякий…
Выключатель был установлен в однозначно посещаемом всеми членами семьи помещении и… И оказалось, что плясать лезгинку, при выполнении процедур характерных для посещения сортира, никто не в состоянии, а замирание в привычной позе характерно для всех.

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

Так что выключатель и неиспользованный pir-датчик были отправлены на длительное хранение до лучших времен, а их место занял…

Комбинированный радар для воротных систем CONDOR, пока никуда не пристроенный.

Микроволновый блок естественно был отключен, зачем нам подставлять макушку под микроволны. Осталась только ИК матрица. Штука довольна специфическая. Минимальная зона у него размером с помещение. Свет включает и выключает при посещении на ура. Но есть один недостаток. Датчик очень педантичен и любит, чтобы все стояло на своих местах. Передвинул рулончик бумажки или опустил/поднял стульчак, требуется перенастройка. Да и ценник у него не сортирный. Так что поиск решения был продолжен.

На просторах интернета набрел на сайт Электрик и форум с темой о простом автоматическом выключателе света на ультразвуковом датчике.

Тема показалась интересной, тем более изобретать велосипед с прошивкой не надо, автор постарался за нас, за что ему спасибо. Схема есть, прошивки есть. Осталось сделать печатку и получить на выходе полноценный датчик присутствия. Или не получить… посмотрим… Датчик был заказан на banggood'e.

Нравится мне этот магазин стабильностью сроков доставки. Безтреком 28-30 дней и заказ у меня. Приехал безтреком в срок. Упаковка для посылок без трека у banggood'а стандартная, мусорный мешок и все… Датчик был упакован в антистатик, что подозреваю и спасло его от почтовых неприятностей.

:0) К сожалению мусорный мешок выбросил по пути домой, а антистатик уже дома, так что показать кроме датчика вам нечего, да и сам датчик уже потрепался (ножки выпрямил) в процессе изготовления устройства. ТТХ датчика: — 45*20*23 мм.

ДхШхГ (Г — с выпрямленными ножками) — вес — 8,28 грамм — напряжение питания — DC 5V — ток потребления — 15mA — минимальное рабочее расстояние — 2 см. — максимальное рабочее расстояние — 4 метра — угол зоны обнаружения — 15 градусов Кратко. Датчик работает по принципу эха.

Один пьезик датчика излучает пакет импульсов с частотой 40 кГц, сигнал отражается от поверхности перед датчиком, отраженный сигнал принимает другой пьезик, блок обработки обрабатывает полученные данные и на выходе выдает импульс длинной пропорциональной расстоянию прохождения УЗ сигнала. Т.е.

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

Если длительность нового импульса меньше того что в памяти, микроконтроллер решает, что в зоне обнаружение есть объект и нужно включить нагрузку… Если длинна импульса больше, то ничего не делаем или выключаем нагрузку, если она включена. Далее: Сам датчик.Маркировка на микросхемах стерта.

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

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

Здесь ссылка на скачивание того, что я собрал по теме, плюс схема и печатка платки в Diptrace.

Несколько фоток. Подготавливаем платку и шаблон. Фоторезист нанесен.Засвечиваем, промываем, травим.Травим, смываем фоторезист.Наносим маску, засвечиваем шаблон.Режем платку, сверлим.
Сама платка. Собрана схема на ATtiny13. Зачем для тестов такая красивая? Просто она делалась попутно с другой платой, под эл. нагрузку.

Почему так бестолково расположены радиоэлементы? По тому что тестовая. Чтобы проверить, рабочее ли устройство в сборе. Не было смысла разводить и компоновать.Припаиваем датчик к платке.Программируем.

В результате получаем готовый бескорпусной датчик присутствия с питанием пять вольт, кушающее 30mA, способное обнаруживать посторонние предметы в заранее запрограммированной зоне обнаружения с углом в 15 градусов и расстоянием от 2 сантиметров, до 3,5 метров. При обнаружении включать светодиод. Принцип работы прост. Направляем датчик, куда нам нужно. Нажимаем кнопку.

Настроечный светодиод (у меня он красненький) начинает мигать. Мигает он в 3-х режимах: 10% светодиод включен— объект вне зоны действия, нагрузка выключена. 90% светодиод включен— объект в зоне действия, нагрузка включена.

50% светодиод включен— зона обнаружения свободна, идет отсчет 60 или 10 секунд, или одна секунда, в зависимости от прошивки, до выключения, лампа включена. Дальше у вас есть 10 секунд чтобы уйти из зоны обнаружения. Можно ограничить зону. Для этого нужно в момент запоминания настроек встать на границе зоны, тем самым зона будет ограничена.

Паспортные минимальные 2 сантиметра я подтверждаю. Если ограничить зону как на фото, то при просовывании пальца между коробкой и датчиком светодиод загорается, убираем палец, гаснет. Если подвинуть коробку на полсантиметра ближе, то свтодиод загорается, устройство настраиваться отказывается.Максимальные 4 метра подтвердить не удалось.

Максимальное расстояние которое удалось подтвердить, где устройство уверенно фиксирует человека равно 3.5 метра. На з-х метрах уверенно фиксирует мою руку с коробкой 15х15 сантиметров. Включает нагрузку и не отключает, пока коробку не уберешь. Выводы. — Получившийся датчик присутствия мне понравился. — Простейшая и удобная настройка. — Реально работает.

— Дешево и сердито. В общем, вот такое получилось годное устройство на ультразвуковом модуле измерения расстояния HY-SRF05. В недалеком будущем я приспособлю его по месту, только коробку подберу. Теперь можно будет замирать в нужной позе не боясь отключения света.

Желающие думаю могут придумать еще множество способов его использования. Особенно ардуинщики, для кого этот датчик в принципе и разработан. А может и не для них…

Планирую купить +41 Добавить в избранное Обзор понравился +41 +81

Источник: https://mysku.ru/blog/china-stores/40359.html

Слежение за объектом с помощью ультразвукового датчика HC-SR04 и сервомотора

Дальномер, установленный на сервомотор часто используется в разных ардуино проектах. Например, на машинках-роботах, объезжающих препятствие. Я тоже такую как-то собирал. Работает до сих пор.

Позже обязательно опишу данный проект.

У меня возникла идея заставить ардуино следить за объектом в трех направлениях, с использованием ультразвукового датчика HC-SR04 и сервомотора.

НАМ ПОНАДОБИТСЯ

  • Плата Arduino Uno или любая ардуино совместимая
  • Ультразвуковой датчик HC-SR04
  • Сервомотор SG-90
  • Провода

                

СХЕМА ПОДКЛЮЧЕНИЯ

КОД ПРОГРАММЫ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include //подключаем библиотеку для сервомотора
#include «Ultrasonic.h» //подключаем библиотеку для ультразвукового датчика

Servo servoneck; // создаем объект серво-шея
Ultrasonic ultrasonic(12,11); //trigPin — 12; echoPin — 11;
const int ledPin = 13; // пин 13 – светодиод
void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); // задаем светодиод — выходной пин servoneck.attach(9); // attaches the servo on pin 9 to the servo object servoneck.write(150); digitalWrite(ledPin, 0); // выключаем светодиод }
 
void loop() { if (ultrasonic.Ranging(CM)>30){ digitalWrite(ledPin, 0); // выключаем светодиод servoneck.write(90); delay(500);
  if (ultrasonic.Ranging(CM)>30){ digitalWrite(ledPin, 0); // выключаем светодиод servoneck.write(150); delay(500); } if (ultrasonic.Ranging(CM)>30){ digitalWrite(ledPin, 0); // выключаем светодиод servoneck.write(90); delay(500); } if (ultrasonic.Ranging(CM)>30){ digitalWrite(ledPin, 0); // выключаем светодиод servoneck.write(30); delay(500); } } else digitalWrite(ledPin, 1); // включаем светодиод
delay(500); }

В данном скетче сервомотор поворачивает ультразвуковой датчик дискретно в диапазоне от 30 до 150 градусов. Угол обзора можно задать для SG90 от 0 до 180 градусов. Это три положения: 30, 90 и 150 градусов.

С помощью условия if задаем необходимое расстояние контроля за объектом. Как только объект приблизится на контролируемое расстояние, сервомотор остановится и загорится светодиод на 13 пине. Данное условие выполняется для трех положений сервомотора.

Светодиод Pin13 расположен непосредственно на плате Arduino и на схеме не показан.

Библиотека для ультразвукового датчика HC-RS04 Ultrasonic.h

Библиотека для сервомотора включена в состав программы Arduino IDE.

Можно добавить еще один сервомотор и тогда голова робота будет кивать при обнаружении объекта. Или использовать как хвост для робота-собаки. Будет вилять хвостом. Конечно, для нормальной работы необходимо добавить инфракрасный датчик или датчик движения, или датчик звука.

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

Чтобы в зону осмотра не попадали предметы, ближе заданного расстояния.

Вот скетч, где добавлен второй сервомотор для кивания головой:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include //подключаем библиотеку для сервомотора

#define trigPin 12 // подключаем Trig к пин 12. отправка сигнала
#define echoPin 11 // подключаем Echo к пин 11. прием ответа
Servo servoneck; // создаем объект серво-шея
Servo servohead; // создаем объект серво-голова
int s1, s2, s3; //создаем переменные для записи расстояний по трем направлениям
//————————————————————————————
//будем замер делать дважды и высчитывать среднюю арифметическую. для исключения ошибок.
//результат измерений будет записываться последовательно в переменные s_1 и s_2
int get_distance(){ long duration; int s_1, s_2, average = -1;
// запись в s_1 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); s_1 = (int) duration / 58.2; // запись в s_2 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); s_2 = (int) duration / 58.2; // подсчитываем среднее арифметическое s_1 и s_2 average = (int) (s_1 + s_2) / 2; //Serial.print(«distance: «); //Serial.println(average); return average;
}
//—————————————————————
void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); servoneck.attach(9); // подключаем servoneck к pin 9 servohead.attach(10); // подключаем servohead к pin 10 servoneck.write(30); // устанавливаем серво-шея в первоначальное положение servohead.write(30); // устанавливаем серво-голова в первоначальное положение
}
 
void loop() { s1 = get_distance(); //делаем замер s1 в направлении 30 град. if (s1

Источник: http://publicatorbar.ru/2016/05/03/slezhenie-za-obektom-s-pomoshhyu-ultrazvukovogo-datchika-hc-sr04-i-servomotora/

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

В этой статье мы подключим ультразвуковой дальномер-эхолокатор HC-SR04 к Arduino и научимся с помощью него определять расстояние до цели.

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

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

В это же время на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль.

По длительности логической единицы на ножке ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.

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

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

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

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

Схема подключения датчика расстояния HC-SR04 к ArduinoУльтразвуковой дальномер HC-SR04 подключён к Arduino

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 и получили с него данные двумя разными способами: с использованием специальной библиотеки и без.

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

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

Источник: https://soltau.ru/index.php/arduino/item/374-kak-podkl

Урок 7 — Подключаем HC-SR04 к Arduino. Библиотека NewPing

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

Принцип роботы как у сонара, посылается пучок импульсов и получает отражения, и на основании задержки определяется расстояние до предмете.

Так как датчик для определения расстояния основан на ультразвуки, он плохо работает для определения расстояния до звукопоглощающих предметов. Идеальными являются предметы с ровной и гладкой поверхностью например ПАНЕЛИ, ВАГОНКА ПВХ.

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

Датчик HC-SR04 является бесконтактным. Точность измерения обеспечивается от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия.

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

  • Рабочее напряжение
  • Сила тока в пассивном состоянии < 2 мА
  • Рабочий параметр силы тока – 15 мА
  • Измерительный угол — 30°
  • Обзорный угол — 15°

Контакты подключения:

  • Контакт питания +5В
  • Trig – выход сигнала входа
  • Echo – вывод сигнала выхода
  • GND – «Земля»


Схема подключения ультразвукового датчика HC-SR04 к Arduino UNO

Самой распространенной библиотекой для работы с датчиком HC-SR04 является NewPing. Описание и подледную версию можно найти на страничке проекта

Пример скетча который предложен на странице библиотеки NewPing

#include #define TRIGGER_PIN 12 #define ECHO_PIN 11 #define MAX_DISTANCE 200 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); void setup() { Serial.begin(115200); } void loop() { delay(200); Serial.print(«Ping: «); Serial.print(sonar.ping_cm()); Serial.println(«cm»); }

Откроем монитор Serial порта.

Как видим датчик HC-SR04 работает но есть шум. Выводит через определенное время нулевые значения. Данный код можно улучшить.

#include #define TRIGGER_PIN 12 #define ECHO_PIN 11 #define MAX_DISTANCE 200 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); float dist_3[3] = {0.0, 0.0, 0.0}; // массив для хранения трёх последних измерений float middle, dist, dist_filtered; float k; byte i, delta; unsigned long dispIsrTimer, sensTimer; void setup() { Serial.begin(115200); } void loop() { if (millis() — sensTimer > 200) { // измерение и вывод каждые 50 мс // счётчик от 0 до 2 // каждую итерацию таймера i последовательно принимает значения 0, 1, 2, и так по кругу if (i > 1) i = 0; else i++; dist_3[i] = (float)sonar.ping() / 57.5; // получить расстояние в текущую ячейку массива dist = middle_of_3(dist_3[0], dist_3[1], dist_3[2]); // фильтровать медианным фильтром из 3ёх последних измерений delta = abs(dist_filtered — dist); // расчёт изменения с предыдущим if (delta > 1) k = 0.7; // если большое — резкий коэффициент else k = 0.1; // если маленькое — плавный коэффициент dist_filtered = dist * k + dist_filtered * (1 — k); // фильтр «бегущее среднее» Serial.print(«Ping: «); Serial.print(dist_filtered); Serial.println(«cm»); // вывести sensTimer = millis(); // сбросить таймер } } // медианный фильтр из 3ёх значений float middle_of_3(float a, float b, float c) { if ((a

Источник: https://portal-pk.ru/news/162-podklyuchaem-hc-sr04-k-arduino-biblioteka-newping.html

Как подключить дальномер к Ардуино

Опубликовано 26.02.2013 22:46:00

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

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

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

При малой цене обладает хорошими характеристиками, способен измерять расстояние в диапазоне от 2 до 450см.

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

Arduino UNO, либо Arduino Nano, либо Arduino Mega

Дальномер HC-SR04

Макетная плата

Соединительные провода (перемычки)

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

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

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

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

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

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

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

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

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

VCC: «+» питания

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

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

GND: «-» питания

 УЗ дальномер  Arduino
 VCC  +5V
 TRIG  D9
 ECHO  D8
 GND  GND

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

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

//Тестировалось на Arduino IDE 1.0.1
#define Trig 9
#define Echo 8
#define ledPin 13 void setup() {  
  pinMode(Trig, OUTPUT); //инициируем как выход
  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= dead_zone && distance_sm

Источник: http://zelectro.cc/HC-SR04

Подключение ультразвукового датчика расстояния HC-SR04 к Arduino

Датчик HC-SR04 является ультразвуковым датчиком расстояния — дальномером. Принцип работы датчика очень похож на работу сенсоров летучих мышей или дельфинов. Датчик излучает пакет звуковых импульсов на ультразвуковой частоте. Отраженные от препятствий звуковые волны возвращаются обратно к датчику. Микрофон датчика улавливает первый пришедший импульс.

По времени прохождения импульса можно вычислить расстояние до препятствия. Ультразвук не слышен человеческим ухом, по этому датчик не производит никаких слышимых шумов. Исходя из принципа работы можно определить основные особенности измерения расстояния таким датчиком.

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

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

Датчик HC-SR04 имеет два контакта для подключения к микроконтроллеру: TRIG и ECHO. Для начала процесса измерения необходимо на вход TRIG подать сигнал высокого уровня длительностью 10 мкс. Датчик излучит в пространство серию ультразвуковых импульсов.

После приема отраженного сигнала, датчик формирует на выводе ECHO импульс высокого уровня, длительность которого пропорционально расстоянию до преграды (150мкс-25мс). После одного цикла работы датчика, волны продолжают распространяться по помещению и отражаться.

Если в этот момент снова активизировать измерение, вполне вероятно, что сенсор датчика зафиксирует отраженные волны от предыдущей серии импульсов и результат измерения будет не верным.

Временная диаграмма HC-SR04.

Для пересчета в длины импульса в расстояние используется формула: 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);  }

Источник: https://mcustore.ru/projects/podklyuchenie-ultrazvukovogo-datchika-rasstoyaniya-hc-sr04-k-arduino/

Ультразвуковой дальномер HC-SR04

Недавно мне пришла идея, как можно немного «прокачать» гараж, а именно сделать проезд через ворота, чуток удобнее.

Водитель я не самый профессиональный, а гараж довольно небольшого размера – после всевозможных манипуляций с расширением ворот, оказалось, что размер проема всего-навсего на 15 сантиметров шире автомобиля. С таким зазором, заезжать в гараж, мягко говоря, страшновато.

Поэтому, некоторое время, поломав голову, пришла мысль, что можно добавить чуть-чуть современных технологий в деревенский быт. А именно, было решено «присобачить» с трех сторон(слева, справа и спереди от ворот) дальномеры.

Зазоры между стенами и автомобилем будут измеряться в режиме онлайн, а данные отобразятся на цифровом табло, которое разместится на стене, внутри гаража и будет висеть всегда перед глазами во время парковки.

Выбор дальномера для подключения к arduino

Для определения расстояния есть несколько способов – инфракрасный датчик приближения, лазерный дальномер и ультразвуковой дальномер. Возможно, есть еще какие-то варианты, но я их сходу не нашел. Поэтому выбирал из трех вариантов. Датчик приближения был сразу забракован, поскольку он не умеет измерять, а только настраивается на определение конкретных расстояний.

Лазерный датчик умеет делать измерения и довольно точно, но стоит он не мало, из-за этого выбор был остановлен на ультразвуковом датчике, который стоит в 8-10 раз дешевле лазерного, а точность измерения отличается не на много.

Очевидно, что выбор пал на более дешевый датчик HC-SR04, который стоит 50 руб и способен измерять расстояние от 2 до 400 см с точностью до 3 мм, а эффективный угол наблюдения 15 градусов.

Подключение датчика HC-SR04 к arduino

Ультразвуковой датчик HC-SR04 имеет 4 ножки для подключения:

  • VCC – для подключения +5 вольт
  • GND – для подключения минусового провода
  • Trig – для отправки ультразвукового сигнала
  • Echo – для приема отправленного ранее сигнала

Подключаем VCC и GND к питанию arduino без изменений напряжения, поскольку и ардуино и HC-SR04 работают от 5 вольт. Две оставшиеся ножки, нужно подключять к цифровым пинам ардуино, например, к 11 и 12.

Пример работы HC-SR04

Для испытаний HC-SR04 написан небольшой код, который осуществляет измерение расстояния и выводит информацию на 7-сегментный индикатор TM1637, про который я уже писал.

Для измерения расстояния с помощью HC-SR04, необходимо сначала отправить сигнал, а потом получить его обратно и замерить время, за которое сигнал прошел туда и обратно, тем самым легко высчитать расстояние до препятствия.

Зная, что скорость звука в воздухе составляет, примерно, 340 м/с, получаем скорость 0.034 м/мкс. Но так как, сигнал должен пройти туда и обратно, скорость будет в два раза медленней, то есть будет равна 0.017 м/мкс.

Итого получаем, формулу: расстояние = время умножить на 0.017 и умножить на 10, чтобы перевести в миллиметры. Или можно перевести пропорцию к более читабельному виду: расстояние = время / 5.8

Что использовалось в проекте:

Скетч ультразвукового дальномера на arduino с помощью HC-SR04 и TM1637

// подключение индикатора TM1637 #include #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); }<\p>

Послесловие

Если будет время и возможность, то постараюсь написать еще несколько статей про оборудование гаража дальномерами: нужно еще придумать большое табло, которое будет видно хотя бы метров с 5, а также нужно все собрать в кучу и смонтировать по месту применения.

Источник: https://vk-book.ru/ultrazvukovoj-dalnomer-hc-sr04/

Измерение расстояния с помощью ультразвукового датчика HC-SR04

DetailsАвтор Super User

В статье описан пример работы с внешним устройством в операционной системе Windows 10 Iot. В качестве компьютера, поддерживающего Windows 10 Iot, использована плата  Raspberry PI 2-3.  Подсоединим к Raspberry ультразвуковой датчик HC-SR04 и попробуем измерять расстояние с его помощью.

Характеристики датчика следующие:

  1. Питание 5V;
  2. Рабочая частота 40kHz;
  3. Потребление тока 15mA;
  4. Измеряемая дистанция 30 — 400 см.

Итак, начнем. Создаем новый проект и подключаем датчик к Raspberry PI согласно схеме:

Резисторы требуются для согласования линий, 2 кОм подтягивает вывод «echo» на минус тем самым избавляемся от ложных срабатываний, 1 кОм требуется для защиты вывода Raspberry т.к. выводы у него работают на 3.3v , а датчик работает на 5v.

Добавим в проект класс, реализующий логику работы датчика.

Class UltraSonik

Для работы с выводами нам потребуется подключить пространство имен

using Windows.Devices.Gpio;

Первым делом, настроим для работы выводы «Triger» и «Echo». В нашем случае подключены к выводам «triger -> gpio 23» и «Echo -> gpio 24»

void GpioInit() { GpioController gpioController = GpioController.GetDefault(); pinTriger = gpioController.OpenPin(gpio_23); pinTriger.SetDriveMode(GpioPinDriveMode.Output); pinTriger.Write(GpioPinValue.Low); pinEcho = gpioController.OpenPin(gpio_24); pinEcho.SetDriveMode(GpioPinDriveMode.Input); pinEcho.ValueChanged += PinEcho_ValueChanged; }

В событии будем вычислять расстояние

private void PinEcho_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) { distanc = stopwatch.ElapsedMilliseconds * 34.3 / 2.0; }

Далее создадим задачу которая будет активировать триггер и замерять длину приходящего сигнала «Echo»

public async Task

Перейдем в класс MainPage.xaml и добавим на Grid два textBox, с именами textbox_1 и textbox_2.
Выводы настроили и логика вычисления расстояния тоже готова, теперь напишем вызов логики и получение из нее данных и вывод на экран результатов. Перейдем в класс MainPage.xaml.cs и создадим переменные

UltraSonik ultraSonik;//экземпляр класса с логикой работы датчика BackgroundWorker worker;//для работы в фоновом потоке CoreDispatcher coreDispatcher;//для доступа к компонентам из фонового потока Bool finish;

Создадим методы, которые будут писать текст в наши «textbox»

async Task WriteDistanc(string text)//пишет в textBox_1 вычисленную дистанцию { await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { textBox_1.Text = $»{ text} см»; }); }

И метод, который будет писать лог.

async Task WriteLog(string text) { await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { textBox_2.Text += text + »
«; }); }

В событии Grid(Loading) инициализируем переменные

private void Grid_Loading(FrameworkElement sender, object args) { ultraSonik = new UltraSonik(); coreDispatcher = CoreWindow.GetForCurrentThread().Dispatcher; worker = new BackgroundWorker(); worker.DoWork += Worker_DoWork; worker.RunWorkerAsync(); }

Теперь рассмотрим событие Worker_DoWork

private async void Worker_DoWork(object sender, DoWorkEventArgs e) { while (finish == false) { await Task.Delay(50); double distanc = await ultraSonik.GetDistancAsync(1000); await WriteDistanc($»Distance: {distanc} см»); if (distanc > 35) { continue; } await WriteLog(«Дистанция меньше 35 см»); } }

И напоследок, чтобы фоновый поток Worker_DoWork завершил свою работу, нужно переменной «finish» присвоить значение «true», сделаем это в событии

private void Grid_Unloaded(object sender, RoutedEventArgs e) { finish = true; }

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

Проект можно скачать по ссылке

Источник: http://visual-coding.com/index.php/zhelezo/raspberry/56-hc-sr04

Тест ультразвукового датчика расстояния HC-SR04 — Популярная робототехника

Некоторое время назад мной был испытан ультразвуковой дальномер HC-SR04. Данное устройство было приобретено на ebay.com примерно за $3. Позднее я заказал еще 4 таких же, по бросовой цене $2.

3 🙂

Китайцы любезно предоставили мне архив с инструкциями по применению модуля, правда на своем языке и для модуля HC-SRF05.

Благо HC-SR04 является достаточно распространенным дальномером и найти для него даташит не составило особого труда.

Модуль имеет 4 вывода: 

  1. Vcc — 5В;
  2. Trig — вход инциализации измерения;
  3. Echo — выход результатов измерения;
  4. GND — земля.

Принцип действия УЗ дальномера рассмотрен в нашей статье про сенсоры. Что касается общения датчика с контроллером то оно происходит следующим образом. Для того чтобы датчик начал измерение, необходимо подать 20мкс импульс на вход Trig.

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

Как и всегда, для испытаний использовался контроллер mbed. Вывод результатов измерения осуществлялся на двухстрочный дисплей 1602.

Схема собранного стенда весьма проста:

При составлении программы не было необходимости использовать какие-либо дополнительные библиотеки для работы с датчиком. Все кодируется достаточно просто, через обычный таймер и прерывания с цифровых входов. Мои впечатления от работы модуля только положительные. Расстояние измеряется с точностью до 0.

5 см для расстояния 30см (длина линейки). При этом следует учитывать, что расстояние рассчитывается от края излучателя, а не от платы. Учитывая цену подобных устройств, сложно представить что-то более подходящее для использования в малобюджетных проектах.

В итоге, как я уже отмечал, мной были заказаны еще 4 таких же модуля.

Что касается применения, то я планирую использовать дальномер для оценки расстояния от квадрокоптера до земли. Что касается остальных, то как правило дальномеры используются во всякого рода колесных роботах для измерения расстояния до препятствия, либо до противника.

#include «mbed.h»

#include «TextLCD.h»

PwmOut led (LED1);

DigitalOut trig (p30);

InterruptIn echo (p29);

TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); // rs, e, d4-d7

Timer tmr;

int delay = 0;

float range = 0.0;

// Clear and start the timer at the begining of the echo pulse

void rising(void) {

    tmr.reset();

    tmr.start();

}

// Stop and read the timer at the end of the pulse

void falling(void) {

    tmr.stop();

    delay=tmr.read_us();

}

float getRange(){

    // send a trigger pulse, 20uS long

    trig = 1;

    wait (0.000002);

    trig = 0;

    // Timer starts on rising edge of echo

    // Timer stopped and read on falling edge

    // wait 50ms as a time out (there might be no echos)

    wait(0.050);

    return delay/58.0;

}

int main() {

    echo.rise(&rising);

    echo.fall(&falling);

    lcd.cls();

    lcd.printf(«Range:
«);

    while (1) {

        range = getRange();

        led = range/100.0; 

        lcd.locate(0,1);

        lcd.printf(«%5.2f cm», range);

        wait(.1);

    }

}

Ну и итоговое видео.

Источник: http://www.poprobot.ru/home/testultrazvukovogodatcikarasstoaniahc-sr04

Урок 19. Работа с ультразвуковым датчиком расстояния HC-SR04 в BASCOM-AVR

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

Ультразвуковой датчик расстояния HC-SR04 (Вид сверху):

Ультразвуковой датчик расстояния HC-SR04 (Вид снизу):

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

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

Нам остаётся только подавать импульс на датчик, принять его и вычислить расстояние. Сегодня мы научимся работать с HC-SR04 на BASCOM-AVR.

Поставим перед собой задачу: собрать устройство, которое должно замерять расстояние до какого либо объекта с помощью датчика HC-SR04 и передавать данные через UART на ПК.

Для этой цели можно использовать практически любой AVR микроконтроллер, так как алгоритм очень простой. Я взял Atmega8, в итоге получилась следующая принципиальная схема устройства:

В качестве связующего звена с ПК используем USB — UART (COM — UART) переходник и любую терминальную программу на стороне ПК, например Terminal Emulator в BASCOM-AVR. Не забываем также выставить скорость (Baud) на 9600.

Я собрал схему на макетной плате с механическими контактами. Вот что получилось:

С «железной» частью разобрались, теперь приступим к программной.

На BASCOM-AVR я написал следующую программу для работы с датчиком:

$regfile = «m8def.dat»
$crystal = 8000000
$baud = 9600 Config Portc.5 = Output
Trig Alias Portc.5
Config Portc.4 = Input Dim S As Word
Dim R As Single Do
Trig = 1
Waitus 15
Trig = 0
Waitus 10
Pulsein S , Pinc , 4 , 1
R = S * 0.1725
Print R
Waitms 50
Loop End

В трёх первых строках программы мы назначаем микроконтроллер и его тактовую частоту, а также скорость работы UART (в данном случае 9600 бод). Далее мы конфигурируем порт PORTC.5 микроконтроллера на выход, так как сюда у нас подключен пин Trig датчика расстояния. Порту PORTC.

5 мы назначили имя Trig чтобы нам было легче писатьчитать код, при обращении к этому имени мы обращаемся к PORTC.5. Также мы сконфигурировали PORTC.4 на вход, поскольку сюда мы подключили Echo датчика. Потом мы задаём переменные в которых будем хранить данные для расчёта и отображения.

И тут начинается самое интересное, открываем операторные скобки бесконечного цикла (Do, Loop) и видим следующий код:

Trig = 1
Waitus 15
Trig = 0
Waitus 10

Здесь мы подаём кратковременный импульс длительностью 15 микросекунд на Trig и ждём 10 микросекунд.

Командой Pulsein S , Pinc , 4 , 1 мы замеряем длительность импульса на PINC.4 и заносим эту длительность в переменную S. Дальше вычисляем длину и записываем её в переменную R (R = S * 0.1725). 0.1725 — коэффициент для расчёта расстояния из длинны импульса. Командой Print R выводим в UART расстояние до препятствия. 

Работа устройства в «железе»:

При прошивке микроконтроллера не забываем установить фьюз-биты на работу от внутреннего тактового генератора на 8 МГц.

Вот скрин фьюз-битов:

Урок 20. Подключение семисегментного индикатора по трём проводам (74HC595)

ОбозначениеТипНоминалКоличествоПримечаниеМагазинМой блокнот
МК AVR 8-бит

ATmega8A-AU

1 Поиск в Utsource В блокнот
Ультразвуковой дальномер HC-SR04 1 Поиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Источник: http://cxem.net/mc/mc234.php

Ссылка на основную публикацию