可穿戴游戏眼镜和无线游戏手套

ChangeCode
转载
发布时间: 2025-06-10 16:44:21 | 阅读数 0收藏数 0评论数 0
封面
为了增加玩家玩游戏时的真实感和乐趣,营造战斗氛围,制作了可穿戴游戏眼镜和无线游戏手套。
1

组件

可穿戴游戏眼镜

  1. Circuit Playground Express
  2. USB 线

无线游戏手套

  1. Circuit Playground Express
  2. 锂电池
  3. 5 通道 RF 发射器和接收器位
  4. Arduino 位
  5. 3M 手套
  6. 3D 打印盒装电池
  7. 线刀头
2

可穿戴游戏眼镜

  1. 3D 打印 glass.stl.
  2. 使用 3M 胶带将 Circuit Playground Express 贴在玻璃上
3

可穿戴 3D 游戏眼镜


4

原理 - 加速度计

....加速度计是能够测量静态和/或动态加速度的机电设备。静态力包括重力,而动态力可以包括振动和运动。加速度计可以测量 1、2 或 3 轴上的加速度.....(摘自 http://www.kostasalexis.com/inertial-sensors.html

.....在 Circuit Playground 的正中心有一个强大的 MEMS 加速度计。这部分是 LIS3DH,一个 3 轴(X、Y 和 Z)传感加速度计。加速度计是 WiiMote、手机和其他电子设备中的传感器,可以感应倾斜、重力、运动和“点击”效果.......(来自 adafruit:https://learn.adafruit.com/circuit-playground-lesson-number-0/accelerometer

5

组件组装

组装 3D 游戏眼镜,然后使用 3M 胶带固定电路游乐场快车。

6

Ardunio 编码 - 眼镜作为鼠标

我们下载了 accel_mouse.ino 并将程序加载到 circuit playground express。但是,我们需要修改代码以制作可穿戴游戏眼镜。

https://github.com/adafruit/Adafruit_CircuitPlaygr...

Circuit Playground 加速计鼠标 示例

向左/向右和向上/向下倾斜 Circuit Playground 以移动鼠标,以及

按下左右按钮可单击鼠标按钮!确保

滑动开关处于 On (+) 位置以启用鼠标或滑入

关闭 (-) 位置以禁用它。默认情况下,草图假定您持有

Circuit Playground,USB 电缆从顶部出来。

作者: Tony DiCola

许可证: MIT 许可证 (https://opensource.org/licenses/MIT

#include

#include

#include

#include

用于调整鼠标的灵敏度和速度的配置值。

X 轴(左/右)配置:

#define XACCEL_MIN 0.1 // X 轴加速度的最小范围,值低于

这根本不会移动鼠标。

#define XACCEL_MAX 8.0 // X 轴加速度的最大范围,大于

这将尽可能快地移动鼠标。

#define XMOUSE_RANGE 25.0 // 鼠标移动的速度范围。更高的

此值表示鼠标移动的速度越快。

#define XMOUSE_SCALE 1 // 应用于鼠标移动的缩放值,这是

设置为 -1 可翻转 X 轴移动。

Y 轴(上/下)配置:

请注意,这些值的含义与上面的 X 轴完全相同,

仅应用于 Y 轴和上/下鼠标移动。您可能希望

保持这些值与 X 轴的值相同(这是默认值,它们只是

读取 X 轴值,但您可以使用自定义值覆盖)。

#define YACCEL_MIN XACCEL_MIN

#define YACCEL_MAX XACCEL_MAX

#define YMOUSE_RANGE XMOUSE_RANGE

#define YMOUSE_SCALE 1

将此设置为 true 可将鼠标 X/Y 轴与电路板 X/Y 轴(您想要的

如果握住 USB 电缆朝上)。

#define FLIP_AXES true

浮点线性插值函数,它采用 1 内的值

range 并将其映射到另一个 range 中的新值。这用于转换

每个加速度轴都指向鼠标速度/速度。有关详细信息,请参阅此页面

关于方程式: https://en.wikipedia.org/wiki/Linear_interpolatio......

float lerp(浮点数 x, 浮点数 x0, 浮点数 x1, 浮点数 y0, 浮点数 y1) {

检查输入值 (x) 是否超出其所需范围,并钳制到

那些最小/最大 Y 值。

如果 (x <= x0) {

返回 y0;

}

else if (x >= x1) {

返回 y1;

}

否则,根据 x 在其范围内的位置计算值 y,并且

所需的 y 最小值和最大值。

返回 y0 + (y1-y0)*((x-x0)/(x1-x0));

}

无效 setup() {

初始化 Circuit Playground 库。

CircuitPlayground.begin();

初始化 Arduino 鼠标库。

Mouse.begin() 开始的 Mouse.begin() 中;

}

void loop() {

检查滑动开关是否已启用(在 + 上),如果没有,则退出

并再次运行 Loop。这使您可以打开/关闭鼠标移动

滑动开关。

如果 (!CircuitPlayground.slideSwitch()) {

返回;

}

抓取初始的左右按钮状态,以便稍后检查它们是否被按下

或释放。在循环的早期执行此作,以便其他处理可能需要一些时间

时间和按钮状态变化。

布尔值 left_first = CircuitPlayground.leftButton();

布尔值 right_first = CircuitPlayground.rightButton();

抓取 x、y 加速度值(以 m/s^2 为单位)。

修改

原始编码从 motionX 和 motionY 更改为 motionZ 和 motionY。

浮点 x = CircuitPlayground.motionZ();

浮点 y = CircuitPlayground.motionY();

使用加速度的大小来插值鼠标速度。

浮点数 x_mag = abs(x);

浮点数 x_mouse = lerp(x_mag, XACCEL_MIN, XACCEL_MAX, 0.0, XMOUSE_RANGE);

浮点数 y_mag = abs(y);

浮点数 y_mouse = lerp(y_mag, YACCEL_MIN, YACCEL_MAX, 0.0, YMOUSE_RANGE);

根据加速度的方向更改鼠标方向。

如果 (x < 0) {

x_mouse *= -1.0;

}

if (y < 0) {

y_mouse *= -1.0;

}

将任何全局缩放应用于轴(例如翻转它)并截断

设置为整数值。

x_mouse = floor(x_mouse*XMOUSE_SCALE);

y_mouse = floor(y_mouse*YMOUSE_SCALE);

移动鼠标。

如果 (!FLIP_AXES) {

非翻转轴,只需将板 X/Y 映射到鼠标 X/Y。

Mouse.move((int)x_mouse, (int)y_mouse, 0);

}

else {

翻转斧头,交换它们。

Mouse.move((int)y_mouse, (int)x_mouse, 0);

}

等待按钮状态更改并稍微减慢处理速度的小延迟。

延迟 (10);

获取第二个按钮状态读数以检查按钮是否被按下或

释放。

布尔值 left_second = CircuitPlayground.leftButton();

布尔值 right_second = CircuitPlayground.rightButton();

检查是否按下/松开左键。

if (!left_first & left_second) {

先低后高,按下按钮!

鼠标.press(MOUSE_LEFT);

}

else if (left_first & !left_second) {

高后低,按钮松开!

鼠标.release(MOUSE_LEFT);

}

检查是否按下/松开了右键。

如果 (!right_first & right_second) {

先低后高,按下按钮!

鼠标.press(MOUSE_RIGHT);

}

else if (right_first & !right_second) {

高后低,按钮松开!

鼠标.release(MOUSE_RIGHT);

}

}

7

可穿戴游戏眼镜


8

存储库

9

可穿戴游戏手套


10

制作可穿戴游戏手套

元件:

  1. Circuit Playground Express 赛道快车
  2. 线刀头
  3. RF 5 通道发射器钻头

使用切成两半的线刀将电路 playground express 的 A1、GND 和 Vout 连接到 5 通道射频发射器。

11

电池连接

使用正品 JST 连接器将锂离子聚合物电池 - 3.7v 500mAh 连接到 adafruit circuit playground express。

锂离子聚合物电池预装了如图所示的正品 2 针 JST-PH 连接器,并包括必要的保护电路。因为锂离子聚合物电池有一个正品 JST 连接器,而不是仿冒接头,所以电缆不会卡住或卡在匹配的 JST 插孔中,它们可以顺畅地卡入和卡出。

12

组装

  1. 3D 打印用于存放锂离子电池的盒子。请勿将锂离子电池直接粘在 circuit playground express 和手套上。这是非常危险的,因为坏掉的锂离子电池会爆炸。
  2. 将盒子粘在手套上。
  3. 将 circuit playground express 粘在盒子上。
13

射频发射器位到 Arduino 位到射频接收器位

  1. 电源位连接到 5 通道射频接收器位
  2. 5 通道射频接收器位连接到 Arduino 位
  3. Arduino 位连接到 5 通道射频发射器位

将 USB 电源连接到电源位和 Arduino 位。 两个端口都应连接到 5V USB 电源。否则,电路无法正常工作。Arduino 位分析从无线手套接收到的 RF 信号。如果接收到的射频无线信号是“热火”,Arduino 位控制 Street Fighter 释放热火的刮擦游戏。此外,Arduino 位通过使用 RF 5 通道发射器将控制信号提供给振动接收器。玩家可以感觉到振动作为攻击。

14

为 RF 通信选择不同的频道

从可穿戴游戏手套的射频发射器位到连接到 Arduino 位的射频接收器位的无线通信应占用一个信道。此外,从连接到 Arduino 位的 RF 发射器位到连接到振动位的 RF 接收器位的无线通信应占用另一个信道。可以分配五个通道。例如,在此项目中选择了通道 a 和通道 b。

15

振动接收器

振动接收器 = 功率位 + 5 通道射频接收器位 + 振动位 + 条形图位

振动接收器接收来自 Arduino 位的信号,表明振动接收器可以安装在夹克、裤子、手套或鞋子中。玩家可以感觉到来自敌人的攻击,这意味着玩家会感受到振动。此外,bargraph bit 将打开。

16

使用 ARDUINO 安装 LITTLEBITS SCRAT

  1. 安装 ARDUINO arduino-1.8.5-windows
  2. 安装 JAVA jre-8u144-windows-x64
  3. 编译并加载 littleBits_Scratch2.ino 到 Arduino 位
  4. 执行 scratch2LittleBits
  5. 在 SCRATCH 中,导入 (SHIFT+ FILE) scratch2LittleBitsDEF.json
17

学习材料 - 视频和菜单(参考)

18

编码 - Circuit Playground Expres

将 hot_fire_final.ino 加载并编译到 Circuit Playground Express 中。

min_light、max_light 和 time_count 因环境不同而有所不同。

uint8_t min_light = 30;

uint8_t max_light = 100;

uint8_t time_count= 1000;2 秒

circuit playground express 检测光强度。如果手指覆盖电路 playground express 的光传感器 2 秒钟,然后松开手指,电路 playground express 将通过发射器位和接收器位向 Arduino 位发送“热火信号”。此外,当手指遮住电路游乐场快车的光感应器时,10 个 LED 亮起,就像将电力储存到吸引手套中一样。


while ((CircuitPlayground.lightSensor() < min_light) & & (count >= time_count)) {

延迟 (200);

计数 = 计数 + 200;}

if ((CircuitPlayground.lightSensor() < min_light) & (count >= time_count)) { Serial.println(“它大于或等于 time_count”);

10 像素 LED 亮起

生成 10 个 LED 的彩虹色

do {// 轻点像素

CircuitPlayground.setPixelColor(像素 ++, CircuitPlayground.colorWheel(25 * 像素));

if (pixeln == 11) {

像素 = 0;

CircuitPlayground.clearPixels()的}

Serial.println(CircuitPlayground.lightSensor(), DEC);

延迟 (100);

}while (CircuitPlayground.lightSensor() < min_light);

所有白色 LED 亮起,引脚 6 设置为 HIGH 200ms,然后设置为 LOW。然后,它将等待大约 2.2 秒。

if ((count>=time_count)&&(CircuitPlayground.lightSensor() >=max_light)){ Serial.print(“已发射!!!!!!!!!!!!”);

for (int i=0; i <= 255; i++){

CircuitPlayground.setPixelColor(像素 ++, CircuitPlayground.colorWheel(25 * 像素));

if (pixeln == 11) {

像素 = 0;

CircuitPlayground.clearPixels()的}

延迟 (10);}

digitalWrite(6, 高);

延迟 (200);

digitalWrite(6, 低);

打开 LED(HIGH 是电压级别)

延迟 (1000);

for (int i=0; i<=10; i++){

CircuitPlayground.setPixelColor(i, 255, 255, 255);}

延迟 (1000);等一下

通过将电压设置为低电平来关闭 LED

延迟 (1000);等一下

CircuitPlayground.clearPixels()的}

CircuitPlayground.clearPixels()的

延迟 (200);


19

编码 - Arduino Bit

  1. 下载 littleBits_Scratch2.ino 的链接。
  2. https://github.com/electronicadivertida/scratch2Li...
  3. 编译并加载 littleBits_Scratch2.ino
20

编码 - Scratch

下载 scratch2LittleBits

  1. https://github.com/electronicadivertida/scratch2Li...
  2. 刮擦 2LittleBits
  3. Scratch 2.0 OFFLINE 的 littleBits 扩展,感谢 https://github.com/khanning/scratch-littlebits-ex... littleBits 连接到 Scratch 2 Stand Alone。
  4. 执行 scratch2LittleBits

下载 scratch2LittleBitsDEF.json

  1. https://github.com/electronicadivertida/scratch2Mu...
  2. 在 SCRATCH 中,import (SHIFT+ FILE) scratch2LittleBitsDEF.json
  3. 打开文件 street fighter V scratch 程序,该程序可以在 scratch MIT 中下载,带手套
21

玩游戏

无线游戏手套 - 热火演示。

手指盖住 circuit playground express 的光传感器,然后手指松开。彩虹灯,然后白灯亮起。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载