ДАЛЬНОМЕР НА ARDUINO
Ультразвуковой дальномер с дисплеем на базе платформы Arduino.
- Используется дисплей на драйвере TM74HC59, что позволяет выводить расстояние с десятичной точкой
- Для определения расстояния используется дешёвый модуль ультразвукового дальномера
- Показания с дальномера фильтруются двумя фильтрами, благодаря чему достигнута точность ~1 мм
- Отдельный переключатель позволяет сдвигать начало отсчёта на противоположный конец корпуса
- Работает от 3х батареек формата АА
ПОДРОБНОЕ ВИДЕО ПО ПРОЕКТУ
- В данном видео показан полный и максимально подробный процесс разработки и изготовления устройства, а также обзор его возможностей и функций, всё это с приятным монтажиком, музычкой и комментариями. В общем, приятного просмотра!
ИНСТРУКЦИИ ПО ЭКСПЛУАТАЦИИ
- Собрать, прошить, включить
- УЗ дальномер имеет большой угол измеряющего луча, поэтому на 4х метрах до цели измеряющая область имеет диаметр около 4 метров. И чем ровнее поверхность объекта измерения, тем точнее измерения
- Переключатель автоматически “прибавляет” к расстоянию длину корпуса
МАТЕРИАЛЫ И КОМПОНЕНТЫ
Ссылки на магазины, с которых я закупаюсь уже не один год
Вам скорее всего пригодится:
- Arduino NANO 328p – искать
- Дисплей https://ali.ski/QIM7d
- Сонар https://ali.ski/NG1eD
- Батарейный отсек http://ali.ski/QGkOp
- Корпус
- Выключатели https://ali.ski/5L0Sx
- Монтажный провод https://ali.ski/rto9T5
- Всё для пайки https://alexgyver.ru/all-for-soldering/
ПРОШИВКА И НАСТРОЙКА
Содержимое папок в архиве
- libraries – библиотеки
- sonar_meter – прошивка для Arduino
Как прошить?
- ЕСЛИ ЭТО ПЕРВЫЙ ОПЫТ РАБОТЫ С ARDUINO – посмотреть ВИДЕО о платформе с целью ознакомления, далее скачать, установить и настроить необходимые для работы программы согласно СУПЕР ПОДРОБНОЙ ИНСТРУКЦИИ (там даже видео версия есть!).
- Скачать архив с проектом напрямую, или с GitHub (кнопки чуть выше)
Установить библиотеки (папка Libraries) в
C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
C:\Program Files\Arduino\libraries\ (Windows x86)- Подключить Ардуино к компьютеру при помощи Data-кабеля
- Открыть файл прошивки желаемой версии (файлы прошивок .ino лежат в одноимённых папках)
- Настроить Arduino IDE (COM порт, куда подключена плата; подключенная модель Arduino, как в статье из первого пункта)
- Настроить что нужно в прошивке, нажать загрузить
- Если происходит ошибка компиляции или ошибка загрузки, читать 5-ый пункт в ЭТОЙ СТАТЬЕ
Настройки в прошивке
case_offset = 10.0; // длина корпуса в сантиметрах, для переноса начала отсчёта в заднюю часть корпуса
Дополнительно
- Алкалиновые и солевые батарейки быстро просаживают ёмкость, поэтому рекомендую использовать литиевые. Или вообще перевести устройство полностью на аккумуляторы
АЛГОРИТМ РАБОТЫ
if (millis() - sensTimer > 50) { // измерение и вывод каждые 50 мс // счётчик от 0 до 2 // каждую итерацию таймера i последовательно принимает значения 0, 1, 2, и так по кругу if (i > 1) i = 0; else i++; dist_3[i] = (float)sonar.ping() / 57.5; // получить расстояние в текущую ячейку массива if (!digitalRead(buttPIN)) dist_3[i] += case_offset; // если включен переключатель стороны измерения, прибавить case_offset dist = middle_of_3(dist_3[0], dist_3[1], dist_3[2]); // фильтровать медианным фильтром из 3ёх последних измерений delta = abs(dist_filtered - dist); // расчёт изменения с предыдущим if (delta > 1) k = 0.7; // если большое - резкий коэффициент else k = 0.1; // если маленькое - плавный коэффициент dist_filtered = dist * k + dist_filtered * (1 - k); // фильтр "бегущее среднее" disp.clear(); // очистить дисплей disp.float_dot(dist_filtered, 1); // вывести sensTimer = millis(); // сбросить таймер } if (micros() - dispIsrTimer > 300) { // таймер динамической индикации (по-русски: КОСТЫЛЬ!) disp.timerIsr(); // "пнуть" дисплей dispIsrTimer = micros(); // сбросить таймер }