当前位置:
文章详情

通过人体红外传感器学习基础联动

2022-09-12 13:54:05 16点赞 60收藏 4评论

人体红外传感器原理

通过人体红外传感器学习基础联动

感应器上的菲涅尔透镜会按区间的汇聚红外线,形成“盲区”和“高灵敏区”,这样人体移动时候发出的红外线会交替的通过“盲区”和“高灵敏区”照射到热释电材料上以后,就会导致热释电材料产生电位变化,就能判断是否有人体移动因此只能感应移动中的人体,静止是无法判断的

接线

今天还是用esp32 wroom

针脚定义针脚定义

本文使用sr602模块

微型SR602人体感应模块热释电人体红外传感器探头开关灵敏度高3.65元天猫精选去购买

接线十分简单正负极和一根输出接在板子上就可以了

我们再添加一个发光二极管模拟如何控制开关

面包板实验套件入门级电路板130例电子元器件集成电路板制作diy14.1元天猫精选去购买

通过人体红外传感器学习基础联动

发光二极管顾名思义=led灯+二极管

所以长的那个针脚接正极

如果接反了电流是没法通过的

为了防止二极管过载烧毁,我们习惯性串联一个电阻

阻值100-10K欧姆都可以。看手头方便

我们打算通过esp32的针脚来给二极管供电

那么最终接线图就是下面这样

红外传感器接线示意图红外传感器接线示意图

实际接线

通过人体红外传感器学习基础联动

手头没有长度合适的红线,所以用黄线当正极了

白色双公头杜邦线接在out针脚

通过人体红外传感器学习基础联动

这里接在了端口35上

主板34-39号端口只能输入正好可以用。

发光二极管接在了GPIO14上

为了帮助理解电路。用红线标了下电流走向

两根蓝线接在了主板GND上

分别给面包板左右两侧提供地线

led电流示意图led电流示意图

注意发光二极管针脚要横过来

不然就被下面埋的导线短接了

代码编写

流程图

通过人体红外传感器学习基础联动

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灯具

我们还需要继电器或者光耦

这里介绍下继电器

通过人体红外传感器学习基础联动


原理很简单 电—磁场—电 实现电路隔离

1/2/3/4/8路继电器模块TTL带光耦隔离兼容3.3V/5V/12V高电平触发6.5元天猫精选去购买

不过这里墙裂不推荐新手改造强电

可以考虑买现成的通断器

也就20-30这样

涂鸦WIFI智能开关通断器模块语音遥控开关远程小爱天猫精灵随意贴25元天猫精选去购买易微联WiFi通断器智能开关手机APP远程控制器天猫小爱小度hilink19.8元天猫精选去购买

这个有机会再展开讲吧

最后附上视频



作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
4评论

  • 精彩
  • 最新
  • 打破零回复,不明觉厉的文章,大佬!

    校验提示文案

    提交
  • 学习了,正好最近也在折腾HA和ESPHome,感谢分享 [赞一个]

    校验提示文案

    提交
  • 你好,麻烦问下bf1750那部分怎么写呀

    校验提示文案

    提交
  • 这个可以脱离。ha。单板运行吗。。比如掉网了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

最新文章 热门文章
60
扫一下,分享更方便,购买更轻松