COMO CONTROLAR O SERVO MOTOR USANDO UM BOTÃO E ARDUINO
![]() |
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; } }
Boa
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirQueria 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.
ResponderExcluirn funciona.
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirOlá. 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.
ResponderExcluir#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
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
ResponderExcluirMeu nome
Alex sou de Fortaleza também mas moro em Blumenau meu celular e do Rio de janeiro obrigado pela atenção
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.
ResponderExcluirHola! 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