HomeAssistant + ESPHome 步进电机 电动窗帘

一、背景

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

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

技术定位:

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

所需软硬件:

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

         非必须:pcb、五金工具。

整体思路:

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

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

二、操作步骤

2.1 开发前的准备工作

  1. 请安装好HomeAssistant、ESPHome。安装过程不再赘述,只要可以正常运行即可。注意在编译固件的时候,ESPHome需要良好的公网现下载所需依赖,否则会编译很长时间。
  2. 确认好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会自动根据打开程度和打开时间之间换算。

引用:在STM32CUBEMX中使用步进电机进行控制需要进行一系列的配置。首先在驱动芯片配置函数中,需要进行一些初始化操作,如启动传输、设置电机电流、配置斩波器和驱动配置寄存器等。 引用:其次,需要使用脉冲设置函数来生成指定数量的脉冲信号。这个函数通过读写函数来实现,其中设置发送缓冲区和接收缓冲区,并使用SPI通信来发送和接收数据。 引用:最后,在步进电机控制过程中,为了实现精确的位置和速度控制,可以利用STM32CUBEMX配置定时器来输出指定数量的PWM脉冲信号。这样可以实现步进电机的运动控制。 综上所述,要在STM32CUBEMX中使用步进电机进行控制,需要进行一系列的配置,包括驱动芯片的初始化、脉冲的设置以及定时器的配置。这样可以实现步进电机的精确运动控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [STM32cubeMX+PWM频率控制(步进电机)+TMC260](https://blog.csdn.net/qq_28455253/article/details/123581069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(2)-定时器中断产生指定数量脉冲](https://download.csdn.net/download/qq_24312945/88184732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值