0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样随时重新校准磁力计

454398 来源:wv 2019-10-23 11:34 次阅读

步骤1:您需要的东西

您可能已有一个使用MPU-9150的Arduino项目,在这种情况下,您可以将我的草图加载到其中。 Neopixel环仅使用一个Arduino输出引脚。

或者,您可以使用此处描述的设置。您可以使用其他功能来扩展它,并且可以根据需要为其他基于Neopixel环的项目使用其他硬件。

您将需要:

基于ATMega328的Arduino和电源(尽管您可能会使用其他电源)

MPU-9150加速度计/陀螺仪/磁力计

Adafruit Neopixel环,12像素大小或更大的

无焊面包板,剥离板和跳线。

MPU-9150输入不容许5V的电压,因此以5V运行Arduino时,您将需要具有2个或更多电压的5V/3.3V电平转换器通道。这些东西从远东eBay卖家那里非常便宜。由于Neopixels需要5V的全部电压,因此您不能简单地以3.3V的电压运行整个项目。

电平转换器将Arduino的SDA和SCL引脚以5V的电平供电,并以3.3V的电压提供给MPU -9150。为此,它一方面需要5V电源,另一方面需要3.3V电源。幸运的是,常见的MPU-9150板包含3.3V稳压器,但是不幸的是,其输出未在任何引脚上提供。因此,必须如图所示将细线焊接到稳压器的输出引脚上。

找到稳压器,该稳压器应标记为KB33(在第二张图片的顶部)。您将需要一只稳定的手和一个尖尖的烙铁。将一根细线焊接到右上角的插针上。建立良好的连接后,请用一滴强力胶将其覆盖,以防止其轻易脱落。

步骤2:将其连接

接线将取决于您使用的是插线板还是无焊面包板,哪种类型的Arduino,以及是否使用电平转换器,因此我将为您确定接线或插线板布局。 (如果您觉得做不到,请尝试一个或两个简单的Arduino项目或使用Stripboard的项目,然后在有想法的情况下返回。)

电平转换器具有除Gnd之外,还有两个标为HV和LV的电源输入。使用您焊接到的细线,将HV连接到5V电源,将LV连接到MPU-9150的3.3V输出。 Arduino的SDA和SCL引脚使用5V逻辑电平,并连接到电平转换器的HV1和HV2引脚。然后,LV1和LV2引脚以3.3V逻辑电平向MPU-9150提供相同的信号。您的设备可能还具有未使用的HV3,HV4,LV3和LV4连接。

步骤3:对Arduino进行编程

该草图包括三个文件(附加)。将这三个都复制到Arduino sketch文件夹中的新文件夹“ Compass”中。然后,草图应出现在Arduino IDE的草图簿中。

在编译之前,请检查“指南针”选项卡下文件顶部的#define配置选项,并根据需要进行修改。

PIN定义用于Neopixel数据输入的Arduino引脚,默认情况下为引脚8。

BRILL是默认的像素亮度,最大可以为255,但是更高的值会造成盲目和可能消耗的电流超过电源所能提供的电流,尤其是使用较大尺寸的环之一时。我通常不会超过30。

PIXELS是指环中的像素数。 Adafruit当前提供的尺寸为12(非常好用),16、24(非常不错的尺寸)和60(巨大-如果您有足够的钱就可以了)。

已反转:如果您的戒指与MPU-9150在电路板的同一侧,请保留此注释掉。相对于MPU-9150,第一个像素应位于加速度计的正Y方向。取消注释您的戒指在板子的另一侧(已将板子绕Y轴翻转)。

您将需要下载并安装MPU6050库(其中还包含代码)用于MPU-9150,是MPU6050的超集)和Adafruit Neopixel库。编译草图并将其上传到Arduino。

步骤4:自动校准过程

首次运行草图时,它首先输入校准值程序。将完成的设备放在桌子上方几英寸的地方,使电路板的一个边缘与桌子的边缘对齐,或者与其他固定的直边对齐。

Neopixel环将显示一些绿色和一些蓝色像素。调平电路板,直到它们全部变为绿色。剩余的蓝色像素表示该边太高(天空为蓝色)。当满足水平要求时,将读取数个磁力计读数,然后将所有像素闪烁一次。

