Home Assistant 给你的鱼缸灯加点小确幸

MAKER: 店长大人

前几天家里的鱼缸灯突然就坏掉了,先是疯狂的无规律的间歇性频闪,我以为是受潮进水了,拆开检查了一下又重新安装了各个插头,然后它又坚持了一周,最终挂掉了。因为它的控制板用的是ASEMI家的PL61T020,可以通过触摸切换LED颜色。嗯,看起来不错,可它怎么就能坏掉了呢?主控板修起来很费劲,板子长这样(我把16V稳压电容拆了):

因为之前一直在学习Home assistant配置的物联网智能家居环境,我突然产生了很大胆的想法,为何不把整个板子换掉,用树莓派或者arduino驱动12V RGB灯组,然后接入Home assistant实现鱼缸灯的智能化呢?
好主意!那就开始动手搞!

材料准备

树莓派,搭载home assistant,具体配置,之前我写过一个乱七八糟的帖子,根据那个帖子完全可以在树莓派上配置好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肯定能用啊,但我觉得这玩意,还是保险点好。其实我都准备好了光耦,一想到还要焊板子,脑子就有点疼,暂时先不加了。

5、可以看看我的GitHub,因为没有一行代码,所以,我的github目前都是门可罗雀,求大爷们照顾下啊!我靠,这名字,又臭又长,真不要脸啊。
https://github.com/maowenniao/Raspberry-Homeassistant_Zigbee_Arduino_drive-12V-RGB

坐沙发

发表评论