Блок датчика дальномера HC-SR04, по прерыванию

Решены следующие проблемы
1) Зависание датчика после длительного обратного ожидания импульса
2) Увеличена точность показания в зависимости от условий окружающей среды
3) Появилась возможность опроса с заданной частотой(позволяет разгрузить остальную часть программы)
4) Решена проблема с ожиданием ответа (в библиотеке есть DELAY)
5) Есть возможность запустить индикацию на отдельный вывод(идет измерение или что-то не так)
6) Вывод сообщений об ошибках

Блок осуществляет опрос показаний дальномера типа HC_SR04
с использованием аппаратных прерываний. В блоке использован код из библиотеки iarduino_HC_SR04_int.
Датчик надежно перезапускается при переподключениях во время работы.
===================================================================
Входы:
EN (boool) – разрешение работы.
T_ms(integer) – период опроса в ms. Может быть равен 0. В этом случае скорость опроса будет зависеть
исключительно от расстояния до препятствия – чем ближе,чем чаще. У процессора это отнимает
примерно 16мкс(на видео значение Т) – если период опроса больше 40 миллисекунд или не более
35мкс если меньше.
t_C (integer) – температура окружающего воздуха в Цельсиях – повышает точность измерения.
Если нет датчика температруры – установить на входе можно 23 градуса.
ECHO (byte) – номер пина, к которому подключается контакт ECHO датчика. Ниже описаны требования к этому пину.
TRIG (byte) – номер пина, к которому подключается контакт TRIG датчика.
Выходы:
Led (bool) – Меняет свое значение при каждом состоявшемся измерении.
Lcm (intrger) – измеренное значение(на видео значение L).
Если ECHO подключен к пину без прерывания Lcm=1;
Если ECHO подключен к пину без прерывания или завис датчик Lcm=2;
Если расстояние >400 см, Lcm=400;
===================================================================
Вывод ECHO датчика должен быть подключен к одному из прерываний:
Плата int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1 7
Due – позволяет ассоциировать функцию-обработчик прерывания с любым из доступных выводов.
Возможно под Due придется блок доработать
Примечание: В Mega2560 пины 21,20 используются интерфейсом i2c, пины 19,18 используются Serial3.
Вывод TRIG датчика подключается к любому пину, который может работать как дискретный вывод.
===================================================================
Описание работы.
При поднятом разрешении (вход EN=1):
1. Запускается процесс измерения – генерируется ультразвуковой импульс через пин TRIG.
2. После запуска измерения блок переходит в режим ожидания прерывания. Процесс при этом не занят блоком.
3. После прихода отраженного от предмета импульса – вход ECHO, вычисляется расстояние до предмета.
Блок по отношению к FLProg работает в фоновом режиме и минимально занимает процессорное время (16-35 мкс).

Если в течении 500 миллисекунд нет ответа от датчика, то делается попытка его перезапустить, в том числе и
как рекомендовали http://forum.arduino.cc/index.php?topic=55119.15 – замыкаем выход ECHO на землю в режиме вывода
на 100 миллисекунд. Процессор и в этом случае не занят.

Коды ошибок:
404 – расстояние больше 400 см;
403 – нет связи с датчиком, зависание(таймают более 500 мс);
402 – ECHO подключен не на пин с прерыванием;
401 – нет разрешения по EN;

 


3

Вложения

  • zip SR04_int
    Date added: 02.02.2018 19:52 File size: 59 КБ Downloads: 2359

Автор публікації

Офлайн 2 тижні

Сергей Глушенко

782
Коментарі: 15Публікації: 391Реєстрація: 04-02-2018

3 коментарі до “Блок датчика дальномера HC-SR04, по прерыванию”

  1. Добрый день. Хотел поставить 4 датчика HC-SR04 (ECHO 2 и 3 пин, TRIG 4 и 5 пин), но при подключении даже двух выдает ошибки.

    MAX6675_55_56_54_TT = millis() +1000;

    MAX6675_58_59_57_TT = millis() +1000;

    MAX6675_61_62_60_TT = millis() +1000;

    MAX6675_64_65_63_TT = millis() +1000;

    Как можно решить эту проблему.

    Заранее спасибо.

     

     

    0
  2. День добрый!

    Возможно Вам будет интересно – в проекте с двумя такими блоками выдаёт ошибку:

    exit status 1

    duplicate label ‘End1’

    Закомментировал строку с ошибкой, всё пошло.

    0

Залишити коментар

Войти с помощью: