Este tutorial faz parte de: Servomotores
Todos os vídeos relacionados a servomotores que abordam o tema estão listados aqui. Os links para outros vídeos encontram-se abaixo deste artigo.
Controlando um servo com botões de pressão usando o Arduino
Neste tutorial, vamos aprender a controlar um motor servo usando dois botões de pressão: um para mover o servo para a esquerda e outro para movê-lo para a direita. Quando você pressiona o botão direito, o servo se moverá 10 graus para a direita, e quando você pressiona o botão esquerdo, ele se moverá a mesma quantidade para a esquerda. Se você mantiver um botão pressionado, o servo continuará se movendo nessa direção até que você o solte.

Este projeto é uma ótima maneira de entender como conectar botões a um servo motor usando Arduino. Cobriremos os componentes de hardware necessários, as instruções de fiação e o código necessário para fazer tudo funcionar. Para uma compreensão mais clara, você pode consultar o vídeo que acompanha este tutorial (no vídeo em 01:00).
Hardware Explicado
Para este projeto, você precisará de uma placa Arduino, de um servo motor e de dois botões de pressão. O servo motor é responsável pelo movimento, enquanto os botões de pressão atuam como entradas para controlar a direção desse movimento. O Arduino processa essas entradas e envia os sinais apropriados ao servo.
O servo motor opera com base em sinais de modulação por largura de pulso (PWM). Ao enviar diferentes larguras de pulso, você pode controlar o ângulo do servo. Os botões de pressão serão conectados aos pinos de entrada digital do Arduino, e usaremos resistores pull-up internos para simplificar a fiação.
Detalhes da ficha técnica
| Fabricante | Vários |
|---|---|
| Número da peça | SG90 |
| Tensão lógica/E/S | 5 V |
| Tensão de alimentação | 4.8-6 V |
| Corrente de saída (por canal) | 1.5 A máx. |
| Corrente de pico (por canal) | 2,5 A máx. |
| Orientação sobre a frequência do PWM | 50 Hz |
| Limiares de lógica de entrada | 0,3 VCCpara 0,7 VCC |
| Queda de tensão / RDreno-fonte (ligado) / saturação | 0.4 V |
| Limites térmicos | 85 °C |
| Pacote | Plástico |
| Notas / variantes | Rotação padrão de 180° |
- Certifique-se de que o servo seja compatível com a sua tensão de alimentação.
- Use dissipação térmica adequada se operar com correntes elevadas.
- Conecte os botões ao terra em configuração pull-up.
- Aplique debounce aos seus botões se apresentarem comportamento errático.
- Monitore a saída serial para depuração.
Instruções de fiação

Para fazer a fiação dos componentes, comece conectando o motor de servo. Conecte o fio vermelho do servo ao pino 5V do Arduino, o fio preto ao pino GND e o fio de sinal amarelo ou branco ao pino 9 do Arduino. Este pino controlará a posição do servo.
Em seguida, faça a fiação dos botões de pressão. Conecte um terminal do botão direito ao pino 2 e o outro terminal ao terra. Para o botão esquerdo, conecte um terminal ao pino 12 e o outro terminal também ao terra. Essa configuração permite que os resistores pull-up internos mantenham os pinos em nível alto quando os botões não estão pressionados.
Exemplos de Código e Tutoriais
Vamos começar com o código para controlar o servo com um único botão de pressão. O código inicializa o objeto servo e define um ângulo inicial. Aqui está um breve trecho:
int angle = 90; // initial angle for servo
int angleStep = 10; // step size for movement
Neste trecho,anglerepresenta a posição atual do servo, enquantoangleStepDefine quanto o servo se move a cada pressionamento do botão. Este código é essencial para rastrear a posição do servo.
Em seguida, temos a função setup, onde conectamos o servo e configuramos os pinos de entrada:
void setup() {
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9
pinMode(2, INPUT_PULLUP); // configure button pin
}
Na função setup, inicializamos o monitor serial e conectamos o servo ao pino 9. O botão no pino 2 é configurado como entrada com resistor pull-up, o que simplifica a fiação e evita a necessidade de resistores externos.
Por fim, examinamos a função loop que trata do pressionamento do botão:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // increment angle
myservo.write(angle); // move servo
}
Este laço verifica continuamente se o botão está pressionado. Quando o botão é pressionado, o ângulo aumenta pelo passo definido e o servo se move de acordo. É crucial garantir que o ângulo permaneça dentro dos limites (0 a 180 graus) para evitar danos ao servo.
Demonstração / O que esperar
Quando você pressiona o botão direito, o servo deve mover-se para a direita em incrementos de 10 graus até atingir o máximo de 180 graus. Da mesma forma, pressionar o botão esquerdo o moverá para a esquerda. Se você mantiver um botão pressionado, o servo continuará se movimentando nessa direção até você soltar o botão (no vídeo em 01:00).
Armadilhas comuns incluem problemas de fiação, como conexões incorretas ou entradas flutuantes. Sempre verifique se suas conexões estão seguras e se você está usando os pinos corretos conforme especificado no código.
Este tutorial é parte de: Servomotores
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlando um servo com um potenciômetro usando o Arduino
- Controlando um servo com um potenciômetro e um LCD1602 usando Arduino
- Controlando Motores Servo Usando um Controle Remoto Infravermelho com Arduino
- Controle de Motor Servo Arduino Usando um Potenciômetro
- Controlando a Posição do Servo com Gestos de Mão para Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Código Arduino e vídeo para o controlador de servos PCA9685 de 16 canais e 12 bits V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
Controlling a servo with a push button with Arduino
When a push button is pressed, the servo starts moving to the right or left until
it reaches 180 and then returns to 0 degrees.
May 22, 2018 at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =10;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(2,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
while(digitalRead(2) == LOW){
// change the angle for the next time through the loop:
angle = angle + angleStep;
// reverse the direction of the movement at the ends of the angle:
if (angle <= 0 || angle >= 180) {
angleStep = -angleStep;
}
myservo.write(angle); // move the servo to the desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degrees");
delay(100); // waits for the servo to get there
}// while
}
/*
Controlling a servo with two push buttons with Arduino
When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
At any instance, if the button is released, the servo stops.
May 22, 2018, at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo Button ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Coisas que você pode precisar
-
AmazonasMotor servo na Amazonamzn.to
-
AliExpressCompre o motor Servo SG90 180 ou 360 no AliExpresss.click.aliexpress.com
Recursos e referências
Ainda não há recursos.
Arquivos📁
Nenhum arquivo disponível.