Como controlar os servomotores com o Arduino

um dos primeiros usos dos servomotores foi controlar os mecanismos de direção de aviões RC, carros e barcos. Hoje, você pode encontrá-los em robôs, equipamentos industriais e muitos projetos Arduino diferentes.

Servo motors are capable of precise control of the rotation of a motor shaft. Eles permitem que você defina um ângulo exato de rotação com código, ou com entradas como joysticks, botões de pressão, ou potenciômetros.,

neste tutorial, vamos dar uma olhada em como os motores servo funcionam e como usar um Arduino para controlá-los. Nós também vamos olhar para dois programas de exemplo que você pode executar no Arduino. O primeiro programa irá mostrar-lhe como controlar a direção e posição de um servo usando dois botões de pressão. O segundo programa lhe mostrará como usar um potenciômetro para controlar a posição do servo.muito bem, vamos começar!

BONUS: fiz um guia de início rápido para este tutorial que pode transferir e voltar para mais tarde se não puder configurar isto agora., Ele cobre todos os passos, diagramas e código que você precisa para começar.

How Servo Motors Work

Servos are DC motors that have been given down to reduce the speed and increase the torque of the motor. Eles também construíram circuitos que controlam o ângulo de rotação de um grau de cada vez, e mantêm essa posição até que outra entrada seja recebida., Servos vai rodar um determinado número de graus dependendo da largura dos pulsos elétricos entregue pelo Arduino:

O servo espera um pulso a cada 20 ms. Para a maioria dos servos, um pulso de 1 ms resulta em um grau zero de rotação, um 1,5 ms impulso resulta em uma rotação de 90 graus, e a 2 ms impulso resulta em uma rotação de 180 graus.

ligando o motor Servo ao Arduino

Agora vamos ver como usar um Arduino para controlar um servo motor., Estes são os componentes que você precisa para configurar o exemplo projetos discutidos abaixo:

  • o Arduino Uno
  • SG90 Micro Servo
  • Potenciômetro de 10K
  • Resistores
  • Capacitores
  • 4X Pilhas AA Titular
  • Táctil Botões

segundo o servo que você usa (os maiores principalmente), você deve usar outra fonte de alimentação DC para ligá-lo. Caso contrário, a corrente desenhada pelo servo pode danificar o seu Arduino.,

uma Vez que você tenha todos os componentes, conecte-os para o Arduino seguir este diagrama de fiação:

a Programação do Servo

Vamos usar o Arduino built-in Servo biblioteca para o programa de servo. Esta biblioteca está incluída com o Arduino IDE, por isso não há necessidade de instalá-lo.,

uma Vez que você conectou as peças de acordo com o diagrama acima, abra a IDE Arduino e envie este código para o conselho:

O servo motor deve se deslocar para 0 graus, pausa por um segundo, em seguida, mover para 90 graus, pausa por um segundo, em seguida, mover para 180 graus, pausa para um segundo, e então começar de novo.

na primeira linha incluímos a Biblioteca Servo com #include <Servo.h>., Na linha seguinte, criamos um objeto chamado servo1 para referenciar o motor servo específico em todo o código. Na linha seguinte, declaramos uma variável pin chamada serverPin e a definimos igual a Arduino pin 9.

na secção de configuração, inicializamos o servo com a função attach(). The attach() function takes one parameter – the pin that the servo is connected to. Então temos servo1.attach(servoPin).,

para mover o servo, use a função write() com o ângulo de rotação como argumento. O ângulo é em graus, de 0 graus a 180 graus. O ângulo muda a largura do pulso enviado para o servo motor, que então determina a quantidade de rotação. Estamos chamando a função através do objeto servo1, então usamos servo1.write(angle), com 0 graus, 90 graus e 180 graus.

a função writemicrosegundos ()

a função write() funcionará para a maioria dos servos, mas não para todos., Alguns servomotores têm um alcance de 180 graus, alguns têm um alcance de 90 graus, e alguns têm qualquer lugar no meio. Usando a função write() apenas permite um máximo de 180 passos. No entanto, há uma função que permite até 1000 passos, chamado writeMicroseconds(). Se quiser um controlo mais preciso do seu servo, poderá querer usar a função writeMicroseconds() em vez dewrite().,

