Робот на Arduino, распознающий и отслеживающий лица

В этой статье мы рассмотрим робота на основе платы Arduino, который будет распознавать и отслеживать лица людей. Робот будет состоять из схемы на основе платы Arduino, двух сервомоторов и мобильного телефона (смартфона) с камерой на операционной системе Android. Камера смартфона будет перемещаться вдоль вашего лица с помощью сервомоторов. Преимущество такого подхода состоит в том, что вам не нужно будет покупать отдельно камеру для этого проекта, а всю работу по распознаванию лиц может выполнить непосредственно смартфон. Также наше устройство не нужно будет подключать к компьютеру для работы. Для связи Arduino с мобильным телефоном мы будем использовать Bluetooth модуль.

Внешний вид робота на Arduino, распознающего и отслеживающего лица

Приложение для Android написано в бесплатной программной среде Processing. Далее в статье вы можете скачать готовое приложение и установить его на свой телефон, либо установить среду Processing, скачать исходный код приложения и дописать его под свои потребности. Также вы можете посмотреть все проекты на нашем сайте, использующие Processing.

Также в этой статье мы рассмотрим создание мини роботизированной руки, которая будет отслеживать местоположение вашего лица и перемещаться вдоль него. Также в дальнейшем вы можете использовать эту роботизированную руку чтобы записывать видеоблоги или делать идеальные селфи с помощью задней камеры смартфона поскольку рассматриваемое нами устройство будет позиционировать камеру строго по центру вашего лица. Более подробно все описываемые процессы можно посмотреть в видео в конце статьи.

Мы постарались сделать проект максимально простым, чтобы его мог повторить любой начинающий в электронике и микропроцессорной технике.

Внешний вид нашего робота крупным планом

Необходимые компоненты

Плата Arduino Nano
Сервомотор SG90 (2 шт.)
Смартфон на Android с задней камерой
Bluetooth модуль HC-05/HC-06
Компьютер для программирования
3D принтер (опционально)
Батарейка на 9В

Печать компонентов на 3D принтере (опционально)

Для того чтобы удерживать и перемещать смартфон в пространстве нам необходимая некоторая механическая структура (наподобие держателя для мобильного телефона) с сервомоторами. При желании ее можно сделать из картона (или другого легкого в обработке материала), но мы использовали для этой цели 3D принтер.

Если у вас есть доступ к 3D принтеру, то вы можете скачать готовые STL файлы к нему для нашего проекта. Мы использовали 3D принтер под названием FABX v1, который доступен по приемлемой цене – за это приходится расплачиваться небольшим разрешением и отсутствием разъема для SD карты. Для данного принтера мы использовали программное обеспечение Cura чтобы печатать STL файлы. Настройки для данного программного обеспечения показаны на следующем рисунке:

Настройки 3D принтера для печати корпуса нашего робота

После сборки с помощью шурупов и клея конструкция должна выглядеть примерно следующим образом:

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема робота на Arduino, распознающего и отслеживающего лицаСхема состоит из двух сервомоторов, один из которых используется для поворота мобильного телефона вправо/влево, а другой – для его наклонов вперед/назад. Управляющие команды для сервомоторов подает плата Arduino Nano, которая, в свою очередь, получает их от Bluetooth (HC-05) модуля. Схема запитывается от батарейки на 9 В.

Схему можно собрать либо на макетной, либо на перфорированной плате – по вашему желанию.

Установка приложения для Android

Как уже указывалось ранее, интеллектуальной основой этого проекта является приложение на Android, разработанное в программной среде Processing для Android. Вы можете установить на свой смартфон уже готовое приложение для этого проекта, выполнив следующие шаги:

  1. Скачать APK файл приложения по этой ссылке.
  2. Подать питание на собранную схему устройства.
  3. В настройках телефона найти Bluetooth модуль под именем “HC-05”.
  4. Если вы использовали не “HC-05”, то все равно назовите его HC-05 иначе приложение не будет работать.
  5. Подключите модуль к вашему мобильному телефону по Bluetooth используя какой-нибудь простой пароль, например, “1234” или “0000”.
  6. Запустите приложение в портретном режиме. Вы должны увидеть изображение с камеры телефона и надпись “Connected to: HC-05” вверху экрана.
  7. Попробуйте навести камеру на чье либо лицо – на экране смартфона должно отобразиться это лицо и также должен появиться квадрат зеленого цвета, символизирующий захват лица.

