就这么简单。您的 arduino 已完成设置。
现在我们看看代码:
在这里,我们设置了将向遥控器发送命令的引脚:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| #define FORWARD 2
#define BACKWARD 4
#define LEFT 8
#define RIGHT 12
#define LED 13
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false, goodString = false; // whether the string is complete
int forward=HIGH, backward=HIGH, left=HIGH, right=HIGH;
void setup() {<br>
// initialize serial:
Serial.begin(115200);
// reserve 10 bytes for the inputString:
inputString.reserve(10);
pinMode(FORWARD, OUTPUT);
pinMode(BACKWARD, OUTPUT);
pinMode(LEFT, OUTPUT);
pinMode(RIGHT, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(FORWARD, HIGH);
digitalWrite(BACKWARD, HIGH);
digitalWrite(LEFT, HIGH);
digitalWrite(RIGHT, HIGH);
}
|
在主要循环中,我们将会检查顺序输入并相应地设置引脚:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| void loop() {
if (stringComplete) {
// Serial.println(inputString);
goodString = false;
if(inputString == "F\n"){
digitalWrite(LED, HIGH);
forward = LOW;
backward = HIGH;
goodString = true;
}
else if(inputString == "B\n"){
forward = HIGH;
backward = LOW;
goodString = true;
}
else if(inputString == "L\n"){
left = LOW;
right = HIGH;
goodString = true;
}
else if(inputString == "R\n"){
left = HIGH;
right = LOW;
goodString = true;
}
else if(inputString == "S\n"){
digitalWrite(LED, LOW);
left = HIGH;
right = HIGH;
forward = HIGH;
backward = HIGH;
goodString = true;
}
else{
goodString = false;
}
if(goodString){
digitalWrite(FORWARD, forward);
digitalWrite(BACKWARD, backward);
digitalWrite(LEFT, left);
digitalWrite(RIGHT, right);
Serial.print('!');
}
// clear the string:
inputString = "";
stringComplete = false;
}
}
|
第 4 步. 使用 Python 程序重定向来自 Muse 的数据最后一步是从 Muse 读取数据,同时向 Arduino 发送正确的命令和将在您的 Web 应用程序上显示的正确数据。
- 在运行 Python 应用程序之前,您需要使用所提供的软件连接 Muse。此软件将通过蓝牙接收数据并将它重定向到一个 OSC 端口。
- 转到 SDK 文件夹。
- 运行以下命令:
1
| $ ./muse-io --dsp --osc osc.udp://localhost:5000
|
- 更改 Python 脚本 (moveRCToyCar.py),以便使用 Bluemix 提供的自定义 URL(更改变量 webAppURL)和 Arduino 连接到的端口 (arduinoPort)。如果不知道 Arduino 连接到哪个端口,那么可以打开 Arduino IDE,单击 Tools 菜单,寻找 Serial Port 上已勾选的选项。
- 在完成代码更改后,就可以运行它了!
1
| $ python moveRCToyCar.py -t 0.12
|
备注:可以使用 -t 标记来设置您移动玩具车所需达到的 “松弛” 水平。也可以省略它,它的默认设置为 0.35。(您也可以在代码中更改此设置。)
如果一切运行正常,您会看到以下类似信息:
1
2
3
4
5
6
7
8
| Setting threshold to 0.12
Connecting to arduino on /dev/ttyACM0 at 115200 baud
Connected!
Message to Arduino: <STOP> 0
Message to Arduino: <STOP> 0
Message to Arduino: <STOP> 0
Message to Arduino: <STOP> 0
Message to Arduino: <STOP> 0
|
- 在想要停止时,可以按下 Enter 键,然后再断开 Muse 或 Arduino。您会看到以下信息:
1
2
3
4
5
6
7
| Closing everything...
Waiting for threads to close...
Message to Arduino: <STOP> 0
Arduino thread closed!
Local server thread closed!
Waiting for OSC server to close...
OSC server closed!
|
备注:如果断开 Muse 或 Arduino 之前忘记按下 Enter 键,您可能需要强制结束 Python 进程。如果使用的是类似 Unix 的系统(比如 OSX 或 Ubuntu),那么可以运行以下命令,它将关闭此刻运行的任何 Python 应用程序:
第 5 步. 使用 R 分析存储在 Cloudant 和 dashDB 上的数据备注:对于这部分操作,需要一个 和 Bluemix 上的 。
- 同步来自 Cloudant 的数据。
- 输入您的 Cloudant 帐户和数据库的信息。
- 为要创建的表选择一个名称。
- 选择 Start Sync。

- 要运行 R 脚本,可以转到 dashDB 菜单中的 Analyze/Develop R Scripts,可以在这里选择创建和导入脚本。以下 R 脚本(可在存储库中找到)将从一个名为 SAMPLES 的表抓取数据,使用一个字段绘制一个线图。
1
2
3
4
5
6
7
8
| library(bluR)
mycon <- bluConnect("BLUDB", "", "")
bluAnalyticsInit(mycon)
datamuse <- as.data.frame(blu.data.frame('"BLU11196"."SAMPLES"')[ ,
c("C0","C1","C2","C3","F","S0","S1","S2","S3","TIMESTAMP","_ID","_REV")])
plot(datamuse[1:nrow(datamuse),1],type="l")
|
对于此场景,BLU11196 是数据库的用户,SAMPLES 是表的名称。
我们可以看看使用 R 描绘的 Muse 数据的图:
 结束语在本教程中,您学习了如何从 Muse 头环提取脑电波信号。还学习了如何使用一个 Python 程序解释此数据,该程序拥有决定玩具车是否前进的逻辑。本教程还展示了如何在 上的 Node.js 中创建一个 Web 应用程序,以便实时显示脑电波活动,以及如何设置让玩具车移动的阈值。您可能会说这不是真正的感应运动演示,因为您实际上不是通过思考来移动玩具车的。相反,玩具车是根据您的放松程度来移动的,因为我们检测的是您的阿尔法脑电波。尽管有些争议,但有一点是毋庸置疑的 — 是您的脑电波让玩具车移动的! |