请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 3921|回复: 20

[硬件DIY] 即热饮水机用esp8266+非接触液位传感器实现自动供水系统

[复制链接]

9

主题

167

帖子

1254

积分

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1087
HASS币
0
发表于 2022-1-27 16:09:15 | 显示全部楼层 |阅读模式
本帖最后由 tangyali 于 2023-2-8 22:52 编辑

家里的即热饮水机是3升的,每次加水,都需要把水箱取下来,放到净水机龙头去装水,对于懒人来说,简直是折磨。终于有一天,懒人受不了了,决定把水路改造了一下,实现了水箱水位低到设定位置,净水器通过管道自动向水箱供水,当水位达到设定高度自动关闭净水器,另外,为了不至于水漫金山,设定了保护性定时关水。
IMG_20220116_134225_副本.jpg
净水机是小米600g,放在橱柜里,之前由配套的龙头出水。
水路原图.jpg
原水路图,600G有4根信号线控制净水器制水,需要挑出红黑色并接继电器。
改造图.jpg
改造原理图,如果是压力村水桶式的,可以不需要继电器2,只需购买单路继电器模块
此次改造主要材料如下:


Screenshot_2022-01-27-15-39-19-241_com.xunmeng.pinduoduo_2.jpg
控制核心:8266
Screenshot_2022-01-27-15-38-38-795_com.xunmeng.pinduoduo_2.jpg
非接触水位传感器,我买的是3mm精度的,根据水箱材质厚度选择,注意,金属材质的水箱无法检测!!!
Screenshot_2022-01-27-15-39-19-241_com.xunmeng.pinduoduo_1.jpg
两路继电器模块,如果是压力桶或已经有水盒子可以不用。
Screenshot_2022-01-27-15-38-38-795_com.xunmeng.pinduoduo_副本.jpg
电磁阀供电电压12V,水位传感器电压为3.3V,8266和继电器模块电压5V,所以需要多路电源模块
IMG_20220127_154154_1.jpg
IMG_20220127_154154_2.jpg
12V2分电磁阀及电源插头,其实插头可以不用,直接焊接电源线也可。
Screenshot_2022-01-27-15-37-58-993_com.xunmeng.pinduoduo_1.jpg
杜邦线若干
Screenshot_2022-01-27-15-37-34-679_com.xunmeng.pinduoduo_副本.jpg
防水盒子,电路板和电磁阀都可以放下,注意在盒底开溢水孔,避免漏水引起短路
Screenshot_2022-01-27-15-36-25-948_com.xunmeng.pinduoduo_副本.jpg
4芯防水对接插头,原先有xh2.54接插件,后来发现有点接触不良,担心接线不可靠,所以另买了一副
IMG_20220127_154154_4.jpg
IMG_20220127_154154_3.jpg
2分水管及水路接头,根据自家情况购买。。。
IMG_20220116_105522.jpg
把三块电路板用热熔胶固定在防水盒上盖
IMG_20220116_105501.jpg
上盖用M8钻孔,可以插入12V电源插头到后面的电源模块,旁边引出传感器和净水器开关线

                               
登录/注册后可看大图

IMG_20220116_105551.jpg
多路电源和继电器接线
IMG_20220116_105535.jpg

                               
登录/注册后可看大图

esp8266引脚接线
IMG_20220116_105444.jpg
电磁阀固定在防水盒底盒,并在底盒上钻孔,确保万一漏水不至于烧电路。
IMG_20220116_105055.jpg
水管连接
IMG_20220117_132113.jpg
IMG_20220117_132136.jpg
把两路传感器电源分正负极合并在一起焊接,再单独焊接两路信号线,最后焊接到防水插头的4根接线
IMG_20220117_132829.jpg
IMG_20220117_135715.jpg
焊接完成后用胶布缠好,并用胶布固定传感器和信号线。
IMG_20220116_104352.jpg
IMG_20220116_104701.jpg
2分水管通过橱柜安装直插面板,拆掉饮水机提把,用两个直角穿过连接,这样,水管就不打孔接入水箱了
IMG_20220116_104725.jpg
另一边的孔用M8的硅胶塞堵住,避免灰尘和杂质进入水箱。
在hass里安装esphome集成,操作方法参考论坛里的XCray大神的帖子:可能是史上最简单、最适合小白的 初次 ESPHome固件烧写过程
代码如下:
esphome代码常规设置
esphome:
  name: water-control
  platform: ESP8266
  board: nodemcuv2
  name_add_mac_suffix: true
  esp8266_restore_from_flash: true