Внешний вид запущенного приложения на Android

Вы можете внести в этот проект множество улучшений. Для этого можете скачать исходный код этого приложения и изменять его по своему желанию. Поначалу может показаться что это очень сложно, но на самом деле программная среда Processing достаточно проста для освоения и при минимальных усилиях позволяет создавать впечатляющие проекты.

Вы можете посмотреть другие проекты на нашем сайте, в которых использовалась программная среда Processing:

Программирование Arduino

Рассмотренное приложение на Android будет обнаруживать ваше лицо и его положение на экране, далее оно должно решить в какую сторону необходимо довернуть камеру чтобы лицо оказалось строго в центре экрана. Это необходимое направление движения камеры передается на плату Arduino через Bluetooth модуль.

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

В следующих строках кода устанавливается последовательная связь на контактах D12 (RX) и D11 (TX) платы Arduino. Контакт 12 должен быть соединен с контактом TX Bluetooth модуля, а контакт 11 — с контактом RX Bluetooth модуля.

SoftwareSerial cam_BT(12, 11); // RX, TX

Затем мы инициализируем Bluetooth module для работы на скорости 9600 бод/с. Убедитесь в том, что ваш модуль работает именно на этой скорости, иначе измените скорость его работы.

cam_BT.begin(9600); //start the Bluetooth communication at 9600 baudrate
cam_BT.println("Ready to take commands");

Следующие строки кода считывают данные поступающие от Bluetooth модуля. Эти данные затем сохраняются в переменной “BluetoothData”.

if (cam_BT.available()) //считываем что поступает по Bluetooth
{
BluetoothData=cam_BT.read();
Serial.print("Incoming from BT:");
Serial.println(BluetoothData);
}

В зависимости от данных, получаемых по Bluetooth, происходит задание угла поворота серводвигателей. К примеру, для поворота камеры влево используется декремент значения угла поворота на 2. Вместо 2 вы можете использовать декремент и на большие значения, например 4 или 6 – в этом случае наше роботизированная рука, управляющая перемещением смартфона в пространстве, будет перемещаться быстрее, однако это может сделать работу проекта более нестабильной.

if (BluetoothData==49) //поворот влево
{pos1+=2; servo1.write(pos1);}
if (BluetoothData==50) //поворот вправо
{pos1-=2; servo1.write(pos1);}
if (BluetoothData==51) //поворот вверх
{pos2-=2; servo2.write(pos2);}
if (BluetoothData==52) //поворот вниз
{pos2+=2; servo2.write(pos2);}

Исходный код программы

После того как схема будет собрана и программа загружена в плату Arduino, запустите приложение на своем смартфоне и подайте питание на плату Arduino. Приложение автоматически соединится с вашим Bluetooth модулем (он должен быть назван HC-05) и будет ждать обнаружения чьего либо лица. Сядьте напротив камеры смартфона – вы должны заметить как начнут двигаться сервомоторы чтобы поместить ваше лицо в центр экрана. Теперь подвигайтесь в различные стороны в диапазоне действия вашей камеры и вы заметите как смартфон будет следить за вашими перемещениями. Для тестирования работы устройства можно использовать любую картину с изображением человеческого лица.

Собранная конструкция нашего проекта

Более подробно работу проекта вы можете посмотреть на видео в конце статьи. Вы можете усовершенствовать этот проект так, как вам будет необходимо. Далее представлен полный текст программы.

Видео, демонстрирующее работу схемы

(Проголосуй первым!)
Загрузка...
18 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *