快捷导航
 
ARDUINO从入门到创客带师8:水平仪与指南针
VIEW CONTENTS

ARDUINO从入门到创客带师8:水平仪与指南针

2020-2-27 23:04| 发布者: xtyly| 查看: 99| 评论: 0
摘要: ARDUINO从入门到创客带师8:水平仪与指南针,由乐居居会员发布在智能家居论坛的真实分享,本文是作者亲身的购买使用感受以及中立消费见解,旨为在广大网友中传播更好的消费主张。
看完喜欢想买?就在这里搜一下!想要什么搜什么:

蜗居的阿宅终于有了正当理由不出门,那么他们的生存秘诀是什么?全新上线的#宅家生活手册#征稿活动火热进行中,来分享你特殊时期的宅居规划吧>活动详情戳这里< 时间:1月28日-2月29日

创作立场声明:其实大多数时候这样的功能买个20块钱的手机装个软件就都有了,但是不是所有的时候都可以绑着手机上的是吧

ARDUINO从入门到创客带师⑧:利用MPU 9250做个水平仪和指南针

用ESP8266 WIFI模块自制MP3

ARDUINO 6050 9250

首先不同模块之间每个模块规格都不一样的,从命名能看出来。就像CH340/CH341 CP210X一样,MPU6050 6500 6555 9150 9250 9255虽然都是加速度传感器,但是明显的就存在区别 常见的MPU6050是非常便宜的三轴陀螺仪 + 三轴加速度传感器模块,MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital Motion Processor)硬件加速引擎,它的成本通常不超过5块钱:


ARDUINO从入门到创客带师8:水平仪与指南针


而这期我们用的MPU9250实际上是MPU6050加了别的传感器的胶水封装,但是价格就贵了很多:


ARDUINO从入门到创客带师8:水平仪与指南针


MPU9150是只支持I2C的,MPU9250是支持SPI/I2C两种方式。里面的传感器也是不同的,MPU9150里面是MPU6050+AK8975,而MPU9250里面是MPU6500+AK8963,总之咱一开始出这个教程的动机其实很简单,就是因为咱不小心在插了9250模块的面包板上同时插了一个NODEMCU,结果上电之后NODEMCU炸了,所以咱很方,怕9250也跟着炸了,毕竟面包板里面都是直通的,结果就有了这期教程。事实证明它还行,没炸,所以省下了NODEMCU炸了无所谓,14包邮现在,MPU9250 20不包邮可还行,炸了损失快顶俩NODEMCU了


ARDUINO从入门到创客带师8:水平仪与指南针


此外咱在插上之前有系统镜像的SD卡之后,树莓派PI0 W也点亮了,所以下期我们出点亮树莓派的教程的时候选型会有点更改,优先考虑之前有屏幕的3B


ARDUINO从入门到创客带师8:水平仪与指南针


总之我们需要这样的一个模块和一个支持I2C的开发板,从51单片机到树莓派都行,这里我们用的还是ARDUINO


ARDUINO从入门到创客带师8:水平仪与指南针


按正常的I2C定义把线接上就行了

6500 9205

MPU9250 ---> UNO

vcc-> 5v

接地->接地

SCL-> A5

SDA-> A4

对于其他开发板,请根据引脚定义图检查I2C引脚分配


ARDUINO从入门到创客带师8:水平仪与指南针


至于需要的资料可以用全世界最好的搜索引擎去找


ARDUINO从入门到创客带师8:水平仪与指南针


基本上商品介绍页的信息都是没啥问题的

MPU9250内部是MPU6050和AK8963两个芯片合并在一起的

MPU9250默认情况下MPU9250用它的I2C主机控制器与AK8963通信,把磁力值读到出放到指定的寄存器中,这需要设置一堆寄存器。好在MPU9250还集成了一个I2C主机控制器。这个模式相当于MPU9250和AK8963共同使用一条I2C总线,它们的通信地址不一样


ARDUINO从入门到创客带师8:水平仪与指南针


实际操作上因为我们用的是ARDUINO所有库和项目代码都是开源且打包好的所以各位可以直接上GITHUB的项目下载你需要的所有资源,让我看看之前咱的教程的成果怎么样

