Оглавление:

Костюм виртуальной реальности с использованием Arduino: 7 шагов (с изображениями)
Костюм виртуальной реальности с использованием Arduino: 7 шагов (с изображениями)

Видео: Костюм виртуальной реальности с использованием Arduino: 7 шагов (с изображениями)

Видео: Костюм виртуальной реальности с использованием Arduino: 7 шагов (с изображениями)
Видео: 🤪 VR экзоскелет ИЗ ДЕРЕВА #виар 2024, Ноябрь
Anonim
Костюм виртуальной реальности с использованием Arduino
Костюм виртуальной реальности с использованием Arduino

Я создал этот проект, чтобы играть в обычные компьютерные игры в полной VR. Этот проект имитирует ваши движения при нажатии или удерживании клавиш на клавиатуре.

Пример - при движении вперед эмулируется нажатие клавиши 'w'.

Я эмулировал игру Call of Duty 4: Modern Warfare, но не выбираю игры, у которых есть отдача при стрельбе, потому что это изменит положение мыши по умолчанию.

Шаг 1. Требования

Требования:

Есть полный список вещей, которые вам понадобятся для изготовления этого костюма.

Сенсоры касания-5

Датчик силы-1

Графический процессор 6050 - 4

(или)

GPU 6050 - 2 и акселерометр - 2

Очки vr

Телефон с поддержкой VR

ПК

Точка доступа Wi-Fi

Игрушечный пистолет

Компьютерная игра (я использовал Call of Duty - Modern Warfare 1)

Провода для печатной платы (папа-мама)

АРДУИНО ЛЕОНАРДО-2

Автон шилд - 2

Источник питания (липо)

Радужные провода

Шаг 2: АППАРАТНОЕ ОБЕСПЕЧЕНИЕ

АППАРАТНОЕ ОБЕСПЕЧЕНИЕ
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ

* reload_pin, Shot_pin, night vision_pin, grenade_pin, weapon change_pin - сенсорные датчики. aim_pin - датчик силы, а мышь эмулируется MPU6050, другие датчики - акселерометр (положение, движение 1 и 2)

1.1) ПАЙКА

SOLDER MPU 6050, акселерометр, датчик касания и датчик силы с проводами

1.2) ПРОВОДКА

Для MPU 6050-

Контакт 2- SDA

Контакт 3- SCL

GND - GND

5 В - PWR / VCC

Для движения_pin1-

Штифт A1- ось x

GND-GND

5 В - PWR / VCC

Для движения_pin2-

Штифт A2- ось x

GND-GND

5 В - PWR / VCC

Для posture_pin-

Штифт A0- ось x

GND-GND

5 В - PWR / VCC

для weapon_pin -

сиг-5в

GND-GND

5 В - PWR / VCC

Для Reload_pin -

pin12 - 5в

GND-GND

5 В - PWR / VCC

Для Nightvision_pin -

вывод 10 - 5в

GND-GND

5 В - PWR / VCC

Для Shot_pin -

Вывод 7 - 5В

GND-GND

5 В - PWR / VCC

Для aim_pin -

Контакт 8 - 5В

5 В - PWR / VCC

1.3) ПАЯЛЬНЫЕ ПРОВОДА

Припаяйте провода макета к радужным проводам.

1.4) ИЗОЛЯЦИЯ

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

Шаг 3: ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Я использовал приложение Remotr из магазина Play, чтобы транслировать видео с ноутбука на телефон.

2.1) ДИСТАНЦИОННЫЙ

Установите приложение REMOTR на свой компьютер и создайте учетную запись

Вот ссылка-

remotrapp.com/#download

Установите приложение REMOTR на свой смартфон

2.2) ПОТОКОВОЕ ВИДЕО

Сначала подключите компьютер и одну и ту же сеть Wi-Fi и введите свою учетную запись REMOTR на обоих устройствах.

теперь вручную добавьте игру, которую вы хотите транслировать в программе

теперь приложение будет отображать компьютер, поскольку администратор щелкните его, чтобы начать потоковую передачу

Для потоковой передачи в VR включите режим VR на вашем смартфоне

Если вы не понимаете, перейдите по этой ссылке для получения подробной информации

remotrapp.com/en/howto

Шаг 4: ОСНОВНОЙ КОД

Код этого проекта не сложный и не сложный, а длинный.

Вот код, просто скопируйте его и вставьте в свой файл arduino

АРДУИНО

ЛЕОНАРДО Мышь-

Я сослался на Gabry295. Этот код мыши основан на его голове.

#включают

#включают

#включают

#включают

int aim_pin;

int Shot_pin;

MPU6050 mpu;

int16_t ax, ay, az, gx, gy, gz;

int vx, vy;

void setup () {

Serial.begin (9600);

Mouse.begin ();

Wire.begin ();

mpu.initialize ();

if (! mpu.testConnection ()) {

в то время как (1);

}

pinMode (7, ВХОД);

pinMode (8, ВХОД);

}

void loop () {

Shot_pin = digitalRead (7);

aim_pin = digitalRead (8);

mpu.getMotion6 (& ax, & ay, & az, & gx, & gy, & gz);

vx = (gx-300) / 200; // Я поставил -300 и +490, так как мой mpu6050 показывает эти значения, когда не движется check

vy = - (gz + 490) / 200; // проверьте код головной мыши от Gabry295, чтобы узнать больше об этих значениях

Mouse.move (vx, vy);

задержка (20);

while (Shot_pin == ВЫСОКИЙ);

{

Mouse.click ();

}

while (aim_pin == HIGH);

{

Mouse.click ();

}

}

