Guc 发表于 2017-12-29 19:59:42

[GUC DIY ]让MINIMOSD多个功能——辅助通道及航行状态灯

本帖最后由 Guc 于 2017-12-29 21:34 编辑

    大家好,我是Guc。其实这个帖子前段时间发过了,不过出了点问题,今天从新发。这是[让Minimosd多一个功能]DIY的第三贴,添加的功能一个是辅助通道功能,一个是航行状态灯功能。辅助通道功能主要是有两个舵机输出,一个开关通道(用来控制开关);航行状态灯大家就都知道了,详细功能后面再说。
    先来介绍辅助通道功能,这个功能是通过读取osd里的6,7,8通道数据,然后转输出连个PWM信号和一个开关信号。    来看下需要什么材料:    应该只有817光耦可能要买,我也是以前买过,这次试了试可以就用上了,其他型号的光耦应该也可以。光耦817是亿光光电耦合器的一种型号EL817,是一种把红外光发射器件和红外光接受器件以及信号处理电路等封装在同一管座内的器件。当输入电信号加到输入端发光器件LED上,LED发光,光接收器件接收光信号并转换成电信号,然后将电信号直接输出,或者将电信号放大处理成标准数字电平输出,这样就光耦817实现了“电-光-电”的转换及传输,光是传输的媒介,因而输入端与输出端在电气上是绝缘的,也称为电隔离。这是个很好用的元件,原理图如下:
辅助通道功能视频演示:http://v.youku.com/v_show/id_XMzIzNDM5OTk2NA==.html视频不知道为什么发不出来,有兴趣的点连接:http://v.youku.com/v_show/id_XMzIzNDM5OTk2NA==.html我使用了一个LED灯加个按动开关做模拟,当6通道的值大于等于1450时,光耦导通,LED亮。
看下添加的代码:#include <Servo.h>Servo myservo;Servo yourservo;void setup() myservo.attach(9); yourservo.attach(5); pinMode(4, OUTPUT);void loop() myservo.writeMicroseconds(chan7_raw);yourservo.writeMicroseconds(chan8_raw);if(chan6_raw>1400){digitalWrite(4,HIGH);}else{ digitalWrite(4,LOW);}主要用的是serve这个库,使用很方便,从上面的代码大家应该知道怎么用了吧。
关于动手做这个部分很简单,看下接线图,图上的舵机输出也需要共地,大家不要忘了接这根地线。如果有使用数传请把osd TX线去除,因为OSD也会向飞控请求数据,会导致延迟增加很多,现在这个版本舵机延迟比较大,不过用来做投掷器和自动脚架是够用的,不使用数传延迟会小一点。固件会在最后和航行状态灯的固件打包提供下载。
****************************************************************接下来介绍航行状态灯,先看下需要什么?主要通过达林顿2003来驱动,接线和2803是一样的,可以借鉴下面这张图接线。OSD接线图如下:    以前也做过航行灯,很早了,有兴趣也可以看看: DIY电量显示报警航行刹车灯模块http://www.moz8.com/thread-75914-1-1.html看看代码:unsigned long currentMillis = millis(); static long distancepwm = map(osd_home_distance, 0, 500, 50, 255); if(chan7_raw>1450){ if(osd_fix_type>2){ analogWrite(3,distancepwm); analogWrite(5,distancepwm); }else if(osd_fix_type==2){if(currentMillis - previousMillis >interval) {    previousMillis = currentMillis;    if (ledState >30)      ledState = 0;    else      ledState = distancepwm;   analogWrite(3, ledState); } analogWrite(5, distancepwm);}else if(osd_fix_type<2){if(currentMillis - previousMillis >interval) {     previousMillis = currentMillis;    if (ledState>30)      ledState = 0;    else      ledState =distancepwm;   analogWrite(3,ledState);analogWrite(5,ledState);}}}else {analogWrite(3,0);analogWrite(5,0);}}    主要使用了Blinkwithoutdelay。因为使用delay会使osd变的很慢。    目前航行灯只有显示GPS的状态的功能,通过读取gps定位信息,当未定位时两路LED灯会闪烁,当2D定位时一路闪烁一路长亮,3D定位两路长亮,并且灯的亮度随距离变化,当达到500米后最亮,最初只有五分之一的亮度。    这只是初步做的,最近没什么时间就先发了,以后还会加一些功能,大家有没什么建议?固件下载:
    还有补充说明一下,我做的OSD DIY是用于多轴的哦。还有我其他帖子的链接:http://www.moz8.com/thread-109219-1-1.html]让MINIMOSD多个功能——温度监控使用arduino板给minimosd刷bootloader http://www.moz8.com/thread-109107-1-1.html]让MINIMOSD多个功能——摄像头切换【GUC CIY】超声波辅助飞行模块
如果有什么写的不清楚的,其他帖子里有更多内容。谢谢大家阅贴!

飞越天际线 发表于 2017-12-29 20:07:04

osd也玩得这么6,也是厉害了

wangya 发表于 2017-12-29 21:02:28

不错不错不错不错不错不错

ad_up 发表于 2017-12-29 21:29:55

学习了

877498716 发表于 2017-12-30 06:27:33

学习了

anyhow18 发表于 2017-12-30 09:36:55

楼主是真懂的人,像楼主学习!

Guc 发表于 2017-12-31 17:00:55

anyhow18 发表于 2017-12-30 09:36 static/image/common/back.gif
楼主是真懂的人,像楼主学习!

谢谢顶帖http://www.moz8.com//mobcent//app/data/phiz/default/04.png

Guc 发表于 2018-1-1 14:08:54

你好,明天 发表于 2017-12-29 20:07 static/image/common/back.gif
osd也玩得这么6,也是厉害了

谢谢顶帖http://www.moz8.com//mobcent//app/data/phiz/default/03.png

DD2005 发表于 2018-1-1 21:04:15

这个没试过,只是micro mini osd 至今电压没有变化。论坛上找了好多全是CF的可我是OP的真是没办法了{:1_4:}

西柚西柚2014 发表于 2018-1-3 00:01:15

感谢Guc老师的教程,现在还专门把其他教程的链接发在下面,点赞!我觉得要是能让指示灯显示磁罗盘的状态也很好,因为我觉得apm很多次出事故都与磁罗盘有关,(虽然说最好的办法是带数传和手机/电脑)比如我之前飞四轴,开始能定位,过一会飞机就开始绕圈了,下降时也是螺旋下降,以及使用无头模式,飞机最后飞行的方向会与开始定义的差别很大。
我觉得对飞机比较重要的是1加速度计状态 2罗盘健康状态 3GPS状态

Guc 发表于 2018-1-3 07:13:24

西柚西柚2014 发表于 2018-1-3 00:01 static/image/common/back.gif
感谢Guc老师的教程,现在还专门把其他教程的链接发在下面,点赞!我觉得要是能让指示灯显示磁罗盘的状态也 ...

我看看,把罗盘状态也加进去

咖啡伴酒~ 发表于 2018-1-26 15:38:17

好详细,顶上去

小毛驴 发表于 2018-2-11 16:32:17

牛币
页: [1]
查看完整版本: [GUC DIY ]让MINIMOSD多个功能——辅助通道及航行状态灯