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


Практически для любого современного проекта встраиваемой электроники необходимы датчики. Они являются "глазами" и "ушами" проекта и помогают микроконтроллеру получать информацию о том, что происходит вокруг него. В данной статье мы рассмотрим подключение ультразвукового датчика HC-SR04 к микроконтроллеру PIC. Измеренное с помощью датчика HC-SR04 расстояние мы будем отображать на экране ЖК дисплея 16х2.

Внешний вид подключения ультразвукового датчика HC-SR04 к микроконтроллеру PIC

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

Также на нашем сайте мы рассматривали подключение ультразвукового датчика HC-SR04 к другим микроконтроллерам (платам):

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

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. Ультразвуковой датчик HC-SR04 (купить на AliExpress).
  3. Держатель микросхем на 40 контактов (купить на AliExpress).
  4. Программатор PICkit 3 (купить на AliExpress).
  5. Кварцевый генератор 20 МГц (купить на AliExpress).
  6. Конденсаторы 22 пФ (2шт.), 0,1 мкФ и 10 мкФ (купить на AliExpress).
  7. Регулятор напряжения 7805 (купить на AliExpress).
  8. ЖК дисплей 16х2 (купить на AliExpress).
  9. Светодиод.
  10. Перфорированная плата.
  11. Соединительные провода.

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

Внешний вид ультразвукового датчика HC-SR04

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

  1. Вначале с формируется сигнал высокого уровня длительностью 10 мкс, который запускает в работу ультразвуковой датчик.
  2. Затем модуль автоматически посылает 8 импульсов с частотой 40 кГц, а затем проверяет приняты они или нет.
  3. Если эти излученные сигналы принимаются, то вычисляется время между временем передачи этих импульсов и их приемом.

Расстояние затем можно рассчитать по следующей формуле:

Distance= (Time x Speed of Sound in Air (340 m/s))/2

где Time – измеренное датчиком время;
Speed of Sound in Air – скорость звука в воздухе, равная 340 м/с.

Временные диаграммы

Как уже указывалось, измерение расстояний осуществляется на основе эхо. Вначале передается импульс длительностью 10 мкс чтобы запустить модуль в работу. После этого модуль автоматически передает 8 импульсов с частотой 40 кГц (то есть ультразвуковая частота) и проверяет эхо – то есть не вернулись ли эти импульсы обратно, отразившись от препятствия. Если импульсы вернулись обратно, то расстояние до препятствия можно рассчитать по следующей формуле:

Distance= (time x speed)/2

В этой формуле мы разделили произведение скорости и времени на 2 потому что измеренное время равно сумме времен распространения звуковой волны до препятствия и обратно. То есть время, чтобы звук достиг препятствия, равно половине времени, измеренного датчиком.

Временные диаграммы работы модуля приведены на следующем рисунке:

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

Как показано на рисунке сначала нам нужно инициировать датчик для измерения расстояний, для этого на его триггерный контакт (trigger pin) необходимо подать логический сигнал высокого уровня длительностью не менее 10 мкс, после этого датчик генерирует серию звуковых колебаний и после получения отраженного сигнала (эхо) датчик обеспечивает на своем выходе сигнал, пропорциональный расстоянию между ним и препятствием.

Схема проекта

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

Схема подключения ультразвукового датчика HC-SR04 к микроконтроллеру PICКроме микроконтроллера PIC в схеме присутствуют ЖК дисплей и ультразвуковой датчик HC-SR04. Ультразвуковой датчик запитывается от +5V, поэтому его можно запитать от регулятора напряжения 7805, как и микроконтроллер PIC. Триггерный контакт датчика (Trigger pin) подключен к контакту 34 (RB1) микроконтроллера PIC, а выходной контакт датчика (Echo pin) – к контакту 35 (RB2) микроконтроллера. Полная схема соединений проекта приведена в следующей таблице.

№ п/п № контакта микроконтроллера Наименование контакта микроконтроллера Куда подключен
1 21 RD2 RS of LCD
2 22 RD3 E of LCD
3 27 RD4 D4 of LCD
4 28 RD5 D5 of LCD
5 29 RD6 D6 of LCD
6 30 RD7 D7 of LCD
7 34 RB1 контакт Trigger ультразвукового датчика
8 35 RB2 контакт Echo ультразвукового датчика

Далее перейдем к программе.

Объяснение программы для микроконтроллера PIC

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

В программе в начале функции main мы инициализируем необходимые нам контакты ввода/вывода и регистры. Мы будем использовать Timer 1 с коэффициентом деления предделителя 1:4 и внутренней частотой синхронизации (Fosc/4).

Timer 1 является 16-битным таймером в микроконтроллере  PIC16F877A. Для управления работой таймера служит регистр T1CON, а результат сохраняется в регистрах TMR1H и TMR1L (первые 8 бит – в регистре TMR1H, остальные 8 бит – в регистре TMR1L). Таймер можно включить/выключить при помощи установки битов TMR1ON=1 и TMR1ON=0 соответственно.

После настройки таймера нам необходимо излучить ультразвуковую волну в направлении препятствия, для этого мы подаем уровень high на контакт Trigger датчика в течение 10 мкс с помощью следующего фрагмента кода.

Как показано на временных диаграммах работы датчика, приведенных выше, контакт Echo датчика будет оставаться в состоянии low до тех пор пока излученная ультразвуковая волна не вернется к датчику, после этого на контакте Echo будет уровень high в течение времени, которое потребовалось ультразвуковой волне на распространение до препятствия и обратно. Затем мы это время измеряем с помощью Timer 1 следующим образом:

И затем полученный результат измерения времени считываем из регистров TMR1H и TMR1L.

Считанное время будет в формате байтов, для получения истинного значения времени нам необходимо использовать следующую формулу:

В нашей программе значение 16-битного регистра мы сохранили в переменной time_taken, следовательно, для расчета времени в микросекундах по вышеприведенной формуле получим:

После этого нам необходимо определить расстояние до препятствия. Как мы знаем, distance = speed * time. Но в нашем случае нам полученный результат расстояния необходимо разделить на 2 поскольку ультразвуковая волна распространялась до препятствия и обратно. Скорость ультразвуковой волны в воздухе равна 34000cm/s, следовательно, получим:

И результирующая формула для расчета расстояния будет выглядеть следующим образом:

После этого мы будем выводить на экран ЖК дисплея измеренные значения времени и расстояния.

Тестирование работы проекта

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

Перфорированную плату с установленным на нее микроконтроллером PIC мы использовали из наших предыдущих проектов по микроконтроллерам PIC. Программировали мы микроконтроллер PIC с помощью программ MPLABX, XC8 и программатора Pickit 3.

Поместите любой объект перед датчиком – после этого на ЖК дисплее должно начать высвечиваться расстояние до него и время распространения ультразвуковой волны до него и обратно.

Тестирование работы проекта

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

Исходный код программы

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
151 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *