——从传感器数据采集到 Processing 实时互动
作者:科采通
生理信号(如心电图 ECG、肌电图 EMG、皮肤电 EDA 等)长期用于医疗、康复、心理研究等专业领域,但通过像 BITalino 这样的开源平台,它们正变得越来越亲民,进入创客空间、课堂乃至游戏开发者手中。
本篇文章将结合一个非常有趣的案例: 我们将使用 BITalino 采集肌电信号(EMG),控制经典 Pong 游戏中的球拍移动;同时也会讲解如何通过 Processing 将包括心电、肌电等多种信号实时图形化。
BITalino 支持通过 蓝牙串口(Serial over Bluetooth) 发送数据。首次连接前,需在系统中完成蓝牙配对:
# Linux 示例:绑定 BITalino 到串口设备
sudo rfcomm bind /dev/rfcomm0 XX:XX:XX:XX:XX:XX 1
macOS 和 Windows 用户也可以使用内置的 Bluetooth 设置连接设备。
import processing.serial.*;
Serial myPort;
ArrayList<Integer>[] sensorData = new ArrayList[6];
void setup() {
size(800, 400);
for (int i = 0; i < 6; i++) sensorData[i] = new ArrayList<Integer>();
myPort = new Serial(this, Serial.list()[PORT_INDEX], 115200);
}
void draw() {
background(255);
for (int i = 0; i < sensorData.length; i++) {
stroke(i * 40, 100, 200);
noFill();
beginShape();
for (int j = 0; j < sensorData[i].size(); j++) {
vertex(j, sensorData[i].get(j) / 10 + i * 50);
}
endShape();
}
}
📌 注:PORT_INDEX 需修改为你本地蓝牙串口的序号。
运行以上代码后,你将看到类似“六通道示波器”的图形界面,实时滚动展示从 BITalino 获取的传感器数据。
你可以通过以下方式将数据导出为 CSV:
java复制编辑PrintWriter output = createWriter("data.csv");
output.println("时间戳,ECG,EDA,EMG,...");
...
output.flush();
output.close();
本项目将通过 EMG 传感器读取肌肉电信号,当你用力握拳时,信号上升,从而控制 Pong 球拍向上或向下移动。无需按键,全靠肌肉动作!
java复制编辑// EMG 值阈值控制球拍上下移动
int emgThreshold = 500;
void draw() {
...
int emgValue = getEMGValue();
if (emgValue > emgThreshold) paddleY -= 5;
else paddleY += 5;
}
bitalinoPong.pde
。
BITalino 是一个极具教育性与创造力的生理信号开发工具。通过本文两个项目——实时可视化 + 游戏交互,你可以亲自体验“用身体做输入设备”的乐趣。
不论你是学生、研究人员,还是开源创客,BITalino 都能帮你快速搭建身体信号相关的应用原型,打开一扇通往未来医疗与交互设计的大门。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。