分享

Arduino学习笔记A3

 义龙宸 2015-01-22
Arduino连接HMC5883L三轴电子罗盘传感器

用途:测量地磁方向,测量物体静止时候的方向,测量传感器周围磁力线的方向。注意,测量地磁时候容易受到周围磁场影响,

主芯片HMC5883三轴磁阻传感器特点(抄自网上):
1,数字量输出:I2C数字量输出接口,设计使用非常方便。
2,尺寸小: 3x3x0.9mm LCC封装,适合大规模量产使用。
3,精度高:1-2度,内置12位A/D,OFFSET, SET/RESET 电路,不会出现磁饱和现象,不会有累加误差。
4,支持自动校准程序,简化使用步骤,终端产品使用非常方便。
5,内置自测试电路,方便量产测试,无需增加额外昂贵的测试设备。
6,功耗低:供电电压1.8V, 功耗睡眠模式-2.5uA 测量模式-0.6mA
1.jpg


连接方法:
只要连接VCC,GND,SDA,SCL四条线。
  • Arduino GND -> HMC5883L GND
  • Arduino 3.3V -> HMC5883L VCC
  • Arduino A4 (SDA) -> HMC5883L SDA
  • Arduino A5 (SCL) -> HMC5883L SCL

    (注意,接线是A4,A5,不是D4,D5)



    程序编写:

    #include <Wire.h>
    #include <HMC5883L.h>
    HMC5883L compass;
    void setup()
    {
      Serial.begin(9600);
      Wire.begin();
      compass = HMC5883L();
      compass.SetScale(1.3);
      compass.SetMeasurementMode(Measurement_Continuous);
    }
    void loop()
    {
      MagnetometerRaw raw = compass.ReadRawAxis();
      MagnetometerScaled scaled = compass.ReadScaledAxis();
      float xHeading = atan2(scaled.YAxis, scaled.XAxis);
      float yHeading = atan2(scaled.ZAxis, scaled.XAxis);
      float zHeading = atan2(scaled.ZAxis, scaled.YAxis);
      if(xHeading < 0) xHeading += 2*PI;
      if(xHeading > 2*PI) xHeading -= 2*PI;
      if(yHeading < 0) yHeading += 2*PI;
      if(yHeading > 2*PI) yHeading -= 2*PI;
      if(zHeading < 0) zHeading += 2*PI;
      if(zHeading > 2*PI) zHeading -= 2*PI;
      float xDegrees = xHeading * 180/M_PI;
      float yDegrees = yHeading * 180/M_PI;
      float zDegrees = zHeading * 180/M_PI;
      Serial.print(xDegrees);
      Serial.print(",");
      Serial.print(yDegrees);
      Serial.print(",");
      Serial.print(zDegrees);
      Serial.println(";");
      delay(100);
    }


    打开Arduino串口监视器即可看到结果(X平面角度,Y平面角度,Z平面角度):
    3.jpg

    HMC5883L.zip (5.55 KB, 下载次数: 1390)
    • 本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多