Рубрики
Схемы на Arduino

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

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

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

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

Мы постарались сделать проект максимально простым, чтобы его мог повторить любой начинающий в электронике и микропроцессорной технике. Но также на нашем сайте вы можете посмотреть более «продвинутый» проект отслеживания лиц с помощью Arduino и OpenCV.

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

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

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

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

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

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

Работа схемы

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

Схема состоит из двух сервомоторов, один из которых используется для поворота мобильного телефона вправо/влево, а другой – для его наклонов вперед/назад. Управляющие команды для сервомоторов подает плата 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. Попробуйте навести камеру на чье либо лицо – на экране смартфона должно отобразиться это лицо и также должен появиться квадрат зеленого цвета, символизирующий захват лица.

Вы можете внести в этот проект множество улучшений. Для этого можете скачать исходный код этого приложения и изменять его по своему желанию. Поначалу может показаться что это очень сложно, но на самом деле программная среда 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) и будет ждать обнаружения чьего либо лица. Сядьте напротив камеры смартфона – вы должны заметить как начнут двигаться сервомоторы чтобы поместить ваше лицо в центр экрана. Теперь подвигайтесь в различные стороны в диапазоне действия вашей камеры и вы заметите как смартфон будет следить за вашими перемещениями. Для тестирования работы устройства можно использовать любую картину с изображением человеческого лица.

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

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

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

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

Ну человеческая фантазия не знает границ, это факт ))

Посмотрел, но ваш проект все таки достаточно сильно отличается от того, который описан в этой статье. Или вы хотите чтобы я опубликовал ваш проект на моем сайте?

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

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