Controlar motor de passos com Esphome

Estou fazendo um projeto para abrir uma cortina aqui em casa usando um motor de passos Nema.

image

Basicamente a ideia é controlar o motor usando o Home Assistant, este tutorial pode ajudar para vários outros projetos, como comedouro que dispensa ração, ou abrir janelas… em fim, vai da criatividade de cada um.

O que precisa:
1 - Nodecom
1 - Motor Nema (Meu modelo é o 17)
1 - Drive A4988
1 - Fonte 12v (para alimentar o motor)
1 - Fonte 5v (para alimentar o Nodecom)

Eu comprei no aliexpress o drive e motor: Onde comprei

Esquema de ligação:

Segui este esquema, a única diferença que como não tinha capacitor, eu não usei.

Ligação do Nodecom X A4988
Nodecom (D0) <-> A4988 (STEP)
Nodecom (D1) <-> A4988 (DIRECTION)
Nodecom (GND) <-> A4988 (GND)
Nodecom (3,3V) <-> A4988 (VCC)

Ligação Motor X A4988
Comprei junto o chicote para esta ligação veio pronto, no motor possui 6 terminais, mais para este drive você vai utilizar apenas os 4 abaixos:
Motor (1A) <-> A4988 (1A)
Motor (1B) <-> A4988 (1B)
Motor (2A) <-> A4988 (2A)
Motor (2B) <-> A4988 (2B)

Fonte 12v X A4988
Fonte para alimentar o motor passa pelo drive A4988, deve alimentar:
Fonte (12v) <-> A4988 (Vmot)
Motor (GND) <-> A4988 (GND)

Fonte 5v X Nodecum
Fonte para alimentar o nodecum, estou usando cabo USB e fonte 5v
Fonte (5v) <-> Nodecum (USB)

A4988 X A4988
Tem que fazer um jumper no proprio drive, ligando:
A4988 (SLEEP) <-> A4988 (RESET)

Para comunicar o nodecum com o home assistant optei por esphome, o código que usei
Código para Nodecum:

esphome:
  name: cortina_sala
  platform: ESP8266
  board: nodemcuv2

wifi:
  ssid: "SEU_WIFI"
  password: "SUA_SENHA"

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

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  services:
    - service: control_stepper
      variables:
        target: int
      then:
        - stepper.set_target:
            id: my_stepper
            target: !lambda 'return target;'
            
ota:

stepper:
  - platform: a4988
    id: my_stepper
    step_pin: D0
    dir_pin: D1
    max_speed: 250 steps/s

Código no Home Assistant:
Dentro de Input_number:

  controle_cortina_sala:
    name: Controle Cortina Sala
    initial: 0
    min: 0
    max: 6000
    step: 1
    mode: slider

Dentro de automation:

- alias: Abrir cortina sala
  trigger:
    platform: state
    entity_id: input_number.controle_cortina_sala
  action:    
    - service: esphome.cortina_sala_control_stepper
      data_template:
        target: '{{ trigger.to_state.state | int }}'

Assim que reiniciar, no Home Assistant vai aparecer:

No caso 0 ele está na posição de origem, assim que aumenta o motor roda para sentido horário, e quando diminui ele roda anti horário.

No meu exemplo eu usai mínimo=0, mas é possível usar valor negativo.

Para mais informações: https://esphome.io/components/stepper/index.html

Este projeto ainda está no começo, caso tenha alguma sugestão, por favor envie nos comentários.

Obrigado!

6 Likes

Leonardo, como ficou esse projeto ? Tem como subir umas fotos aqui ? Abraço