ДАЛЬНОМЕР НА ARDUINO

Ультразвуковой дальномер с дисплеем на базе платформы Arduino.

  • Используется дисплей на драйвере TM74HC59, что позволяет выводить расстояние с десятичной точкой
  • Для определения расстояния используется дешёвый модуль ультразвукового дальномера
  • Показания с дальномера фильтруются двумя фильтрами, благодаря чему достигнута точность ~1 мм
  • Отдельный переключатель позволяет сдвигать начало отсчёта на противоположный конец корпуса
  • Работает от 3х батареек формата АА

ПОДРОБНОЕ ВИДЕО ПО ПРОЕКТУ

  • В данном видео показан полный и максимально подробный процесс разработки и изготовления устройства, а также обзор его возможностей и функций, всё это с приятным монтажиком, музычкой и комментариями. В общем, приятного просмотра!
поддержать автора
канал на youtube
страничка на github
группа вконтакте

ИНСТРУКЦИИ ПО ЭКСПЛУАТАЦИИ

  • Собрать, прошить, включить
  • УЗ дальномер имеет большой угол измеряющего луча, поэтому на 4х метрах до цели измеряющая область имеет диаметр около 4 метров. И чем ровнее поверхность объекта измерения, тем точнее измерения
  • Переключатель автоматически «прибавляет» к расстоянию длину корпуса

СХЕМЫ, ПЕЧАТНЫЕ ПЛАТЫ

Схема 1

МАТЕРИАЛЫ И КОМПОНЕНТЫ

Ссылки на магазины, с которых я закупаюсь уже не один год

Вам скорее всего пригодится:

всё для пайки
аккумуляторы и модули
все arduino модули
мультиметры
инструменты
бп и преобразователи

ПРОШИВКА И НАСТРОЙКА

Содержимое папок в архиве

  • libraries — библиотеки
  • sonar_meter — прошивка для Arduino
скачать архив
страница на github

Как прошить?

  • ЕСЛИ ЭТО ПЕРВЫЙ ОПЫТ РАБОТЫ С 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();                 // сбросить таймер
 }

2018-02-21T00:39:17+00:00