Aula 92: Controlando múltiplos servos, cada um com potenciômetro | Curso de Arduino Passo a Passo
Neste projeto, você aprenderá como construir um controlador de servo independente e multicanal usando um Arduino Uno e dois potenciômetros. Em vez de um único servo seguindo um único botão, este guia mostra como dar a cada servo sua própria entrada analógica dedicada, permitindo que você controle motores servo de dois a até seis de forma independente e simultaneamente. Este é um bloco de construção fundamental para qualquer projeto que exija controle manual preciso de várias partes móveis.

Esta configuração é incrivelmente versátil. Aqui estão algumas maneiras práticas de utilizá-la:
- Robótica:Controlando a inclinação e o movimento panorâmico de um estabilizador de câmera ou as articulações da base e do braço de um pequeno robô.
- Animatrônicos:Criar movimentos realistas para uma marionete ou personagem animatrônico controlando independentemente sua cabeça e olhos.
- Controle de Modelo:Construindo um controlador personalizado para veículos RC ou modelos de aeronaves para ajustar flaps e ailerons com precisão.
- Automação:Criando uma estação de sobrecarga manual para um rastreador solar ou um dispositivo de posicionamento multicamadas.
Hardware Necessário
- Arduino Uno (ou qualquer placa compatível)
- 2x Motores de servo (servos padrão de 180 graus são utilizados aqui)
- 2x Potenciômetros (10kΩ é uma escolha comum)
- Placa de ensaio e fios jumper
- Fonte de alimentação externa de 5V (recomendada para múltiplos servos)
Guia de Fiação
Este projeto requer um pouco mais de fiação do que uma configuração de servo único, principalmente porque você precisa distribuir energia e terra para múltiplos componentes. A chave é usar os trilhos de energia da placa de prototipagem para criar um barramento comum de 5V e GND. Um diagrama de fiação é essencial para esta montagem.

Vamos detalhar as conexões, conforme explicado no vídeo (no vídeo às 02:23). Primeiro, configure os trilhos de energia: conecte o Arduino.5Vconecte ao trilho positivo da placa de ensaio e oGNDconecte ao trilho negativo. Isso proporciona fácil acesso à energia para todos os seus componentes.
Potenciômetros:Cada potenciômetro atua como um divisor de tensão. Conecte o pino da direita de cada potenciômetro ao5Vferro e o pino esquerdo para oGNDtrilho. O pino do meio é o " limpador" e fornece uma voltagem variável. Conecte o pino do meio do primeiro potenciômetro à entrada analógicaA0e o pino do meio do segundo paraA1(no vídeo às 03:22).
Motores de Servos:Cada servo tem três fios. Conecte o fio de cor escura (geralmente preto ou marrom) aoGNDtrilho. Conecte o fio do meio (geralmente vermelho) ao5Vtrilho. Finalmente, conecte o fio de sinal (geralmente laranja ou amarelo) a um pino com suporte a PWM no Arduino. O fio de sinal do primeiro servo vai para o pino3, e o fio de sinal do segundo servo vai para o pino5(no vídeo às 04:01). Lembre-se de que você deve usar pinos habilitados para PWM (marcados com um til (~) no Uno) para controle do servo.
Explicação do Código
O código é baseado no exemplo padrão "Knob" do Arduino IDE, mas foi modificado para lidar com dois servos. A lógica é simples: ler o valor analógico de um potenciômetro, mapeá-lo para um ângulo e comandar o servo a mover-se para esse ângulo. A seção de configuração no início do código é onde você fará todos os seus ajustes.
Aqui está a seção configurável pelo usuário que define os pinos e cria os objetos servo:
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
Este é o núcleo da configuração. Para adicionar um terceiro servomotor, você deve copiar o bloco "configurações do servomotor 2", mudar todos os "2" para "3", atribuir um novo pino analógico (por exemplo,A2) e um novo pino PWM (por exemplo,9. OServoa classe está incorporada no IDE do Arduino, portanto, não são necessárias bibliotecas adicionais.
No textosetup()função, oservo.attach(pin)o comando diz ao Arduino qual pino está conectado ao fio de sinal de cada servo. Você deve ter uma linha para cada servo que está utilizando.
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
In theloop()o código lê o valor do potenciômetro, mapeia-o para uma faixa de 0 a 180 graus e escreve esse ângulo no servomotor. Adelay(5)no final é um parâmetro de ajuste. Como demonstrado no vídeo, reduzir este valor de 15 para 5 milissegundos torna o movimento do servo muito mais suave e elimina a vibração (no vídeo às 12:00).
Demonstração de Projeto Ao Vivo
Uma vez que o circuito esteja ligado e o código carregado, a demonstração é imediata. Quando você ligar o Arduino, cada servo se moverá para uma posição determinada pela configuração atual de seu potenciômetro correspondente. À medida que você gira o botão, seu servo seguirá suavemente o movimento. O vídeo demonstra que os dois servos operam de forma totalmente independente, permitindo movimentos complexos e simultâneos. Se você notar qualquer tremor ou vibração, ajustar odelay()o valor no loop é a primeira coisa a se tentar.
Capítulos
- [00:00] Introdução e Visão Geral do Projeto
- [00:56] Compreendendo Motores Servo
- [02:23] Diagrama de Fiação para Dois Servos e Potenciômetros
- [04:15] Explicação Detalhada da Fiação
- [06:49] Explicação do Código: Configuração e Instalação
- [09:15] Explicação do Código: Lógica de Controle e Mapeamento
- [11:15] Demonstração ao Vivo e Ajuste
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * 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/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Coisas que você pode precisar
-
Amazonas
-
Amazonas
-
eBay
-
AliExpressCompre o motor Servo SG90 180 ou 360 no AliExpresss.click.aliexpress.com
Recursos e referências
Ainda não há recursos.
Arquivos📁
Outros arquivos
-
Folha de dados do motor SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB