Arduino - servo motor

Um servo motor é um pequeno dispositivo que possui um eixo de saída. Este eixo pode ser posicionado em posições angulares específicas, enviando ao servo um sinal codificado. Enquanto o sinal codificado existir na linha de entrada, o servo manterá a posição angular do eixo. Se o sinal codificado muda, a posição angular do eixo muda. Na prática, os servos são usados ​​em aviões controlados por rádio para posicionar superfícies de controle como elevadores e lemes. Eles também são usados ​​em carros controlados por rádio, fantoches e, claro, robôs.

Servos são extremamente úteis em robótica. Os motores são pequenos, têm circuitos de controle embutidos e são extremamente poderosos para seu tamanho. Um servo padrão como o Futaba S-148 tem 42 oz / polegadas de torque, o que é forte para seu tamanho. Ele também consome energia proporcional à carga mecânica. Um servo com carga leve, portanto, não consome muita energia.

As entranhas de um servo motor são mostradas na imagem a seguir. Você pode ver os circuitos de controle, o motor, um conjunto de engrenagens e a caixa. Você também pode ver os 3 fios que se conectam ao mundo exterior. Um é para alimentação (+ 5 volts), aterramento e o fio branco é o fio de controle.

Funcionamento de um servo motor

O servo motor tem alguns circuitos de controle e um potenciômetro (um resistor variável, também conhecido como potenciômetro) conectado ao eixo de saída. Na foto acima, o potenciômetro pode ser visto do lado direito da placa de circuito. Este potenciômetro permite que o circuito de controle monitore o ângulo atual do servo motor.

Se o eixo estiver no ângulo correto, o motor é desligado. Se o circuito descobrir que o ângulo não está correto, ele girará o motor até que esteja no ângulo desejado. O eixo de saída do servo é capaz de viajar em torno de 180 graus. Normalmente, está em algum lugar na faixa de 210 graus, no entanto, varia dependendo do fabricante. Um servo normal é usado para controlar um movimento angular de 0 a 180 graus. Ele é mecanicamente incapaz de girar mais longe devido a uma parada mecânica embutida na engrenagem de saída principal.

A potência aplicada ao motor é proporcional à distância que ele precisa percorrer. Portanto, se o eixo precisar girar em uma grande distância, o motor funcionará a toda velocidade. Se precisar girar apenas um pouco, o motor funcionará a uma velocidade mais lenta. Isso é chamadoproportional control.

Como você comunica o ângulo em que o servo deve girar?

O fio de controle é usado para comunicar o ângulo. O ângulo é determinado pela duração de um pulso que é aplicado ao fio de controle. Isso é chamadoPulse Coded Modulation. O servo espera ver um pulso a cada 20 milissegundos (0,02 segundos). A duração do pulso determinará até que ponto o motor gira. Um pulso de 1,5 milissegundo, por exemplo, fará o motor girar para a posição de 90 graus (geralmente chamada de posição neutra). Se o pulso for menor que 1,5 milissegundos, o motor girará o eixo para mais perto de 0 grau. Se o pulso for maior que 1,5 milissegundos, o eixo gira mais perto de 180 graus.

Componentes necessários

Você precisará dos seguintes componentes -

  • 1 × placa Arduino UNO
  • 1 × servo motor
  • 1 × ULN2003 que conduz IC
  • 1 × 10 KΩ Resistor

Procedimento

Siga o diagrama do circuito e faça as conexões conforme mostrado na imagem abaixo.

Esboço

Abra o software Arduino IDE em seu computador. A codificação na linguagem Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.

Código Arduino

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

Código a ser anotado

Servo motores têm três terminais - alimentação, aterramento e sinal. O fio de alimentação é normalmente vermelho e deve ser conectado ao pino de 5 V no Arduino. O fio terra é normalmente preto ou marrom e deve ser conectado a um terminal do IC ULN2003 (10 -16). Para proteger sua placa Arduino de danos, você precisará de um IC de driver para fazer isso. Aqui, usamos ULN2003 IC para acionar o servo motor. O pino do sinal é geralmente amarelo ou laranja e deve ser conectado ao pino número 9 do Arduino.

Conectando o Potenciômetro

Um divisor de tensão / divisor de potencial são resistores em um circuito em série que escalam a tensão de saída para uma relação específica da tensão de entrada aplicada. A seguir está o diagrama do circuito -

$$ V_ {out} = (V_ {in} \ times R_ {2}) / (R_ {1} + R_ {2}) $$

V out é o potencial de saída, que depende da tensão de entrada aplicada (V in ) e dos resistores (R 1 e R 2 ) na série. Isso significa que a corrente que flui por R 1 também fluirá por R 2 sem ser dividida. Na equação acima, à medida que o valor de R 2 muda, o V out é dimensionado de acordo com a tensão de entrada, V in .

Normalmente, um potenciômetro é um divisor de potencial, que pode dimensionar a tensão de saída do circuito com base no valor do resistor variável, que é dimensionado usando o botão giratório. Ele tem três pinos: GND, Sinal e + 5V, conforme mostrado no diagrama abaixo -

Resultado

Ao alterar a posição NOP do potenciômetro, o servo motor mudará seu ângulo.