梦想多年的自动浇花终于得以实现!

现在是2021年5月1日凌晨1点,直播2小时从零开始完成一个dotNET控制自动浇花系统,请看系统阵容!

左边是A2工业计算机,跑.NET5.0应用程序,按照Cron表达式定时控制Modbus继电器板;

右边是菲菲洗澡的大水桶,喷淋水泵固定在一凡自行车上;

上电后最终效果:

此处为视频卡片,点击链接查看:VID_20210501_012342.mp4


吃过晚饭,玲姐来问能否做个自动浇花系统。因为明天要出远门度假,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

此处为内容卡片,点击链接查看:https://newlifex.com/go/doc/16206433


部署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让蜂鸣器鸣叫三次后,进入定时任务主流程。


线路连接

线路并不复杂,最难的地方在于,如何“截断”水泵供电,在它中间加上继电器来控制。

最后通过红黑平行线直接飞入水泵内部来解决。

水泵工作的时候会有很强震动,可以用扎带绑在一凡的自行车上。

此处为视频卡片,点击链接查看:VID_20210501_003855.mp4


上水测试

装了半桶水,搬到阳台,气喘吁吁的!

上电启动,等了将近8秒,A2的StarAgent才拉起flower,蜂鸣器叫了三次,然后计时5秒后,启动一次水泵,15秒后关闭。

视频监控

搬了个360摄像头过来放在阳台,可以清晰看到花盆和雾化喷管。


花絮

刚装好雾化喷淋的时候

此处为视频卡片,点击链接查看:雾化喷淋系统.mp4