Arduino

Como conectar e controlar um Servo Motor com Arduino

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

Servo Motor com Arduino
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)

image002

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:

 

image004

Largura de pulso conforme testado no Laboratório MCI

image005

 

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!