这段代码主要用来读取接收机的PWM值,pluseIn()函数可以读取指定端口的电平脉冲时间。其还调用了arduino 的舵机库的舵机函数来控制,有人看出了,OUTTHR = map(INTHR,1010,2007,47,144); 这是个缩放函数,让1010-2007缩放为47-144,这里有人会问,为什么是1010-2007,为什么是47-144,我再来和同学们讲解,刚刚在取样的时候我们发现arduino读取的PWM宽度在1000-2000之间,但是有些值是大于2000的,那么我取了一个更大的区间,来“装”PWM的区间,所以是1000-2007,但是为什么要让舵机输出47-144度呢。这里要用点小技巧,羊毛出在羊身上,没错我们让arduino自己给自己测脉冲时间,我们可以写一个很简单的代码,还记得刚刚那个pluseIn()函数吗,我们让任意一个端口输出一个90度的舵机角度值,也就是xxxx.write(90); 然后把这个端口接在arduino其他任意一个数字端口上,用pluseIn()去测这个90度的脉宽是多少,比如90度测出来脉冲时间是1500,大了,我们要找的是1000-2000范围的那个舵机角度,我们再来一个30度,或者170度,就这样把范围越缩越小,最后,我找出了他们之间的关系,47度的舵机输出,用pluseIn()去测量刚好在1000左右,那么地、低位就找到了,同样高位在144度上 脉冲宽度时间是2000左右,那么接下来代码大家都看懂了吧?,这里的arduino就原封不动的把接收机的信号吃进去了,又吐出来给飞控,至此,arduino已经完全潜入飞机控制系统。
(如有疑问,请查阅连接帖子)
到目前为止,中间层已经初步的建立,开始选用相关避障所需要的传感器。
出于实用和成本方面的原因,通过本人的实际购买测试,最终选用了HC-SR04超声波,价格低廉,且测量范围与精度值复合要求。
1.使用电压:DC5V
2.静态电流:小于2mA
3:电平输出:高5V
4:电平输出:低0V
5:感应角度:不大于15度
6:探测距离:2cm-450cm
7:高精度:可达3mm
接线方式,VCC、trig(控制端)、 echo(接收端)、 GND地线
本产品使用方法:一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有
输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,
方可算出距离.如此不断的周期测,就可以达到你移动测量的值了~~
模块工作原理:
(1)采用IO触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是
超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2
Mrsail 发表于 2015-6-15 13:56
留个标记,最近也在研究这个,但是也有问题,超声波距离短,如果飞行速度过快,反应速度会不够
SageST 发表于 2015-6-15 16:24
做毕业设计的时候用过arduino和超声波模块 有时候超声波模块返回的距离会有异常
不知道是我代码问 ...
阿琨 发表于 2015-6-18 08:08
这个必须顶!希望楼主及时公布进度!!!!
lvtong 发表于 2015-6-18 08:34
估计还需要PID控制
nuaakimi 发表于 2015-6-20 19:50
方案是可行的,但是超声波传感器在这个方案里不合适。
1)。340m/s的声速,10m就要5ms,再算上那种10来块 ...
Mrsail 发表于 2015-6-21 01:40
推荐楼主参考下大疆的方案,超声波和视觉识别共同作用
欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com/) | Powered by Discuz! X3.3 |