COMO CONTROLAR O SERVO MOTOR USANDO UM BOTÃO E ARDUINO

Esquema de ligação do Servo-Motor com Arduino para controle de posição usando um botão push-button
Ligação do Servo Motor com o Arduino e um Push-Button (botão)
A pedido do Bruno de São Paulo, fizemos este post ensinando a programar o Servo Motor usando um botão que irá controlá-lo, desenhamos 3 tipos de situações:
  • A cada toque no botão o servo se movimenta para a posição de zero ou 180°
  • A cada toque no botão o servo se movimenta para a posição de zero ou 180°, porém agora com a possibilidade de controle da velocidade através de alteração na programação
  • A cada toque no botão o servo se movimenta para a posição de zero ou 180°, porém agora com a possibilidade de controle da velocidade pelo uso do potenciômetro instalado na porta A0 do Arduino.

Mudando a posição do Servo-Motor de 0 ou 180°




#include <Servo.h>

Servo myservo; //

int pressionado; //estado do botao
int botao=3; //Pino a ser ligado o botao
int estado=0; //estado atual do botao

void setup()
{
 myservo.attach(9); //pino de dados do servo conectado ao pino 9
 myservo.write(0); //inicia motor posição 0 graus
 pinMode(botao, INPUT_PULLUP);  
}

void loop() 
{
 pressionado=digitalRead(botao);  //verifica se o botao foi pressionado
 delay(200);
 //se ele não foi pressionado o valor do pressionado será 1
  if((estado==0)&&(pressionado==0))
  //Se o esatdo é 1 e o botão não esta pressionado, ou seja é 1 tambem
  {   
      myservo.write(180);//o Servo fica na posição 180 graus
      estado==1;
  }
  if((estado==1)&&(pressionado==0))
  {   
      myservo.write(0);//o Servo fica na posição 0 graus
      estado==0;
  }
}

Mudando a posição do Servo-Motor de 0 ou 180° com controle de velocidade interna por software



#include <Servo.h>

Servo myservo; //

bool pressionado; //estado do botao
int botao=3; //Pino a ser ligado o botao
bool estado=0; //estado atual do botao
int tempoPercurso=10; //tempo escrito em segundos (10 segundos)
int tempo;

void setup()
{
 myservo.attach(9); //pino de dados do servo conectado ao pino 9
 myservo.write(0); //inicia motor posição 0 graus
 pinMode(botao, INPUT_PULLUP);
 tempo=(tempoPercurso*1000)/180;
}

void loop() 
{
 pressionado=digitalRead(botao);  //verifica se o botao foi pressionado
 delay(200);
 //se ele não foi pressionado o valor do pressionado será 1
  if((estado==0)&&(pressionado==0))
  //Se o esatdo é 1 e o botão não esta pressionado, ou seja é 1 tambem
  {   
      for(int pos=0; pos<=180; pos++){//Avanço de 0 a 180
        myservo.write(pos);//o Servo fica na posição 180 graus
      delay(tempo);
      }
      estado==1;
  }
  if((estado==1)&&(pressionado==0))
  {   
      for(int pos=180; pos>=0; pos--){//retorno de 180 a zero
      myservo.write(pos);//o Servo fica na posição 0 graus
      delay(tempo);
      }
      estado==0;
  }
}

Mudando a posição do Servo-Motor de 0 ou 180° com controle de velocidade externa por Hardware


#include <Servo.h>

Servo myservo; //

bool pressionado; //estado do botao
int botao=3; //Pino a ser ligado o botao
bool estado=0; //estado atual do botao
#define acelerador A0
int velocidade, tempo, tempoPercurso;

void setup()
{
 myservo.attach(9); //pino de dados do servo conectado ao pino 9
 myservo.write(0); //inicia motor posição 0 graus
 pinMode(botao, INPUT_PULLUP);
 pinMode(acelerador, INPUT);
}

void loop() 
{
 pressionado=digitalRead(botao);  //verifica se o botao foi pressionado
 delay(200);
 //se ele não foi pressionado o valor do pressionado será 1
 velocidade=analogRead(acelerador);
 tempoPercurso=map(velocidade, 0, 1023, 0, 10);//o ultimo parametro, 10
 //é o tempo máximo que você quer q demore em segundos para andar
 
  if((estado==0)&&(pressionado==0))
  //Se o esatdo é 1 e o botão não esta pressionado, ou seja é 1 tambem
  {   
      tempo=(tempoPercurso*1000)/180;
      for(int pos=0; pos<=180; pos++){//Avanço de 0 a 180
        myservo.write(pos);//o Servo fica na posição 180 graus
        delay(tempo);
      }
      estado==1;
  }
  if((estado==1)&&(pressionado==0))
  {   
      tempo=(tempoPercurso*1000)/180;
      for(int pos=180; pos>=0; pos--){//retorno de 180 a zero
      myservo.write(pos);//o Servo fica na posição 0 graus
      delay(tempo);
      }
      estado==0;
  }
} 
 
 

Nossa Rede Social:

Youtube, Facebook, Instagram, Twitter e Linkedin

 

Comentários

  1. Queria colocar um botão no sistema acssescontrol do arduino, pra abrir a porta po dentro, so que eu não estou conseguindo, tem como me ajudar pf.

    ResponderExcluir
  2. Olá. Queria saber porque esse meu raciocínio não funcionou de acordo como desejado. Eu peguei algumas referências do artigo e quis uma explicação do meu código dar errado.
    #include
    Servo myServo;
    #define button 12
    int estado=0;
    void setup()
    {
    myServo.attach(13);
    myServo.write(0);
    pinMode(button, INPUT);
    }
    void loop()
    {
    if(digitalRead(button))
    {
    estado++;
    }
    if(2 % estado == 0)
    {
    myServo.write(180);
    }
    else
    {
    myServo.write(0);
    }
    }

    O botão está em pullDown

    ResponderExcluir
  3. Olá amigo estou precisando de um projeto para 4 servos motores por favor entre em contato comigo para negociar o valor reta feito em um arduíno mega meu celular 21-982562988
    Meu nome
    Alex sou de Fortaleza também mas moro em Blumenau meu celular e do Rio de janeiro obrigado pela atenção

    ResponderExcluir
  4. Realmente não funciona. Apenas o primeiro comando é executado (quando aperta o botão a primeira vez), depois disso não tem mais nenhuma alguma.

    ResponderExcluir
  5. Hola! excelente blog, hace unos meses comencé mi curso en este sitio web https://cursosinem2021.com/fp-automatizacion-y-robotica-industrial-los-cursos-mas-recomendados-en-la-web-art y he quedado maravillada con este mundo, ademas consigo este tipo de blog bastante educativo y me hace querer hacer el mio, estoy ansiosa por culminar para trabajar en esta bonita área, besitos.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

ENERGIA SOLAR COM ARDUÍNO

ERRO AO CARREGAR O CÓDIGO NO ARDUÍNO NANO