logger: 

# Enable Home Assistant API
api:

ota:
#  password: "fb19ca689eef7e976752bf5898c1b28e"
wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_password
  - ssid: !secret wifi_ssid2 #如需不同的ssid可选
    password: !secret wifi_password
    manual_ip:
      static_ip: 192.168.123.122
      gateway: 192.168.123.1
      subnet: 255.255.255.0
    # dns1: 1.1.1.1
    # dns2: 1.2.2.1
  # use_address: 192.168.123.121 
  # 指定烧录固件时候目标设备IP,优先级高于静态IP
    
  reboot_timeout: 1h
  # 超时1小时重启设备
  
  ap:
    ssid: "Water-Control Fallback Hotspot"
    password: !secret wifi_password
    # password: "kM1HEMDk8cQF"
    # 原ap密码
  # Enable fallback hotspot (captive portal) in case wifi connection fails

web_server:
  port: 80 # web端口

substitutions:
  config_version: 'v2022.01.23.001'
  #设备名称
  device_name: water control
  #如果SSID是隐藏的,设置为true

captive_portal:


板载灯光:
output:
  - platform: esp8266_pwm
    pin: GPIO2
    frequency: 2000Hz
    id: led_onboard
    inverted: True

########################---------灯---------############################

light:
  - platform: monochromatic
    name: "LED On Board"
    output: led_onboard

sensor:
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    update_interval: 60s

高低水位传感器:
########################-------传感器-------############################

binary_sensor:
  - platform: gpio      #水位传感器---低
    pin: 
      number: D5
      mode: INPUT_PULLUP
      inverted: True
    id: water_low
    name: "${device_name} Low"
    device_class: moisture
    on_release:
      then:
        - logger.log:
            format: "传感器-低,step:1---检测到水位低,供水前自检开始..."
            level: INFO
        - if:
            condition:
              not:
                - switch.is_on: valve_switch
                - binary_sensor.is_on: water_high
            then:
              - logger.log:
                  format: "传感器-低,step:End---设备状态通过自检,打开电磁阀..."
                  level: INFO
              - switch.turn_on: valve_switch
            else:
              - logger.log:
                  format: "传感器-低,检测到故障,脚本无法继续,请检查水位传感器..."
                  level: ERROR
#----------------------------------------------------------------------#

  - platform: gpio      #水位传感器-高
    pin:
      number: D6
      mode: INPUT_PULLUP
      inverted: true
    id: water_high
    name: "${device_name} High"
    device_class: moisture
    on_press:
      then:
      - logger.log: 
          format: "传感器-高:---到达最高水位,启动断水脚本..."
          level: INFO
      - script.execute: water_close

两路gpio继电器开关,分别控制净水器和电磁阀,
另一路虚拟开关,交互hass人员状态,作为每天早上自动为水箱注水的执行条件,有人在家才启动供水,避免任何可能的干扰造成误动
########################-------开关-------##############################

switch:
  - platform: gpio    #开关1-电磁阀
    name: "${device_name} Valve"
    id: valve_switch
    pin:
      number: D1
      inverted: yes
    on_turn_on:
      then:
        - logger.log: 
            format: "电磁阀,step:1---电磁阀已打开,检测水箱是否缺水..."
            level: INFO
        - if:
            condition:
              - binary_sensor.is_off: water_high
            then:
            - logger.log: "电磁阀:step:2---检测到水箱缺水,延时1s打开净水器..."
            - if:
                condition:
                    script.is_running: water_protect
                then:
                - script.stop: water_protect
            - delay: 2s  #延时1s打开净水器开关,减少水压冲击
            - logger.log: "电磁阀:step:3---打开净水器供水..."
            - switch.turn_on: water_switch
            - delay: 10s  #延时10s,检查低位传感器是否感应到水,如没有水则可能停水,启动断水脚本
            - if:
                condition:
                  binary_sensor.is_off: water_low
                then:
                  script.execute: water_close
            else:
              - logger.log: 
                  format: "电磁阀:step:End-----传感器检测到水箱不缺水,关闭电磁阀..."
                  level: WARN
              - switch.turn_off: valve_switch

#----------------------------------------------------------------------# 

  - platform: gpio   #开关2-净水器
    name: "${device_name} Water"
    id: water_switch
    pin:
      number: D2
      inverted: yes
    on_turn_on:
      then:
        - logger.log:
            format: 净水器,step:1---净水器开始供水,检测电磁阀状态...
            level: INFO
        - if:
            condition:
              not:
                - switch.is_on: valve_switch
            then:
              - logger.log: 
                  format: "净水器:step:End---检测到电磁阀未打开,关闭净水器..."
                  level: WARN
              - switch.turn_off: valve_switch
            else:
              - logger.log: "净水器:step:2-净水器工作,启动保护脚本..."
              - script.execute: water_protect
              - logger.log: 
                  format: "净水器:step:3---保护脚本已启动,%.2f秒后启动保护断水脚本..."
                  args: [ 'id(close_timer).state' ]
              - delay: !lambda "return id(cd_timer);"
              - script.execute: water_close

  - platform: template  #HA交互开关,获取HASS人员是否在家
    id: person_home
    name: "${device_name} person"
    turn_on_action:
      - switch.turn_on: person_home
    turn_off_action:
      - switch.turn_on: person_home
执行脚本:
######################-------脚本:------################################
script:
  - id: water_close   #关闭阀门脚本
    then:
      - logger.log: 
          format: "断水脚本:step:1---脚本启动,关闭净水器"
          level: INFO
      - switch.turn_off: water_switch
      - logger.log: "断水脚本:step:2---净水器已关闭,延时2s关闭电磁阀..."
      - delay: 2s      #延时2s关闭电磁阀,释放水路压力.
      - switch.turn_off: valve_switch
      - logger.log: "断水脚本:step:4----电磁阀已关闭,关闭保护脚本"
      - script.stop: water_protect
      - logger.log: "断水脚本:step:End---保护脚本已关闭,供水完成!"

#----------------------------------------------------------------------#

  - id: water_protect   #保护脚本
    then:
      - logger.log:
          format: "保护脚本:step:1---保护开始,%.2f秒后验证净水器是否关闭..."
          args: [ 'id(cd_protect)/1000' ]
          level: INFO
          tag: main
      - delay: !lambda "return id(cd_protect);"
        # 按设定保护延时
      - logger.log: 
          format: 保护脚本:step:2---设定时间到,开始超时保护处理...
          level: WARN
          tag: main
      - if: # 判断开关是否关闭,如打开...
          condition:
            or: # 任意一个开关打开
              - switch.is_on: valve_switch
              - switch.is_on: water_switch
          then: # 调用关闭脚本
            - logger.log: 
                format: 保护脚本:step:3---有设备超时未关闭,关闭供水脚本...
                level: WARN
                tag: main
            - switch.turn_off: water_switch
            - logger.log:
                format: 保护脚本:step:4---关闭净水器,延时1s关闭电磁阀...
                level: WARN
                tag: main
            - delay: 2s
            - switch.turn_off: valve_switch
#-------------------------全局变量---------------------------------------------#
globals:
  - id: cd_timer
    type: int
    restore_value: yes
#    initial_value: '0'
#   倒计时
  - id: cd_protect
    type: int
    restore_value: yes
#    initial_value: '0'
#   保护时间
  - id: cd_temp
    type: int
    restore_value: yes

#hass交互设定定时关闭倒计时        
number:
  - platform: template
    name: "${device_name} Close Timer"
    id: close_timer
    icon: mdi:timer
    optimistic: true
    restore_value: true
    min_value: 80
    max_value: 120
    step: 2
    on_value:
      then:
        - globals.set:
            id: cd_timer
            value: !lambda "return x * 1000;"
        - globals.set:
            id: cd_temp
            value: !lambda "return x * 1000;"
        - globals.set:
            id: cd_protect
            value: !lambda "return x * 1000 + 20000;"
        - logger.log: 
            format: "供水延时: %.2f 秒"
            args: [ 'id(close_timer).state' ]
        - logger.log: 
            format: "保护关闭延时: %.2f 秒"
            args: [ 'id(close_timer).state + 20' ]


附件代码 water.zip (2.66 KB, 下载次数: 30) ,自己导入esphome根据自己情况调整、编译,原则是在本地完成,避免因为网络原因造成控制失败的情况。刷好固件后,可以在hass里看到设备状态
hass.jpg
本人是小白,esp8266及esphome纯是现学现用,东借西抄,有些代码自己都觉得有点笨,但水平不够无法做到更好,希望真正的大神批评指正。

回复

使用道具 举报

36

主题

1203

帖子

4885

积分

论坛元老

Rank: 8Rank: 8

积分
4885
金钱
3682
HASS币
0
发表于 2022-1-27 16:51:01 | 显示全部楼层
加个溢流口,就安全一点。类似于马桶的原理
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

10

主题

182

帖子

1761

积分

论坛技术达人

积分
1761
金钱
1574
HASS币
20
发表于 2022-1-27 17:46:40 | 显示全部楼层
物料选型贴一下吧
回复

使用道具 举报

9

主题

167

帖子

1254

积分

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1087
HASS币
0
 楼主| 发表于 2022-1-27 23:14:09 | 显示全部楼层
jjcs 发表于 2022-1-27 16:51
加个溢流口,就安全一点。类似于马桶的原理

对,最担心设备出故障造成水漫金山,所以除了水位传感器,还设置了定时关闭,设定时间外加20秒再次关闭,相当于做了三道防护,除此之外,每个继电器打开时都会检测水箱状态,希望把出现差错的可能性降到最低。
回复

使用道具 举报

4

主题

199

帖子

1064

积分

金牌会员

Rank: 6Rank: 6

积分
1064
金钱
865
HASS币
0
发表于 2022-1-28 11:02:51 | 显示全部楼层
我觉得太复杂了,一个浮球阀就行了
回复

使用道具 举报

36

主题

1203

帖子

4885

积分

论坛元老

Rank: 8Rank: 8

积分
4885
金钱
3682
HASS币
0
发表于 2022-1-28 11:06:07 | 显示全部楼层
tangyali 发表于 2022-1-27 23:14
对,最担心设备出故障造成水漫金山,所以除了水位传感器,还设置了定时关闭,设定时间外加20秒再次关闭, ...

其实浮球阀是最靠谱的,在加个溢流口,三道保险,其实也不是绝对安全
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

9

主题

167

帖子

1254

积分

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1087
HASS币
0
 楼主| 发表于 2022-1-28 11:27:29 | 显示全部楼层
ddkens 发表于 2022-1-28 11:02
我觉得太复杂了,一个浮球阀就行了

我之前也买过球阀,但球阀有几个问题:
1,供水高度无法调节,这就造成可能接半杯水就需要补水,,会造成净水器频繁工作
2,饮水机水箱相对比较狭窄,安装不是很方便,
3,球阀长期浸泡在水里,可能不太卫生,另外也不是很好清洗水箱
4,电磁阀+继电器控制净水机制水,安全性应该相当高.我认为至少比球阀卡住的几率小
回复

使用道具 举报

0

主题

2

帖子

18

积分

新手上路

Rank: 1

积分
18
金钱
16
HASS币
0
发表于 2022-2-11 19:49:08 | 显示全部楼层
拼多多看你评论过来的,看完感觉相当复杂我是打算给桶装水的桶加装自动化加水的,用得是小米厨下净水器1A,看样子得放弃了,太难了
回复

使用道具 举报

9

主题

167

帖子

1254

积分

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1087
HASS币
0
 楼主| 发表于 2022-2-11 22:58:09 | 显示全部楼层
Jake2018 发表于 2022-2-11 19:49
拼多多看你评论过来的,看完感觉相当复杂我是打算给桶装水的桶加装自动化加水的,用得是小米厨下净 ...

看起来好像有点难,但我在这之前完全没有esphome的经验,连8266上面的针脚有什么用都不知道,但实际操作下来,感觉也不是很难,可以尝试以下.细节我可以帮你哈
回复

使用道具 举报

15

主题

636

帖子

2179

积分

金牌会员

Rank: 6Rank: 6

积分
2179
金钱
1543
HASS币
0
发表于 2022-2-16 21:25:03 | 显示全部楼层
tangyali 发表于 2022-2-11 22:58
看起来好像有点难,但我在这之前完全没有esphome的经验,连8266上面的针脚有什么用都不知道,但实际操作下来 ...

大佬,我是因为空调排水管过低,需要用个泵提升一下,然后排到窗外去。
我准备排水管接到一个桶里边,然后当水位到达一半的时候,开始用泵抽水,然后顺着高出的一个管道流到外面去。(大约提升15cm左右)。
准备用一个液位探测器,液位到了后,工作几分钟自动停止。

那请问下大佬,我其实用一个01s就可以了吧?一个gpio接液位传感器信号线,另外两个接继电器,就可以了吧?另外请问下大佬,用蠕动泵可以吗?还是需要用大佬这个泵呢?

esp的程序,我再啃啃,有问题再请教大佬。
感谢大佬。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-3-28 18:05 , Processed in 0.137945 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表