HomeAssistant + ESPHome 步进电机 电动窗帘

发布时间:2025-01-26 02:47

使用电动窗帘清洗机清洁窗帘 #生活技巧# #家居清洁技巧# #深度清洁工具#

一、背景

寝室窗户上使用的是卷帘,那么为什么不加一个电机呢?于是就有了这个小项目:

PS:cover的意思在英文里有好多,我就暂时翻译为卷帘(能卷起的帘子)。貌似能关上的东西都能叫Cover - Home Assistant (home-assistant.io)

技术定位:

        初级(需要一点硬件能力)

所需软硬件:

        必须:HomeAssistant、ESPHome、esp8266、步进电机及驱动板(或普通电机)、红外对管(也可以管它叫循迹模块、接近开关)、电源。

         非必须:pcb、五金工具。

整体思路:

        利用步进电机来控制卷帘,一开始打算计算步进电机的的步数进而利用步数来控制卷帘,但是实际测试后发现,使用28BYJ-48小步进电机,虽然它自带了减速齿轮,但是他的扭矩还是不足以提升落下去的卷帘。原来的手动升降窗帘机械结构中其实也带有减速齿轮,但是没能找到合适的电机,最后直接用28BYJ-48电机用二合一胶直接沾到驱动凸轮上。

        上电后先向下滚动2秒,然后向上滚动直到检测到到顶(top_end_stop)传感器信号停止,初始化完成。到顶后只可以操作向下滚动,滚动固定时间后停止。向上滚动时间要大于向下滚动时间,来防止因打滑引起的丢步(反正到顶后检测到到顶传感器也会停止)。

二、操作步骤

2.1 开发前的准备工作 请安装好HomeAssistant、ESPHome。安装过程不再赘述,只要可以正常运行即可。注意在编译固件的时候,ESPHome需要良好的公网现下载所需依赖,否则会编译很长时间。确认好esp8266的管脚:使用不同电机驱动方法不同,这里提供的是一种控制卷帘的方式,具体请按照实际情况选择电机驱动。本文使用的是28BYJ-48配合ULN2003,所以需要使用四个引脚输出控制步进电机(这里就不推荐使用esp01系列了,引脚不够)。然后是需要一个二进制引脚输入来输入到顶信息,本文使用的是一个现成的循迹模块。 2.2 硬件部分

        此次使用的器件电压不同,传感器和esp8266使用3.3v,步进电机有5v和12v两种,本文使用的是5v版本,为了方便使用,直接设计一个pcb使用。原理图相当简单。PCB我就不放图了,由于是初学,我就不丢人现眼了,我对此的评价是“能用”而已。

最终pcb焊接后效果 最终组装效果

        传感器我使用的是一片铁皮固定到卷帘坐上的。安装时候需要测试在卷帘打开和关闭不同状态时候传感器可以正确检测出状态值。

        屋子里面有两个窗户,所以直接做了两套。单独一套测试功率为10w左右,这里我使用一个质量不错的真的明伟5A电源。不是广告,这个电源真是小巧可爱并且结实。

2.3 ESPHome部分

新建设备部分不赘述,先直接看主要代码:

stepper:

- platform: uln2003

id: my_stepper

pin_a: GPIO13

pin_b: GPIO12

pin_c: GPIO14

pin_d: GPIO16

max_speed: 500 steps/s

sleep_when_done: true

# Optional:

acceleration: inf

deceleration: inf

binary_sensor:

- platform: gpio

pin: GPIO5

filters:

- invert:

name: "Cover End Stop"

id: top_end_stop

internal: True

cover:

- platform: feedback

name: "myCover"

device_class: blind

id: my_cover

open_action:

- lambda: |-

id(my_stepper).report_position(0);

id(my_stepper).set_target(45000);

open_duration: 66s

open_endstop: top_end_stop

close_action:

- lambda: |-

id(my_stepper).report_position(40000);

id(my_stepper).set_target(0);

close_duration: 64s

stop_action:

- stepper.set_target:

id: my_stepper

target: !lambda return id(my_stepper).current_position;

开启和关闭动作中的lambda语句是根据具体安装方向决定的:

   - lambda: |-

         id(my_stepper).report_position(0);

         id(my_stepper).set_target(45000);

这个意思就是先设置步进电机位置为0,然后设置目标为45000。如果将步进电机位置设置成45000然后目标设置成0,那就会反转。这里的45000没有实际的用途,只是一个比较大的数,目的是让步进电机可以旋转,真正控制卷帘进度的是时间。duration时间需要一点点实验得出确切时间,可以先设置一个稍长的时间,然后在按下降卷帘的时候计时,得到准确时间再重新编一下。 

三、总结

        这个项目软件部分看似简单,其实改了好几版,在ESPHome官方cover部分有好多种不同的cover,尝试了不同中的cover后,最终确定为反馈cover(Feedback Cover)。因为这个既可以使用到顶,又可以使用时间。单独的时间(Time-Based Cover)和到头(Endstop Cover)都不能很好的使用, 到头(Endstop Cover)还得使用俩传感器,一个上头一个下头,只用时间又没法使用到顶。机械部分也是改了又改,这个不同厂家生产的窗帘可能也不一样得具体问题具体分析。pcb倒是只改了两版,现在是可以使用的效果,肯定不是完美的效果。

        cover在homekit上使用也是挺简单的,可以选择打开的程度,ESPHome会自动根据打开程度和打开时间之间换算。

网址:HomeAssistant + ESPHome 步进电机 电动窗帘 https://www.yuejiaxmz.com/news/view/740689

相关内容

电动窗帘控制器接线方法,电动窗帘电机接线示意图
【电动窗帘推荐】如何选购电动窗帘,电动窗帘购买指南
探索高效能源管理:ESPHome Victron
homeassistant主动推送信息
语音控制电动窗帘功能特点介绍?语音控制电动窗帘的主要用途?
电动窗帘如何清洗与保养?
电动窗帘选购十大注意事项
石家庄窗帘清洗电话
智能家居平台HomeAssistant开发与实战
窗帘拆装洗 深圳住宅窗帘清洗 欢迎来电

随便看看