最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--电子指南针
电子指南针罗盘HMC5883L是三轴磁阻传感器,用来测量四周的磁感应强度,测量范围-8g~8g单位是高斯。提到磁感应强度最熟习的应该是高中时学的B单位T特斯拉,其实高斯也是磁感应强度单位,只不过高斯是很小的单位,10000高斯等于1特斯拉。网上是这么定义的:一段导线,若放在磁感应强度平均的磁场中,方向与磁感应强度方向垂直的长直导在线通有1电磁系单位(emu)的稳恒电流(等于10安培)时,在每厘米长度的导线遭到电磁力为1达因,则该磁感应强度就定义为1高斯。即1T(特斯拉)=10000g(高斯)
开发环境:
系统:XP
单板:Arduino Leonardo
平台:Arduino
目标:读三轴方向的磁感应强度,并通过串口显示
一、硬件分析
电子指南针罗盘HMC5883L内嵌12-Bit ADC,测量磁感应强度范围-8g~8g单位高斯。HMC5883L模块原理图如下:
这里只用到SCL、SDA、VCC_3.3V、GND分别连接到Arduino的对应接口上。Arduino Leonardo上直接标有SDA、SCL连上便可,其它Arduino根据自己的板子连接。
二、编写测试代码
在Arduino上写代码非常简单,很多库都帮你做好了,直接调用便可,十分便利。但Arduino的版本很多,特别是Arduino-1.0以后,有些库有所改变,需要看对应版本的参考手册arduino-1.5.2-windows\arduino-1.5.2\reference上面有具体说明,我也是结合网上找的程序参考这些修改。代码如下:
文件HMC5883.ino
#include <Wire.h> //I2C Arduino Library #define address 0x1E //0011110b, I2C 7bit address of HMC5883 void setup(){ //Initialize Serial and I2C communications Serial.begin(9600); Wire.begin(); //Put the HMC5883 IC into the correct operating mode Wire.beginTransmission(address); //open communication with HMC5883 Wire.write(0x02); //select mode register Wire.write(0x00); //continuous measurement mode Wire.endTransmission(); } void loop(){ int x,y,z; //triple axis data //Tell the HMC5883 where to begin reading data Wire.beginTransmission(address); Wire.write(0x03); //select register 3, X MSB register Wire.endTransmission(); //Read data from each axis, 2 registers per axis Wire.requestFrom(address, 6); if(6<=Wire.available()){ x = Wire.read()<<8; //X msb x |= Wire.read(); //X lsb z = Wire.read()<<8; //Z msb z |= Wire.read(); //Z lsb y = Wire.read()<<8; //Y msb y |= Wire.read(); //Y lsb } //Print out values of each axis Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); Serial.print(" z: "); Serial.println(z); delay(250); }
这个不懂只能对着手册看了。
三、编译、测试
Arduino还是很便利操作的,选择好单板、参考,直接点上面的“对勾”就开始编译,编译没问题,点“->”箭头状的,开始上传程序,直至上传进度条实现。
接着打开Tools/Serial Monitor 显示如下:
这是水平放置时的测量结果,倾斜模块可以看到值会变化。
文章结束给大家分享下程序员的一些笑话语录: 现在社会太数字化了,所以最好是有一个集很多功能于一身的设备!
--------------------------------- 原创文章 By
电子和指南针
---------------------------------