top of page
Foto do escritorCaroline Holanda

a placa de controle_ sem peceber, a fiz! botão_arduinoMiniPro_drive_bomba_servoValvula


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


bottom of page