Летняя жара заставляет искать способы охлаждения. У меня есть компактный USB-вентилятор, но его поток воздуха часто не попадает точно на меня, так как я перемещаюсь по рабочему столу. Возникла идея создать устройство, которое не просто вращает вентилятор, а автоматически находит и отслеживает цель (например, человека), направляя на нее воздушный поток. Задача усложняется необходимостью игнорировать посторонние объекты в помещении. Давайте разберемся, как можно реализовать такую систему.
Выбор платформы и принципа действия
Первое решение, которое приходит на ум — использовать мини-компьютер Raspberry Pi с камерой и алгоритмами машинного зрения для распознавания лица или движения. Однако этот вариант довольно дорогой. Более бюджетной альтернативой является платформа Arduino, которая обойдется значительно дешевле. Прямая работа с камерой для Arduino сложна, но нам она и не нужна. Вместо этого можно применить ультразвуковой датчик расстояния, который стоит копейки. Идея позаимствована из проектов радаров на Arduino: датчик, вращаясь, сканирует пространство и строит карту расстояний, привязывая каждое измерение к углу поворота. Этот принцип и ляжет в основу нашего самонаведения.
Сборка и программирование радара
Для вращения датчика используем сервопривод — мотор с редуктором и обратной связью, позволяющий точно задавать угол поворота. Для первого эксперимента датчик крепится к сервоприводу с помощью резинового кольца от велокамеры. Схема собирается на макетной плате.
Программа для Arduino была переписана для оптимизации скорости работы, использована более быстрая библиотека. После загрузки прошивки радар готов к работе.
Для визуализации данных с радара на компьютере используется среда Processing. В ней запускается программа, которая принимает данные от Arduino через COM-порт (номер порта нужно указать в настройках). На экране строится радарная карта, отображающая расстояния до объектов. Система способна обнаруживать как крупные цели (человека), так и мелкие предметы, что открывает простор для модификаций.
Сравнение миникомпьютера Raspberry Pi и платы Arduino. Разница в габаритах очевидна!
Вносим изменения в настройках (Processing)-указываем номер порта, к которому подключена плата Arduino
Первый опыт. Устанавливаем ультразвуковой датчик на сервоприводе
Алгоритм самонаведения
Радар измеряет только расстояние, но, зная угол поворота датчика, можно построить карту окружающего пространства. Алгоритм работы следующий:
- Система совершает калибровочный проход, запоминая «фоновую» карту расстояний для каждого угла.
- При последующих сканированиях вычисляется разница между новыми измерениями и калибровочной картой.
- Целью считается область, где несколько точек подряд показывают значительное отклонение от фона (это позволяет отфильтровать случайные шумы датчика).
- Определяются границы этой области, вычисляется ее центр (биссектриса).
- Сервопривод поворачивает датчик (а в будущем и вентилятор) точно на центр цели, переходя в режим удержания.
- Если цель теряется (выходит из зоны видимости), через заданный таймаут система возобновляет поиск.
Инструкция по загрузке прошивки на Arduino
- Скачать архив с необходимыми материалами.
- Установить библиотеки (папка Libraries) в директорию C:\ProgramFiles\Arduino\Libraries.
- Подключить Arduino к компьютеру с помощью Data-кабеля.
- Открыть файл прошивки нужной версии в Arduino IDE.
- Настроить Arduino IDE: указать COM-порт и модель платы.
- При необходимости внести дополнительные настройки в код и нажать «Загрузить».
Пример работы радара
Радар научился распознавать некую область в секторе сканирования, то есть он знает угол положения ее границ, где эта зона начинается и где заканчивается
Составляем карту рабочей области. Совершаем проход и запоминаем, на каком углу какое было расстояние
Подключение 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/