电子指南针Arduino笔记四电子指南针罗盘HMC5883L

最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--电子指南针

    电子指南针罗盘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
电子和指南针
---------------------------------

你可能感兴趣的:(arduino)