Eu queria ligar a servo válvula.
E me deu vontade de ligar uma bomba, ativada por botão, via arduino.
A tarefa parecia simples e seria, se eu fizesse isso todo dia e não fizesse tantos projetos ao mesmo tempo.
Usei o Arduino Mini Pro porque era menor (e eu o amo por isso), porque tenho muitos e, também, para relembrar como lidar com ele.
Comecei a pesquisar como ligar um simples botão e depois da ligação física, o simples botão não é tão simples assim...
Teve de Leo mexer na programação para fazer com que aperte uma vez e ligue e aperte uma segunda e desligue, retirando o ruído do chaveamento com delay (parece que tem uma biblioteca, mas o uso do delay resolveu). Teve de averiguar o estado anterior do botão para ordenar se o aperto é para ligar ou para desligar. A programação ficou assim:
int pinoBotao = 9;
int ledTreze = 13;
bool ledAceso = false;
bool ESTADO_ANTERIOR_DO_BOTAO_ERA_DESAPERTADO = true;
void setup()
{
pinMode(ledTreze, OUTPUT);
pinMode(pinoBotao, INPUT);
}
void loop()
{
if (digitalRead(pinoBotao) == LOW && ESTADO_ANTERIOR_DO_BOTAO_ERA_DESAPERTADO == false) {
ESTADO_ANTERIOR_DO_BOTAO_ERA_DESAPERTADO = true; // el boton esta desapretado
}
if (digitalRead(pinoBotao) == HIGH && ESTADO_ANTERIOR_DO_BOTAO_ERA_DESAPERTADO == true) {
if (ledAceso == false) {
digitalWrite(ledTreze, HIGH);
ledAceso = true;
ESTADO_ANTERIOR_DO_BOTAO_ERA_DESAPERTADO = false; // el boton esta apretado
}
else if (ledAceso == true) {
digitalWrite(ledTreze, LOW);
ledAceso = false;
ESTADO_ANTERIOR_DO_BOTAO_ERA_DESAPERTADO = false; // el boton esta apretado
}
}
delay (50); // o delay ajuda a salvar a gente do ruído mecênico do momento do aperto do botão
}
Depois, com dois botões, um para válvula, outro para bomba, ficou assim:
#include <Servo.h>
#define SERVO 6 // Porta Digital 6
int pinoBotao2 = 8;
bool servoFuncionando = false;
bool ESTADO_ANTERIOR_DO_BOTAO2_ERA_DESAPERTADO = true;
int pinoBotao1 = 9;
int bomba1 = 5;
bool bombaFuncionando = false;
bool ESTADO_ANTERIOR_DO_BOTAO1_ERA_DESAPERTADO = true;
Servo s; // Variável Servo
int pos1 = 5; // Posição Mínima do Servo
int pos2 = 70; // Posição Máxima do Servo
void setup ()
{
s.attach(SERVO);
Serial.begin(9600);
s.write(5); // Inicia motor posição zero
pinMode(pinoBotao2, INPUT);
pinMode(bomba1, OUTPUT);
pinMode(pinoBotao1, INPUT);
}
void loop()
{
if (digitalRead(pinoBotao2) == LOW && ESTADO_ANTERIOR_DO_BOTAO2_ERA_DESAPERTADO == false) {
ESTADO_ANTERIOR_DO_BOTAO2_ERA_DESAPERTADO = true; // el boton esta desapretado
}
if (digitalRead(pinoBotao1) == LOW && ESTADO_ANTERIOR_DO_BOTAO1_ERA_DESAPERTADO == false) {
ESTADO_ANTERIOR_DO_BOTAO1_ERA_DESAPERTADO = true; // el boton esta desapretado
}
if (digitalRead(pinoBotao2) == HIGH && ESTADO_ANTERIOR_DO_BOTAO2_ERA_DESAPERTADO == true) {
if (servoFuncionando == false) {
s.write(pos2);
servoFuncionando = true;
ESTADO_ANTERIOR_DO_BOTAO2_ERA_DESAPERTADO = false; // el boton esta apretado
}
else if (servoFuncionando == true) {
s.write(pos1);
servoFuncionando = false;
ESTADO_ANTERIOR_DO_BOTAO2_ERA_DESAPERTADO = false; // el boton esta apretado
}
}
if (digitalRead(pinoBotao1) == HIGH && ESTADO_ANTERIOR_DO_BOTAO1_ERA_DESAPERTADO == true) {
if (bombaFuncionando == false) {
digitalWrite(bomba1, HIGH);
bombaFuncionando = true;
ESTADO_ANTERIOR_DO_BOTAO1_ERA_DESAPERTADO = false; // el boton esta apretado
}
else if (bombaFuncionando == true) {
digitalWrite(bomba1, LOW);
bombaFuncionando = false;
ESTADO_ANTERIOR_DO_BOTAO1_ERA_DESAPERTADO = false;
}
}
delay (50); // o delay ajuda a salvar a gente do ruído mecênico do momento do aperto do botão
}
Material consultado para realização:
Programação do servo:
https://www.filipeflop.com/blog/micro-servo-motor-9g-sg90-com-arduino-uno/
Especificações técnicas da fonte de protoboard que eu usei:
https://www.usinainfo.com.br/reguladores-de-tensao/fonte-ajustavel-para-protoboard-33v-e-5v-2537.html
O drive para controle de motor DC que eu usei foi o mesmo que usei no Improvibration (https://www.carolineholanda.com/improvibration), por isso eu tinha bastantes material (ou seja, não usei nenhum dos que estavam indicados nas placas de controle que eu pesquisei e anotei no CadernoVermelho 2):
https://learn.adafruit.com/adafruit-arduino-lesson-13-dc-motors/parts
Para ligações físicas e programação dos botões (a programação acabou ficando por conta de Leo):
https://portal.vidadesilicio.com.br/leitura-de-botoes-e-o-bounce/
E esse:
https://multilogica-shop.com/tutorial/arduino-botão
Para especificações técnicas da válvula que eu tenho:
https://www.usinainfo.com.br/mini-fechadura-eletrica-solenoide/valvula-solenoide-para-gas-e-ar-12v-na-5243.html?search_query=solenoide&results=27
Para identificar se meu arduino era de 5V/ 16Hz ou de 3.3V/ 8HZ:
https://arduino.stackexchange.com/questions/8511/how-to-identify-arduino-mini-pro-5v-vs-3-3v
Para saber como alimentar arduino (se no pino Raw ou no Vcc):
https://saber.patagoniatec.com/2014/07/arduino-pro-micro-5v-atmega32u4-micro-leonardo-pro-mini-arduino-argentina-ptec/
Tudo isso está numa pasta (no meu computador) chamada "[daCarol]Placa de controle Soft Robot".
Me tomou um dia, mais do que esperava, menos do que eu pensei e tô muito contente!
Funciona!
Comments