通过人体红外传感器学习基础联动
人体红外传感器原理
感应器上的菲涅尔透镜会按区间的汇聚红外线,形成“盲区”和“高灵敏区”,这样人体移动时候发出的红外线会交替的通过“盲区”和“高灵敏区”照射到热释电材料上以后,就会导致热释电材料产生电位变化,就能判断是否有人体移动因此只能感应移动中的人体,静止是无法判断的
接线
今天还是用esp32 wroom
本文使用sr602模块
接线十分简单正负极和一根输出接在板子上就可以了
我们再添加一个发光二极管模拟如何控制开关灯
发光二极管顾名思义=led灯+二极管
所以长的那个针脚接正极
如果接反了电流是没法通过的
为了防止二极管过载烧毁,我们习惯性串联一个电阻
阻值100-10K欧姆都可以。看手头方便
我们打算通过esp32的针脚来给二极管供电
那么最终接线图就是下面这样
实际接线
手头没有长度合适的红线,所以用黄线当正极了
白色双公头杜邦线接在out针脚
这里接在了端口35上
主板34-39号端口只能输入正好可以用。
发光二极管接在了GPIO14上
为了帮助理解电路。用红线标了下电流走向
两根蓝线接在了主板GND上
分别给面包板左右两侧提供地线
注意发光二极管针脚要横过来
不然就被下面埋的导线短接了
代码编写
流程图
ESPHOME板内逻辑控制
逻辑比较简单,可以省略swtich模块直接用传感器控制灯光
那么只
binary_sensor、ligth、output模块
然后按照官网示例填写即可
和之前的传感器不同
红外传感器在ESPHOME被定义为二进制传感器(binary_sensor)
顾名思义二进制传感器没有具体数值
只有是或非两种状态,
有人或者没人
门开了还是门关着
这种都是二进制传感器
至于light(灯光)
这里用了只有简单开关功能的二级制灯光(platform: binary)
具体解释见代码注释吧
已经尽量描述清楚了
编译安装后HA中就可以看到设备了
但是有一个问题
红外传感器默认触发复位时间是2.5秒
小灯会随着复位自动熄灭
也就是触发一次只亮2.5秒显然不符合需求
尝试在关闭之前添加延迟时间(- delay:时间)
但是只能解决单次触发延时
如果短时间重复触发是不能延长亮灯时间的(参考楼道感应灯)
经过一番百度,找到了实现代码
代码使用了模板匿名函数过滤器延迟关闭等功能
我们不用关心它具体怎么实现的
只需要知道吧对应传感器id(pir_motion)延迟时间填好即可(15s)
编程的秘诀是: 能跑就行,怎么跑起来的不重要
延时代码如下
- platform: template ##引入自动化模板
name: temp_motion ##模板名称
lambda: 'return id(pir_motion).state;'
internal: true
filters:
- delayed_off: 10s ##若触发红外传感器,则延时2min后关闭继电器
我们继续在此基础上添加一个判断环境光的功能
让它在低于一定亮度之下才亮
搜索了下官网文档
判断代码如下
所以最终的代码是
binary_sensor: #二级制传感器模块
- platform: gpio
pin: 35 ##使用GPIO-35
name: "PIR Sensor"
device_class: motion ##传感器类型
id: pir_motion ##设置传感器ID
on_press: #如果检测有人,则执行的动作
then: #然后
- if: #如果
condition: #条件判断
#返回id为illuminance的数值小于30是否为真(bh1750设置的ID)
lambda: 'return id(illuminance).state < 30;'
#如果为真则执行
then:
#打开id为demo_light的灯
- light.turn_on: demo_light
- platform: template ##引入自动化模板
name: temp_motion ##模板名称
#匿名函数 返回ID为pir_motion传感器状态
lambda: 'return id(pir_motion).state;'
internal: true #内部模板HA不可见
filters:
- delayed_off: 15s ##若触发红外传感器,则延时15秒
on_release: #如果检测没人,则执行的动作
#关闭id为demo_light的灯
- light.turn_off: demo_light
#灯光模块
light:
#二进制灯
- platform: binary
name: "body light"
#灯光ID
id: demo_light
#供电ID
output: led_output
#输出模块
output:
#gpio针脚输出
- platform: gpio
pin: 14 #输出针脚
id: led_output #输出ID
log可以看到测试功能正常
至此板内逻辑感应灯可以正常使用了
HA逻辑判断配置
板内控制的优势是可以脱离HA独立运行
比较稳定
缺点是不能和其他设备联动
下面我们再用HA实现一遍
代码删去逻辑判断用基础代码
binary_sensor: #二级制传感器模块
- platform: gpio
pin: 35 ##使用GPIO-35
name: "PIR Sensor"
device_class: motion ##传感器类型
id: pir_motion ##设置传感器ID
#灯光模块
light:
#二进制灯
- platform: binary
name: "body light"
#灯光ID
id: demo_light
#供电ID
output: led_output
#输出模块
output:
#gpio针脚输出
- platform: gpio
#输出针脚
pin: 14
#输出ID
id: led_output
登录HA后
依次点击配置——场景自动化——添加自动化——从空的自动化开始
操作主要是鼠标点点点
有需要的tx看视频操作吧
总结
如果没有环境光传感器
时间或者日出日落来做条件判断也可以
其实环境光传感器更适合自动控制灯具功率
已达到一个合适的室内亮度
实际应用如果想用开发板控制220v灯具
我们还需要继电器或者光耦
这里介绍下继电器
原理很简单 电—磁场—电 实现电路隔离
不过这里墙裂不推荐新手改造强电
可以考虑买现成的通断器
也就20-30这样
这个有机会再展开讲吧
最后附上视频
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

























CHpaladin
校验提示文案
臻哥
校验提示文案
值友6871733370
校验提示文案
欧阳_凤
校验提示文案
欧阳_凤
校验提示文案
值友6871733370
校验提示文案
臻哥
校验提示文案
CHpaladin
校验提示文案