48|2

32

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第4期】任务2: IMU传感器 [复制链接]

  本帖最后由 zsy-s 于 2024-11-29 14:54 编辑

# 介绍

LSM6DSOXTR是一款高性能的6轴惯性测量单元(IMU),由STMicroelectronics(意法半导体)制造。集成了3轴数字加速度计和3轴数字陀螺仪,采用系统级封装技术,具有出色的性能和低功耗特性。提供SPI、I²C和MIPI I3C串行接口,支持主处理器数据同步。是一款功能强大、性能卓越的6轴IMU。

封装度深得好处,显而易见,开发毫无费力,手册都不用看得。

# 代码

imu模块有依赖库可使用。

在包管理器上,搜索LSM6DSOX。

 

 
 

添加 #include <Arduino_LSM6DSOX.h> 应用就可以愉快开发了。

如下是依赖库得接口说明

readme.md (792 Bytes, 下载次数: 0) api.md (6.79 KB, 下载次数: 0)

初始化imu模块

  if(IMU.begin() == 0){
    Serial.println("IMU.begin fail \n\r ");
  }

读取 加速计和陀螺仪数据。

float x,y,z;
float gx, gy, gz;
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LEDB, HIGH);  // turn the LED on (HIGH is the voltage level)
  digitalWrite(LEDR, LOW);   // turn the LED off by making the voltage LOW
  digitalWrite(LEDG, LOW);   // turn the LED off by making the voltage LOW

  delay(200);                      // wait for a second
  digitalWrite(LEDB, LOW);   // turn the LED off by making the voltage LOW
  digitalWrite(LEDR, HIGH);   // turn the LED off by making the voltage LOW
  digitalWrite(LEDG, LOW);   // turn the LED off by making the voltage LOW

  delay(200);       
  digitalWrite(LEDB, LOW);   // turn the LED off by making the voltage LOW
  digitalWrite(LEDR, LOW);   // turn the LED off by making the voltage LOW
  digitalWrite(LEDG, HIGH);   // turn the LED off by making the voltage LOW
  delay(200);                  // wait for a second
  Serial.println("RP2040 hello \n\r ");

  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(x,y,z);
    Serial.print("Acceleration:");
    Serial.print(x);
    Serial.print('\t');
    Serial.print(y);
    Serial.print('\t');
    Serial.println(z);
  }
  if (IMU.gyroscopeAvailable()) {
      IMU.readGyroscope(gx, gy, gz);
      Serial.print("Gyroscope:");
      Serial.print(gx);
      Serial.print('\t');
      Serial.print(gy);
      Serial.print('\t');
      Serial.println(gz); 
  }


  if (IMU.temperatureAvailable())
    {
      int temperature_deg = 0;
      IMU.readTemperature(temperature_deg);

      Serial.print("LSM6DSOX Temperature = ");
      Serial.print(temperature_deg);
      Serial.println(" °C");
    }

效果如下,温度挺准,准确得多算了十度。

 

# 知识学习

从手册查看芯片坐标轴,如下

从上端看,x是航向,y是偏角,z是俯仰。

静止不动得情况,有一个恒定得地心引力,1g,作用到芯片上。
加速度值就能看出来,平放时候,z轴加速度 为1,反过来放 -1.
90度侧放,y轴的值分别 1 -1.
90度竖放,x轴值分别 1 -1.
陀螺仪的数值分别来自于航向/翻滚/俯仰方向的角速度变化值,可以分别尝试绕航向角转,翻滚角转,俯仰角转,能明显看出来对应的数值变化。

# 疑难问题

# 结论

只有一个赞,arduino的库写的正好。之前看过c写的imu代码,一大片的初始化代码,很复杂,看很久也迷糊。

还是用轮子写,写的开心

最新回复

IMU.readTemperatureFloat(temperature); 温度可以用float试试     详情 回复 发表于 1 小时前
点赞 关注
 
 

回复
举报

6854

帖子

2

TA的资源

版主

沙发
 

arduino库采样率能达到多少?

 
 
 

回复

103

帖子

5

TA的资源

一粒金砂(中级)

板凳
 

IMU.readTemperatureFloat(temperature);

温度可以用float试试

 
个人签名尽吾志也而不能至者,可以无悔矣。——王安石
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表