Lição 88: Controlando um motor servo usando dois botões de pressão
Este projeto demonstra como controlar um motor servo usando dois botões de pressão com um Arduino. Em vez de depender de um potenciômetro ou de um comando serial, você pode usar interruptores táteis simples para mover manualmente um servo para a esquerda ou para a direita. Isso é incrivelmente útil para aplicações onde você precisa de controle físico direto sobre um mecanismo, como construir um braço robótico, ajustar um gimbal de câmera ou criar um sistema de pan-tilt controlado remotamente. Os botões permitem ajustar incrementalmente o ângulo do servo, com a capacidade de segurar o botão para varrê-lo em toda a sua amplitude de movimento.
Aqui estão alguns projetos práticos que você pode construir com esta configuração:
- Construindo um painel de controle manual para um braço robótico ou garra.
- Criando um controle deslizante de câmera ou cabeça pan-tilt controlado remotamente.
- Desenvolvendo uma interface de controle físico para um leme de aeromodelo ou barco.
- Fazendo um simples "pendente de ensino" para registrar posições para uma máquina CNC ou impressora 3D.

Hardware e Componentes
Este projeto requer apenas alguns componentes básicos, tornando-o um excelente ponto de partida para aprender sobre dispositivos de entrada e saída com o Arduino.
- Placa Arduino (Uno, Nano, Mega, etc.)
- Motor servo (ex.: SG90 ou MG995)
- Dois botões de pressão momentâneos
- Fios jumper
- Protoboard (opcional, mas recomendado)
Guia de Conexões
No vídeo, a fiação é direta. O pino de sinal do motor servo está conectado a um pino com capacidade PWM no Arduino, que é o pino 9 neste exemplo. A alimentação e o terra do servo estão conectados aos pinos 5V e GND do Arduino. Os dois botões de pressão são conectados de maneira semelhante entre si. Uma perna de cada botão está conectada ao terra, e a outra perna está conectada a um pino de entrada digital no Arduino (pino 2 para o botão "esquerda" e pino 3 para o botão "direita"). O código usa os resistores de pull-up internos, portanto, nenhum resistor externo é necessário para os botões. (no vídeo em 00:57)

Explicação do Código
O código foi projetado para ser facilmente configurável. As partes principais configuráveis pelo usuário estão no topo do esboço. Aqui está uma análise das variáveis e definições importantes que você pode querer ajustar para o seu próprio projeto.
#include <Servo.h>
Servo myservo; // cria objeto servo para controlar um servo
int servoPin = 9;// este pino deve ser um dos com PWM ~
int angle =90; // ângulo inicial para o servo
int angleStep =5;
#define LEFT 2 // pino 2 está conectado ao botão esquerda
#define RIGHT 3 // pino 3 está conectado ao botão direita
servoPin: Esta variável define o pino do Arduino ao qual o fio de sinal do servo está conectado. É crucial usar um pino que suporte Modulação por Largura de Pulso (PWM), geralmente indicado com um símbolo~na placa.angle: Isso define o ângulo inicial do servo quando o Arduino inicia. O valor padrão é 90 graus, o que normalmente centraliza o servo.angleStep: Este é o incremento pelo qual o ângulo do servo muda cada vez que um botão é pressionado. Um valor de 5 significa que cada pressionamento moverá o servo em 5 graus. Você pode aumentar isso para movimento mais rápido ou diminuir para controle mais fino.LEFTeRIGHT: Estas diretivas#defineatribuem os pinos digitais aos quais os botões de pressão estão conectados. Se você conectar seus botões a pinos diferentes, deve alterar esses valores para corresponder à sua configuração.
A lógica central na função loop() verifica se um botão foi pressionado (lendo um sinal LOW devido à configuração de pull-up). Se o botão "direita" for pressionado, ele diminui a variável angle por angleStep. Se o botão "esquerda" for pressionado, ele aumenta o angle. O código inclui verificações de limite para garantir que o ângulo permaneça dentro da faixa de 0 a 180 graus. A função myservo.write(angle) é então usada para comandar o servo a se mover para a nova posição.
Demonstração ao Vivo do Projeto
Na demonstração em vídeo, a funcionalidade é claramente mostrada. Pressionar e segurar o botão "esquerda" faz o servo varrer suavemente para a esquerda, com o ângulo incrementando em 5 graus por vez, até atingir 180 graus e parar. Da mesma forma, pressionar e segurar o botão "direita" faz o servo varrer de volta para a direita, diminuindo o ângulo até atingir 0 graus. O ângulo atual é impresso no Monitor Serial, permitindo que você veja a posição exata do servo em tempo real. (no vídeo em 05:20)
Capítulos do Vídeo
- [00:00] Introdução ao controle de um servo com botões
- [00:57] Guia de conexões para o servo e botões de pressão
- [02:12] Explicação do código, parte 1: Configuração e definições
- [03:25] Explicação do código, parte 2: A lógica do loop principal
- [05:20] Demonstração ao vivo do projeto
- [06:23] Conclusão e aplicações potenciais
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
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
-
Amazonas
-
AmazonasMotor servo na Amazonamzn.to
-
Amazonas
-
Amazonas
-
eBay
Arquivos📁
Outros arquivos
-
Folha de dados do motor SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB