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

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Четверг, 13.12.2018, 03:54
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

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


Внимание всем пользователям программы FLProg! В течении ближайших двух дней будет осуществляться переход на новую платформу
Чтобы продолжить общение на форуме вы можете перейти сюда
Сообщения оставленные на старом форуме будут утеряны безвозвратно
Приятного Вам Нового года и до встречи в новом 2018 году
С уважением Администрация flprog.ru
Каталог файлов
Главная » Файлы » Блоки пользователей

Блок датчика дальномера 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
Просмотров: 1814 | Загрузок: 459 | Комментарии: 12 | Рейтинг: 5.0/3
Всего комментариев: 121 2 »
avatar
0
1 Ferrum • 15:04, 29.05.2017
Спасибо за работу. Сегодня опробую. Немного не понял, почему именно HC_SR04 должен быть привязан именно к указанным пинам? Если в описании в константе на TRIG и ECHO можно указывать номер пина. Дело в том, что у меня уже всё в распайке и нет возможности поменять пины на другие. И можете пояснить, как показания температуры будут влиять на точность измерения?
avatar
1
2 ecoins • 15:22, 29.05.2017
Проблема этого датчика и обычных драйверов к нему в том, что обычно ожидается время возврата импульса и в этом случае процессор подвисает на ожидании.
Это может продолжаться несколько сот миллисекунд и соответственно программа просто "висит" на этом опросе. 
Так же реализован и простой блок в библиотеке Flprog.
Нам приходилось из-за этого просто отказываться от этого датчика в разных двигающихся конструкциях.
Этот драйвер долго вымучивали и с ним используем датчик без проблем.
Но!!!
Ножка ECHO датчика должна быть подключена к пишу Arduino, который способен обрабатывать прерывания.
Обычно это пины 2 или 3, в Mega2560 их больше.
Успехов.
avatar
1
3 ecoins • 15:26, 29.05.2017
По температуре воздуха.
Плотность воздуха зависит от его температуры и она присутствует в формуле расчета расстояния.
Это позволяет несколько повысить точность излучения.
Ещё рекомендуют одевать войлочные чехлы на гильзы датчика - вроде в два раза увеличивает направленность. Это не проверяли.
avatar
0
4 Ferrum • 18:17, 29.05.2017
Большое спасибо за ответ и разъяснения. У меня ECHO подключен к 3 пину, а TRIG к 4 и к тому же у меня NANO. Думаю у меня не всё потеряно ;). Честно сказать, я тоже замечал, что от изменения температуры, работает по разному, но думал, что влажность больше влияет. Так как у меня датчик в санузле стоит. А вот про сами гильзы знаю, что крепить за них термоклеем к корпусу совсем не стоит. Показания с ума сходят. Я так думаю эхо не равномерно по гильзе идёт. Пришлось переделывать крепления за плату. Спасибо за блок, опробую, отпишусь.
avatar
0
5 ecoins • 19:45, 29.05.2017
Мы как раз и на Nano испытывали в работе, он подключен был как у Вас: ECHO на пин 3, TRIG на пин 4.
Успехов.
avatar
0
6 Noname • 22:49, 15.07.2017
файл блока удален. пришлось вырывать из проекта))
avatar
0
7 alex_step • 10:32, 29.07.2017
а для улучшения замеров на МАЛЫХ расстояниях (до 40см) - лучше с войлочными ушами или без?
avatar
0
8 ecoins • 10:39, 29.07.2017
Мы этого не проверяли, в одной из статей вычитали. Основная идея, чтобы не было не нужных касаний с алюминивыми гильзами - датчик через касания к ним можно принимать помехи.
avatar
0
9 samshit • 12:31, 27.08.2017
Подскажите! Почему блок не хочет работать с Leonardo? C UNO работает нормально!
avatar
0
10 ecoins • 16:10, 27.08.2017
Может потому, что на Leonardo int0 на пин 3, int1 на пин 2,
А на Uno int0 на пин 2, int1 на пин 3,
то есть наоборот.
avatar
0
11 samshit • 19:12, 27.08.2017
Хочу уточнить. В Вашем примере, данные не приходят в UART и LCD.
1-10 11-11
avatar
FLProg © 2018
uCozЯндекс.Метрика