Приветствую, Самоделкины!
Что-то жарковато становится, лето и все такое. У меня на столе стоит китайский вентилятор, но я работаю в разных концах своего нового большого стола, и вентилятор почти всегда дует мимо, а каждый раз его поворачивать — это как-то грустно. Так что сегодня будем делать вентилятор с автоматическим наведением на цель.
Итак, нам нужно отслеживать положение цели с учетом обстановки на столе, чтобы вентилятор не нацеливался на другие объекты. В идеале конечно можно было бы взять миникомпьютер raspberry pi с камерой, и при помощи библиотеки машинного зрения распознавать движения или яркую футболку.
Но это довольно-таки непростая задача, а сама плата стоит больше чем в 10 раз дороже платформы arduino, которая с камерой не справляется. Но помимо камеры есть и другие способы определять цель, например, копеечный ультразвуковой датчик расстояния.
Как-то раз я наткнулся в интернете на интересный проект «радар» на базе arduino и этого датчика. Проект сам по себе довольно-таки бесполезный, но сама идея замечательная — вращать датчик расстояния и сканировать пространство, привязываясь к углу поворота.
Давайте ради интереса повторим этот проект, а затем будем двигаться дальше.
Значит датчик должен поворачиваться, для этого используется обычный модельный сервопривод (кто не знает, сервопривод — это моторчик с редуктором и обратной связью к углу, то есть, мы можем задать ему угол поворота, и он на него повернется).
Не будем мудрить, и просто закрепим датчик при помощи колечка от велосипедной камеры.
Схему соберем на макетной плате.
Вот и все, осталось загрузить прошивку в arduino. В данной версии использована более быстрая библиотека.
Скачать исходники можно на странице проекта, ссылку найдете в описании под видео. Там же вы найдете все подробные инструкции, в частности огромную статью для тех, кто первый раз взял arduino в руки. В общем, загружаем прошивку в плату и наш радар оживает. Теперь на компьютере нужно запустить программу, которая будет принимать данные от радара (она тоже есть в папке с проектом, но для запуска нужна среда processing, скачать можно на официальном сайте).
Запускаем, и здесь нужно настроить всего один момент — номер порта, к которому подключена arduino. Это тот же номер, который выбран в программе arduino ide, только мы должны вписать его вручную.
Запускаем.
Все, наш радар замечательно работает и отображает расстояние до найденных препятствий. Как вы можете видеть, работает он с достаточной точностью, чтобы не только засечь крупную цель в виде человека или головы, но и отлично справляется со всякой мелочевкой, что может стать целым полем для интересных экспериментов. Так что пока все развлекаются с raspberry pi, я решил бросить себе вызов и научить буквально слепую систему распознавать цель и наводится на неё. Это станет отличным простым проектом, который можно повторить даже силами стартового набора arduino. Давайте этим займемся и продумаем алгоритм работы.
Итак, возможности системы довольно-таки сильно ограничены. Мы получаем только расстояния с радара, но знаем какому углу соответствует каждое измерение. Первое, что приходит в голову, это построение карты рабочей области. То есть, делаем один проход и запоминаем, на каком углу какое было расстояние. Теперь, при последующих проходах, мы можем находить разницу для каждого угла согласно нашей карте. И таким образом сможем увидеть новый объект, который будет выделяться на фоне уже известных значений. Теперь нужно научить систему определять цели. Попробуем такой вариант: будем считать количество выделяющихся точек, которые расположены друг за другом, то есть в жизни, это будет некая область, которую сканирует радар.
Будем считать целью — область больше какого-то определенного размера. Это сразу отфильтрует все шумы измерений. Также предлагаю прощать системе несколько ошибок при сканировании одной области, потому что ультразвуковой датчик не идеален.
Радар может распознавать большую область, то есть он знает угол начала этой области и угол ее конца в своей системе координат. Остается только вычислить середину этой области и направить радар туда, и пусть он больше не двигается. Это будет режим удержания позиции.
Продолжим измерять расстояние и если измеряемая точка вдруг уйдет из зоны видимости радара, то через некоторое время мы снова перейдем к режиму поиска цели. Вот и все, кто не понял, компьютер здесь уже не нужен, arduino будет делать все сама. Достаточно просто питать ее от блока питания на 5 вольт. Прошивка лежит в папке с проектом, тут есть куча настроек, с которыми можно поиграться и настроить все под себя.
Итак, запускаем систему. Сначала проходит калибровка от края до края. Система запоминает расстояние в калибровочный массив в своей системе координат. Далее сразу начинается работа, сканируем область, если замечаем цель — то находим ее угловой размер и наводимся в середину. Работает как часы и наводится практически в центр цели.
Кстати, все временные задержки настраиваются, в частности, время между потерей целей и началом нового сканирования, а то подумаете еще, что систему тормозит — ничего подобного, просто так настроили. В целом мозги для вентилятора готовы, давайте собирать железо.
Этот вентилятор был приобретен на алиэкспресс лет 5 назад. Он компактный, питается от USB и отлично подходит для этого проекта. Можно также поискать usb-вентилятор в fix-price или в хозтоварах.
Давайте разберем данный вентилятор и посмотрим, есть ли в его корпусе свободное место, которое можно будет напичкать своей электроникой.
Аrduino nano сюда к сожалению, не вмещается, но ведь есть arduino pro mini, то же самое, но меньшего размера и без программатора на борту, зато она вмещается отлично.
А почему бы не управлять питанием на вентилятор с arduino и выбросить родную кнопку? Места довольно-таки мало, реле понятное дело не влезет, так что будем использовать полевой транзистор.
К нему еще нужны два резистора на 100 Ом и 10 кОм. Кнопку убираем полностью, чтобы она не мешалась. Схема подключения будет выглядеть вот так:
Дальномер давайте подключим шлейфом от жесткого диска.
Также у нас в схеме есть конденсатор, он не обязательный, но очень желательный, так как сервопривод дает весьма ощутимые для usb выбросы тока, и это может сказаться на измерениях расстояния.
Для загрузки прошивки в pro mini нужен внешний программатор, стоит у китайцев как банка пива и подключается вот таким образом:
Больше ничего делать не надо, жмем кнопку «загрузить», и прошивка загружается как обычно в плату nano. Корпус закрывается и все провода выходят через отверстия от выключателя.
Далее нужно закрепить серво. Вентилятор было решено подвесить на полку, и серво прикрепим на уголок.
Чтобы уголок не крутился используем двусторонний скотч, но резинка от велокамеры была бы лучше.
Места для датчика придется слегка расширить. Закрепим его на винтики, которые шли в комплекте с серво.
Последний штрих, все, включаем и ждем, когда пройдет калибровка и наслаждаемся самонаводящимся вентилятором.
Очень забавная получилось штука. Изначально задумывалась как макет, но благодаря китайцам и большому пустому отсеку внутри вентилятора, удалось сделать законченное устройство практически без торчащих проводов и соплей, что очень порадовало. Кстати, если вентилятор какое-то время не может найти цель, он встает в центр и отключается. Чтобы его включить нужно просто поднести руку, и вентилятор снова готов наводиться на цель и ее охлаждать.
Сервопривод оказался пластиковой дешевкой, редуктор весь болтается, поэтому движение дерганное, но что поделать. На странице проекта есть ссылка на более качественный сервопривод, у него редуктор металлический. Проект получился довольно-таки клевый и интересный, благодаря своей простоте — один датчик, один привод, но в итоге полноценное самонаведение по карте области и сенсорное управление.
Благодарю за внимание. До новых встреч!
Видео:
Источник (Source)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: