感谢john(),为他或他的团队使用逆向工程将Futaba的各种传感器通过Arduino进行模拟,让需要Futaba传感器功能的模友们有了一种廉价的代替方案,对此向他们表达最诚挚的感谢和祝福!
谨记:Futaba原厂的各种传感器,在体积、重量、稳定性方面有不可比拟的优势。强烈建议在资金预算充足时使用原厂的传感器产品,保护原厂的任何权益,以促进实现航模中安全第一的目标。
Futaba的回传功能,是将如电压、设备温度、各类、燃油、螺旋桨的转速、电流、消耗的电池容量、高度、速度、GPS信息等,使用Sbus2协议通过支持回传功能的接收机发回给,通过遥控器的屏幕看或是听声音播报了解这些数值,以辅助航模活动。
本系统图是我樱花D4漂移车的电子设备系统结构图。全面的展示了各设备之间的连接关系。与回传相关的部分是图中的Arduino Pro Mini与DC-DC 3.3v及Futaba Sbus收发电路、上部的分压电路(1套)、右侧的温度检测芯片(5套),共3个部分。
本接线图是我樱花D4漂移车所有电子设备之间的线缆连接图。
由于改了双舵机转向,用的是闲置的亚拓515M直机副翼舵机。在使用电调的BEC同时给舵机和CC3D供电时,极容易导致CC3D飞控重启。所以舵机的供电由电调完成,而CC3D由外置BEC供电。同时外置BEC也负责给Arduino及各传感器供电。
以上清单中的电阻通常是套装销售,比如1包电阻总价9元且包邮。共有25种规格,每种20个,一个电阻不到2分钱。三极管也是类似可能10个才售。
所以实际采购时,总价格会比清单中的价格要高,但到手的各种零件也会多很多很多。另外也建议对于关键零件比如Arduino也多买几个,毕竟再小心偶尔也会犯错,烧坏了一个还有备用的,而不再等几天快递影响心情。
Arduino在本实现中处于中心地位,可以理解为软件开发的中间件,或是理解为一个数据处理平台。
读取油门或副翼等各个通道的信号量,根据信号量的大小或是特点,实现各种不同的需求。例如,左转向时左副翼的灯高亮。油门推到最大时,尾喷嘴的红色环灯高亮以仿真加力全开等等。
将数据发送给接收机。通过Futaba的回传功能,让遥控器可以展示航模或车模上各电子或机械设备的工作状况。
这属于Arduino的基本功能或者说极具扩展能力的范围。通过各种传感器Arduino能将这些模拟量转化为数字量。以数字的方式为Futaba回传功能提供数据。
Arduino是一个开发各类设备,让你比台式电脑更能充分感知和控制物理世界的生态系统。Arduino是一个基于一系列单片机电路板的开源物理计算平台,一个编写用于Arduino和Genuino开发板的软件开发环境和一个拥有活跃开发者和用户社区。
Arduino可用于开发交互式物体,接受来自各类开关或传感器的输入,并能控制各种灯光、马达和其他物理输出装置。Arduino项目可以单独运行,也可以与您计算机上运行的软件(Processing、MaxMSP)配合使用。您可以手动组装简单的开发板,或购买预装的整套开发板,还可以免费下载开源Arduino软件(IDE)。
Arduino编程所用编程语言是以Processing多媒体编程环境为基础的物理计算平台Wiring。通过多年的努力,Arduino软件(IDE)已经演变成能支持由英特尔和三星等公司制造的众多核心板和开发板。
本次实现选用的是国产兼容的ArduinoProMini,主要是考虑价格。除端口位置与官方图纸略有区别外,其他与原设计一致,通过编号即可找到相应的端口。
SBUS2-Telemetry公布的其支持的型号为Arduino Pro Mini 8MHz和16MHz。这两者仅处理器主频高低不同,主要区别为工作电压不同和功耗不同。选择Arduino Pro Mini主要因为在程序代码中会直接操作串口读写,以收发SBUS数据。
Arduino Pro Mini使用的是ATmega328P芯片,具有32K字节的存储空间(用于存储程序代码)、2K字节内存(用于程序运行期间的变量读写)、1K字节EEPROM(用于存储变量,自行编程实现在下次启动Arduino时恢复程序的运行状态)
Arduino UNO与Arduino Pro Mini使用的芯片完全相同,只是在外观尺寸上要大,在接口和电源方面要强,同时价格略高。在航模领域,体积和重量是要优先考虑的。
建议将线缆直接焊接各个连接点上,避免使用接线端子造成整体体积变大。
Arduino ProMini未配置USB接口,所以需要一个USB TTL工具,将Arduino的代码写入其芯片中。请尽量选择价格不是最便宜的一款,同时要具有能防止接反电源正负极而烧坏电脑的USB端口的功能。
USB TTL插入电脑并安装好驱动程序后,会新生成一个串口,假设是Com2,则在Arduino IDE的端口中选择Com2。注意Arduino IDE编辑器,不能选择超过Com 16的端口。如果端口号超过16,请删除以下注册表项,删除前请先备份。这都是我遇到过的问题。
这是与原始代码一起提供的SBUS信号处理电路图。需要2个BC547三极管、电阻:2个1K、1个4.7K、1个47K、1个100K。
可按上图焊接一致的电路,并按自己的情况调整出线方向。
在SBUS电路中,需要一个3.3V的参考电压。而Arduino ProMini并无3.3v的电压输出端口,只能另行添加如AMS 1117芯片,其输入为4.5-7v能固定输出3.3v。价格低廉且有已制好的成品电路板可直接使用。
Arduino支持大量的传感器功能模块,在Arduino中文社区上,有爱好者收集和测试了大量的传感器功能及实现方式。我们可以根据自己的情况选择相应的模块以实现最终需求。比如:光敏电阻传感器、微波雷达传感器、振动传感器、热敏电阻温度传感器、高感度声音传感器、湿度传感器、火焰(红外线)传感器、倾斜传感器、雨滴传感器、红外避障传感器、SPI接口SD卡模块、GPS、超声波测距传感器、电压检测模块、气压传感器等。
以上只是个人理解可能能用于航模、车模等领域的传感器,更多的传感器可参考此链接的内容
对于本资料,只使用了1种传感器,即利用成品温度传感器测试温度。而电压是利用Arduino自带的模数转换功能实现电压测量。
航模或车模通常使用2S及以上的电池,电压范围为(2S)8.4V-(12S)50.4V。而Arduino的模拟端口能接入的安全电压最高为5V,如果将2S及以上电压直连到Arduino将导致Arduino烧毁。因此我们利用分压电阻电路,将高压电降为低压电,以让Arduino读取并计算出电池的实际电压。
下图是针对常用的3S及6S电池选择的电路连接方式及建议电阻值。
按公式:输入电压*(R2/(R1+R2))= 输出电压。
12.6为3S锂电池充满后的电压,6000为 1K和5K电阻串联后的阻值,10000为10K电阻阻值。经过分压后的理论电压为4.725V,
再根据ADC的读数和12.6与4.725的比率(2.667),就能计算出原始的电压值为4*2.267=10.668V。如果你用万用表测量电池的实际电压,肯定不是10.66V。
这是因为电阻的实际阻值与其标明的阻值不一致,而常用的万用表测量值又极大的省略精度。
本方法用的是金属膜电阻,生产商标明有约1%左右的误差(实际可能偏差更大),所以计算出来的电压与实际测量的电压必定是有误差的。将2.667调整为符合你的电阻及环境(焊接水平及导线粗线、长度等都有可能会影响电阻值)的数值才是最正确的。本方式就是将2.667的理论值改为了2.623,以调平误差,大致接近0.01V的精度。
在遥控器上,显示的电压值仅一位小数,因此无需追求更高电压值精度。2位小数的值完全足够。
为保护Arduino在意外情况下不被高电压或大电流烧坏,在测量线路的正极还添加了一个保险丝。规格是参照原厂电压传感器的选择,参数是125V 1A的电阻式保险丝。Futaba配此规格保险丝可能考虑了需适用于更多电压的范围。因个人知识有限以及使用条件相对有限,个人理解应选择电压略大被测电压的及电流为0.1A且可自恢复的保险丝。经过测量,此分压电路的电流消耗约为0.07mA。
当你的设计是为检测6S电池的电压,请调整电阻的阻值,比如参照上图6S电池。降压后的最大电压为4.2v,精度相对3S的4.725v相对要低一点点。
LM75芯片是德州仪器公司推出的一款温度传感器芯片。市面有多种温度芯片选择它的原因是基于I2C即串接这种简单易行的连接方式。而且宝上又有做好的成品,价格便宜、外观尺寸小。
LM75芯片,一条线路上最多可以串接8个。它的3个地址控制端口都必须与GND或是VCC焊接,以固定芯片的I2C 地址。例如下表中GND与A0同是绿底色,表示GND与A0之间要焊接。
因只用了5个LM75芯片,就只记录了5个地址的焊接点。其它的地址可自行测试。
各个零件之间的连接件需手工制作和焊接着实有点费功夫,只能慢慢制作。由于线缆手头没有合适的耐高温软线,只好拆了根六类网线,正好是多股的软芯线。但相对还是有些硬,只能凑合着用了。
SBUS的分线器,原装价格很高。但可以自制,就是外观差一点。其本质就是线路的并接。
下图是接温度传感器用的一分四分线器,按自己的需求调整数量吧。插针是用各芯片附送的,插针之间用作废的如信用卡作隔挡,502粘接。将杜邦插头插好后再套上热缩管,相当的紧固和好用。
Sbus的一分二分线器
唯一需要改进的:如有条件,建议使用5针的杜邦插头,电源正极接在中间的插针上。以避免如我用的4针杜邦插头,无法避免电源可能反接的错误。