在Wio终端,配有3轴加速度传感器,其工作原理图如图1所示。
图1 传感器原理图 在使用该传感器时,需预先下载其支持库的压缩文件Seeed_Arduino_ LIS3DHTR_master.zip,然后在IDE中添加该文件,见图2所示。
图2 添加支持库
检测3轴加速度传感器的程序如下: - #include"LIS3DHTR.h"
- LIS3DHTR<TwoWire> lis;
- void setup() {
- Serial.begin(115200);
- lis.begin(Wire1);
- if (!lis) {
- Serial.println("ERROR");
- while(1);
- }
- lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Data output rate
- lis.setFullScaleRange(LIS3DHTR_RANGE_2G); //Scale range set to 2g
- }
- void loop() {
- float x_values, y_values, z_values;
- x_values = lis.getAccelerationX();
- y_values = lis.getAccelerationY();
- z_values = lis.getAccelerationZ();
- Serial.print("X: "); Serial.print(x_values);
- Serial.print(" Y: "); Serial.print(y_values);
- Serial.print(" Z: "); Serial.print(z_values);
- Serial.println();
- delay(50);
- }
复制代码
经编译上传,其结果如图3和图4所示。
图3 完成上传
图4 检测结果 此外,在添加“Seeed_Line_Chart”支持库的情况下,还可以在Wio终端来绘制其数据波形图,其程序如下: - #include"LIS3DHTR.h" //include the accelerator library
- #include"seeed_line_chart.h" //include the line chart library
- TFT_eSPI tft;
- LIS3DHTR<TwoWire> lis;
- #define max_size 50 //maximum size of data
- doubles accelerator_readings[3];
- TFT_eSprite spr = TFT_eSprite(&tft); // Sprite
- void setup() {
- tft.begin();
- tft.setRotation(3);
- spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
- lis.begin(Wire1);
- lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ);
- lis.setFullScaleRange(LIS3DHTR_RANGE_2G);
- Serial.begin(115200);
- }
- void loop() {
- spr.fillSprite(TFT_WHITE);
- float x_raw = lis.getAccelerationX();
- float y_raw = lis.getAccelerationY();
- float z_raw = lis.getAccelerationZ();
- Serial.print(x_raw);
- Serial.print(",");
- Serial.print(y_raw);
- Serial.print(",");
- Serial.println(z_raw);
- if (accelerator_readings[0].size() == max_size) {
- for (uint8_t i = 0; i<3; i++){
- accelerator_readings[i].pop(); //this is used to remove the first read variable
- }
- }
- accelerator_readings[0].push(x_raw); //read variables and store in data
- accelerator_readings[1].push(y_raw);
- accelerator_readings[2].push(z_raw);
- auto header = text(0, 0)
- .value("Accelerator Readings")
- .align(center)
- .valign(vcenter)
- .width(tft.width())
- .thickness(2);
- header.height(header.font_height() * 2);
- header.draw();
- auto content = line_chart(20, header.height());
- .height(tft.height() - header.height() * 1.5)
- .width(tft.width() - content.x() * 2)
- .based_on(-2.0)
- .show_circle(false)
- .value({accelerator_readings[0],accelerator_readings[1], accelerator_readings[2]})
- .color(TFT_BLUE, TFT_RED, TFT_GREEN)
- .draw();
- spr.pushSprite(0, 0);
- delay(50);
- }
复制代码
程序上传及检测效果如图5和图6所示。 比较有意思的是,我们是否可以用3轴加速度传感器来检测地震呢?那波形曲线可是十分明显的! 此外,用3轴加速度传感器还可进行智能识别处理,以确定物体的倾斜及旋转等。
图5 程序及上传
图6 运动波形图
|