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

Проект виртуальной реальности на Arduino Nano и Processing

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

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

Концепция проекта

Для реализации этого проекта мы должны объединить мощь таких технологий как Arduino и Processing. Многие из вас наверняка знакомы Arduino, а вот Processing может быть для вас в диковинку. Processing – это приложение, подобное Arduino, также с открытым исходным кодом и бесплатное для скачивания. Используя Processing вы можете написать простые программы для персонального компьютера, создать Android приложение и многое другое. Также в нем есть возможности для обработки изображений и распознавания голоса. Также, как и Arduino, его достаточно просто изучить, но если вы ничего не слышали об этом приложении и не горите желанием его изучать, то не беспокойтесь – материал этой статьи изложен таким понятным языком, что каждый сможет самостоятельно повторить то, что описано в данной статье.

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

Мы будем имитировать клики левой и правой кнопки мыши с помощью наших пальцев. Для этого мы использовали два датчика Холла – один на указательном пальце и один на среднем пальце. Показания с этих датчиков будут считываться платой Arduino Nano. Затем плата Arduino будет передавать информацию об этих кликах на компьютер с помощью технологии Bluetooth.

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

  1. Плата Arduino Nano (купить на AliExpress).
  2. Датчик Холла A3144 (2 шт.) (купить на AliExpress).
  3. Небольшой кусок магнита.
  4. Bluetooth модуль (HC-05/HC-06) (купить на AliExpress).
  5. Батарея на 9 В.
  6. Соединительные провода.
  7. Точечная (перфорированная) плата.
  8. Пара перчаток.
  9. Arduino IDE (Software).
  10. Processing IDE(Software).
  11. Компьютер (ноутбук) с веб-камерой и Bluetooth (можно использовать внешний модуль Bluetooth и внешнюю веб-камеру).

Работа схемы

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

Плата Arduino, резисторы и соединительная колодка припаиваются на точечную плату как показано на следующем рисунке.

Датчик Холла и Bluetooth модуль припаиваются к соединительному проводу как показано на следующем рисунке.

Как только описанные шаги будут выполнены можно приступать к креплению компонентов на перчатки. Мы использовали синтетические перчатки, которые можно купить в любой аптеке. Магнит необходимо закрепить на большом пальце, а датчики Холла – на среднем и указательном пальцах. Мы использовали липкую ленту чтобы закрепить компоненты на необходимых местах. После закрепления всех необходимых компонентов вы должны получить примерно следующую картину:

Теперь откроем Arduino IDE и начнем программирование.

Программа для Arduino

Функции программы для платы Arduino весьма просты – она должна считывать состояние датчиков Холла и передавать их в эфир с помощью Bluetooth модуля. Также она должна принимать данные по Bluetooth и включать/выключать светодиоды расположенные на плате в зависимости от принятых данных. Полный текст программы приведен в конце статьи, здесь же только объяснены наиболее важные ее фрагменты.

if (Phs1!=HallState_1 || Phs2!=HallState_2) //проверяем нажаты ли клавиши
{
if (HallState_1==LOW && HallState_2==LOW)
Aisha.write(1);
if (HallState_1==HIGH && HallState_2==LOW)
Aisha.write(2);
if (HallState_1==LOW && HallState_2==HIGH)
Aisha.write(3);
if (HallState_1==HIGH && HallState_2==HIGH)
Aisha.write(4);
}

В приведенных строках кода мы проверяем состояние датчиков Холла и в зависимости от результатов проверки передаем по Bluetooth соответствующие значения. К примеру, если с выхода датчика Холла № 1 поступает сигнал высокого уровня, а с выхода датчика Холла № 2 сигнал низкого уровня, тогда мы с помощью Bluetooth модуля будем передавать в эфир значение “2”. Удостоверьтесь в том, что вы записываете значение в Bluetooth модуль, но не печатаете его. Потому что в этом случае (если они просто записаны) их будет легко прочитать в Processing. Также значение будет передаваться по Bluetooth только если оно не то же самое как предыдущее значение.

