В этом уроке мы обсудим и спроектируем схему для измерения расстояния. Эта схема разработана путем сопряжения ультразвукового датчика «HC-SR04» с микроконтроллером AVR. В этом датчике используется техника под названием «ECHO», которую вы получаете, когда звук отражается обратно после удара о поверхность.
Мы знаем, что звуковые колебания не могут проникать через твердые тела. Итак, происходит следующее: когда источник звука генерирует вибрации, он движется по воздуху со скоростью 220 метров в секунду. Когда эти колебания встречаются с нашим ухом, мы описываем их как звуки. Как было сказано ранее, эти колебания не могут проходить сквозь твердое тело, поэтому, когда они ударяются о поверхность, например стену, они отражаются обратно к источнику с той же скоростью, что называется эхом.
Ультразвуковой датчик «HC-SR04» выдает выходной сигнал, пропорциональный расстоянию на основе эхо-сигнала. Датчик здесь генерирует звуковую вибрацию в ультразвуковом диапазоне при срабатывании триггера, после чего он ожидает возвращения звуковой вибрации. Теперь на основе параметров, скорости звука (220 м / с) и времени, необходимого для того, чтобы эхо достигло источника, он выдает выходной импульс, пропорциональный расстоянию.
Как показано на рисунке, сначала нам нужно инициировать датчик для измерения расстояния, то есть логический сигнал ВЫСОКОГО уровня на триггерный вывод датчика в течение более 10 мкс, после этого датчик отправляет звуковую вибрацию, после эха датчик обеспечивает сигнал на выходном контакте, ширина которого пропорциональна расстоянию между источником и препятствием.
Это расстояние рассчитывается как расстояние (в см) = ширина импульсного выхода (в мкс) / 58.
Здесь ширину сигнала следует брать кратными микросекундам (микросекунды или 10 ^ -6).
Необходимые компоненты
Аппаратное обеспечение: ATMEGA32, блок питания (5 В), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), конденсатор 1000 мкФ, резистор 10 кОм (2 шт.), Датчик HC-SR04.
Софт: Atmel studio 6.1, прогисп или flash magic.
Принципиальная схема и объяснение работы
Здесь мы используем PORTB для подключения к порту данных ЖК-дисплея (D0-D7). Любой, кто не хочет работать с FUSE BITS ATMEGA32A, не может использовать PORTC, поскольку PORTC содержит специальный тип связи, который можно отключить только путем изменения FUSEBITS.
В схеме, как вы заметили, я взял только два контрольных контакта, это дает гибкость для лучшего понимания. Бит контраста и READ / WRITE используются нечасто, поэтому их можно замкнуть на массу. Это переводит ЖК-дисплей в режим максимальной контрастности и чтения. Нам просто нужно управлять контактами ENABLE и RS, чтобы отправлять символы и данные соответственно.
Подключения, которые выполняются для ЖК-дисплея, приведены ниже:
PIN1 или VSS на землю
PIN2 или VDD или VCC на питание +5 В
PIN3 или VEE на землю (дает максимальный контраст для новичков)
PIN4 или RS (выбор регистра) к PD6 uC
PIN5 или RW (чтение / запись) на землю (перевод ЖК-дисплея в режим чтения упрощает взаимодействие для пользователя)
PIN6 или E (включить) к PD5 uC
PIN7 или D0 - PB0 uC
PIN8 или D1 - PB1 микроконтроллера
PIN9 или D2 - PB2 uC
PIN10 или D3 - PB3 uC
PIN11 или D4 - PB4 uC
PIN12 или D5 - PB5 микроконтроллера
PIN13 или D6 - PB6 uC
PIN14 или D7 - PB7 uC
В схеме вы можете видеть, что мы использовали 8-битную связь (D0-D7), однако это не обязательно, и мы можем использовать 4-битную связь (D4-D7), но с 4-битной коммуникационной программой становится немного сложнее. Итак, как показано в приведенной выше таблице, мы подключаем 10 контактов ЖК-дисплея к контроллеру, из которых 8 контактов - это контакты данных, а 2 контакта - для управления.
Ультразвуковой датчик представляет собой четырехконтактное устройство, PIN1- VCC или + 5V; PIN2-ТРИГГЕР; PIN3- ЭХО; PIN4- ЗЕМЛЯ. Триггерный штифт - это то место, где мы запускаем триггер, чтобы датчик измерил расстояние. Echo - это выходной контакт, на котором мы получаем расстояние в виде ширины импульса. Вывод эхо-сигнала здесь подключен к контроллеру как внешний источник прерывания. Таким образом, чтобы получить ширину выходного сигнала, вывод эхо-сигнала датчика подключается к INT0 (прерывание 0) или PD2.
1. Активация датчика путем нажатия спускового штифта минимум на 12 мкс.
2. Когда эхо становится высоким, мы получаем внешнее прерывание, и мы собираемся запустить счетчик (включающий счетчик) в ISR (подпрограмме обслуживания прерывания), которая выполняется сразу после срабатывания прерывания.
3. Как только эхо снова становится низким, генерируется прерывание, на этот раз мы собираемся остановить счетчик (отключив счетчик).
4. Итак, для импульса от высокого к низкому на выводе эхо-сигнала мы запустили счетчик и остановили его. Этот счетчик обновляется в памяти для получения расстояния, так как теперь у нас есть ширина эхо в счетчике.
5. Мы собираемся произвести дальнейшие вычисления в памяти, чтобы получить расстояние в см.
6. Расстояние отображается на ЖК-дисплее 16x2.
Для настройки вышеупомянутых функций мы собираемся установить следующие регистры:
Три вышеуказанных регистра должны быть настроены соответственно для работы установки, и мы собираемся их кратко обсудить, СИНИЙ (INT0): этот бит должен быть установлен в высокий уровень, чтобы разрешить внешнее прерывание0, как только этот вывод будет установлен, мы сможем почувствовать изменения логики на выводе PIND2.
КОРИЧНЕВЫЙ (ISC00, ISC01): эти два бита регулируются для соответствующего логического изменения в PD2, которое следует рассматривать как прерывание.
Итак, как было сказано ранее, нам нужно прерывание, чтобы начать счет и остановить его. Таким образом, мы устанавливаем ISC00 как единицу и получаем прерывание, когда есть логический уровень от LOW до HIGH в INT0; другое прерывание, когда есть логика ВЫСОКИЙ до НИЗКИЙ.
КРАСНЫЙ (CS10): этот бит просто включает и выключает счетчик. Хотя работает вместе с другими битами CS10, CS12. Мы не делаем здесь предварительного масштабирования, поэтому нам не нужно о них беспокоиться.
Вот некоторые важные вещи, о которых следует помнить:
Мы используем внутренние часы ATMEGA32A, которые составляют 1 МГц. Здесь нет предварительного масштабирования, мы не выполняем процедуру генерации прерывания сравнения совпадений, поэтому никаких сложных настроек регистров.
Значение счета после подсчета сохраняется в 16-битном регистре TCNT1.
Также проверьте этот проект с помощью arduino: Измерение расстояния с помощью Arduino
Объяснение программирования
Работа датчика измерения расстояния объясняется шаг за шагом в приведенной ниже программе C.
#include // заголовок для включения управления потоком данных на выводах #define F_CPU 1000000 // сообщающая частота кристалла контроллера прикреплена #include