Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Урок 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 МГц.

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

Фьюзы

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
МК AVR 8-бит
ATmega8A-AU
1 Поиск в магазине ОтронВ блокнот
Ультразвуковой дальномерHC-SR041 Поиск в магазине ОтронВ блокнот
Добавить все

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

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

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (14) | Я собрал (0) | Подписаться

+1
Владимир #
А можно использовать usbasp?
Ответить
0
Attiny2313 #
Можно. Я им и пользуюсь
Ответить
0
Владимир #
Как подключить ATmega 8 к usbasp (какие контакты)? И какая программа нужна для измерения расстояния?
Ответить
0
dossalab #
usbasp подойдет только для прошивки МК. Для прошивки соединяете одноименные выводы usbasp и МК.
Ответить
0
Дмитрий #
А могу я одним контроллером опрашивать и слушать ответ от двух или более датчиков одновременно?
Ответить
0
Алексеев Александр #
Я подключил несколько датчиков к одному таймеру через диоды и подтянул их резистором к земле.
Ответить
0
Константин #
Почему нет? Если количество ног, и скорость контроллера позволяют.
Ответить
0
Undead #
Кто знает как реализовать возможность проверки подключения датчика? Хотел сделать исходя из того, что при отключённом датчике нули выдаются в UART с такой же скоростью как и при обнаружении объекта. А если объекта нет, то с задержкой 38мс, но только вот как я не пытался переделать ваш исходник не смог получить 38мс как число чтобы его обработать. К сожалению в BASCOM не силён, многие действия производил исходя из справки...
Ответить
0
savgik #
Подскажите пожалуйста зону видимости этого датчика
Ответить
0
Max #
Мой до 50см видит.
Ответить
0
Александр #
ALEX ты гений! Собрал запустил через Terminal v1.9 заработало сразу!
Ответить
0

[Автор]
#
Спасибки, приятно слышать
Ответить
0
Александр #
А можно ли вас попросить переписать программу чтобы в зависимости от дальности менялся выходной ток с МК. Диапазон 4-20мА
Ответить
0

[Автор]
#
Времени нет на что либо... так что могу дать совет, мудри ЦАП просто и отсюда уже составляй прогу чтобы в зависимости от расстояния менялось напряжение на выходе, а там уже вешай нагрузочный резак
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
UNI-T UT-61A Металлоискатель MD3010II
вверх