FLProg
Вход на сайт
Логин:
Пароль:
Категории раздела
Документация [14]
Блоки пользователей [148]
Цветовые темы [0]
Цветовые темы для программы FLProg предоставленные пользователями
Архив версий программы [169]
Поиск
...
Статистика

Онлайн всего: 29
Гостей: 25
Пользователей: 4
pa_bogidanov1965, СЛОН0077, alexcrey, Сергей
Пятница, 20.10.2017, 19:10
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Каталог файлов
Главная » Файлы » Блоки пользователей

Блок датчика дальномера HC-SR04, по прерыванию
[ · Скачать удаленно (233 kB) ] 29.05.2017, 12:05
Решены следующие проблемы
1) Зависание датчика после длительного обратного ожидания импульса
2) Увеличена точность показания в зависимости от условий окружающей среды
3) Появилась возможность опроса с заданной частотой(позволяет разгрузить остальную часть программы)
4) Решена проблема с ожиданием ответа (в библиотеке есть DELAY)
5) Есть возможность запустить индикацию на отдельный вывод(идет измерение или что-то не так)
6) Вывод сообщений об ошибках

Picture

Блок осуществляет опрос показаний дальномера типа 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;

HC-06_БЛОК
Пример работы (в примере информация с датчика выводиться на Дисплей(I2C),
индикация на LED 13)
Видео пример(выводиться расстояние и время опроса)
Категория: Блоки пользователей | Добавил: ecoins | Теги: дальномер, лаборатория, HC-06
Просмотров: 1057 | Загрузок: 235 | Комментарии: 12 | Рейтинг: 5.0/3
Всего комментариев: 121 2 »
avatar
0
1
Спасибо за работу. Сегодня опробую. Немного не понял, почему именно HC_SR04 должен быть привязан именно к указанным пинам? Если в описании в константе на TRIG и ECHO можно указывать номер пина. Дело в том, что у меня уже всё в распайке и нет возможности поменять пины на другие. И можете пояснить, как показания температуры будут влиять на точность измерения?
avatar
1
2
Проблема этого датчика и обычных драйверов к нему в том, что обычно ожидается время возврата импульса и в этом случае процессор подвисает на ожидании.
Это может продолжаться несколько сот миллисекунд и соответственно программа просто "висит" на этом опросе. 
Так же реализован и простой блок в библиотеке Flprog.
Нам приходилось из-за этого просто отказываться от этого датчика в разных двигающихся конструкциях.
Этот драйвер долго вымучивали и с ним используем датчик без проблем.
Но!!!
Ножка ECHO датчика должна быть подключена к пишу Arduino, который способен обрабатывать прерывания.
Обычно это пины 2 или 3, в Mega2560 их больше.
Успехов.
avatar
1
3
По температуре воздуха.
Плотность воздуха зависит от его температуры и она присутствует в формуле расчета расстояния.
Это позволяет несколько повысить точность излучения.
Ещё рекомендуют одевать войлочные чехлы на гильзы датчика - вроде в два раза увеличивает направленность. Это не проверяли.
avatar
0
4
Большое спасибо за ответ и разъяснения. У меня ECHO подключен к 3 пину, а TRIG к 4 и к тому же у меня NANO. Думаю у меня не всё потеряно ;). Честно сказать, я тоже замечал, что от изменения температуры, работает по разному, но думал, что влажность больше влияет. Так как у меня датчик в санузле стоит. А вот про сами гильзы знаю, что крепить за них термоклеем к корпусу совсем не стоит. Показания с ума сходят. Я так думаю эхо не равномерно по гильзе идёт. Пришлось переделывать крепления за плату. Спасибо за блок, опробую, отпишусь.
avatar
0
5
Мы как раз и на Nano испытывали в работе, он подключен был как у Вас: ECHO на пин 3, TRIG на пин 4.
Успехов.
avatar
0
6
файл блока удален. пришлось вырывать из проекта))
avatar
0
7
а для улучшения замеров на МАЛЫХ расстояниях (до 40см) - лучше с войлочными ушами или без?
avatar
0
8
Мы этого не проверяли, в одной из статей вычитали. Основная идея, чтобы не было не нужных касаний с алюминивыми гильзами - датчик через касания к ним можно принимать помехи.
avatar
0
9
Подскажите! Почему блок не хочет работать с Leonardo? C UNO работает нормально!
avatar
0
10
Может потому, что на Leonardo int0 на пин 3, int1 на пин 2,
А на Uno int0 на пин 2, int1 на пин 3,
то есть наоборот.
avatar
0
11
Хочу уточнить. В Вашем примере, данные не приходят в UART и LCD.
1-10 11-11
avatar
FLProg © 2017
Яндекс.Метрика