梦想多年的自动浇花终于得以实现!
现在是2021年5月1日凌晨1点,直播2小时从零开始完成一个dotNET控制自动浇花系统,请看系统阵容!
左边是A2工业计算机,跑.NET5.0应用程序,按照Cron表达式定时控制Modbus继电器板;
右边是菲菲洗澡的大水桶,喷淋水泵固定在一凡自行车上;
上电后最终效果:
吃过晚饭,玲姐来问能否做个自动浇花系统。因为明天要出远门度假,5天后回来。到时候她辛苦种下的花儿都成标本干了。
撸起袖子,说干就干!
准备清单
- A2工业计算机。高性能工业级计算机,跑.NET3.1/5.0/6.0,淘宝搜“A2工业计算机”或店铺“智能大石头”,1499元,社区朋友打8折;
- Modbus继电器板。4路继电器控制,50元;
- 雾化喷淋系统。80w电机带过滤,0.5mm喷头10个,10米软管,200元;
- 红黑平行线若干;
- 3mm螺丝刀,十字加一字;
构思设计
时间比较急,我们就先设计定时控制,下次再加上温湿度传感器和远程控制。
选用最强A2工业计算机,跑.NET5.0应用程序,起个TimerX定时器,使用Cron表达式,定时每天8点、14点、20点各喷淋一次,表达式为 0 0 8-20/6 * * *。每次打开喷淋15秒。(请原谅图中Cron写错了)
初步接线图如下,220v进来经过12v开关电源,圆口转接到A2工业计算机上,再分出来一组红黑线电源给继电器板供电。同时,A2的COM1连接继电器板的A+B-,RS485通信。
另一方面,220v电源经过喷淋系统电源,圆口出来,经转接线后,红线经过1号继电器控制。由于喷淋水泵的电源插口是圆口母头,我们做了一条2米的红黑平行线直接接到水泵内部,棕色正极蓝色负极。
编写程序
曾扬言一分钟写完控制程序,实际上花了大半个小时(包括调试)。
程序本身不难,新建.NET5.0控制台应用GirlFlower,引入SmartOS_A2,全部控制代码如下:
static void Main(string[] args) { XTrace.UseConsole(); // 闪灯,闪蜂鸣器 var led = A2.Led; var buzzer = A2.Buzzer; for (var i = 0; i < 6; i++) { led.Write(i % 2 == 0); buzzer.Write(i % 2 == 0); Thread.Sleep(300); } var relay = new RelayControl { Modbus = A2.COM1 }; relay.Write(0, false); //var timer = new TimerX(DoWork, relay, "*/5 * * * * *") { Async = true }; var timer = new TimerX(DoWork, relay, "0 0 6-20/2 * * *") { Async = true }; timer.SetNext(5_000); Console.WriteLine("Hello World!"); //Console.ReadKey(); Thread.Sleep(-1); } static void DoWork(Object state) { XTrace.WriteLine("开始控制!"); //var buzzer = A2.Buzzer; //buzzer.Write(true); var relay = state as RelayControl; relay.Write(0, true); Thread.Sleep(15_000); relay.Write(0, false); //buzzer.Write(false); XTrace.WriteLine("结束控制!"); }
启动时蜂鸣器叫三声,测试的时候,每5秒执行一次继电器开关控制。
发布为linux-arm应用程序。
上机测试
A2工业计算机上电,接上网线,在路由器上找到它的IP地址,使用工具ssh连接上去。
部署星尘代理StarAgent,下载 http://x.newlifex.com/staragent50.zip 。
部署GirlFlower应用,增加权限后,使用管理员权限执行(串口需要):
chmod +x GirlFlower sudo ./GirlFlower
上机测试通过!
在星尘代理目录下Config/StarAgent.config配置GrilFlower的启动配置:
<?xml version="1.0" encoding="utf-8"?> <StarAgent> <!--调试开关。默认true--> <Debug>true</Debug> <!--证书--> <Code>66B6160B</Code> <!--密钥--> <Secret>kifui8vydhPMgpmR</Secret> <!--本地服务。默认udp://127.0.0.1:5500--> <LocalServer>udp://127.0.0.1:5500</LocalServer> <!--更新通道。默认Release--> <Channel>Release</Channel> <!--应用服务集合--> <Services> <ServiceInfo> <Name>flower</Name> <FileName>GirlFlower</FileName> <Arguments></Arguments> <WorkingDirectory>/home/feifan/flower/</WorkingDirectory> <AutoStart>true</AutoStart> <Retry>3</Retry> <AutoRestart>true</AutoRestart> <Singleton>false</Singleton> </ServiceInfo> </Services> </StarAgent>
名称flower(随意起),文件名GirlFlower,工作目录 /home/feifan/flower/,设为自动启动。
这样子即使工控机重启,StarAgent作为系统服务启动,然后它拉起flower进程。flow让蜂鸣器鸣叫三次后,进入定时任务主流程。
线路连接
线路并不复杂,最难的地方在于,如何“截断”水泵供电,在它中间加上继电器来控制。
最后通过红黑平行线直接飞入水泵内部来解决。
水泵工作的时候会有很强震动,可以用扎带绑在一凡的自行车上。
上水测试
装了半桶水,搬到阳台,气喘吁吁的!
上电启动,等了将近8秒,A2的StarAgent才拉起flower,蜂鸣器叫了三次,然后计时5秒后,启动一次水泵,15秒后关闭。
视频监控
搬了个360摄像头过来放在阳台,可以清晰看到花盆和雾化喷管。
花絮
刚装好雾化喷淋的时候