梦想多年的自动浇花终于得以实现!
现在是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摄像头过来放在阳台,可以清晰看到花盆和雾化喷管。
花絮
刚装好雾化喷淋的时候