电子风水罗盘(怎样快速入门Arduino)

在影视剧中摸金校尉一把罗盘搞定墓穴位置,风水先生罗盘一转评判住宅吉凶,这罗盘真的有这么神奇?我不知道,但我知道罗盘导航、指示方向确有实效。古代中国最先将罗盘应用于航海,郑和下西洋就是用的它。后人将先辈的智慧发扬光大,也就有了更适用于现代社会的电子罗盘。

实验名称:HMC5883L三轴电子罗盘传感器

电子罗盘,又称数字罗盘,在现代技术条件中电子罗盘作为导航仪器或姿态传感器已被广泛应用。电子罗盘与传统指针式和平衡架结构罗盘相比能耗低、体积小、重量轻、精度高、可微型化,其输出信号通过处理可以实现数码显示,不仅可以用来指向,其数字信号可直接送到自动舵,控制船舶的操纵。目前,广为使用的是三轴捷联磁阻式数字磁罗盘,这种罗盘具有抗摇动和抗振性、航向精度较高、对干扰场有电子补偿、可以集成到控制回路中进行数据链接等优点,因而广泛应用于航空、航天、机器人、航海、车辆自主导航等领域。

一、实验说明

Arduino连接HMC5883L三轴电子罗盘传感器。

二、物料清单

PS:所需物料可以在这里购买—http://tbll000175.cn/DXSXCvr4

三、模块说明

四、连线图

五、重要提示

主芯片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

六、实验代码

/*
 作者:山东迅鸣物联网
 时间:2019年1月31日
IDE版本号:1.8.5
 发表地址:
 程序说明:Arduino连接HMC5883L三轴电子罗盘传感器
*/
#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平面角度):

七、相关函数介绍

Serial.begin(speed):串口配置。参数speed是指串口通信波特率。

Arduino串口通信通常会使用以下波特率:300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200。

Serial.print() 或Serial.println() :串口输出。

Serial.print(val):参数val是你要输出的数据,各种类型的数据均可。

Serial.println(val):println会在输出完指定数据后,再输出一组回车换行符

delay( ms):此函数为毫秒级延时。参数为时长,类型unsigned long。

今天的内容你学会了吗?动手实践才是真理呦,赶快跟着小编的讲解实际操作一下吧!有问题还可以在评论区留言呦!关注我们的微信公众号:xunmingiot,后台回复“入门”即可获取学习资料,帮助你更好的进入学习。

我们下期再见啦!(码字不易,点个赞再走呗)

往期教程可以点击以下链接查看:

怎样快速入门Arduino(二十四)—Arduino连接超声波传感器测距怎样快速入门Arduino?(二十三)—TCS3200颜色传感器怎样快速入门Arduino?(二十二)—在SD卡中进行文件读写

声明:好星座所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者迅鸣物联网所有,原文出处。若您的权利被侵害,请联系 删除。

本文链接:https://www.haoxingzuo.com/w/1386.html