现在,它将要求您在4个方向上将其倾斜45度,以绿色提示和蓝色像素一样,在每个位置进行测量,并将所有像素闪烁2、3、4,最后闪烁5次。始终注意使板的边缘与桌子的边缘对齐。

整个过程将重复3次,然后将计算并存储磁力计的偏移量。

一旦校准,草图将模拟指南针。消除蓝色像素以使电路板保持水平,从而获得可靠的读数。红点叠加在一起,表示北。点从一个像素移动到下一个像素时逐渐淡出。

您可以根据需要使它重新进入校准模式,只需将板急剧地向另一方向扭转几下即可。

p》

第5步:在自己的项目中使用草图

您可以将校准功能合并到自己的项目中,方法是将我的代码合并到自己的代码中或添加代码挖掘,取决于您已经走了多远。 Mine包含钩子,可用于添加其他功能。

如果将Mine合并到自己的钩子中,请完成Calibrate和Functions选项卡。在“指南针”选项卡中,您需要将我的Setup()函数与您的函数合并,并将之前的所有内容合并到您的代码中。您只需要调用Calibrate()函数即可进入校准模式。

“校准”选项卡包含两个#define语句。 NUMSAMPLES定义每个位置获取多少个磁力计读数。可能没有特别的理由将其从10更改。这样的数字可以确保始终保持稳定。 NUMTESTS定义要重复执行5个位置的完整过程的次数。一个很好的数字是3,但是对于速度而言,如果您只想进行粗略的校准,则1可能就足够了。

步骤6:使用其他硬件

相同的技术可以用于其他磁力计,并且不仅限于Arduino,还必须对其进行调整,并可能将其从C语言翻译为另一种语言。

如果将代码修改为如果要使用其他磁力计,则MPU-9150会对磁力计和加速度计使用不同的坐标系。从一个交换到另一个需要交换X和Y值并取反Z。这是在readMag()函数中完成的,以便其余代码可以仅在加速度计的坐标系中工作。一旦计算出偏移量,就将其转换回磁力计坐标以进行存储。

使用其他磁力计,原则上您只需要替换readMag()函数即可。

三个数组,mx [],my []和mz [] 5个元素中的每一个,将磁力计读数保持在5个位置(即水平)上,分别绕X轴旋转45度,然后绕X轴旋转,以及类似地绕Y轴旋转。旋转加速度计输出的位置(第一个位置除外),以便displayCal()函数只需要计算变量“ angle”和“ up”,作为与所需方向和方向(作为浮点像素数)的角度最大的坡度。将误差的大小转换为对数刻度,以在误差较小时提供最大的灵敏度。当误差在限制范围内时,displayCal()函数将返回布尔值true,一旦这样做,行中就会以固定次数多次校准Calibrate()存储磁力计读数。

实际计算偏移量的计算需要几页代数和三角函数,但仅用4行代码即可实现。您可能会认识到魔术数0.7071是2或cos(45⁰)的平方根的一半。从1减去这个得到第二个魔术数0.29289并将其加倍得到第三个魔术数0.58579。毕竟不是魔术。

在校准中使用的45度倾斜没有什么特别之处,但是它确实大大简化了数学运算。原则上,您可以将设备绕垂直方向滚动,连续获取来自加速度计和磁力计的读数,并计算偏移量,直到计算出的平均值稳定在一个可靠的结果附近,但数学会复杂得多。 iOS Compass应用程序执行此操作,这是我自动校准的想法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 校准
    +关注

    关注

    1

    文章

    123

    浏览量

    21667
  • 磁力计
    +关注

    关注

    1

    文章

    54

    浏览量

    20588