前作:ARDUINO环境库的安装和使用GITHUB上的开源项目

如果GITHUB上不去,可以用这个备用链接,但是我还是希望各位能会用GITHUB,因为它介绍的很全


ARDUINO从入门到创客带师8:水平仪与指南针


总之我们需要安装好一个库,直接用ARDUINO把GUTHUB的ZIP当ZIP库安装就可以,然后打开例程,配置好串口驱动选定开发板所在串口,然后上传程序之后打开串口监视器,配置好波特率就可以看到传感器模块的实时返回信息了,就这么简单:


ARDUINO从入门到创客带师8:水平仪与指南针


默认波特率是不对的,换个代码标注的波特率就行了


ARDUINO从入门到创客带师8:水平仪与指南针


示例代码:

#include <MPU9250_asukiaaa.h>


#ifdef _ESP32_HAL_I2C_H_

#define SDA_PIN 21

#define SCL_PIN 22

#endif


MPU9250_asukiaaa mySensor;

float aX, aY, aZ, aSqrt, gX, gY, gZ, mDirection, mX, mY, mZ;


void setup() {

 Serial.begin(115200);

 while(!Serial);

 Serial.println("started");


#ifdef _ESP32_HAL_I2C_H_ // For ESP32

 Wire.begin(SDA_PIN, SCL_PIN);

 mySensor.setWire(&Wire);

#endif


 mySensor.beginAccel();

 mySensor.beginGyro();

 mySensor.beginMag();


 // You can set your own offset for mag values

 // mySensor.magXOffset = -50;

 // mySensor.magYOffset = -55;

 // mySensor.magZOffset = -10;

}


void loop() {

 uint8_t sensorId;

 if (mySensor.readId(&sensorId) == 0) {

   Serial.println("sensorId: " + String(sensorId));

 } else {

   Serial.println("Cannot read sensorId");

 }


 if (mySensor.accelUpdate() == 0) {

   aX = mySensor.accelX();

   aY = mySensor.accelY();

   aZ = mySensor.accelZ();

   aSqrt = mySensor.accelSqrt();

   Serial.println("accelX: " + String(aX));

   Serial.println("accelY: " + String(aY));

   Serial.println("accelZ: " + String(aZ));

   Serial.println("accelSqrt: " + String(aSqrt));

 } else {

   Serial.println("Cannod read accel values");

 }


 if (mySensor.gyroUpdate() == 0) {

   gX = mySensor.gyroX();

   gY = mySensor.gyroY();

   gZ = mySensor.gyroZ();

   Serial.println("gyroX: " + String(gX));

   Serial.println("gyroY: " + String(gY));

   Serial.println("gyroZ: " + String(gZ));

 } else {

   Serial.println("Cannot read gyro values");

 }


 if (mySensor.magUpdate() == 0) {

   mX = mySensor.magX();

   mY = mySensor.magY();

   mZ = mySensor.magZ();

   mDirection = mySensor.magHorizDirection();

   Serial.println("magX: " + String(mX));

   Serial.println("maxY: " + String(mY));

   Serial.println("magZ: " + String(mZ));

   Serial.println("horizontal direction: " + String(mDirection));

 } else {

   Serial.println("Cannot read mag values");

 }


 Serial.println("at " + String(millis()) + "ms");

 Serial.println(""); // Add an empty line

 delay(500);

}

用同样的方法可以读取MPU9250磁传感器的绝对值,并且可以利用别的项目来做指南针。至于水平仪可以到正点原子找开源的代码。这里我们也可以提供一个备用连接。


ARDUINO从入门到创客带师8:水平仪与指南针


这个模块实际上的功能是异常强悍的,有了这个模块你甚至可以做惯性导航,无人机、火箭之类的都可以造了。总之我不再说了,ARDUINO玩好了未来的潜力是不可限量的,各位自己领会吧。





Tab标签:

鲜花

握手

雷人

路过

鸡蛋

最新评论

推荐快讯更多

乐居居-让生活更智能!

  • 反馈建议:153890879@qq.com
  • 客服电话:
  • 工作时间:周一到周五

云服务支持

精彩文章,快速检索

关注我们

Copyright乐居居  Powered by©  备案号:湘ICP备15009499号-1