马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Guc 于 2017-11-19 17:13 编辑
大家好,我是Guc。今天给大家带来的是[让MINIMOSD多个功能]系列DIY的第二贴——温度监控功能。这个功能主要是通过一个温度传感器测量温度,然后通过OSD叠加温度值到视频上。MINIMOSD原本就带有温度显示的功能,应该是飞控的温度,不过飞控在工作中过热的问题比较少,所以索性把它替换掉,改成了外接温度传感器了,用来测量更多的部件温度,所以就有了这个DIY。 大家可能会问:这个温度监控功能有什么用呢?无人机正常稳定的运行和各个部件协调运行密切相关,而部件的温度恰恰能够反应它运行的状态,比如电池,电池的温度过低会导致电量缩减,过度或大电流放电会导致电池发热,保持电池正常的使用温度,可以延长电池使用寿命;还有电机电调,温度过高就有可能是故障烧毁的前兆了。 其他不多说,我们先来看看需要些什么材料: 一块minimosd板; 一个LM35DZ传感器; 一些杜邦线线; 一些排针; LM35DZ传感器3块多,所以就把这个DIY定为5元系类了,看材料就知道这是一个超级简单的DIY。 为什么用LM35DZ传感器呢? 1、它有较好的线性度和较高的灵敏度,不需要校准。 2、传感器的输出电压与摄氏温度呈线性关系,0℃时输出为0V,每升高1℃,输出电压增加10mv,也就是模拟信号,在arduino板上很容易实现模拟信号的测量。
3、有较宽的工作电压范围,工作电压为5V,可用电压为4V-6V。 我们来看看显示和测量效果:
下面是添加的代码: 循环的代码就两行: tem1=analogRead(A3); temper1= (tem1/1024.0)*500; 两行代码就可以测量温度,lm35dz是不是很方便,关键是它不需要校准。 OSD Panels里替换代码: void panTemp(int first_col, int first_line){ osd.setPanel(first_col, first_line); osd.openPanel(); //do_converts(); osd.printf("%c%5.1f%c", 0x0a, temper1, temps); osd.closePanel(); } 重要的接线图来了: 太简单了,我都不好意思发接线图了,哈哈。 让大家看下我的实验板,还是上次那块板。 传感器我用了硅胶线,耐用一点。 就在背后用热熔胶粘了插针,接上传感器就可以用。 在OSD_Config软件里,我们能看到温度的选项,大家把它勾上就可以使用温度测量的功能了。 看到这里大家是不是想,能不能把视频切换和温度测量合在一起呢? 当然是可以的,而且已经做好了,接线图就是这两个接线图的相加,固件下载会在最后提供下载。 根据模友的提醒,我已经改进了PWM的读取,原先不接PWM信号会使osd数据更新变慢,现在不会了,在这个帖子后面提供更新的固件。 顺便聊一下pulseIn()函数的用法: pulseIn()函数用来读取一个引脚的脉冲(HIGH或LOW)。
例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。
返回脉冲的长度,单位毫秒。
如果在指定的时间内无脉冲函数返回。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)
语法:pulseIn(pin, value) pulseIn(pin, value, timeout)
参数:pin:你要进行脉冲计时的引脚号(int)。
value:要读取的脉冲类型,HIGH或LOW(int)。
timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long)。 帖子差不多结束了,固件下载在这里: 下一步DIY计划 在OSD的数据定义中有以下信息: static uint16_t chan5_raw = 0; static uint16_t chan6_raw = 0; static uint16_t chan7_raw = 0; static uint16_t chan8_raw = 0; 可以通过读取该数据,直接使用飞控收到接收机的信息,也就不需要进行其他接线连接接收机读取舵量,就能实现视频切换等功能。 大家有希望自己的MINIMOSD多出哪些功能?请在帖子下留言,人多点子多嘛,我会挑选我能做的,来实现它。 如果大家觉得帖子不错,点个赞,留个言,谢谢阅贴。
|