O esboço a seguir demonstra como usar o writeMicroseconds() função:

neste esboço, substituímos a cada write() função com um writeMicroseconds() função. Mudar os valores angulares de (0, 90, 180) graus para (1000, 1500, 2000) microssegundos. Envie e execute o programa usando a mesma configuração de hardware. Para um motor servo capaz de um alcance até 180, os valores serão de 1000 microssegundos = 0 graus, 1500 microssegundos = 90 graus, e 2000 microssegundos = 180 graus.,

dependendo do motor servo que você está usando, você pode notar uma diferença. Curiosamente, no meu setup, enquanto o monitoramento de pulsos em um osciloscópio, notei que, ao usar servo1.write(0);, a largura de pulso foi de apenas cerca de 700 microssegundos, não 1000, que é a forma como a função deve trabalhar quando definido em zero graus. Mas ao usar servo1.writeMicroseconds(1000); a saída foi exatamente 1000 microssegundos.,

Controle de um Servo, Com os Botões

Construir o circuito, como mostrado no diagrama acima, em seguida, carregar o código mostrado abaixo.

Depois de carregar o código compilado, abra o Monitor Serial no seu Arduino. À medida que carrega em ambos os botões, o servo deve aumentar ou diminuir, como mostrado no monitor de série. Inicialmente, o código irá definir o servo em 90 graus. Use o botão conectado ao pin 3 para aumentar o ângulo., Quando você chegar a 180 graus, a extremidade alta da rotação, O LED conectado ao pin 5 vai ligar. Quando você chegar à extremidade baixa do intervalo que é 0 graus, O LED conectado ao pin 6 vai ligar.

para determinar o resultado do empurrão do botão, uma instrução while verifica o botão e o ângulo da haste. while (digitalRead(pin3) == HIGH && pos < 180) determina que o botão foi pressionado (alto) e o ângulo é inferior a 180, então o programa adiciona um grau e loops. O segundo botão while (digitalRead(pin4) == HIGH && pos > 0) determina que o botão foi pressionado (alto) e o ângulo é maior que 0., Isto faz com que o ângulo diminua em um e loops sobre. O nível LedHi e LedLow para LEDs são controlados por uma declaração if que verifica o ângulo para ver se é 0 ou 180. Os LEDs são desligados assim que o ângulo muda em cada um dos dois enquanto declarações.

Controle de um Servo Com um Potenciômetro

Construir o circuito, como mostrado no diagrama usando um potenciômetro de 10K para controlar o servo motor. Em seguida, envie o código abaixo.,depois de carregar o código, abra o monitor serial no seu Arduino. À medida que você ajustar o potenciômetro, a rotação do servo Vai Mudar de acordo. Quando você chegar ao limite inferior do intervalo, o LED baixo vai ligar, e à medida que você chegar ao limite superior, O LED elevado vai ligar.

o código é simples. A primeira linha de código loop() função deve ser:

val = analogRead(pot); val = map(val, 0, 1023, 0, 180); servo1.write(val); 

analogRead() demora na tensão do potenciômetro como um sinal analógico., Ele aceita os valores da gama completa de entrada Aceita em um Arduino (0-5V). Ele captura-o como um inteiro na faixa de (0-1023). Assim, por exemplo, um valor de CC de 0V seria capturado como o inteiro 0; um valor de intervalo completo de 5V seria capturado como o inteiro 1023, e metade do intervalo de entrada de 2.5 V seria capturado como o inteiro 512, metade de 1023.

A próxima linha de código val = map(val, 0, 1023, 0, 180); mapeia o valor de val dentro do intervalo de 0, 1023, para um valor de 0, 180.,

A próxima linha de código servo1.write(val); é o write() comando que leva o número inteiro armazenado em val como argumento e o aplica para o servo. O servo recebe um pulso do servo1.write(val); e a largura do pulso é determinada pelo valor de val. O servo usa a largura deste pulso para determinar sua rotação.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *