电子罗盘Arduino应用 漂移神器!Arduino遥控气垫船

小编 2024-11-28 电子应用 23 0

漂移神器!Arduino遥控气垫船

前几个月制作了一款基于Arduino的最小板,上面集成了一些功能,经过了几次的迭代后终于达到了我想要的效果,紧接着又为这款电路板制作了一个配套的遥控器,用来操控这块板子上的一些功能,例如电机驱动以及控制一些IO口之类的。这两个项目制作过程都可以从如下的链接找到:

干货满满!自制Arduino遥控套装(上)干货满满!自制自制Arduino遥控套装(下)

当时调试完成之后一直就放着落灰了,进来准备使用这套板子来制作一些项目,结合了板子的资源之后,就选择了气垫船的项目,准备用我设计的这套板子制作一个遥控气垫船。

首先话不多说,上完成品照片:制作

制作好的成品

接下来我就会带来整个气垫船的开发,制作过程。

灵感来源

首先我端详了我做的这款板子,上面有三个L9110s电机驱动芯片,以及一个支持1-2s的锂电池接口,一个支持NRF24L01的接口以及报警电路。对于这个L9110s驱动,我使用了几乎arduino的全部支持硬件PWM的管脚,其中有两个驱动芯片是支持正反转PWM调速的,有一个驱动苦于arduino的PWM管脚不够,所以只能支持单向PWM调速,显然这样的配置对于一些小车的项目肯定是绰绰有余,而这也是我设计这块板子的设计初衷,对于一些车船类的项目,这款板子可以完全适应。

所以选择来选择去,还是选择了车船类的项目。但是我对于车船类的项目感觉玩不什么花样,偶然间在网上看到别人3D打印的气垫船项目,就动心了。

想法到图纸

之前玩过一段时间的航模,所以最开始想用空模的那一套东西来做,用无刷电机带动扇叶转动,然后电调可以用arduino输出的PWM波来控制,刚好家里也有3D打印机。但是接着我就发现那我为啥不用arduino nano板来做,因为这么做的话貌似我板子上的功能一个都没用到,简直就是浪费资源,遂放弃。。。。。。

有一天玩那种空心杯的四轴时候,看到四轴的电机体格虽然很小,但是力道却很足,于是想用这个电机来做动力,刚好板子上的驱动芯片应该能带的动。于是上某宝搜索,对比了很多不同型号的空心杯电机之后,选择了720电机,店家还给配了螺旋桨,直径差不多55mm。数天之后,电机到货了,拆开上电之后,感觉风还挺大,比得上一个小电扇了,于是确定了这个动力系统。720电机配55mm螺旋桨。

气垫船使用的720电机

动力总算是确定了,接下来就是结构的问题,在开始绘制图纸之前,有个很重要的问题要解决——气垫船的转向方式?

于是上百度上查询气垫船的图片,发现大概分为两类,一类是使用单个风扇作为推进,扇叶后方有可动的导流板来控制方向,就是类似船的舵一样,我开始准备用这种的,因为只需要一个电机,感觉比较省电。但是后来查看了详细的结构之后还是放弃了,结果比较复杂,实行起来比较麻烦。另外一类是使用两个或者四个风扇作为推进,使用两侧风扇的速度差来控制船体的方向,这种结构比较简单,而且两测风扇我还可以使用两个支持正反转PWM调速的驱动芯片来驱动,达到速度差调速的目的。

终于是确定了使用的动力以及转向方式,下面就是埋头画图纸了。作为CAD小白,我学习了几节课程之后终于是能勉强画图了。下面是画好的图纸,一共有四页,使用的软件是迅捷的CAD。

绘制好的CAD图纸

整个机身一共有四个电机,两个负责推进两个负责起升,这样刚好用光了我设计板子上面所有的电机接口,后续还想加什么功能的话也有多余的端口来使用。

画好之后,我想能够在电脑上先模拟一下完成之后的样子就好了,于是没有建过模的我又去学了建模,将CAD中画好的图片导入到建模软件之后,经过简单的拉伸操作就得到了大致完成的样子,我用的建模软件是犀牛,刚刚学习,只会简单的几个操作,请各位看官轻拍。

终于是完成了图纸的设计了,导入到建模软件的效果也还满意,于是准备下一步的切割了。

图纸到实物

我在某宝上找了个加工KT板的厂家,将图纸发过去了。之前确实考虑过使用木板,但是轻木太软,桐木太脆,椴木太重,权衡下来还是切kt板,因为之前玩航模确实很多飞机都是用KT板做的,很结实也很轻。

等待了几天之后,切割好的kt板送到了,查看了一下,没有问题,由于切割KT板的时候切割机会烧灼KT板的边缘导致一些尺寸会对不上,幸好我在设计图纸的时候预留了一些余量,这点也提醒大家注意。

随后急忙的组装了起来,这时候门铃响了,原来是买的电机到货了。正好赶上组装,于是迅速的安装上了电机,成品如下:

下面就是安装我设计的电路板了,设计图纸时给气垫船设计了一个设备舱,正好可以容纳电路板。

电路板装进去,将电机插头插到板子上,到这里所有的结构搭建以及硬件电路都连接好了,下面就是给气垫船注入灵魂——编写代码了!

程序的编写

其实控制程序非常简单,首先说接受端,其实就是将无线模块接收到的数据转换成对应引脚输出的PWM占空比来控制电机的转速。发送端也是很简单,我使用摇杆作为控制杆,用arduino的ADC引脚读取摇杆输出的电压来获得当前的摇杆位置,然后将摇杆位置的数据通过无线模块发送出去。

下载程序到气垫船和遥控器中:

上电!我使用的电池是550mah的3.7v锂电池,带这四个电机大概可以玩10分钟的时间。于是》》》迫不及待的上电开始玩耍!!

需要的一些改进

在玩耍中发现由于气垫船的阻力非常小(几乎不和地面接触),所以推进电机要是速度不一样就会导致气垫船偏航,但是由于驱动芯片的误差以及电机之间的误差问题,即使我使用相同占空比的PWM方波驱动他们,仍然会导致他们转速不同以致气垫船容易偏航(很难跑直线),这个问题比较影响玩耍的体验感,需要改进。

计划是使用一个电子罗盘,也就是磁力计来确定现在气垫船船头的指向,然后引入PID算法来通过电子罗盘的数据来校正控制每个推进电机的PWM波,这样应该会改善到整体的操控性。

不过这有需要一段时间的研究,主要是软件方面,现在板子上预留了IIC的通信接口,想必找到一个IIC通信的电子罗盘应该不是什么难事,问题就在PID算法以及一些滤波算法上,我还对PID算法不太了解。而且是否运转的电机或者电机内的磁铁会对电子罗盘的数据产生干扰也不是很确定。

成功的让这个气垫船跑起来达到了我的目的,对于 其的一些改进应该会放在之后,应为近期准备开始做室内玩的遥控飞机的板子,是基于51和LT8920的,所以这个改进应该会等到做完那个项目之后。如果你对这个气垫船有什么改进的建议,欢迎提出来。

物联网人工智能小车——HMC5883L电子罗盘模的小车能感知方向

摘要:本文介绍使用HMC5883L电子罗盘模块来辨别方向

在前边制作避障小车的时候,大家可能已经发现,虽然两个轮子的驱动信号是一样的,但是小车可能不走直线,走过一端距离之后,小车就会偏向一边。这是由于电机的个体差异导致的,虽然是同一标准、同一批次生产的电动机,但在电气特性上还是存在着些许的差距,经过比较长距离的累积之后,表现出来的就是两个轮子累计转过的圈数不同,小车就会朝一边偏。

小车跑偏的一个解决办法就是通过长距离的测试,找出两个轮子转速的差距,然后调整控制信号PWM的占空比率,让转速慢的轮子占空比率大一些,而转速快的轮子占空比率小一些,就可以在很大程度上改善这个问题了。这种解决办法要经过很多次的测试,才能找到一个比较满意的参数出来。

