本帖最后由 lou 于 2020-4-29 16:13 编辑
Home Assistant 给你的鱼缸灯加点小确幸
前几天家里的鱼缸灯突然就坏掉了,先是疯狂的无规律的间歇性频闪,我以为是受潮进水了,拆开检查了一下又重新安装了各个插头,然后它又坚持了一周,最终挂掉了。因为它的控制板用的是ASEMI家的PL61T020,可以通过触摸切换LED颜色。嗯,看起来不错,可它怎么就能坏掉了呢?主控板修起来很费劲,板子长这样(我把16V稳压电容拆了):
因为之前一直在学习Home assistant配置的物联网智能家居环境,我突然产生了很大胆的想法,为何不把整个板子换掉,用树莓派或者arduino驱动12V RGB灯组,然后接入Home assistant实现鱼缸灯的智能化呢? 好主意!那就开始动手搞!
材料准备
树莓派,搭载homeassistant,具体配置,之前我写过一个乱七八糟的帖子,根据那个帖子完全可以在树莓派上配置好HA。 Arduino,我用的是UNO,便宜,80块不到。 Zigbee自组网模块,两个。如果你想把树莓派和arduino都扔到鱼缸中,可以不用它,用ttl串口完全就可以了,之所以用zigbee其实大部分只是为了提升逼格。 TIP41系列,3个。这是NPN达林顿三极管,驱动RGB灯用的,其实S8050就可以了,之所以用TIP41,是因为觉得看上去就很踏实。 1K电阻三个,16V电容1个,洞洞板。其他电路保护装置可以根据能力自己添加。 12V转5V的DC降压模块,或者其他给Arduino供电的模块。 先上成品图:
然后是驱动部分的电路图:
现在开始正式写流水账式的步骤了。
一、制作驱动电路部分
我家的这款鱼缸,原始电路部分四个模块,用图给解释下:
超级简单有没有,卖300+大洋啊。 接下来,我把12VDC到控制器的线取下来,拿掉传感器,拆掉灯组,把主控整个扔地上,使劲跺两脚,扔碎纸机里碎干净。额。。。当然记得把16V稳压电容取下来。 然后开始重组这个电路,RGB的工作原理很简单,共阴的RGB灯组,共有四根接线,分别是R G B 和+12V。如图:
从上至下依次是绿,红,蓝,+12V,那RGB工作时最简单的是三色叠加原理,如果想实现复杂颜色,可以调整每个颜色的色度,基色组合请看下图:
所以,只需要使用arduino三个IO管脚来驱动三极管,开闭对应颜色就好。因为我的是12VRGB,不可以直接用IO管脚来开闭大电压,只能用三极管来驱动大电压。电路图见上面。我的灯组是内带电阻的,所以不用额外加电阻来给LED限流,只需要把灯组上的接线接在NPN三极管的集电极就行。 如果你用PNP管子的话,那就是负逻辑了,此处不多说。三极管的发射极直接接地,基极是要接Arduino的IO口的,不过要加个1K欧的电阻用来限流。因为Arduino是要跟灯组一起最终封在原盖子里,所以此处我选择的是用12V灯组的电源分点过来给Arduino,到时候直接插上原来的插头就解决供电问题了。然后全部怼在洞洞板上,此处省略无数怨念!此处多说几个字,如果想把这个电路搞得好一些,还需要做一些电路保护,和防水保护。 三电学的好的同学,完全就可以自由发挥了,电容,电感,电阻一类的按需求怼吧,顺便的话最后的成品都可以商用了。 上图:焊工不好,切勿吐槽:
二、树莓派和Arduino通讯部分
之所以会选择用zigbee来通讯,纯粹是因为手头正好有这个模块,闲置也是闲置,为何不让逼格升起来呢?!当然不愿意买这个模块也可以选择USB/TTL直连,接线少,更稳定。 上图:
如果使用我这个方案,请将自组网zigbee波特率设置在57600,通讯模式是点对点模式(A or B)。Zigbee自组网,基本不用配置,连上就能直接用。 嗯嗯,树莓派端我选择用USB外挂的zigbee,是因为自带的软串口(TX/RX)又更多的任务,比如一键关机啥的,所以USB是比较好的方案。
三、软件配置部分
以上都准备好了,那就开始搞软件。
1.首先,根据HA的官方文档,给Arduino上载Firmata固件,见官方链接: https://www.home-assistant.io/integrations/arduino/ https://github.com/firmata/ 要求使用StandardFirmata分支,因为我手里的是UNO,所以经过多次尝试,我最终用烧录的是这个: https://github.com/firmata/StandardFirmataYun 在编译之前,请把代码中的Serial1全部替换为Serial,好像是Arduino没有Serial1这个端口。编译,上传。。。。上传的时候一定要断开外部串口,我就是因为插着zigbee烧录,搞了好久都上不去!哎呀妈呀!全是坑!
2.树莓派端,根据之前的帖子配置好HA以后,先把Arduino平台写在配置文件中: arduino: port: /dev/ttyACM0 注意此处的ttyACM0是你的串口号,因为我用的是USB转zigbee,所以我的串口号实际是:ttyUSB0,所以请根据实际情况修改端口。至于如何看端口号,请参考下面的命令: ls /dev 或 dmesg 或 journalctl-f 多个命令进行查看 接下来请赋予HA用户使用串口的权限:
- sudo usermod -a -G dialout $USER
复制代码
然后我们再安装下pyFirmata库,我也被它困惑了一会,多谢HA的错误日志的提醒。
- sudo pip3 install pyFirmata
复制代码
然后,在配置文件中添加三个switch实体,如下:
- switch:
- platform: arduino
- pins:
- 8:
- name: Green LED
- 12:
- name: Red LED
- 13:
- name: Blue LED
复制代码
也就是定义了Arduino的三个端口,每个端口驱动不同的三极管,也就对应不同的颜色。当然可以也可以自定义其他端口,不过对于Arduino而言,在HA中3, 5,6, 9, 10, 11这几个口是无法使用的。因为官方就是这么说的。 配置文件修改好了以后,然后全部供电,保证zigbee在有限通讯范围内,检查下配置,重启HA服务,也可以重启树莓派,玄学。配置如图:
然后访问你的HA主页,添加三个switch实体到你的HA概览中,如果一切顺利,就会看到以下界面:
还记得那个逻辑么?全部打开就是白色,全部关闭就是关闭,只开红灯就是红。。。如果我数学不是体育老师教的,那算上关闭这个状态,3个按钮的组合应该是8种状态,对应8种颜色。当然,如果HA支持Arduino PWMI输出的话,那就是很多颜色了。可惜,可惜,暂时不行。HA支持微信小程序也支持亚马逊Alexa和Google 助手的远程控制。你把树莓派放在家里,你就可以远程给你的小鱼们开灯关灯了,再加个摄像头,改天再做个自动投食,。云养鱼啊这就是!当然灯不是给鱼用的,说到底还不是给缸内植物进行光合作用么。
四、写在最后,想说明几个问题,证明我不是个浪费硬件的傻子!
1、为何选择用Ardunio驱动而不是直接用树莓派驱动? 主要考虑到鱼缸灯的工作环境,潮湿,并且最后要将驱动封在灯盖子里,树莓派尺寸太大,并且它搭载了HA,如果封起来,调试啊,使用啊,都很不方便。反正手里的Arduino闲着也是闲着。
2、为何选择Arduino+zigbee,而不是树莓派tty直接通讯Arduino? 我的鱼缸灯盖子封起来以后,没有空间留给usb线,并且。。。无线连接是不是更牛逼一点?
3、为何不用ESP8266这类芯片? 答。因为以前不知道。。。现在知道了,觉得应该努力赚钱多囤几个。
4、为何选择TIP41驱动? 选管子是件很痛苦的事情,我看了下灯的官方驱动用的是S8050。嗯。呵呵。Arduino IO口的输出电流基本是20mA左右。。。。S8050肯定能用啊,但我觉得这玩意,还是保险点好。其实我都准备好了光耦,一想到还要焊板子,脑子就有点疼,暂时先不加了。 |