在中,你可以使用 hmc5883l 三轴力计测量这个地球磁场的大小和方向。
介绍
在这个中,我们的 hmc5883l 3 项目设备可以测量地球将磁力计连接到 arduino 方向。 uno。它是一种以低轴设备中的设备,可以在手机或导航中,找到提供准确的您航还可以使用它们来检测含铁(含铁)金属,因为金属中的铁在靠近传感器的时候会改变磁场。
别迷路,让我们开始吧!
204像素lcd
与16x2 lcd相比,20x4 lcd每行增加了两行。与我们在之前的项目中使用的16x2类似,204lcd使用日立x,因此命令和接口也是一样的。具有相同的 16 针接头,允许您在不更改任何接线的情况下拔下 16x2 lcd 并插入 20x4。我们列唯一需要的是一行代码 lcd.begin(20, 4),它指定 lcd 的(第一个个)和行(第二个参数)。20x4 lcd 的图像如下所示:
hmc5883l 三轴磁力计
hmc5883l 3轴磁力计可以精确测量地球在x、y、z的大小和方向。是一款外形类似的低调设备,可以让您将其插入到几乎任何需要指南的项目中。下面提供了一些不同的规格:
设备 hmc 的 5 分 dr 板和 5 分 dr 的数据线组成: vin、dy、scl 组成的数据线(如图所示)该模块在 2.7v 至 6.5v 的电压工作,但我们无法让磁力计在 5v 电压下工作,因此我们建议使用 3vdc 范围内的连接模块。电压。
为了使用与部署设备通信的方式,我们使用 cl 和 s 的 i2c 来配置设备上的交付模式和输出模式),并获取 x y 和 z 。该0x1 0x1 设备进行7 次编排,因此在ie2c 处设备上进行多个。
dr(但您的数据)用于传输(uno x、y和z向主设备的数据已发送)17月7日。dr dy dy,可以通过使用频率到达目的地。您可以访问可以在这个目的地连接到这个目的地,但不能在这个目的地中使用有效的地权。
该设备在其这些 3 个轴的每个轴上装有一个电阻器,用于测量下磁场变化。在磁场存在的情况下,元件的电阻会发生变化,从而导致输出电压发生变化。器件的 12 位 adc 在每个轴上测量,然后将测量结果写入相应的 x、y 和 z 8 位数据。
下面这张表要显示屏幕显示我们的屏幕显示价值。在屏幕上的屏幕显示我们的屏幕。 ic的数据表:
当您必须围绕 x、y 和 z 轴旋转设备时,各个轴的结构发生变化,使之如图所示。
将磁力计安装到您的图标。您将需要一个 m2 角支架、m2 螺栓和 m2 允许以六角支架来安装它。这个 xy 平面与提供垂直方向,并保持adapticon您可以使用正确的计算盘航向您的燃料罐,因此可以向您使用准确的计算盘。确保有色金属磁安装的硬件围绕着 z 轴显示。
我们将把 12 英寸跨接线连接到上面,我们就可以在左右方向连接设备这样自由。
无焊面包板
您如果使用的是无焊面包板,请使用下面的示意图为 16×2 lcd 进行必要的连接。磁力计通过 12 英寸 f/m 跳线直接连接到 uno。我们使用 uno 的3v电源,是fuel的3v而不是3能够实现。因为公头针的0.1英寸间距太近,将测试夹线电缆安装
注:16×4液晶显示,但需要2×4液晶显示与中图。
如果您连接
到 fuel can 的悬空制作,请继续操作。您需要的天线和两个接地板为您提供测试使用接线夹,+5个接地线的接地线。用于为 lcd 供电。
计算机,usb的a端插入usb1型,使用,将b端未连接型插入usb1型连接的端头。 6‘a a型连接器 - 外部连接器插入(即主机)。 ac-dc 电源为 fuelcan 供电。
函数首先必须从setoperatingmode
()和设备通信中使用setoperatingmode()和设备通信,因此请在我们的设备上使用setoperatingmode()进行配置,以将数据操作模式设置为连续,将每个测量输出的平均样本数设置为 8 个。其他所有内容都将保留默认值。
现在已经配置好了,我们可以开始使用函数getxyz()获取原始x、y和z数据。这个函数获取x、y和z的每一个16位数据。getxyz()中的wire.requestfrom()函数用于请求 6 个字节的数据。
x、 和 z 的值,为了使用 y 函数convert(用于测量我们转换为高的单位)。必须进行转换,必须使用 ic 数据表格的原始值表 9(用于使用 1090 的大小,我们可以用一个简单的缩放比例,将我们的每一个镜头都以高标准的比例分配给我们。
在我们将数据输出到设备之前,可以用它来计算出设备的最后一个方向。 () 完成。了解切是在 (x, y) 点和 x 轴之间计算的,如下图所示。我们的原因是能够计算出所有象限的使用情况。
atan2弧度角度,因此我们可以将其转换为度数。 360我们可以删除360。并且航向数据已经归化,我们可以通过现在已经展示给它计算。
//将 hmc5883l 3 轴数字罗盘连接到 arduino uno
/*copyright (c) 2019, proteshea llc
保留所有权利。 如果满足以下条件,则允许
以源代码和二进制形式重新分发和使用,无论是否修改: 1. 重新分发源代码必须保留上述版权 声明、此条件列表和以下免责声明。 2. 二进制形式的再分发必须在 随分发提供的文档和/或其他材料中复制上述版权 声明、此条件列表和以下免责声明。 3. 既不是版权持有人的姓名,也不是
未经事先书面许可,其贡献者的姓名可用于认可或推广
源自本软件的产品。
本软件由版权持有人“按原样”提供,
不提供任何明示或默示的保证,包括但不限于对
适销性和特定用途适用性的默示保证
。在任何情况下,版权所有者均不对任何
直接、间接、偶然、特殊、惩戒性或后果性损害
(包括但不限于采购替代商品或服务;
使用、数据或利润或业务损失)负责中断)无论是由何种原因造成的,
以及基于任何责任理论,无论是合同、严格责任或侵权
(包括疏忽或其他原因)以任何方式因使用本
软件而引起的,即使已被告知存在此类损害的可能性。
*/
#include
//寄存器地址映射
#define configa 0x00
#define configb 0x01
#define mode 0x02
#define dataoutx_u 0x03
#define dataoutx_l 0x04
#define dataoutz_l 0x05
#define dataoutz_l 0x06
#define dataouty_l 0x07
#define dataouty_l 0x08
#define statusreg 0x09
//工作模式发送到模式寄存器(0x02)
#define continuous 0x00
#define single 0x01
#define idle 0x02
#define i2c_addr 0x1e
#define gain 1090
int16_t x = 0;
int16_t y = 0;
int16_t z = 0;
浮动航向;
浮动高斯x;
浮动高斯y;
浮动高斯z;
void setup() {
wire.begin();
序列号.开始(9600);
设置操作模式(连续);
集合样本();
}
无效循环() {
getxyz();
转换(x,y,z);
获取航向(高斯x,高斯y,高斯z);
serial.print(x:);
serial.print(gaussx);
serial.print(y:);
串行打印(高斯y);
serial.print(z:);
serial.println(gaussz);
serial.print(标题:);
serial.println(标题);
延迟(500);
}
//将原始x、y、z计数转换为高斯
void convert(int16_t rawx, int16_t rawy, int16_t rawz){
gaussx = (float)rawx/gain;
gaussy = (float)rawy/gain;
gaussz = (float)rawz/增益;
}
//考虑磁偏角(取决于位置的磁场误差)
void getheading(float x, float y, float z){
heading = (atan2(y,x) - 0.1) * 180 / pi;
如果 (标题 360)标题-= 360;
}
void setsamples(void){
wire.begintransmission(i2c_addr);
wire.write(configa); //写入配置a寄存器
wire.write(0x70); //8个样本平均,15hz输出速率,正常测量
wire.endtransmission();
延迟(10);
}
void setoperatingmode(uint8_t addr){
wire.begintransmission(i2c_addr);
wire.write(模式); //写入模式寄存器
wire.write(addr); //设置测量模式
wire.endtransmission();
延迟(10);
}
//从寄存器 0x03 到 0x08 获取 x、y、z 的原始计数
void getxyz(void){
wire.begintransmission(i2c_addr);
wire.write(0x03);
wire.endtransmission();
wire.requestfrom(i2c_addr, 6);
if (wire.available() >= 6){
int16_t temp = wire.read(); //读取x的高字节
x = temp << 8;
temp = wire.read(); //读取x的低字节
x = x | 温度;
temp = wire.read(); //读取 z 的高字节
z = temp << 8;
temp = wire.read(); //读取 z 的低字节
z = z | 温度;
temp = wire.read(); //读取 y 的高字节
y = temp <= 6){
int16_t temp = wire.read(); //读取x的高字节
x = temp << 8;
temp = wire.read(); //读取x的低字节
x = x | 温度;
temp = wire.read(); //读取 z 的高字节
z = temp << 8;
temp = wire.read(); //读取 z 的低字节
z = z | 温度;
temp = wire.read(); //读取 y 的高字节
y = temp << 8;
temp = wire.read(); //读取 y 的低字节
y = y | 温度;
}
}
变频系统的端口防护技术
基于英特尔六核64位“服务器级”处理芯片
荣耀V40将于1月18日正式发布
如何在中试线上生产一片8英寸碳化硅衬底?
EXTI外部中断在错误的边沿误触发可能什么原因?
如何利用HMC5883L实现三轴磁力计的设计
出售Agilent86118A电模块
英特尔公布D1X工厂产能扩产计划 7纳米制程处理器已进入紧锣密鼓的研发阶段
基于深联华单片机的无线智能插座
苹果将在iOS 14和iPadOS 14上加入键盘和触摸板功能
一加3T12月17日现货首发:骁龙821搭配6+128GB高配版 不比三星苹果差!
四阶带通滤波器FMS6141S5X
安防监控系统中如何选择模拟监控布线和数字监控布线
湖南省印发5G应用创新发展三年行动计划
新的Moto G智能手机已在欧洲正式上市
2015系列音频分析万用表的性能特点及应用
这款PSSD移动固态硬盘好看又好用 漫威周边潮物
楼宇资产管理自动化的趋势有利于商业集成商
荣耀推出新品,麒麟980+8GB还搭配快充技术
为什么有的公司总是抱怨找不到好的工程师