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

Visits: 1708


Страница в pdf

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

HC-SR04_01bVcc – напряжение питания 5 вольт
Trig – вход запускающих импульсов для процесса измерения
Echo – выход импульса длительность которого пропорциональна расстоянию.
GND – общий провод питания.

Для демо примера будем использовать плату ILLISSI-4B-03-primum и плату индикации ILLISSI-4С-01-secundo.

HC-SR04_02

В качестве управления будем использовать вывод RC2, для измерения длительности будем использовать вход T1G (RB5). Подключение:

HC-SR04_03

Для измерения частоты используется таймер 1 и его Gate-модуль управления.

HC-SR04_04

Gate-модуль управления появился в новых Pic-контроллерах серии PIC16F19xx. Теперь элементарно легко построить измерителей длительности и частоты сигнала, которые аппаратно, самостоятельно выполняют эти функции не отвлекая микроконтроллер от основной задачи.

Для измерения сигнала настроим таймер для измерение длительности импульсов. На вход будем подавать тактовую частоту 1 мГц. Что соответствует 1 мкс длительности. Измеряемый импульс (эхо от модуля HC-SR04) будем подавать на вход T1G.

T1CON=0b00110001; // настройка таймера T1CON
     // |||||| |
     // |||||| +-- TMR1ON таймер включить
     // |||||+---- T1SYNC синхронизация отключена 
     // ||||+----- T1OSCEN генератор отключен
     // ||++------ T1CKPS настройка предделителя 00 - 1:1
     // ++-------- TMR1CS выбор тактовой частоты FOSC
 T1GCON=0b11000100; // регистр ворот
       // ||||||++-- T1GSS<1:0>: выбор входа для модуля ворот 00 - TGP1
       // ||||||+--- T1GVAL: Флаг
       // |||||+---- T1GSPM: выбор синхронизация от модуля единичного импульса
       // ||||+----- T1GGO/DONE: запуск одиночного измерения 
       // |||+------ T1GSPM: управление триггером режима (отключен)
       // ||+------- T1GTM: управление триггером режима (отключен)
       // |+-------- T1GPOL: таймер 1 работает когда уровень высокий
       // +--------- TMR1GE: регистр ворот включен и управляет таймером 1

Вариант настройки таймера выполнен с учетом, что тактовая частота контроллера 32 мГц. (хотя с успехом можно использовать и более низкие тактовые частоты от 1 мГц.).

Процесс измерения начинается с инициализации таймера и сброса флага переполнения таймера.

TMR1IF=0; // сброс флага переполнения
TMR1H=0; // сброс регистров таймер
TMR1L=0; //

Особенности работы модуля не соответствующие описанию.

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

HC-SR04_05

Длительность импульса ответа непрерывна и прерывается только в момент формирования импульса запуска измерения. Вид на ответ от модуля в ситуации отсутствия эха.

HC-SR04_06

Если эхо присутствует, то мы будем видеть следующие осциллограммы работы с модулем.

HC-SR04_07

В начале формируется (на входе Trig) импульс запуска длительностью не менее 10 мкс. После этого модуль через 0,5 мс, начинает формировать ответ импульсом длительностью пропорциональной расстоянию. На нижнем рисунке, пример, формирования импульса (это расстояние от поверхности моего стола до потолка и составляет 1,74 м).

HC-SR04_08

Длительность 10114 мкс. Что составляет 10114/58=174 см.


После инициализации регистров таймера и очистки флага переполнения, формируем импульс запуска длительностью не менее 10 мкс.

// формирование импульса запуска
 LATC2=1;
 __delay_us (10);
 LATC2=0;

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

TMR1ON=1; // включение таймера
T1GGO=1; // запуск одиночного измерения

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

while(T1GGO)// ожидания окончания измерения
 {
    CLRWDT(); // сброс сторожевого таймера
    if(TMR1IF)
   {
      T1GGO=0;// останов измерения при переполнении таймера
      ERROR++;// подсчет количества измерений когда отсутствует эхо
   } 
 }

После выполнения измерения, останавливаем таймер:

TMR1ON=0;//остановить таймер

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

if(!TMR1IF)
 {
     // чтение регистров таймера
     pwm_reg=TMR1L;
     pwm_reg += TMR1H << 8;

// ФИЛЬТР устранения дрожания индикации при смене показаний "накапливающий интегратор"
 if(pwm_reg^pwm_regp && porog)porog--;
 else 
 {
    pwm_regp=pwm_reg;
    porog=2;
 }
 // преобразование в сантиметры длины
 // bin_dec (pwm_reg/58,2); // индикации "не отфильтрованного" сигнала
    bin_dec (pwm_regp/58,2);// индикация после фильтра
    ERROR=0;
 // индикация
    indic (dmil,miln,stys,dtys,tysc,sotn,dest,edin,6); // вывод значения на дисплей
 }
 else
 {
     // индикация отсутствия эха
     if(ERROR>4)indic (cM,cn,co,0,cE,ch,co,cM,0); // вывод значения на дисплей
 }

Примечание: для устранения “дрожания” показаний применим «накапливающий интегратор». За это отвечают строки:

// ФИЛЬТР устранения дрожания индикации при смене показаний "накапливающий интегратор"
 if(pwm_reg^pwm_regp && porog)porog--;
 else 
 {
    pwm_regp=pwm_reg;
    porog=2;
 }

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

__delay_ms (50);// формирования периода запуска сенсора

Выводы: Датчик обладаем широким углом захвата, поэтому его рекомендуется устанавливать над плоскими поверхностями на расстоянии не менее 10 мм. В связи с этим он захватывает отраженные импульсы от предметов которые находятся от его оси до ±15 грд., что необходимо учитывать при конструировании устройств. Реальная чувствительность не более 3 метров. На большие расстояния не хватает или мощности формируемого импульса или чувствительности приемника. Мое мнение – я считаю, что для таких модулей вывод измеряемого параметра в виде ширины импульса не практично, так-как получается два цикла измерения, первое это измерение делает модуль, второе контроллер. Для таких устройств желательно, что-бы все эти преобразования были выполнены в самом модуле. А на выходе формировать уже значение расстояния в виде готовых цифровых данных. А получать данные из модуля, удобно через последовательные интерфейсы I2C, SPI или UART.


Фото демо проекта

HC-SR04_11

HC-SR04_09


Видео демо проекта

__


Проект

Описание с изменениями V2.0


Это может быть интересно


  • Цифровой тахометр для автомобиля CH-С3300Цифровой тахометр для автомобиля CH-С3300
    Visits: 1870  Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика …
  • Датчик контроля протечки воды ch-c0020Датчик контроля протечки воды ch-c0020
    Visits: 1926 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Visits: 792 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • Arduino LCD + STONE STVI056WT-01 + Strain gaugeArduino LCD + STONE STVI056WT-01 + Strain gauge
    Visits: 419 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …
  • Analog-to-Digital Converter with Computation Technical BriefAnalog-to-Digital Converter with Computation Technical Brief
    Visits: 1208 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …
  • Регулятор влажности ch-3800Регулятор влажности ch-3800
    Visits: 1382   И еще один проект на плате ch-c3xxx –  универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …
  • Просто о структурах и объединениях в СиПросто о структурах и объединениях в Си
    Visits: 2128 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
  • Стабилизатор тока для светодиодов SN3350Стабилизатор тока для светодиодов SN3350
    Visits: 2572 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V  драйвер светодиодов с внутренним ключом  SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Visits: 800 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
  • Контроллер управления светодиодным освещением с дистанционным управлениемКонтроллер управления светодиодным освещением с дистанционным управлением
    Visits: 1979 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …