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





组件




可穿戴游戏眼镜
- Circuit Playground Express
- USB 线
无线游戏手套
- Circuit Playground Express
- 锂电池
- 5 通道 RF 发射器和接收器位
- Arduino 位
- 3M 手套
- 3D 打印盒装电池
- 线刀头
可穿戴游戏眼镜





- 3D 打印 glass.stl.
- 使用 3M 胶带将 Circuit Playground Express 贴在玻璃上
可穿戴 3D 游戏眼镜

原理 - 加速度计




....加速度计是能够测量静态和/或动态加速度的机电设备。静态力包括重力,而动态力可以包括振动和运动。加速度计可以测量 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)
组件组装




组装 3D 游戏眼镜,然后使用 3M 胶带固定电路游乐场快车。
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);
}
}
可穿戴游戏眼镜

可穿戴游戏手套




制作可穿戴游戏手套






元件:
- Circuit Playground Express 赛道快车
- 线刀头
- RF 5 通道发射器钻头
使用切成两半的线刀将电路 playground express 的 A1、GND 和 Vout 连接到 5 通道射频发射器。
电池连接





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

- 3D 打印用于存放锂离子电池的盒子。请勿将锂离子电池直接粘在 circuit playground express 和手套上。这是非常危险的,因为坏掉的锂离子电池会爆炸。
- 将盒子粘在手套上。
- 将 circuit playground express 粘在盒子上。
射频发射器位到 Arduino 位到射频接收器位




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

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




振动接收器 = 功率位 + 5 通道射频接收器位 + 振动位 + 条形图位
振动接收器接收来自 Arduino 位的信号,表明振动接收器可以安装在夹克、裤子、手套或鞋子中。玩家可以感觉到来自敌人的攻击,这意味着玩家会感受到振动。此外,bargraph bit 将打开。
使用 ARDUINO 安装 LITTLEBITS SCRAT

- 安装 ARDUINO arduino-1.8.5-windows
- 安装 JAVA jre-8u144-windows-x64
- 编译并加载 littleBits_Scratch2.ino 到 Arduino 位
- 执行 scratch2LittleBits
- 在 SCRATCH 中,导入 (SHIFT+ FILE) scratch2LittleBitsDEF.json
学习材料 - 视频和菜单(参考)




编码 - 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);
编码 - Arduino Bit

- 下载 littleBits_Scratch2.ino 的链接。
- https://github.com/electronicadivertida/scratch2Li...
- 编译并加载 littleBits_Scratch2.ino
编码 - Scratch

下载 scratch2LittleBits
- https://github.com/electronicadivertida/scratch2Li...
- 刮擦 2LittleBits
- Scratch 2.0 OFFLINE 的 littleBits 扩展,感谢 https://github.com/khanning/scratch-littlebits-ex...将 littleBits 连接到 Scratch 2 Stand Alone。
- 执行 scratch2LittleBits
下载 scratch2LittleBitsDEF.json
- https://github.com/electronicadivertida/scratch2Mu...
- 在 SCRATCH 中,import (SHIFT+ FILE) scratch2LittleBitsDEF.json
- 打开文件 street fighter V scratch 程序,该程序可以在 scratch MIT 中下载,带手套
玩游戏

无线游戏手套 - 热火演示。
手指盖住 circuit playground express 的光传感器,然后手指松开。彩虹灯,然后白灯亮起。











