quinta-feira, 27 de maio de 2021

Mini Pebolim Eletrônico - Parte 02

 Boa noite amigos do blog,

    Estou aqui para comunicar que o projeto do Mini Pebolim Eletrônico foi um sucesso!! Todos gostaram de jogar! Vou dar detalhes do projeto. Como vocês podem ver nas fotos abaixo, eu utilizei 02 servos, um Arduino Uno, 02 botões push boton NA e apenas 01 bateria de 9V recarregável. A força dos servos me impressionou, pois a bolinha de isopor fez muitos gols. Para esse primeiro protótipo eu não iria utilizar material de primeira, afinal estou começando os testes. Então, arrumei uma caixa de plástico, cortei o local do Gol e prendi uma barra de ferro tipo cantoneira aonde fixei o primeiro servo (jogador). Na haste do servo eu conectei palitos de picolé com cola de silicone e parafuso. Prendi a haste de ferro na borda da caixa plástica com abraçadeira de nylon e furei com o ferro de solda. Fiz o mesmo com os botões para fixar nos cantos da caixa. Por fim, o outro servo (goleiro), eu colei com cola de silicone em cima do Gol e fixei um palito de picolé na haste do motor. Fiz as conexões diretamente no Arduino, sem necessidade de uma fonte externa, pois como são apenas 02 servos, não puxam muita corrente, no máximo 500 mA se forem acionados juntos, isso considerando uma corrente de pico inicial. A tensão de operação de 5V é fornecida pelo próprio Arduino. Por fim, na programação (Sketch), eu declarei os servos, inicializei ambos e fiz a seguinte lógica: para o jogador, o servo 01 vai a 120 graus quando o botão é acionado e depois retorna ao zero, simulando um chute. E para o servo 02 (goleiro), ele vai a 30 graus quando o botão é acionado pela primeira vez e a 150 graus quando é acionando novamente, e fica alternando, como se o goleiro "pulasse" de um lado para o outro, pra defender o chute. Ficou muito legal. A experiência foi boa. Pretendo aprimorar no futuro. Bons estudos galera!

Fotos:







Sketch:

#include <Servo.h>

int botaogol = 2; // pino do botão do goleiro

int botaojog = 7; // pino do botão do jogador

int stategol;

int statejog;

int angle = 0;

Servo servo1; // Cria um objeto servo - goleiro

Servo servo2; // Cria outro objeto servo - jogador

 void setup() {

 pinMode(13, OUTPUT);

pinMode(botaogol, INPUT); // botão no pino 2

pinMode(botaojog, INPUT); // botão no pino 2

servo1.attach(3);       //Adiciona o servo1 ao pino 3 - goleiro

servo2.attach(9);       //Adiciona o servo2 ao pino 9 - jogador

servo1.write(0);        //Inicializa o servo1

servo2.write(0);        //Inicializa o servo2

}

void loop() {

stategol = digitalRead(botaogol);  //Lê o estado do botão do goleiro

statejog = digitalRead(botaojog);  //Lê o estado do botão do jogador

if (stategol == HIGH && angle>=90) {        //Se o estado do botão é alto e o ângulo anterior é maior ou igual a 90 graus, então...

while(digitalRead(botaogol) == HIGH) {delay(5);}  //Aguarde o botão se estabilizar e voltar ao nível baixo (efeito debounce)

   servo1.write(30);    // Rode até zero graus

   delay(15);}       //Aguarde até o servo ir para o local

   else if(stategol == HIGH && angle<90){    //Senão, se o botão for ativado e o ângulo for menor que 90 graus, então...

     while(digitalRead(botaogol) == HIGH) {delay(5);}      //Aguarde o botão se estabilizar e voltar ao nível baixo (efeito debounce)

       servo1.write(150);   // Rode até 180 graus

      delay(15);   //Aguarde até o servo ir para o local

   }

angle = servo1.read();   //Lê o ângulo do Servo motor no final pra poder comparar com o inicial

 if (statejog == HIGH) {        //Se o estado do botão é alto e o ângulo anterior é maior ou igual a 90 graus, então...

 while(digitalRead(botaojog) == HIGH) {delay(5);}  //Aguarde o botão se estabilizar e voltar ao nível baixo (efeito debounce)

    servo2.write(120);    // Rode até cento e vinte graus

   delay(200);      //Aguarde até o servo ir para o local

   servo2.write(0);    // Rode até zero graus

   delay(15);}       //Aguarde até o servo ir para o local

 }

 


Nenhum comentário:

Postar um comentário