Como conectar e controlar um Servo Motor com Arduino
Conteúdo do Artigo
Neste guia, daremos um exemplo fácil de como conectar e controlar um Servo Motor 360º e 180º padrão. Controlando através de uma entrada analógica, neste caso um potenciômetro.
Arduino é uma plataforma open source, baseada em uma placa simples com entradas e saídas analógicas e digitais. Possui ambiente de desenvolvimento baseado na linguagem Processing / Wiring. Você pode receber sinais de uma variedade de sensores e afetar seu ambiente controlando luzes, motores ou atuadores, trabalhando de forma autônoma ou por meio de um programa executado em um computador (por exemplo, Macromedia Flash, Processing, Max / MSP, Pure Data, SuperCollider ) Consiste em um microcontrolador Atmel AVR que vem pré-programado com um Boot Loader, então você não precisa de um programador externo.
Um Servo Motor é um dispositivo de atuação que tem a capacidade de ser localizado em qualquer posição dentro de sua faixa de operação e permanecer estável nessa posição. Ele consiste em um motor de corrente contínua, uma caixa de engrenagens e um circuito de controle, e sua faixa de operação é geralmente inferior a uma volta completa.
O ponto de referência ou setpoint – que é o valor da posição desejada para o motor – é indicado por um sinal de controle quadrado. A largura de pulso do sinal indica o ângulo de posição: um sinal com pulsos mais amplos (ou seja, de maior duração) colocará o motor em um ângulo maior e vice-versa. No caso do Servo Motor 360º, mudar a largura do pulso reduzirá a velocidade ou mudará a direção do pulso.
A placa Pulse-Width Modulation tem 6 saídas PWM, que usaremos para controlar os motores.
Componentes a serem usados em um Servo Motor com Arduino
• Duemilanove ATMega328
• Servo Motor padrão DYS3003 (180º
• Servo Motor padrão DYS0209 (360º)
• Resistência variável de 10k
• Fonte 5v DC 1000mA
• Placa Proto
Diagrama de ligação em um Servo Motor com Arduino
Conexões em um Servo Motor com Arduino
• Conectamos a placa Arduino ao USB do PC ou a uma fonte de 9V.
• Conectamos o Servo Motor a uma fonte externa de 5V. O Servo Motor não deve ser conectado à saída de 5 V da placa Arduino devido ao alto consumo. Os pinos de saída do Arduino podem fornecer até 40mA, no entanto, os motores podem ter picos de cerca de 700mA.
• Conectamos o cabo de sinal do Servo Motor a uma das saídas PWM da placa Arduino. Neste exemplo usaremos a saída 3 PWM do Arduino, o fio de sinal do Servo Motor é o laranja.
• Conectamos o potenciômetro (resistência variável) a uma fonte de 5v e uma das entradas analógicas da placa Arduino (neste caso ocupamos o Analog IN número 2)
Caixa de conexão:
Local de Conexão
|
||||
Vin
|
GND
|
Analógico em 2
|
PWM 3
|
|
Servo Motor
|
Fio vermelho
|
Cable Cafe
|
–
|
Sinal servo
|
Potenciômetro
|
Pino 1
|
Pino 3
|
Pino 2
|
–
|
Fonte 5V
|
5V +
|
GND
|
–
|
–
|
A conexão do Servo Motor com Arduino pode variar dependendo do fabricante, aqui estão algumas configurações para marcas bem conhecidas.
Fabricante
|
Tensão Positiva
|
Terra
|
Sinal de controle
|
Futaba
|
vermelho
|
Preto
|
Branco
|
Dong Yang
|
vermelho
|
Castanho
|
Laranjeira
|
Hobico
|
vermelho
|
Preto
|
Amarelo
|
Alta tecnologia
|
vermelho
|
Preto
|
Amarelo
|
JR
|
vermelho
|
Castanho
|
Laranjeira
|
Airtronics
|
vermelho
|
Preto
|
Laranjeira
|
Frota
|
vermelho
|
Preto
|
Branco
|
krafr
|
vermelho
|
Preto
|
Laranjeira
|
E-sky
|
vermelho
|
Preto
|
Branco
|
A cor do fio de cada terminal varia com cada fabricante, embora o fio do terminal de alimentação positivo seja sempre vermelho. O fio do terminal de alimentação negativo pode ser marrom ou preto e o fio do terminal de entrada de sinal geralmente é branco, laranja ou amarelo.
Para realizar o exemplo ocuparemos os motores DYS0209 e DYS3003 com 360º e 180º respectivamente.
Especificações:
Modelo
|
Tensão
|
Velocidade
|
Torque
|
Tamanho
|
Peso
|
Tipo de curva
|
DYS0209
|
4,8 ~ 6,0 V
|
0,18 seg / 60 °
|
3,5 kg * cm
|
40,8 × 20,1 × 38,0 \ mm
|
38gr
|
360º
|
DYS3003
|
4,8 ~ 6,0 V
|
0,18 seg / 60 °
|
4,1 kg * cm
|
40,8 × 20,1 × 38,0 mm
|
38gr
|
180º
|
Acessórios:
Largura de pulso conforme testado no Laboratório MCI
No exemplo que iremos detalhar, vamos operar esses dois tipos de motores usando a mesma conexão detalhada acima.
Para fazer os motores funcionarem, vamos ocupar uma saída PWM (Pulse Width Modulation), e através de um sinal analógico (potenciômetro), vamos regular a largura de pulso do sinal e com isso a rotação do servo motor.
No caso do motor 360º podemos regular a sua velocidade e sentido de rotação, para isso utilizamos o seguinte código:
float potPin = 2 // "ENTRADA DE SINAL DO POTENCIOMETRO int pwmPin = 3 // SAÍDA DE SINAL SERVO MOTOR int sensorValue; float calibrate;void setup () { pinMode (pwmPin, OUTPUT) ; } void loop () { sensorValue = analogRead (potPin); Calibrar = mapa (sensorValue, 0, 1024, 120, 240); / * configurações de largura de pulso de acordo com o potenciômetro * / analogWrite (pwmPin, calibrar); / * Largura do pulso como a conversão da entrada analógica para * / digital
Após definir as variáveis e configurar o PWM como uma saída no bloco de configuração, lemos o valor da entrada analógica e, em seguida, usamos a função “map”, que essencialmente nos permite converter uma faixa de variação em outra.
Neste caso, conectamos o potenciômetro a uma entrada analógica. As entradas analógicas no Arduino são de 10 bits, portanto, entregam valores entre 0 e 1023 (210 – 1 = 1023). A faixa de tensão que está entrando na entrada analógica é fornecida pelo potenciômetro e pode variar entre 0 e 5 volts. Consequentemente, quando temos 5 V na entrada analógica, a função analogRead fornecerá um valor de 1023 e quando tivermos 0 V na entrada, a função fornecerá um valor de 0.
Pegamos o sinal obtido com a função analogRead e com ele variamos a largura de pulso da saída PWM usando a função analogWrite. Esta função recebe como parâmetro um número inteiro entre 0 e 255.
Neste exemplo, vamos configurar a saída do PWM para trabalhar na faixa de 120 a 240, para obter apenas a largura de pulso que precisamos de acordo com as especificações do motor 360º, desta forma limitamos o potenciômetro aos valores que precisamos que o motor se mova, para isso usamos a função de mapa:
void loop () {
sensorValue = analogRead (potPin);
calibtrate = map (sensorValue, 0, 1024, 120, 240);
}Para o motor 180º, usamos o mesmo código, mas variamos a saída do PWM da seguinte forma:
void loop () { sensorValue = analogRead (potPin); calibrar = mapear (valor do sensor, 0, 1024, 50, 240); }
E então, o que achou de ler sobre como conectar e controlar um Servo Motor com Arduino? Ficou alguma dúvida em relação ao conteúdo que trouxemos hoje sobre tecnologia na Plataforma Brasil? Conte a nós, comente abaixo!