Olá pessoal,
Vou tentar transcrever neste meu primeiro tutorial como consegui fazer o alimentador para o Costela!
O primeiro alimentador que fiz foi em 2016 com um fuso feito com impressora 3D, um galão de água, arduino, um shield RTC e um display para definir os parametros. O tempo passou, conheci o Home Assistant e agora abriu um universo de possibilidades, os quais irei compartilhar um dos caminhos com vocês nesse tópico.
Para realizar o projeto usei:
- Dispenser de cereal, encontra no shopee, aliexpress, mercado livre.
- Um motor de passo bipolar de 4 fios modelo 17HS4401N
- Um drive L298
- Um ESP8266
- Uma fonte 12v 2A (atenção pois se usar uma de menor corrente, o drive pode falhar)
- Um conector femea para fonte de 12v (reaproveitei de uma caixa de controle IR de fitas de led)
- 15cm de barra roscada
- 3 porcas
- 3 Arruelas
- 2 Rolamentos 608 2RS
- Duas polias
- Uma correia
Não vou detalhar muito a parte mecânica porque isso vai muito do que você tem de recursos em casa.
A ligação está assim:
Quanto ao código utilizei o software Arduino para criar o código para o ESP8266. Sempre usei o Tasmota, mas como agora não achei nada na internet para usa-lo controlando o shield L298, tive que aprender outras formas de fazer.
Você vai precisar instalar o software Arduino no PC e adicionar a placa ESP8266 colocando em Arquivos > Preferências> Urls adicionais para gerenciadores de placas o caminho: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Em seguida vá em Ferramentas > Placas > Gerenciador de placas, escreva ESP na busca e adicione esp8266 by ESP8266 Community
Agora em Ferramentas > Placas irá aparecer abaixo de Arduino a Opção ESP8266, dentro dela escolha NodeMCU 1.0
Configure como a imagem
Copie e cole o código abaixo no seu Arduino:
/*
* Este Sketch ensina a usar um motor de passo L298, um ESP 8266 e protocolo MQTT para controlar o motor
* Baseado no da URL http://osoyoo.com/2017/05/17/nodemcu-lesson-16-step-motor-mqtt/ by www.osoyoo.com e no projeto http://automation.moebius.site/2019/09/connecting-a-stepper-motor-to-hassio-home-assistant-using-a-nodemcu-via-mqtt/ by Matthew
* Dicas: Quando estava criando, houve um momento onde o motor tentava rodar e não conseguia, o problema era a fonte, tinha somente 500mA, ao mudar para 2A funcionou perfeitamente.
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Stepper.h>
const char* ssid = "nome da sua rede wifi";//coloque aqui o nome da sua rede wifi
const char* password = "sua senha do wifi";//coloque a senha do seu wifi aqui
const char* mqtt_server = "192.168.1.1"; // ip do seu home assistant, não precisa apontar a porta 1883 do mqtt
const char* clientId = "DOG_FEEDER";
const char* userName = "usuario mqtt";
const char* passWord = "senha mqtt";
const int stepsPerRevolution = 200; // calcule com base no motor que você usa, se o motor tem resolução de 1.8º então dividindo 360 por 1.8 você terá 200 passos de resolução
// initialize the stepper library on D1,D2,D5,D6
Stepper myStepper(stepsPerRevolution, D1, D2, D5, D6);
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(100);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("Command from MQTT broker is: [");
Serial.print(topic);
int p =(char)payload[0]-'0';
int stepperLoop = 0;
// step one revolution in one direction:
if(p==1) // Se o 8266 receber o payload 1, executa essa parte
{
myStepper.step(stepsPerRevolution);
Serial.print(" clockwise]" );
}
// step one revolution in the other direction:
else if(p==2) // Se o 8266 receber o payload 2, executa essa parte
{
myStepper.step(-stepsPerRevolution);
Serial.print(" counterclockwise]" );
}
else if(p==3) // Se o 8266 receber o payload 3, executa essa parte
{
Serial.print(" clockwise loop: " );
for (stepperLoop = 0; stepperLoop < 20; stepperLoop++) {
myStepper.step(+stepsPerRevolution);
Serial.print(stepperLoop);
Serial.print(" ");
delay(50);
}
Serial.print("]");
}
else if(p==4) // Se o 8266 receber o payload 4, executa essa parte
{
Serial.print(" counterclockwise loop: " );
for (stepperLoop = 0; stepperLoop < 20; stepperLoop++) {
myStepper.step(-stepsPerRevolution);
Serial.print(stepperLoop);
Serial.print(" ");
delay(50);
}
Serial.print("]");
}
else if(p==0) // Se o 8266 receber o payload 0, executa essa parte
{
digitalWrite (D1,LOW);
digitalWrite (D2,LOW);
digitalWrite (D5,LOW);
digitalWrite (D6,LOW);
Serial.print(" off]" );
}
Serial.println();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(clientId,userName,passWord))
{
Serial.println("connected");
//once connected to MQTT broker, subscribe command if any
client.subscribe("dog_feeder"); // nome do tópico que irá receber o payload do script no home assistant
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Espera 6 segundos antes de tentar novamente
delay(6000);
}
}
} //end reconnect()
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
// define a velocidade:
myStepper.setSpeed(80);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
E personalize o código colocando nos locais que comentei no código, as informações como SSID da rede, senha, IP do Home Assistant, usuário e senha do MQTT.
Faça o download do código para seu ESP
Na parte do Home Assistant
Vá em configurações > Scripts e crie os scripts a seguir:
Esse script irá publicar para o broker no tópico dog_feeder o payload 0
Payload 1
Payload 2
Payload 3
Payload 4
Todos scripts ficarão assim:
Agora crie o botão no seu dashboard:
Entidade começe a digitar script e irá aparecer os scripts que foram criados
Salve e alimente o cão!
Bons projetos para vocês!