Usando um servo motor MG995 180 graus de rotação no Home assistant

Olá amigos

estou com um projeto de ligar um refletor de led com ESP8266 através de switch, até aí tudo bem.
Quero ir mais além, quero acoplar esse refletor de led a um servo motor MG995(com a rotação de 180 graus).
Veja:

Observação, o modelo do refletor é exatamente esse:
image

A ideia é simples, além de controlar o seu acendimento. Quero controlar a posição em que o refletor esta apontado com um servo motor, esse que mencionei o MG995

Os controles do servo serão feitos por um encoder/decoder rotativo junto a caixa de sensor de botão e também pela interface do Home assistant

image

Estou com dificuldade de montar o código, ele está rodando, lendo o sensor rotativo e acionando o Switch, porem o servo motor não está respondendo.

Veja meu código:

esphome:
  name: esp01-infrared

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "LONxsKn+1EURlcZ535c0CJN/Oykdols+Ab2Rr8BvYYM="


ota:
  password: "??????????????????????????????"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp01-Infrared Fallback Hotspot"
    password: "eUFBKT1lmjzt"

  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.2.73
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.2.1
    ## The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0    

captive_portal:

mqtt:
  broker: 192.168.2.75
  port: 1883
  username: xxxxxxxxxxxxxxxxxxx
  password: xxxxxxxxxxxxx
  
  discovery: true
  discovery_retain: true

  birth_message:
    topic: esp-01-infrared/status
    payload: online
  will_message:
    topic: esp-01-infrared/status
    payload: offline" 
  log_topic: 
    topic: esp-01-infrared/log 
    level: ERROR
    qos: 0  

 # Desenhei o ESP01 Para ter o PINOUT dele
 #                     ################
 #                     # V+ RS EN TX  #   
 #                     #RX IO0 IO2 GND#   
 #                     #              #   
 #                     #   |xxxxxxxx| #   
 #                     #   |xxxxxxxx| #   
 #                     #   |xxxxxxxx| #   
 #                     #    **        #   
 #                     #              #   
 #                     #              #     
 #                     #              #   
 #                     ################
 #                     ################

#GPIO03(RX) -> potenciômetro 
#GPIO01(TX) -> RELAY switch  
#GPIO02     -> MOTOR
#GPIO00     ->  MOTOR

switch:
  - platform: gpio
    pin:
      number: 2
      inverted: False
    name: "Refletor"
    on_turn_on:
    - logger.log: "Refletor Turned On!"
    on_turn_off:
    - logger.log: "Refletor Turned Off!"
    restore_mode: RESTORE_DEFAULT_ON  
    icon: mdi:lamp 
    device_class: switch 

# Example configuration entry
output:
  - platform: esp8266_pwm
    id: pwm_output
    pin: 
      number: 0 
    frequency: 50 Hz
servo:
  - id: my_servo
    output: pwm_output
  

number:
  - platform: template
    name: Servo Control
    id: servo_control
    min_value: -100
    max_value: 100
    step: 1
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return x / 100.0;'    


sensor:
  - platform: rotary_encoder
    name: "Rotary Encoder"
    id: rotary
    pin_a: 
      number: 1 #TX
    pin_b: 
      number: 3 #RX
    on_clockwise: 
      then:
        - logger.log: "Giro sentido horário"
        - servo.write: 
            id: my_servo  
            level: !lambda return id(rotary).state / 100;  #[templatable](https://esphome.io/guides/automations.html#config-templatable) expression>;
          #  |-
          #return id(encoder_value).state / 100;
    on_anticlockwise: 
      then:
        - logger.log: "Giro sentido anti-horário"  
        - servo.write: 
            id: my_servo  
            level: !lambda return id(rotary).state / 100;    
  - platform: template
    name: 'motor servo'
    id: motor_servo

Segue um trecho do log

Detalhe, o meu esp8266 está com nome de infrared, porque estava usando para um IR :grin:

Será que alguém pode me ajudar com dicas? :smiling_face:

Como vc está alimentando o motor?
Se for direto no esp acredito que não vá funcionar, tem que usar fonte externa

Olá Walber, verdade…está sendo alimentado na fonte 5v que fornece os 3.3v para o esp8266
Ontem postei e fui dormir e tive esses pensamentos…agora você falando no poste, me reforçar.
Também li que há algumas portas dedicadas a PWM…vou pesquisar para o ESP8266. Quando concluir os teste lhe dou um feedback. Obrigado.

A fonte até pode ser a mesma, porém a alimentação do motor tem que ser feita diretamente na fonte, sem usar o Pino 5v do esp, se não me engano a corrente que sai do 5v é baixa aí o motor não gira.

Segundo um site aqui esses são os pinos pwm

  • pin: PWM may be used on pins 0 to 16.

Depois da um feedback

1 Like

Opa, bem isso mesmo o SERVO Motor, eles podem consumir bastante amperagem mesmo trabalhando na faixa de 4,7 a 8 volts

Fiz um teste com 2 fontes e funcionou, detalhe o GND tem que ser aterrado ao GND da Placa(ESP)

O código que fiz funcionou dentro do esperado para ligar o relay e girar o SERVO motor tanto pelo template quanto pelo pino Encoder/Decoder(potenciômetro).

Tem um detalhe que tá me quebrando a cabeça que vou explicar em outro post, sobre como ligar as GPIO00, GPIO02 e GPIO01(TX) e GPIO03(RX) do ESP01 (8266) . Pois para dar boot no ESP preciso remover os pinos que estão conectados, senão ficam em modo de boot e ou em outro modo(que não sei)…na qual o ESP liga mais não funciona.

Só funciona se ligar com os pinos do Ralay, Motor e Encoder desconectados das respectivas GPIOxx

Sei que cada pino de GPIO tem funções específicas como:
GPIO00 para flash
GPIO01(TX) comunicação serial
GPIO03(RX) comunicação serial

Mas sei que sabendo como utilizar, da pra fazer uso, só que no ESPHome pode ficar confuso. Já me alonguei e vou colocar isso em outro post focado. rsrs

Obrigado Walber.

Bom que funcionou.

Sobre a gpio eu uso esse site como referência para escolher os pinos, mas sempre teste na bancada para ver se não vai ter algum comportamento estranho. Já aconteceu de escolher um Pino para uma função que teoricamente funcionaria ok, mas tive que mudar o Pino.

Depois coloca o código que usou, tenho uns motores aqui que tenho vontade de fazer o acionamento físico e virtual.

1 Like