|
转眼又到了踏青的时节,奈何从去年开始的疫情搅扰了大家外出的兴致,只得尽可能宅家。
今天分享一套 2019 年的作品,含全部软硬件资料,只等疫情缓和了再去放飞。
【背景】
女票是个比较会放风筝的家伙,每每到了公园或是江边总是吵吵要入手风筝。
路边摊的风筝也并不贵,十块钱一套标配线,再十块钱另加一卷线,总共二十块钱玩坏了也不心疼。
于是入手了这玩意,两卷线接在一起缠在线轮上:
放飞时顺口一句话:“这玩意能飞多高?”让强迫症甚是不爽。
两卷线也就百来米,最高不会超过线总长,但想要精确的数据就无能为力了。
理论上可以用悬链线方程来计算,但实际高空气流的存在,悬链线也不会太准。
作为强迫症电工,突然想起了手头有 BMP180.
【制作】
BMP180 是一个带温度补偿的气压计模块,理论上短时间运行可用于高度测量。
于是打算做一套足够轻巧的 BMP180 系统,挂载在风筝上测试放飞高度。
a. 电源:直接选能量/重量比最大的软包锂,工作电流按mA 算的话几十 mAh 足够;
b. 主控:首先要体积小、功耗低,并且支持锂电 3-4.2v 工作,最终选择 DIP8 版本的 ATTINY13A,程序采用拔插更新;
c. 存储:风筝高度瞬息万变,采样速度不能太低(秒级),最终选了 DIP8 版的 24C128,总计 16KB;
d. 传感:气压计就是 BMP180 模块,捎带测试温度。
整个系统用尽可能小的万用板来搞定,上 CAD 先大致走个线:
电路图:
具体焊接时考虑到要上天,连接可靠性非常关键。于是插座用了圆孔镀金版本,皮实抗冲击:
最终所有器件都打胶固定在万用板 PCB 上,确保不松动,避免意外短路。
万用板上仅包含采集所需最小系统,其余功能都用跳线搞定,降低系统总重。
DIP 版本的单片机采用拔插更新代码;DIP 版本的 EEPROM 同样由拔插实现样本读出。
最后找一个尺寸恰当的零件盒,装入减震棉、屏蔽棉以及 PCB 即可工作。
上秤过一下总重:17.2g,对风筝的影响目测不大。
【代码】
ATTINY13A 的空间比较紧张:1KB-ROM + 64B-RAM,因而使用 ICCAVR 直接寄存器级编程。
整套程序就两个功能:读取BMP180、写入24C128,额外加个延时控制下采样率。
最后设定 T13 工作在 150kHz 主频,整机平均功耗 0.5mA 左右,电池连续工作几十小时没问题。
考虑到空中电力、算力、存储比较紧张,因而 EEPROM 当中仅存储 BMP180 原始 ADC 样本:
16bit气压 + 16bit温度,总计 32bit/样本,16KB 可以存储 4K 个样本。
按照采样间隔 5s 计算,总计采样时长 5.5 小时,可以覆盖整个放飞过程。
温度、气压的计算是事后放在 PC 上进行的:
BMP180校正值、ADC原始数值都加载进 VC,校正算法由 VC 编程来计算并输出到文件。
附上 ATTINY13 源码+烧录文件,可直接烧录工作:
【测试】
整个高度计需要挂在风筝的重心位置,也就是风筝捆线扣附近,之后尽管大胆放飞。
比起原版风筝虽然有点不稳,但测试这天江边风很给力,直接两卷线全都放了出来。
贴上事后解算结果:
挂了载荷的风筝微微有点不稳,适应了几把才最终放起来,高度曲线(红)前几个小峰就是试飞失手所致。
另一条曲线(蓝)是温度变化,随风筝升空有明显下降,显然空中还是挺冷的。
全程放飞过程中,最高点距地面垂直高度大约 75m,持续 50-60 个样本,对应大约 5min 时间。
这下关于“能飞多高”总算有结论了:百来米的线大约飞高了 75m,并在最高处保持了 5min 左右。
同时可以看到最高点附近有大约 10m 的上下振幅,显然空中气流不很稳定,风筝短时间就能掉落好几层楼高度。
附上全长放飞时的动态效果:
以上,使用 ATtiny13 与 BMP180 折腾了一套嵌入式高度计,挂在风筝上测出了放飞高度
给冷嗖嗖的踏春之旅添加一点点电工的味道。
最后祝大家 DIY 愉快!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|