读写运动数据
材料准备
实物图如下:
硬件连接
1.硬件连线:将扩展板插入到 Genuino 上,然后将 MicroSD Module V1.0 模块插入到扩展板上,如下图所示,将 MicroSD 卡插到 MicroSD Module 上,然后将 Genuino 和电脑用 usb 数据线相连。
实物连接图如下:
注意,经过我们检测,电源和下载线供电端的方向是加速度 ax 的方向,在一个平面内与之垂直的是 ay 方向,与控制板平面垂直的是 az 方向,如下图所标。经过我们多次测试,采集数据的时候要尽量保持动作的一致性和重复性,而且在做完完整的动作之后,让设备静止一秒左右,方便后续标记以及处理数据。
软件准备
系统推荐:Windows 7 以上 / Mac OS 10.7 Lion 或更新的版本
开发环境推荐:Arduino IDE 1.6.12 以上
开发版支持库推荐:Intel Curie Boards by Intel 1.0.7 以上
开发库需求:SD 库(这个库为 Arduino IDE 自带,如果你没找到它,可在下方下载。)
SD.zip
( SD.zip 库下载完成后,在 Arduino IDE 菜单栏中的 “ 项目 -> 加载库 -> 添加一个 .ZIP 库… ” 中选择下载的 “ SD.zip ” 文件即可自动完成库文件的加载。在 macOS 下载后可能会自动解压成文件夹,我们可以在 “ 添加一个 .ZIP 库… ” 的选择窗口中直接选择库文件夹即可。 )
示例代码
写 sd 卡代码示例如下:
#include “SPI.h”
#include “SD.h”
#include “CurieIMU.h”
#define SAMPLING_INTERVAL 10//ms
File myFile;
float ax, ay, az;
uint64_t timer;
void setup() {
timer = 0;
Serial.begin(9600);
CurieIMU.begin();
CurieIMU.autoCalibrateXAccelOffset(0);
CurieIMU.autoCalibrateYAccelOffset(0);
CurieIMU.autoCalibrateZAccelOffset(1);
CurieIMU.setAccelOffsetEnabled(true);
CurieIMU.setAccelerometerRange(4);
if(!SD.begin(4)) {
Serial.println(“initialization failed!”);
return;
}
}
void loop() {
timer =millis();
CurieIMU.readAccelerometerScaled(ax, ay, az);
myFile =SD.open(“data.csv”, FILE_WRITE);
if(myFile)
{
myFile.print(ax);
myFile.print(“,”);
myFile.print(ay);
myFile.print(“,”);
myFile.print(az);
myFile.print(“\n”);
}
myFile.close();
while((millis() – timer) < SAMPLING_INTERVAL);
}
代码分析
如果从 CS 口与 SD 卡通信,4 表示 CS 接线的 pin 口
以写权限打开 data.csv,如果不存在此文件的话,新建一个 data.csv 文件。
向文件中写入 X 轴的数值。
关闭文件。
CurieIMU.autoCalibrateYAccelOffset(0);
CurieIMU.autoCalibrateZAccelOffset(1);
CurieIMU.setAccelOffsetEnabled(true);
初始化加速度传感器。
设置加速度器输出的值得范围为-4g~4g。
效果测试
烧写完程序以后,我们就可以重复做一组动作,大约可以做 20 次左右,断电,
取出 MicroSD 卡,通过 sd 卡适配器插入电脑上,双击打开里面的 data.csv 文件。
如下图:
现在我们看到的就是里面的 3 轴的加速度的数据了。
注意事项
如果接插杜邦线不牢固的话,会接触不良影响采集到的数据。
读写 MicroSD 卡数据
安装完 SD.zip 的开发库以后,会自带一文件读写的例子,在文件-> 示例->SD->ReadWrite。
#include “SPI.h”
#include “SD.h”
File myFile;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print(“Initializing SD card…”);
if (!SD.begin(4)) {
Serial.println(“initialization failed!”);
return;
}
Serial.println(“initialization done.”);
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open(“test.txt”, FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print(“Writing to test.txt…”);
myFile.println(“testing 1, 2, 3.”);
// close the file:
myFile.close();
Serial.println(“done.”);
} else {
// if the file didn’t open, print an error:
Serial.println(“error opening test.txt”);
}
// re-open the file for reading:
myFile = SD.open(“test.txt”);
if (myFile) {
Serial.println(“test.txt:”);
// read from the file until there’s nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
} else {
// if the file didn’t open, print an error:
Serial.println(“error opening test.txt”);
}
}
void loop() {
// nothing happens after setup
}
代码分析
Serial.write(myFile.read());
}
=======================
判断要读写的文件是不是可用的,如果是可用的话,通过串口打印文件的内容。
关闭文件流。
发布者:Cara,转载请注明出处:http://www.makercollider.com/curie/1170