那么有没有更好的办法呢?能不能让小车自己知道自己在朝哪个方向行驶,自己进行调整呢?答案当然是肯定的。可以给小车安装一个电子罗盘模块,让小车自己知道自己在朝着哪个方向行驶。

我们知道,地球附近的空间遍布着地磁场,地磁场的方向是从地球的地磁北极(地理南极附近)指向地磁南极(地理北极附近),传统的指南针就是利用了地磁场来辨别方向的。基于HMC5883L芯片的电子罗盘模块同样也是利用了这一原理,它通过测量相互垂直的X轴、Y轴和Z轴的磁场的磁通量大小,因为这三个方向的磁通量的矢量和始终指向地磁南极(地理北极附近),所以,就可以计算出HMC5883L电子罗盘模块的水平方向角了,从而可以确定自己的朝向。

和前面的红外测距模块一样,HMC5833L电子罗盘模块也是通过内部寄存器来和外界交互的,通过这些寄存器可以对其设置,也可以得到模块的测量数据。具体的寄存器如下表:

地址

名称

访问

用途

00

配置寄存器A

读/写

采样平均数、数据输出速率和测量配置寄存器

01

配置寄存器B

读/写

增益配置寄存器

02

模式寄存器

读/写

测量模式配置寄存器,连续模式/单一模式(默认)。

03

数据输出X MSB寄存器

通道X测量结果的高位数据。

04

数据输出X LSB寄存器

通道X测量结果的低位数据。

05

数据输出Z MSB寄存器

通道Z测量结果的高位数据。

06

数据输出Z LSB寄存器

通道Z测量结果的低位数据。

07

数据输出Y MSB寄存器

通道Y测量结果的高位数据。

08

数据输出Y LSB寄存器

通道Y测量结果的低位数据。

09

状态寄存器

测量数据状态寄存器。

10

识别寄存器A

用来识别装置

11

识别寄存器B

用来识别装置

12

识别寄存器C

用来识别装置

在这里,需要提醒一下,电子罗盘芯片有HMC5883和QMC5883两个系列,其中前者为进口芯片,后者为国产芯片,两者功能相同。但是,这两个芯片的寄存器定义不同,请在使用时确认相关文档。

对于配置寄存器的详细描述,请参考datasheet中的详细说明。

下面来看一下HMC5883L电子罗盘接口的详细说明:

序号

引脚

含义

1

VCC

电源正极(3-5V)

2

GND

电源负极

3

SCL

IIC串行时钟线

4

SDA

IIC串行数据线

5

DRDY

中断引脚,表明数据准备好了

寄存器看起来很复杂,实际上大多数情况下都不需要你直接去操作寄存器,因为有人已经给你进行了底层的封装,并提供了相应的库函数。打开“Arduino IDE”,安装HMC5883L电子罗盘模块的库函数,选择“Adafruit HMC5883L Unified”,如下图所示:

同样,使用该库函数还是那基本的几个步骤:

实例化对象初始化模块读取测量结果数据处理显示

在这里,比之前复杂的就是数据处理部分,因为HMC5883L电子罗盘模块所返回的测量值,只是X、Z和Y三个方向的磁通量,因此想要计算方向,还要根据测量出来的X和Y以及你所在地的磁偏角来进行计算。具体的计算方法,请参见程序代码。

使用HMC5883L电子罗盘模块的时候,有个特别需要注意的地方是,固定HMC5883L芯片的时候,要保证它的Z轴是向上的,并且芯片处于水平状态,否则测量出来的结果是不正确的。

完整资料可进群免费领取!!!

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:扫码进群领资料

相关问答

朋友们!跪求解答!上海SST氧化锆传感器现货,SST氧化锆传感...

[回答]明人不说暗话,好的就是好的,分享给到大家,上海高传电子科技有限公司好服务,好企业。一、小米4没有湿度传感器的。二、小米4搭载着那些传感器如下:1...