- Необходимые материалы:
- Как работает ультразвуковой датчик?
- Программирование вашего микроконтроллера PIC:
Чтобы любой проект ожил, нам нужны датчики. Датчики действуют как глаза и уши для всех встроенных приложений, они помогают цифровому микроконтроллеру понять, что на самом деле происходит в этом реальном аналоговом мире. В этом руководстве мы узнаем, как подключить ультразвуковой датчик HC-SR04 к микроконтроллеру PIC.
HC-SR04 представляет собой ультразвуковой датчик, который может быть использован для измерения расстояния в любом месте между 2 см до 450 см (теоретически). Этот датчик зарекомендовал себя во многих проектах, которые включают обнаружение препятствий, измерение расстояния, картографирование окружающей среды и т. Д. В конце этой статьи вы узнаете, как работает этот датчик и как взаимодействовать с микроконтроллером PIC16F877A для измерения расстояния и отображения. это на ЖК-экране. Звучит интересно! Итак, приступим…
Необходимые материалы:
- PIC16F877A MCU с настройкой программирования
- ЖК-дисплей 16 * 2
- Ультразвуковой датчик (HC-SR04)
- Соединительные провода
Как работает ультразвуковой датчик?
Прежде чем мы продолжим, мы должны знать, как работает ультразвуковой датчик, чтобы мы могли лучше понять это руководство. Ультразвуковой датчик, используемый в этом проекте, показан ниже.
Как видите, у него есть два круглых глаза-выступа и четыре штифта, выходящие из него. Две подобные глазам проекции - это передатчик и приемник ультразвуковой волны (далее именуемой волной США). Передатчик излучает американскую волну с частотой 40 Гц, эта волна распространяется по воздуху и отражается обратно при обнаружении объекта. Обратные волны наблюдаются приемником. Теперь мы знаем время, необходимое этой волне, чтобы отразиться и вернуться, и скорость американской волны также универсальна (3400 см / с). Используя эту информацию и приведенные ниже формулы для средней школы, мы можем рассчитать пройденное расстояние.
Расстояние = Скорость × Время
Теперь, когда мы знаем, как работает датчик США, давайте посмотрим, как его можно связать с любым MCU / CPU с помощью четырех контактов. Эти четыре контакта - Vcc, Trigger, Echo и Ground соответственно. Модуль работает от +5 В, поэтому вывод Vcc и заземления используется для питания модуля. Два других контакта - это контакты ввода / вывода, с помощью которых мы связываемся с нашим MCU. Триггер вывод должен быть объявлен как выход и сделал максимум для 10us, это будет передавать США волну в воздухе, как 8 цикла звуковой взрыв. Как только волна будет обнаружена, контакт Echo перейдет в высокий уровень в течение точного интервала времени, который потребовался американской волной, чтобы вернуться обратно в модуль датчика. Следовательно, этот вывод Echo будет объявлен как вводи таймер будет использоваться для измерения того, как долго штифт был высоким. Это можно понять по временной диаграмме ниже.
Надеюсь, вы нашли пробный способ сопряжения этого датчика с PIC. В этом руководстве мы будем использовать модуль таймера и ЖК-модуль, и я предполагаю, что вы знакомы с обоими. Если нет, вернитесь к соответствующему руководству ниже, поскольку я пропущу большую часть информации, связанной с ним.
- Интерфейс ЖК-дисплея с микроконтроллером PIC
- Понимание таймеров в микроконтроллере PIC
Принципиальная электрическая схема:
Полная принципиальная схема для сопряжения ультразвукового датчика с PIC16F877A показана ниже:
Как показано, схема включает в себя не что иное, как ЖК-дисплей и сам ультразвуковой датчик. Датчик US может питаться от +5 В и, следовательно, питается напрямую от регулятора напряжения 7805. Датчик имеет один выходной контакт (триггерный контакт), который подключен к контакту 34 (RB1), а входной контакт (контакт Echo) подключен к контакту 35 (RB2). Полное штыревое соединение показано в таблице ниже.
S.No: |
Номер контакта PIC |
Имя контакта |
Соединен с |
1 |
21 год |
RD2 |
RS LCD |
2 |
22 |
RD3 |
E LCD |
3 |
27 |
RD4 |
D4 ЖК-дисплея |
4 |
28 |
RD5 |
D5 ЖК-дисплея |
5 |
29 |
RD6 |
D6 ЖК-дисплея |
6 |
30 |
RD7 |
D7 ЖК-дисплея |
7 |
34 |
RB1 |
Триггер США |
8 |
35 год |
RB2 |
Эхо США |
Программирование вашего микроконтроллера PIC:
Полная программа для этого руководства приведена в конце этой страницы, ниже я объяснил код на небольшие значимые полные фрагменты, чтобы вы могли понять. Как было сказано ранее, программа включает в себя концепцию интерфейса ЖК-дисплея и таймера, которые не будут подробно объяснены в этом руководстве, поскольку мы уже рассмотрели их в предыдущих руководствах.
Внутри основной функции мы начинаем с инициализации контактов ввода-вывода и других регистров, как обычно. Мы определяем контакты ввода-вывода для ЖК-дисплея и датчика US, а также запускаем регистр Timer 1, устанавливая его для работы с предварительным скаляром 1: 4 и использования внутренних часов (Fosc / 4).
TRISD = 0x00; // PORTD объявлен как выход для сопряжения с ЖК-дисплеем TRISB0 = 1; // Определить вывод RB0 как вход для использования в качестве вывода прерывания TRISB1 = 0; // Триггерный контакт датчика US отправляется как выходной контакт TRISB2 = 1; // Эхо-вывод датчика УЗИ устанавливается как входной вывод TRISB3 = 0; // RB3 - вывод для светодиода T1CON = 0x20; // 4 предскалярные и внутренние часы
Таймер 1 - это 16-битный таймер, используемый в PIC16F877A, регистр T1CON управляет параметрами модуля таймера, и результат будет сохранен в TMR1H и TMR1L, так как это 16-битный результат, первые 8 будут сохранены в TMR1H, а следующие 8 в TMR1L. Этот таймер можно включить или выключить, используя TMR1ON = 0 и TMR1ON = 1 соответственно.
Теперь таймер готов к использованию, но мы должны послать волны США из датчика, для этого мы должны держать вывод триггера на высоком уровне в течение 10 мкс, это делается с помощью следующего кода.
Триггер = 1; __delay_us (10); Триггер = 0;
Как показано на временной диаграмме выше, вывод Echo будет оставаться на низком уровне до тех пор, пока волна не вернется, а затем будет повышаться и оставаться на высоком уровне в течение точного времени, необходимого для возврата волн. Это время должно быть измерено модулем Таймера 1, что можно сделать с помощью строки ниже
пока (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0;
После измерения времени результирующее значение будет сохранено в регистрах TMR1H и TMR1L, эти регистры должны быть объединены для сбора, чтобы получить 16-битное значение. Это делается с помощью строки ниже
time_taken = (TMR1L - (TMR1H << 8));
Это time_taken будет в байтах, чтобы получить фактическое значение времени, мы должны использовать формулу ниже.
Время = (16-битное значение регистра) * (1 / Внутренние часы) * (Предварительная шкала) Внутренние часы = Fosc / 4 Где в нашем случае Fosc = 20000000 МГц и предварительная шкала = 4 Следовательно, значение внутренних часов будет 5000000Mhz, а значение времени будет Time = (16-битное значение регистра) * (1/5000000) * (4) = (16-битное значение регистра) * (4/5000000) = (16-битное значение регистра) * 0,0000008 секунды (ИЛИ) Время = (16-битное значение регистра) * 0,8 микросекунды
В нашей программе значение 16-битного регистра хранится в переменной time_taken, и, следовательно, строка ниже используется для вычисления time_taken в микросекундах.
time_taken = time_taken * 0,8;
Далее нам нужно найти, как рассчитать расстояние. Как известно расстояние = скорость * время. Но здесь результат следует разделить на 2, поскольку волна покрывает как расстояние передачи, так и расстояние приема. Скорость нашей волны (звука) составляет 34000 см / с.
Расстояние = (Скорость * Время) / 2 = (34000 * (16-битное значение регистра) * 0,0000008) / 2 Расстояние = (0,0272 * 16-битное значение регистра) / 2
Таким образом, расстояние можно рассчитать в сантиметрах, как показано ниже:
расстояние = (0,0272 * взятое время) / 2;
После расчета значения пройденного расстояния и времени нам просто нужно отобразить их на ЖК-экране.
Измерение расстояния с помощью PIC и ультразвукового датчика:
После подключения и загрузки кода ваша экспериментальная установка должна выглядеть примерно так, как показано на рисунке ниже.
Плата PIC Perf, показанная на этом рисунке, была создана для нашей серии руководств по PIC, в которых мы узнали, как использовать микроконтроллер PIC. Возможно, вы захотите вернуться к этим руководствам по микроконтроллерам PIC с использованием MPLABX и XC8, если вы не знаете, как записать программу с помощью Pickit 3, поскольку я пропущу всю эту основную информацию.
Теперь поместите объект перед датчиком, и он должен показать, как далеко объект от датчика. Вы также можете заметить, что время в микросекундах отображается для передачи и возврата волны.
Вы можете переместить объект на желаемое расстояние и проверить значение, отображаемое на ЖК-дисплее. Я смог измерить расстояние от 2 см до 350 см с точностью 0,5 см. Это вполне удовлетворительный результат! Надеюсь, вам понравился урок и вы узнали, как сделать что-то самостоятельно. Если у вас есть какие-либо сомнения, напишите их в разделе комментариев ниже или используйте форумы.
Также проверьте взаимодействие ультразвукового датчика с другими микроконтроллерами:
- Измерение расстояния на основе Arduino и ультразвукового датчика
- Измерьте расстояние с помощью ультразвукового датчика Raspberry Pi и HCSR04
- Измерение расстояния с помощью микроконтроллера HC-SR04 и AVR