Леонардо Клавиатура

#включают

int Grenade;

int weapon_pin;

int reload_pin;

int motion1_pin;

int motion2_pin;

int posture_pin;

char nightvision_pin;

установка void ()

{

pinMode (7, ВХОД);

pinMode (8, ВХОД);

pinMode (9, ВХОД);

pinMode (10, ВХОД);

pinMode (11, ВХОД);

pinMode (12, ВХОД);

pinMode (A0, ВХОД);

pinMode (A1, ВХОД);

Keyboard.begin ();

}

пустой цикл ()

{

Grenade_pin = digitalRead (8);

weapon_pin = digitalRead (9);

движение1_pin = analogRead (A1);

движение2_pin = analogRead (A2);

posture_pin = analogRead (A0);

reload_pin = digitalRead (12);

nightvision_pin = digitalRead (10);

если (граната == ВЫСОКАЯ)

{

Keyboard.press ('g');

}

в то время как (weapon_pin == ВЫСОКИЙ)

{

Keyboard.press ('q');

}

в то время как (reload_pin == HIGH)

{

Keyboard.press ('r');

}

в то время как (движение1_пин> 340 && движение1_пин <420)

{

Keyboard.press ('w');

}

в то время как (движение1_pin> 420)

{

Keyboard.press ('w');

Keyboard.press ('p');

}

в то время как (движение2_пин> 340 && движение2_пин <420)

{

Keyboard.press ('w');

}

в то время как (движение2_pin> 420)

{

Keyboard.press ('p');

Keyboard.press ('w');

}

в то время как (posture_pin> 340 && posture_pin <420)

{

Keyboard.press ('c');

}

в то время как (posture_pin> 420)

{

Keyboard.press ('l');

}

в то время как (posture_pin <340)

{

Keyboard.press ('z');

}

в то время как (nightvision_pin == HIGH)

{

Keyboard.press ('n');

}

}

}

Шаг 5: ТЕСТОВЫЕ КОДЫ

Вот несколько кодов, отделенных от основного кода в соответствии с функцией

СЪЕМКА

#включают

int x;

void setup () {

pinMode (8, ВХОД);

Mouse.begin ();

}

void loop () {

х = digitalRead (8);

если (x == ВЫСОКИЙ)

{

Mouse.click ('g');

}

}

ЦЕЛЬ

#включают

#включают

#включают

#включают

MPU6050 mpu;

int16_t ax, ay, az, gx, gy, gz;

int vx, vy;

void setup () {

Serial.begin (9600);

Mouse.begin ();

Wire.begin ();

mpu.initialize ();

if (! mpu.testConnection ()) {

в то время как (1);

}

}

void loop () {

Shot_pin = digitalRead (7);

aim_pin = digitalRead (8);

mpu.getMotion6 (& ax, & ay, & az, & gx, & gy, & gz);

vx = (gx + 300) / 200; // "+300", потому что ось x гироскопа дает значения около -350, когда он не движется. Измените это значение, если вы получите что-то другое, используя ТЕСТ-код, проверяя, есть ли значения, далекие от нуля.

vy = - (gz_-100) / 200; // то же самое здесь с "-100"

ПЕРЕЗАГРУЗКА-

#включают

int x;

void setup () {

pinMode (8, ВХОД);

Keyboard.begin ();

}

void loop () {

х = digitalRead (8);

если (x == ВЫСОКИЙ)

{

Keyboard.press ('r');

}

еще

{

Keyboard.release ('r');

}

}

НОЧНОЕ ВИДЕО #include

int x;

void setup () {

pinMode (8, ВХОД);

Keyboard.begin ();

}

void loop () {

х = digitalRead (8);

если (x == ВЫСОКИЙ)

{

Keyboard.press ('g');

}

еще

{

Keyboard.release ('g');

}

}

КРАЧИ И ЛЕЖЕНИЕ-

#включают

int y;

void setup () {

pinMode (A0, ВХОД);

Serial.begin (9600);

}

void loop () {

y = analogRead (A0);

если (y <260)

{

Keyboard.release ('c');

Keyboard.release ('p');

}

иначе, если (y> 260 && y <310)

{

Keyboard.press ('c');

}

иначе, если (y> 310)

{

Keyboard.press ('p');

}

}

Шаг 6: УПРАВЛЕНИЕ ИГРОЙ

измените управление игрой следующим образом

присесть - x

склонный - l

смена оружия - q

спринт - p

стоять / прыгать - z

ночное видение - n

движение вперед - w

граната - г

Шаг 7: НАСТРОЙКА

НАСТРОЙКА
НАСТРОЙКА
НАСТРОЙКА
НАСТРОЙКА
НАСТРОЙКА
НАСТРОЙКА

Наконец-то мы подошли к последнему шагу, теперь ставим ардуино.

доски в коробку и засунуть в сумку

Теперь подключите микро-USB Arduino к USB-портам ноутбука. Теперь подключите датчики, как указано выше.

* стрелки на рисунках выше указывают направление, в котором должен быть повернут датчик.

Если у вас есть сомнения, не стесняйтесь оставлять комментарии и не забудьте поделиться своим опытом

Вот и все, спасибо и

ДО СВИДАНИЯ.

Рекомендуемые: