极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27371|回复: 17

求助风速测速的程序解决办法(补充了整套系统的设计思路,给大家参考)

[复制链接]
发表于 2012-10-7 13:02:24 | 显示全部楼层 |阅读模式
本帖最后由 shenhaiyu 于 2012-10-9 22:54 编辑

RT,由于研究需要,本人想在一块Arduino UNO上实现测风速的功能,遇到点问题,哪位高手能帮助解决一下呢。


在TB上搜寻风速传感器的结果是:
电压输出的风杯式传感器并不理想,启动风速要求很高,但是我却要测量小风的风速,精度要求也并不高。于是我购买了一款便宜的测风仪器:

打算拆开后把传感器部分组装到我的电路中。拆开后发现里面测风速的部分就是一个光耦,风杯每旋转一周光耦会输出四个脉冲信号。

本来这样就能解决我测风速的功能需求了,但是新的问题又来了:

我的 Arduino UNO 要同时实现时间功能,测量温湿度、重量和风速,还要LCD输出,还要SD卡记录,基本上端口都占用了,只剩下模拟3,4,5可用。更重要的是不能使用外部中断,怕影响时间部分的工作,而且loop中使用了ProtoThreads,时间轮片是1ms,不方便在这里测量风速,大家有没有什么好办法在某个函数中就实现测风速的功能呢?

难道只能用另一块Arduino板子实现测风速功能以电压方式传递给主板吗?




补充的系统需求:

感觉我要做的东西太复杂,貌似快超出arduino的能力了。

首先是输入输出:
1.测量部分:
测量重量(主要是拉力,配合变送器已经实现了单接口数据实时接收,不存在时间问题。但却要使用一个舵机实现称量,具体机械上的设计我就不解释了,总之一定要用舵机),
温度湿度(使用了AM2305,每次数据采集不能小于2s,第一个在时间上的需求),
风速(目前来看再来块nano单独采集比较好,想准确测量必须要有外部中断,一但外部中断了就影响别的部分了)
2.时间部分:使用了DS1302
3.显示部分:使用了LCD5110
4.记录部分:使用了SD卡记录

我的 Arduino UNO 端口使用:
02-04:DS1302时钟
05-09:LCD 5110
10-13:SD卡
14(A0)重量便送器
15(A1)AM2305温湿度传感器
16(A2)舵机信号
17(A3)功能设置按钮
所以目前仅剩18(A4)-19(A5)空闲,一个还要用来测风速,我还在考虑舵机是不是需要个继电器来断电,于是最后一个口也用了。

然后是功能部分:
要实现的功能是每隔一定时间(比如5分钟,10分钟等,可设置)记录温湿度和风速数据到SD卡中,然后每隔一定时间(半小时或者1小时)记录一次重量(这里解释一下,我的系统用的是吊秤称量方式,而且称量的物件平时必须接触地面,称量时提起),于是就用到了舵机,到时间起吊,称量,放下,这样就又造成了程序上的时间滞后,要等待舵机响应。

总结一下,时间要至少每秒更新,测风速要外部中断,温湿度要2s以上采集一次,要等待舵机动作,要每隔一定时间读数据写SD卡,液晶屏更新又不能太快,否则显示会滞留,于是各种冲突都来了。目前别的问题我都用ProtoThreads解决了,唯独测风速把程序全打乱了,这才来这里求助大家的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-10-7 13:15:32 | 显示全部楼层
问题是,你要做的这些个事情,真的需要这么高的实时性么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-7 13:25:16 | 显示全部楼层
本帖最后由 shenhaiyu 于 2012-10-7 13:31 编辑
飞翔的红猪 发表于 2012-10-7 13:15
问题是,你要做的这些个事情,真的需要这么高的实时性么?


需要的啊,但不要求太精确,我可以再详细描述一下:我测量重量的时候是要配合风速的,而且重量是间隔一定时间测量的,比如每半小时测量一次。重量受风速影响,风大的时候不测重,等待风小到阈值以内马上记录重量。所以程序不能被中断,一中断就影响别的部分正常工作了
回复 支持 反对

使用道具 举报

发表于 2012-10-7 13:50:11 | 显示全部楼层
路过,貌似我不太会,帮顶个{:soso_e130:}
回复 支持 反对

使用道具 举报

发表于 2012-10-7 14:12:40 | 显示全部楼层
既然速度低,那可以测脉冲周期,估计能达到20转/s的精度,潜在的问题就是转速高了错过了电压跳变,如果不用中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-7 14:18:07 | 显示全部楼层
Tim 发表于 2012-10-7 13:50
路过,貌似我不太会,帮顶个

谢谢帮顶,有什么别的好思路不吝指教啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-7 14:21:08 | 显示全部楼层
本帖最后由 shenhaiyu 于 2012-10-7 14:25 编辑
Malc 发表于 2012-10-7 14:12
既然速度低,那可以测脉冲周期,估计能达到20转/s的精度,潜在的问题就是转速高了错过了电压跳变,如果不用 ...


错过了跳变没问题,不在乎这点误差。关键是这样的话,程序岂不是又停在了测脉冲周期这里了,别的部分都暂停工作了。比如LCD上显示的实时更新,重量变化的测量等等,而且loop里用了ProtoThreads,1ms才循环一次……
回复 支持 反对

使用道具 举报

发表于 2012-10-7 14:59:40 | 显示全部楼层
我觉得,端口不够问题,可以外接扩展芯片(比如595之类的);还有关于实时性,我觉得有点顾头不顾尾,你要的实现的功能占用了好多的时间,是用中断,还是自己写个函数放在loop()里?可以试下,慢慢调,我就会这了
回复 支持 反对

使用道具 举报

发表于 2012-10-7 16:01:26 | 显示全部楼层
shenhaiyu 发表于 2012-10-7 14:21
错过了跳变没问题,不在乎这点误差。关键是这样的话,程序岂不是又停在了测脉冲周期这里了,别的部分都 ...

测周期花不了多少时间的,也不会影响其他代码
在检测开始,读取电平,设置一个时间点
然后每个时间片这个函数不断检测电平,如果电平变化了,记下当前时间
两个时间相减就是周期了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-7 20:05:16 | 显示全部楼层
本帖最后由 shenhaiyu 于 2012-10-7 20:11 编辑
Malc 发表于 2012-10-7 16:01
测周期花不了多少时间的,也不会影响其他代码
在检测开始,读取电平,设置一个时间点
然后每个时间片这 ...


关键是我用了ProtoThreads,loop里时间片是1ms........这么长时间测风速太长了吧

忘记说了,测风速的部分我是放在ProtoThreads的一个进程里的,一旦程序进入到这个进程里,别的进程不会继续执行的啊
回复 支持 反对

使用道具 举报

发表于 2012-10-8 00:59:03 | 显示全部楼层
很多老东西的方式可以借鉴
比如用老款鼠标(光电式鼠标----滚轮的那种啊)的方式
1个塑料拨盘+1对红外发射和接收管作为数据发生装置。

关于管脚,其实你可以考虑328的加强版 2560 它脚够多
当然,比较简便的解决方式就是 再弄个NANO做数据采集并且IIC通讯发送给你的主板处理

综上所述 实际采样精度可以做到非常高
回复 支持 反对

使用道具 举报

发表于 2012-10-8 08:38:46 | 显示全部楼层
楼主您要求的实时性体现在哪儿呢?是最多1秒钟更新一次的时间,还是半小时测量一次的风速?我觉得楼主完全被ProtoThreads捆住了手脚,为了用ProtoThreads而ProtoThreads,应该再好好考虑一下您的系统需求。
既然选择了以arduino为主控,单片机的某些特性就不要想多了,简单、快速、有效地实现自己的目标才是正道~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-8 12:10:24 | 显示全部楼层
darkorigin 发表于 2012-10-8 00:59
很多老东西的方式可以借鉴
比如用老款鼠标(光电式鼠标----滚轮的那种啊)的方式
1个塑料拨盘+1对红外发射 ...

嗯,我也开始考虑再来块nano专门测风速了~~这样两块板子还能扩展更多的功能
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-8 12:25:38 | 显示全部楼层
本帖最后由 shenhaiyu 于 2012-10-8 12:38 编辑
飞翔的红猪 发表于 2012-10-8 08:38
楼主您要求的实时性体现在哪儿呢?是最多1秒钟更新一次的时间,还是半小时测量一次的风速?我觉得楼主完全被 ...


谢谢指教~~倒不是纯为了ProtoThreads,只是突然感觉我要做的东西太复杂,貌似快超出arduino的能力了。
我再LZ详细描述一下我的系统需求,劳烦您再看看吧

回复 支持 反对

使用道具 举报

发表于 2012-10-8 12:42:01 | 显示全部楼层
你这个实时性要求不高嘛,测速的时候就暂停其他任务,测完以后把中断关了,更新显示啥的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 15:54 , Processed in 0.050240 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表