3162浏览
楼主: 驴友花雕

[项目] 【Arduino】168种传感器模块系列实验(158)---QMC5883L三轴罗盘

[复制链接]

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 11:50:59

QMC5883L模块实验接线示意图

07.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 11:52:15

安装QMC5883库,在网上搜到不少相关的库:
keepworking /Mecha_QMC5883L
https://github.com/keepworking/mecha_qmc5883l

mprograms /QMC5883LCompass
https://github.com/mprograms/QMC5883LCompass

dthain /QMC5883L
https://github.com/dthain/QMC5883L

liyupengsGit /QMC5883LCompass
https://github.com/liyupengsGit/QMC5883LCompass

11.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 11:58:09

  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  安装库:IDE--工具--管理库--搜索“QMC5883L”--安装  QMC5883LCompass
  项目一:简易测量方位角度(数值在0-359度之间)

  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  3.    实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  4.   1、安装库:IDE--工具--管理库--搜索“QMC5883L”--安装QMC5883LCompass
  5.   2、项目一:简易测量方位角度(数值在0-359度之间)
  6.   3、实验接线:
  7.   QMC5883L-------------- UNO
  8.   VCC------------------- 5V
  9.   GND------------------- GND
  10.   SCL ------------------- A5
  11.   SDA------------------- A4
  12.   DRDY------------------ N/C
  13. */
  14. #include <QMC5883LCompass.h>
  15. QMC5883LCompass compass;
  16. void setup() {
  17.   Serial.begin(9600);
  18.   compass.init();
  19. }
  20. void loop() {
  21.   int a;
  22.   // 读取罗盘值
  23.   compass.read();
  24.   // 返回方位角读数
  25.   a = compass.getAzimuth();
  26.   Serial.print("A: ");
  27.   Serial.print(a);
  28.   Serial.println();
  29.   delay(250);
  30. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 12:00:50

本帖最后由 驴友花雕 于 2021-9-29 13:56 编辑

实验串口返回情况
22.jpg




回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 12:01:38

本帖最后由 驴友花雕 于 2021-9-29 14:02 编辑

  实验场景图

23.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 14:38:37

实验串口绘图器返回情况   01.gif


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:24:51

  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   安装库:IDE--工具--管理库--搜索“QMC5883L”--安装        QMC5883LCompass
   项目:简易测量方位角度(数值在0-11之间,每个数值间隔30度)

  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  3.    实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  4.   1、安装库:IDE--工具--管理库--搜索“QMC5883L”--安装QMC5883LCompass
  5.   2、项目二:简易测量方位角度(数值在0-11之间,每个数值间隔30度)
  6.   3、实验接线:
  7.   QMC5883L-------------- UNO
  8.   VCC------------------- 5V
  9.   GND------------------- GND
  10.   SCL ------------------- A5
  11.   SDA------------------- A4
  12.   DRDY------------------ N/C
  13. */
  14. #include <QMC5883LCompass.h>
  15. QMC5883LCompass compass;
  16. void setup() {
  17.   Serial.begin(9600);
  18.   compass.init();
  19. }
  20. void loop() {
  21.   compass.read();
  22.   byte a = compass.getAzimuth();
  23.   // 根据方位/方位角的方向,此处的输出将是介于0到11之间的值。
  24.   byte b = compass.getBearing(a);
  25.   
  26.   Serial.print("B: ");
  27.   Serial.print(b);
  28.   Serial.println();
  29.   
  30.   delay(250);
  31. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:26:05

实验串口返回情况

14.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:28:06

知识点:方位角
又称地平经度(Azimuth angle,缩写为Az),是在平面上量度物体之间的角度差的方法之一。是从某点的指北方向线起,依顺时针方向到目标方向线之间的水平夹角,用“度”和“密位”表示。常用于判定方位、指示目标和保持行进方向。

从真子午线起算的为真方位角,通常在精密测量中使用,从磁子午线起算的方磁方位角,在航空、航海、炮兵射击、军队行进时广泛使用,从地形图的坐标纵线起算的为坐标方位角,炮兵使用较多。磁方位角与真方位角的关系式为:磁方位角=真方位角-(±磁偏角)。坐标方位角与磁方位角的关系式为:坐标方位角=磁方位角+ (±磁坐偏角)。

从标准方向的北端起,顺时针方向到直线的水平角称为该直线的方位角。以北点为起算点,由北点开始按顺时针方向计量。方位角的取值范围为0~360度,北点为0°,东点为90°,南点为180°,西点为270°。

09.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:30:09

  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  1、安装库:IDE--工具--管理库--搜索“QMC5883L”--安装QMC5883LCompass
  2、项目三:通过串口实时绘制电子罗盘方位角的波形

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  3.    实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  4.   1、安装库:IDE--工具--管理库--搜索“QMC5883L”--安装QMC5883LCompass
  5.   2、项目三:通过串口实时绘制电子罗盘方位角的波形
  6.   3、实验接线:
  7.   QMC5883L-------------- UNO
  8.   VCC------------------- 5V
  9.   GND------------------- GND
  10.   SCL ------------------- A5
  11.   SDA------------------- A4
  12.   DRDY------------------ N/C
  13. */
  14. #include <QMC5883LCompass.h>
  15. QMC5883LCompass compass;
  16. void setup() {
  17.   Serial.begin(9600);
  18.   compass.init();
  19. }
  20. void loop() {
  21.   int a;
  22.   // 读取罗盘值
  23.   compass.read();
  24.   // 返回方位角读数
  25.   a = compass.getAzimuth();
  26.   Serial.print("电子罗盘方位角: ");
  27.   Serial.print(a);
  28.   Serial.println();
  29.   delay(800);
  30. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:31:11

用手转动QMC5883L模块,串口输出的实时波形,数值在0--359°之间波动,简单又直观。

16.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:32:13

串口输出的实时数值

15.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:34:07

QMC5883L Compass 函数的几个使用要点

1、QMC5883L与Arduino Uno / Nano的连接

  1. <p>VCC  O ---- O +5v</p><p>GND  O ---- O GND</p><p>SCL  O ---- O A5</p><p>SDA  O ---- O A4</p><p>DRDY O ---- X NOT CONNECTED</p>
复制代码


2、入门
首先,在程序顶部包括QMC5883L指南针库。

  1. <p>#include <QMC5883LCompass.h></p><p>QMC5883LCompass compass;</p>
复制代码


然后在setup()函数中添加:

  1. <p>void setup(){</p><p>  compass.init();</p><p>}</p>
复制代码


3、获取X,Y或Z轴的数值
要获取X,Y或Z传感器的读数,只需调用所需的功能。

  1. <p>void loop(){</p><p>   int x = compass.getX();</p><p>   int y = compass.getY();</p><p>   int z = compass.getZ();</p><p>}</p>
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:35:44

4、获取方位角的数值
要获取计算出的方位角(罗盘度)值,只需调用getAzimuth();。

  1. <p>void loop(){</p><p>   int a = compass.getAzimuth();</p><p>}</p>
复制代码


5、获取方向/方位
QMC5883L指南针库可计算传感器指向的方向范围和方向。您可以调用两个函数。
要获取传感器面向的方向的12点值,可以调用getBearing(azimuth)。这会将罗盘的360度范围划分为12个部分,并按顺时针顺序返回值0-11。在这种情况下,0 = N,3= E,6 = S,9=W。如果您希望滚动自己的方向输出功能而不需要计算,则此功能很有用。

  1. <p>void loop(){</p><p>   azimuth = compass.getAzimuth();</p><p>   byte b = compass.getBearing(azimuth);</p><p>}</p>
复制代码



要获取传感器指向方向的12点文字表示,可以致电getDirection(azimuth);。这将产生一个char数组[3],其中的字母代表每个方向。由于我们无法返回数组,因此需要通过引用传递值。

  1. <p>void loop(){</p><p>   azimuth = compass.getAzimuth();</p><p>   char myArray[3];</p><p>   getDirection(myArray, azimuth);</p><p>}</p>
复制代码



如果要打印这些值,可以这样:

  1. <p>void loop(){</p><p>   azimuth = compass.getAzimuth();</p><p>   char myArray[3];</p><p>   </p><p>   getDirection(myArray, azimuth);</p><p>   </p><p>   Serial.print(myArray[0]);</p><p>   Serial.print(myArray[1]);</p><p>   Serial.print(myArray[2]);</p><p>   Serial.println();</p><p>}</p>
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:37:33

本帖最后由 驴友花雕 于 2021-9-29 15:38 编辑

6、更改I2C地址
要在调用compass.setADDR(BYTE_VALUE);之前更改I2C地址呼叫,compass.init();如下所示:

  1. <p>void setup(){</p><p>  compass.setADDR(BYTE);</p><p>  compass.init();</p><p>}</p>
复制代码

7、更改模式,数据速率,比例,采样率
您还可以更改QMC5583L芯片的模式,灵敏度,采样率和输出率。等等,只需在调用compass.setMode(MODE, ODR, RNG, OSR);后调用即可compass.init()。请注意,每个值必须是一个字节。设置每个模式的值在预设中,并取自QST QMC5583L数据表。


17.jpg


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:40:09


8、精细QMC5583L传感器输出
在传感器读数似乎反弹的情况下,平滑可以提供帮助。QMC5883L指南针库使用滚动平均值功能来存储(N)个传感器读数并返回每个轴的平均值。该平均还对方位角和方向输出进行平滑处理。

如果启用,该功能的第二部分将采用内部滚动逐步通过的当前替代和替代,将其从总体上中删除。这可以帮助消除在错误的读数中可能发生的替代的高点和低点。

应该注意的是,内置的平滑功能将导致额外的处理时间。

  1. compass.setSmoothing(STEPS, ADVANCED);
复制代码


在循环之前启用平滑调用。

步骤:int,使结果平滑的步骤数。1到10的有效值。更高的步长等于更平滑,但处理时间缩短。

*:启用此功能将使平滑效果更好,但处理时间缩短。*

  1. <p>void setup(){</p><p>  compass.init();</p><p>  compass.setSmoothing(10, true);</p><p>}</p>
复制代码



回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:41:34

9、校准QMC5583L传感器
QMC5883LCompass库包含校准功能和实用程序大纲,可帮助您校准QMC5883L芯片。校准是一个两步过程。

步骤1:运行校准程序
a、确保已连接QMC5883L芯片。
b、在示例> QMC5883LCOMPASS>校准下找到随附的校准草图。
c、将校准草图上传到您的arduino,然后打开串行监视器。
d、校准过程开始时,通过移动传感器来伴随屏幕上的指示。
c、收集完所有校准数据后,复制副本的代码

  1. compass.setCalibration(-1537, 1266, -1961, 958, -1342, 1492);
复制代码


可能需要保存它以备将来参考。

步骤2:使用校正资料
a、项目的程序,将然后复制的代码行直接插入到compass.init()调用下方。
b、照常使用QMC5883LCompass库。
建议您使用提供的校准草图来生成传感器的预设和替代,但也可以使用该

  1. compass.setCalibration(X_MIN, X_MAX, Y_MIN, Y_MAX, Z_MIN, Z_MAX);
复制代码



回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:42:40

实验开源代码
项目四:通过串口实时绘制电子罗盘方位(12等分)的波形
说明:实时数值 0 = N,3 = E,6 = S,9 =W

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  3.    实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  4.   1、安装库:IDE--工具--管理库--搜索“QMC5883L”--安装QMC5883LCompass
  5.   2、项目四:通过串口实时绘制电子罗盘方位(12等分)的波形
  6.   3、实验接线:
  7.   QMC5883L-------------- UNO
  8.   VCC------------------- 5V
  9.   GND------------------- GND
  10.   SCL ------------------- A5
  11.   SDA------------------- A4
  12.   DRDY------------------ N/C
  13.   4、说明:实时数值 0 = N,3 = E,6 = S,9 =W
  14. */
  15. #include <QMC5883LCompass.h>
  16. QMC5883LCompass compass;
  17. void setup() {
  18.   Serial.begin(9600);
  19.   compass.init();
  20. }
  21. void loop() {
  22.   compass.read();
  23.   byte a = compass.getAzimuth();
  24.   // 根据方位/方位角的方向,此处的输出将是介于0到11之间的值。
  25.   byte b = compass.getBearing(a);
  26.   
  27.   Serial.print("指南针方位: ");
  28.   Serial.print(b);
  29.   Serial.println();
  30.   
  31.   delay(800);
  32. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:44:15

用手转动QMC5883L模块,串口输出的指南针方位数值变动实时波形

19.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:47:08

串口输出的指南针方位数值

20.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2021-9-29 15:48:40

做了一个指南针方位示意图

21-.jpg

本实验指南针方位的取值范围为0~11,北点为0,东点为3,南点为6,西点为9。东(duEast)、西(West)、南(zhiSouth)、北dao(North)这四个方向的字母表示,是根据他们的英文单词的首字母来确定的。

回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail