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

 找回密码
 立即注册
查看: 17585|回复: 13

简单好用、可靠、低成本的卫生间灯光自动化方案

[复制链接]

16

主题

135

帖子

1091

积分

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
956
HASS币
0
发表于 2021-5-18 18:40:07 | 显示全部楼层 |阅读模式
本帖最后由 roc634 于 2021-5-18 22:11 编辑

可能是目前论坛最简单实用的卫生间灯光方案,接受反驳。


本方案主要使用ESP8266和APDS9960红外手势传感模块,采用ESPHome,基于计数的方式控制继电器来实现灯光自动化。由于手势模块可以检测运动方向,因此将手势模块贴在合适的位置(最好是在手臂部位,因为这个部位在进出门时离门框最近),就可以准确识别是进门还是出门,通过计数就可以完美实现灯光自动化。因为使用NodeMCU来独立完成检测和控制,可脱网独立使用,也可用作手扫开关或者挥手开关,用于其它进出门的情况,比如厨房,阳台,其它房间等等等等。此外,还可以添加其他传感器和继电器,通过传感器的配合,检测在卫生间内的使用场景,增加控制自动冲水与否,以及冲水时间,是否需要打开加压泵,排气扇,等等其他多种用途。如果家庭成员较多,还可以通过在HA中分析数据,了解家人的卫生间使用情况,错峰如厕,还可以实现更多联动等等等等。等等等等……

卫生间灯光方案可以说是一个家中最高频的使用场景,自动化的需求是相当强烈的,论坛里也有很多朋友做过不同的尝试,我也一直想学习借鉴一下,但是看着都很复杂,有点为了自动化而自动化的倾向,反而把问题搞麻烦了。前段时间有点空,就想折腾一下卫生间的灯光方案。由于人体存在的检测目前没有很成熟的方案,基于计数的方案应该是最简单可行的,而用手势传感器模块应该是可以实现的,经过两个多月的使用,发现效果挺好,于是有了下文,权当抛砖引玉。

首先说一下我的要求, 那就是尽可能地简单,包括设备简单和使用简单。如果需要一大堆器件,用起来还相当麻烦,绝对会被我淘汰,也肯定不会在这里分享。我对卫生间的使用需求相对简单,每天最重大的占用一是拉屎,二是洗澡,最长也就一二十分钟。除此以外就是撒泡尿,除非老人过来住我们上卫生间才会虚掩一下门,不然我们都没有小心翼翼关好门,再操作一番马桶,然后才撒尿的习惯,一般就是走进去解决,然后走出来。

APDS9960是我目前能找到感应距离最大的手势模块了,模块的资料里说最大感应距离是20cm,貌似不太能达到,不过10多cm还是没问题的。所以这里有个前提,就是这就要求你家的卫生间门不是很宽的那种,或者你需要在进出时稍稍靠着贴有传感器的那个门边走,这个习惯一般很快就可以自然养成。由于是基于计数,所以理论是只要是以传感器能感应到的方式进出门,无论是单人运动,还是多人运动,都不会造成错乱,放心玩就是了。


对于经常频繁进出的情形,比如搬东西,拖地等,可以用于在传感器上多扫一下,模拟多一个进门的动作,或者出门时侧身出来,离传感器远一点,让它感应不到有人出门,这样计数不会归0,也就不会关灯了。然后在需要关灯的时候用手挥一下,模拟一个出门的动作就行了。


下面是器件的连接示意图。为了连接方便,我买的是NodeMCU,理论上所有的ESP8266都可以,只要有I2C接口。
2021-5-18 16-30-39.jpg

需要根据我仅有的经验说明一下,以下两图是我买的两个APDS9960,最初买的是右边这个,但是发现用不了,不知道是不是质量,还是芯片型号的原因。在网上搜索了,有老外说有的模块需要改源代码里的id,还有说要改红外灯的功率之类的,我试了也没成功,外加本人只是小白,只有重新买一种模块,发现左边这种是可以直接用的。

未标题-1.jpg
至于继电器模块,建议买下图的固态继电器模块,这种模块触发的时候没有噪声,不烦人。
2021-5-18 17-28-33.png

至于安装的位置。APDS9960需要粘在门框上,其它的器件可以放在一起。如果你的卫生间灯开关有零火线,线盒空间也够的话,完全可以塞到线盒里,否则,将所有这些器件装在灯里或者附近也是没有问题的。APDS9960和NodeMCU之间的线就需要根据你的具体情况来选长度了,一般找个闲置的四芯USB线就可以了。


下面是我在用的ESPHome代码,简单地说一下逻辑:设一个全局变量用于计数,进门加1,出门减1,当这个变量归0时关灯。同时,为避免出现由于感应不到出门,全局变量没有归0而造成不关灯,设一段脚本计时,20分钟内没有进出门动作就关灯,这个时间可以根据你洗澡或者拉屎的习惯调整。APDS9960可以感应多种手势,但是贴在门框上一般就只会用到上下左右四个中的两个,根据你的安装方向修改就行了。最后,考虑到NodeMCU长时间运行有时可能会出现各种奇怪的问题,需要通过重启解决,为此我设置为每天5点5分重启一次,提前防止问题出现。由于我的卫生间光线不好,因此是全天需要开灯的,如果你的卫生间只需要晚上开灯,或者需要添加延时,以及开头提到的其他更加丰富的功能,就请根据自己的需要修改行了。


有简单的注释,可以根据需要修改。
esphome:
  name: washroom
  platform: ESP8266
  board: nodemcuv2

wifi:
  ssid: "你的wifi名"
  password: "wifi密码"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Washroom Fallback Hotspot"
    password: "Washroom Fallback Hotspot"


captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

i2c:
  scl: D1
  sda: D2
  scan: True
  
globals:
  - id: washroom_person_count  #用于计数的全局变量
    type: int
    restore_value: no
    initial_value: '0'
    
script:
  - id: auto_turn_off  #用作安全的自动关灯脚本。进门触发,20分钟内无动作则归0关灯
    mode: restart
    then:
      - delay: 20min
      - lambda: |-
          if (id(washroom_person_count) > 0) {
            id(washroom_person_count) = 0;
            id(washroom_light).turn_off();
            }

apds9960:
  address: 0x39
  update_interval: 60s
  
binary_sensor:
  - platform: apds9960  #进门加1,计数为1时开灯
    direction: RIGHT   #进门检测到的手势根据安装情况有差异,按实际情况设置
    name: "washroom_enter"
    on_press:
      then:
        - lambda: |-
            id(washroom_person_count) += 1;
            if (id(washroom_person_count) == 1) {
              id(washroom_light).turn_on();
            }
        - script.execute: auto_turn_off
  - platform: apds9960  #出门减1,计数为0时关灯,不可为负数
    direction: LEFT   #出门检测到的手势根据安装情况有差异,按实际情况设置
    name: "washroom_exit"
    on_press:
      then:
        - lambda: |-
            id(washroom_person_count) -= 1;
        - if:
            condition:
              lambda: 'return id(washroom_person_count) == 0;'
            then:
              - switch.turn_off: washroom_light
              - script.stop: auto_turn_off
        - if:
            condition:
              lambda: 'return id(washroom_person_count) < 0;'
            then:
              - lambda: |-
                  id(washroom_person_count) = 0;
switch:
  - platform: gpio
    pin: D3
    name: "washroom_light"
    id: washroom_light
  - platform: restart  #用于重启NodeMCU
    name: "washroom_restart"
    id: washroom_restart
    
time:
  - platform: sntp
    on_time:
      - cron: '* 5 5 * * *'  #每天5点5分重启
        then:
          - switch.toggle: washroom_restart



实际上,脱网也是可以用的。但是追求完美主义的人可能需要改一下。主要是esphome在连不上wifi或者api时会默认15分钟重启一次,这个应该不太会影响使用,因为我断电后再通电,也是可以马上可以感应开灯的。但是如果不想让模块频繁重启,可以设置一下,将超时时间设为0s禁止,另外自动重启的功能也可以设置一个合适的超时时间来达到目的,或者用interval,或者on_boot配合delay延时等来实现。详细请看esphome的相关网页说明。

回复

使用道具 举报

25

主题

640

帖子

2913

积分

金牌会员

Rank: 6Rank: 6

积分
2913
金钱
2263
HASS币
40
发表于 2021-5-18 19:32:59 | 显示全部楼层
传感器放门这里吗?电源问题怎么解决?
回复

使用道具 举报

5

主题

108

帖子

861

积分

高级会员

Rank: 4

积分
861
金钱
753
HASS币
0
发表于 2021-5-18 20:46:56 | 显示全部楼层
很可以的方案呀,赞
回复

使用道具 举报

6

主题

226

帖子

3723

积分

论坛元老

Rank: 8Rank: 8

积分
3723
金钱
3497
HASS币
0
发表于 2021-5-18 22:30:38 | 显示全部楼层
mark一下 回头试试
回复

使用道具 举报

35

主题

984

帖子

4744

积分

论坛元老

Rank: 8Rank: 8

积分
4744
金钱
3760
HASS币
20
发表于 2021-5-18 22:49:51 | 显示全部楼层
目前是一个人体传感器结合node-red使用,学习一下
回复

使用道具 举报

4

主题

139

帖子

2178

积分

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2039
HASS币
0
发表于 2021-5-19 08:24:20 | 显示全部楼层
取电和美观是个问题
回复

使用道具 举报

25

主题

284

帖子

1473

积分

金牌会员

Rank: 6Rank: 6

积分
1473
金钱
1189
HASS币
0
发表于 2021-5-19 15:25:05 | 显示全部楼层
听说有一种叫呼吸存在感应器, 大致理解为毫米波雷达传感器吧。  据说会分辨一些比如花洒落水啊,有窗的卫生间毛巾微动啊。。具体是不是真的能区别不得而知。   其实低成本应该是在马桶盖上加装门磁传感器 以及在洗脸处淋雨顶各增加一个红外传感器吧。这样应该能减少人在灯灭的尴尬。


另一种就是对于喜欢家里无人的时候门常开,有人进去才锁门的家庭应该最简单的就是增加个门磁传感器了


大部分人体传感器误认为无人的情况应该就是上厕所的时候,我家的话马桶圈带感应的就是人坐上去自动识别的一个区域,借用那个区域增加一个门磁传感器即可),还可以借电去掉电池供电。
回复

使用道具 举报

4

主题

605

帖子

2170

积分

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
1560
HASS币
20
发表于 2021-5-19 22:49:58 | 显示全部楼层
th11998844 发表于 2021-5-19 15:25
听说有一种叫呼吸存在感应器, 大致理解为毫米波雷达传感器吧。  据说会分辨一些比如花洒落水啊,有窗的卫 ...

毫米波很贵的。我用一个5.8g微波呼吸存在。放沙发后面,躺沙发上睡着也不会关灯,客厅灯光自动化就这么解决了。卫生间用一个人体感应就解决了(只要是5秒冷却时间的就行)

你用的智能马桶带座圈感应,然后你自己diy接了门磁?是这么理解吗?
回复

使用道具 举报

25

主题

284

帖子

1473

积分

金牌会员

Rank: 6Rank: 6

积分
1473
金钱
1189
HASS币
0
发表于 2021-5-20 13:22:40 | 显示全部楼层
zsqduke 发表于 2021-5-19 22:49
毫米波很贵的。我用一个5.8g微波呼吸存在。放沙发后面,躺沙发上睡着也不会关灯,客厅灯光自动化就这么解 ...

毫米波真的贵,微波应该也不便宜。  就是不知道对于识别到底是人还是物体不知道准不准, 比如开着窗 家里的桌布晃动会不会触发,过于灵敏也是一个缺陷,无差别识别。

人体那个红外 并没有那么灵敏, 长时间坐厕容易识别为无人。这个是经历了很多次了。


智能马桶饿座圈感应点接一个带有反馈的设备。这个反馈设备可以直接在马桶盖的控制盒里接,还能借用马桶的供电给设备供电。装上控制器盖子以后外观无损。



回复

使用道具 举报

4

主题

605

帖子

2170

积分

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
1560
HASS币
20
发表于 2021-5-20 16:05:33 | 显示全部楼层
本帖最后由 zsqduke 于 2021-5-20 16:14 编辑
th11998844 发表于 2021-5-20 13:22
毫米波真的贵,微波应该也不便宜。  就是不知道对于识别到底是人还是物体不知道准不准, 比如开着窗 家里 ...

回答你的问题
1)微波非常灵敏,但不会因为窗帘误触,我也不知道具体原理。但宠物是不可能区分的你懂的

2)红外。应该换个思路。不灵敏其实不是红外本身的问题,是传感器设计和市场定位的差异。目前网上大部分人的反馈主要是因为小米人体传感器1分钟冷却时间。你换一个别的品牌的就可以大大改善有这个问题。至少我,坐着的时候不是一动不动的,那点动静完全足以维持小米传感器状态。再举个例子绿米高精度也是用红外。也就是说红外可以做的很灵敏,只不过是价格问题。

马桶圈的思路我明白,难点在于美观的改装,一般的马桶盖并没有能轻易打开的控制盒,都是集成在板子上并且完全防水密封在里面,你用的具体是什么型号希望能分享

毫米波我看过要500起步。微波我那个只要不到200
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 06:35 , Processed in 0.128861 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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