Создание самонаводящегося вентилятора на Arduino с ультразвуковым радаром

Летняя жара заставляет искать способы охлаждения. У меня есть компактный USB-вентилятор, но его поток воздуха часто не попадает точно на меня, так как я перемещаюсь по рабочему столу. Возникла идея создать устройство, которое не просто вращает вентилятор, а автоматически находит и отслеживает цель (например, человека), направляя на нее воздушный поток. Задача усложняется необходимостью игнорировать посторонние объекты в помещении. Давайте разберемся, как можно реализовать такую систему.

Выбор платформы и принципа действия

Первое решение, которое приходит на ум — использовать мини-компьютер Raspberry Pi с камерой и алгоритмами машинного зрения для распознавания лица или движения. Однако этот вариант довольно дорогой. Более бюджетной альтернативой является платформа Arduino, которая обойдется значительно дешевле. Прямая работа с камерой для Arduino сложна, но нам она и не нужна. Вместо этого можно применить ультразвуковой датчик расстояния, который стоит копейки. Идея позаимствована из проектов радаров на Arduino: датчик, вращаясь, сканирует пространство и строит карту расстояний, привязывая каждое измерение к углу поворота. Этот принцип и ляжет в основу нашего самонаведения.

Сборка и программирование радара

Для вращения датчика используем сервопривод — мотор с редуктором и обратной связью, позволяющий точно задавать угол поворота. Для первого эксперимента датчик крепится к сервоприводу с помощью резинового кольца от велокамеры. Схема собирается на макетной плате.

Программа для Arduino была переписана для оптимизации скорости работы, использована более быстрая библиотека. После загрузки прошивки радар готов к работе.

Для визуализации данных с радара на компьютере используется среда Processing. В ней запускается программа, которая принимает данные от Arduino через COM-порт (номер порта нужно указать в настройках). На экране строится радарная карта, отображающая расстояния до объектов. Система способна обнаруживать как крупные цели (человека), так и мелкие предметы, что открывает простор для модификаций.

Сравнение миникомпьютера Raspberry Pi и платы Arduino. Разница в габаритах очевидна!

Вносим изменения в настройках (Processing)-указываем номер порта, к которому подключена плата Arduino

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

Алгоритм самонаведения

Радар измеряет только расстояние, но, зная угол поворота датчика, можно построить карту окружающего пространства. Алгоритм работы следующий:

  1. Система совершает калибровочный проход, запоминая «фоновую» карту расстояний для каждого угла.
  2. При последующих сканированиях вычисляется разница между новыми измерениями и калибровочной картой.
  3. Целью считается область, где несколько точек подряд показывают значительное отклонение от фона (это позволяет отфильтровать случайные шумы датчика).
  4. Определяются границы этой области, вычисляется ее центр (биссектриса).
  5. Сервопривод поворачивает датчик (а в будущем и вентилятор) точно на центр цели, переходя в режим удержания.
  6. Если цель теряется (выходит из зоны видимости), через заданный таймаут система возобновляет поиск.
После настройки компьютер больше не нужен — Arduino работает автономно от блока питания на 5 В (подойдет зарядное устройство от телефона).

Инструкция по загрузке прошивки на Arduino

  1. Скачать архив с необходимыми материалами.
  2. Установить библиотеки (папка Libraries) в директорию C:\ProgramFiles\Arduino\Libraries.
  3. Подключить Arduino к компьютеру с помощью Data-кабеля.
  4. Открыть файл прошивки нужной версии в Arduino IDE.
  5. Настроить Arduino IDE: указать COM-порт и модель платы.
  6. При необходимости внести дополнительные настройки в код и нажать «Загрузить».

Пример работы радара

Радар научился распознавать некую область в секторе сканирования, то есть он знает угол положения ее границ, где эта зона начинается и где заканчивается

Составляем карту рабочей области. Совершаем проход и запоминаем, на каком углу какое было расстояние

Подключение usb-ttl программатора к плате Arduino Pro Mini

Схема подключения элементов самонаводяшегося вентилятора (базовая версия с одним датчиком)

Сборка самонаводящегося вентилятора

«Мозги» системы готовы, переходим к интеграции в корпус вентилятора. В качестве основы взят компактный USB-вентилятор. В его корпусе оказалось достаточно места для электроники. Если плата Arduino Nano не помещается, можно использовать более миниатюрную Arduino Pro Mini (для нее потребуется внешний программатор).

Ключевые настройки в прошивке Arduino

В коде можно настроить различные параметры для тонкой отладки системы:

  • STEP_DELAY — скорость движения сервопривода.
  • TIMEOUT — время до возобновления поиска после потери цели.
  • PWR_TIMEOUT — время до отключения вентилятора при отсутствии цели.
  • MAX_ANGLE / MIN_ANGLE — пределы угла поворота.
  • DIST_MAX — максимальная дальность измерения (для уменьшения шумов).
  • DEADZONE — зона нечувствительности (минимальная разница с калибровкой).
  • MIN_CATCH — минимальное количество точек подряд для распознавания цели.
  • MISTAKES — допустимое количество пропусков при сканировании цели.

Управление питанием вентилятора реализовано через полевой транзистор (вместо реле), что экономит место. Для стабилизации питания и уменьшения помех от сервопривода добавлен конденсатор. Дальномер подключен гибким шлейфом.

Сервопривод крепится на уголок, а датчик — на ограждение лопастей вентилятора. После сборки и калибровки система готова к работе.

Вентилятор в работе

Схема подключения элементов самонаводящегося вентилятора (модернизированная версия с двумя датчиками)

Итоги и возможные улучшения

Готовое устройство успешно находит и отслеживает цель, а при ее длительном отсутствии возвращается в центральное положение и отключается. Для запуска достаточно поднести руку к датчику. Движения вентилятора могут быть немного резкими из-за недорогого сервопривода с пластиковыми шестернями; более плавная работа достижима с качественным приводом.

Проект демонстрирует, как с помощью всего одного датчика и сервопривода можно реализовать систему самонаведения с построением карты местности. Главный недостаток базовой версии — при потере цели система не знает, в какую сторону двигаться для поиска. Эта проблема решается установкой второго ультразвукового датчика, что позволяет определять направление движения цели. Такая модернизированная версия может стать основой для более сложных проектов, например, мини-турели для игр или систем слежения.

Александр МАЙОРОВ для сайта https://modelist-konstruktor.com/