if (BluetoothData=='y')
digitalWrite(ledpin,HIGH);
if (BluetoothData=='n')
digitalWrite(ledpin,LOW);

Эти строки используются для включения/выключения светодиода, расположенного на плате Arduino и подключенного к контакту 13, в зависимости от значения, принятого Bluetooth модулем. К примеру, если Bluetooth модуль принимает ‘y’, то светодиод включается, а если модуль принимает ‘n’ – то светодиод выключается.

Программа для Processing

Processing представляет собой достаточно мощную бесплатную среду программирования. Ее официальный сайт — https://www.processing.org/. На нашем сайте мы уже неоднократно использовали ее для создания различных проектов.

В этом проекте программа для Processing должна формировать пользовательский интерфейс, а также производить обработку изображений чтобы отслеживать определенны объект. Программа имеет 4 экрана:

  1. Экран калибровки.
  2. Главный экран.
  3. Экран рисования.
  4. Экран включения/выключения светодиода.

Мы можем производить навигацию между этими экранами простыми движениями наших рук, как бы перетаскивая экраны по воздуху. Также мы можем делать клики в необходимых местах чтобы включать/выключать светодиод или что-нибудь нарисовать на экране.

Вы можете просто скопировать и вставить текст программы на Processing (приведенный в конце статьи), а также изменить его в соответствии со своими пожеланиями, или просто скачать EXE файл (исполнимый файл) по этой ссылке с облака mail.ru. Для запуска программы необходимо выполнить следующие шаги:

  1. Установить JAVA на ваш компьютер (если он у вас не установлен).
  2. Установить веб-камеру на свой компьютер.
  3. Подать питание на плату Arduino и подключить ваш Bluetooth модуль по технологии Bluetooth к вашему компьютеру.
  4. Запустить программу.

Если все прошло нормально, то светодиод на вашем Bluetooth модуле будет гореть непрерывно, также будет работать ваша веб-камера. Посмотрите видео в конце статьи чтобы узнать как правильно калибровать и использовать эту программу.

Если вы хотите модифицировать эту программу под свои потребности, то вам будет необходимо сделать следующие вещи. Скачать Processing IDE по следующей ссылке. Обучающих материалов по Processing в сети достаточно много (в том числе и видеокурсов на youtube) – правда большинство из них на английском языке, воспользуйтесь поиском.

Processing имеет способность считывать последовательные данные (Serial data), в нашем случае эти данные поступают от Bluetooth COM порта. Вы должны выбрать к какому COM порту будет подключен ваш Bluetooth с помощью следующей команды:

port = new Serial(this,Serial.list()[1],9600);

В нашем случае мы выбрали 1-й COM порт (поскольку нумерация массивов начинается с 0, то на самом деле это 2-й COM порт из имеющихся на нашем компьютере) который будет иметь обозначение COM5 как показано на следующем рисунке. Наш Bluetooth модуль будет работать на скорости 9600 бод/с.

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

В исходном коде программы по возможности объяснены ее ключевые моменты с использованием комментариев. Вы можете скачать эти файлы по следующей ссылке.

Работа проекта

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

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

Теперь коснитесь указательным пальцем своего большого пальца, при этом вы увидите сообщение — “Key 1 Pressed” (клавиша 1 нажата). Затем коснитесь средним пальцем своего большого пальца, при этом вы увидите сообщение — “Key 2 Pressed” (клавиша 2 нажата). Если все работает именно так, это значит что система работает правильно и если вы увидели эти 2 сообщения это свидетельствует о том, что калибровка закончена. Теперь нажмите кнопку «Done «.

Когда кнопка Done будет нажата, вы будете перенаправлены на главный экран программы, где вы сможете рисовать на экране компьютера движениями своих рук в воздухе, а также включать/выключать встроенный в плату Arduino светодиод. Более подробно все эти процессы вы можете посмотреть в видео в конце статьи.

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

Код программы для Arduino

Программа для Processing

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

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

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