收藏 人收藏

    评论

    相关推荐

    使用主控IIC读取MPU9250的磁力计数据,速度特别慢怎么解决?

    使用iic对mpu9250进行读取数据,读取磁力计数据时采用的是主控iic方式,但是读取的速度特别慢,几秒一次,网上说磁力计数据输出的速率最快是100hz,几秒一次也太慢了;另外在初始化函数中开启了延时,但是一次读取6个字节的数据,只能读到前两个字节,后四个字节全为0,请
    发表于 04-11 07:02

    单片机一个IIC连接两个MPU9250如何设置读取磁力计的模式?

    在STM32单片机的一个IIC接口上同时连了两个MPU9250传感器,将两者的AD0分别设为高和低,对于磁力计都设置成Bypass模式,发现两块磁力计的数据都能读出来,Bypass模式不是由单片机
    发表于 04-10 07:14

    MotionEC和MotionMC的库在磁力计校准后为什么不调用MotionMC_SaveCalInNVM函数?

    MotionEC和MotionMC的库在磁力计校准后为啥不调用MotionMC_SaveCalInNVM这个函数
    发表于 04-02 08:05

    ADIS16485在没有磁力计的情况下怎么进行初始对准呢?

    读取了ADIS16485的数据发现陀螺仪几个轴的输出数据没有什么差别,那这个传感器是不是不能敏感出地球自转角速度,如果是的话在没有磁力计的情况下怎么进行初始对准呢?
    发表于 12-27 07:01

    如何利用3轴加速度计算Z方向的角度?

    现在想利用3轴加速度计算Z方向的角度,但是网上都说需要磁力计,请教有没有一位大神知道在没有磁力计的情况下如何计算Z方向角度
    发表于 10-30 07:05

    磁力计测出来,x,y,z分别代表什么?

    磁力计测出来x,y,z分别代表什么
    发表于 10-16 08:22

    求助,磁力计测姿态角如何让偏航角初始值为0?

    磁力计测姿态角如何让偏航角初始值为0?
    发表于 10-16 08:20

    MEMS_惯性传感器16-磁力计椭球拟合校准步骤

    磁力计椭球拟合校准是一种将磁力计测量数据校准到真实磁场的技术。这种技术通常使用椭球模型来拟合磁力计的测量结果,然后通过最小二乘法来找到拟合参
    发表于 10-15 15:49 744次阅读
    MEMS_惯性传感器16-<b class='flag-5'>磁力计</b>椭球拟合<b class='flag-5'>校准</b>步骤

    高性能磁力计

    。 以下是本周新品情报,请及时查收: 面向消费电子应用 Bosch BMM350 高性能磁力计 贸泽电子即日起开售Bosch 的 BMM350高性能磁力计 。 BMM350为超小型、高性能、低电流、16位三轴磁力计,非常适合各种
    的头像 发表于 09-20 08:10 421次阅读
    高性能<b class='flag-5'>磁力计</b>

    LIS2MDL磁力计传感器相关资料

    对LIS2MDL进行配置,使其产生用于磁场检测的中断信号,并自动补偿由较高应用层提供的硬铁偏移。LIS2MDL的ST软件支持包括驱动、倾斜补偿的电子罗盘、动态磁力计校准和6轴或9轴传感器融合。
    发表于 09-13 07:48

    IIS2MDC磁力传感器相关资料

    器件具有高达±50高斯的磁场动态量程。可以对IIS2MDC进行配置,使其产生用于磁场检测的中断信号,并自动补偿由较高应用层产生的硬铁偏移。IIS2MDC的ST软件支持包括驱动、倾斜补偿的电子罗盘、动态磁力计校准和6轴或9轴传感器融合。
    发表于 09-13 06:00

    STLIS2MDL磁力计传感器相关的使用信息和应用提示

    LIS2MDL是系统级封装的3D数字磁力计,具有数字I²C和3线SPI串口标准输出,在高分辨率模式下功耗200 µA,在低功耗模式下功耗不超过50 µA(在20 Hz输出数据速率下)。由于磁力计具有超低噪声性能,始终具有低功耗特性,并结合了高传感精度,因此能够为客户提供最
    发表于 09-06 08:24

    IIS2MDC 3D数字磁力计应用笔记

    电子发烧友网站提供《IIS2MDC 3D数字磁力计应用笔记.pdf》资料免费下载
    发表于 07-31 10:14 4次下载
    IIS2MDC 3D数字<b class='flag-5'>磁力计</b>应用笔记

    LIS2MDL 3D数字磁力计应用笔记

    电子发烧友网站提供《LIS2MDL 3D数字磁力计应用笔记.pdf》资料免费下载
    发表于 07-31 10:12 4次下载
    LIS2MDL 3D数字<b class='flag-5'>磁力计</b>应用笔记

    GY-271磁力计无法工作的原因?怎么解决?

    我一直在努力让这个磁力计工作 - 但无济于事。 这些是常见的、廉价的 HMC5883L 磁力计,可在知名的不良拍卖网站上买到,如有必要,我会发布一个链接,但我怀疑您知道这些 - 5 个引脚:Vcc
    发表于 05-31 07:44