Controlando Servo Motores com Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Servo Motors são capazes de um controle muito preciso sobre o movimento direcional do eixo do seu motor. Ele permite que você defina ângulos de rotação exatos para controlar os dispositivos programando em código, um joystick ou pressionando um botão ou um potenciômetro. Servomotores estão disponíveis em várias configurações. Para esta discussão e projeto, usaremos um que alterna entre 0 0 e 180 graus.

Anúncio PCBWay

Um dos primeiros usos dos servomotores foi controlar aviões RC e dirigir carros com controle remoto. Hoje, você pode encontrá-los em vários dispositivos, como robôs, controles industriais e dispositivos Arduino.

Neste tutorial, descreveremos como Servo Motors função, seus requisitos de energia, como definir as posições, parâmetros de tempo e como eles são usados ​​para controlar um dispositivo junto com um Arduino UNO. Também criaremos dois programas de amostra para controlar um servo motor. O primeiro O exemplo permitirá que você controle a direção e a posição exata de um servo motor usando dois botões de pressão. o segundo um cobrirá o uso de um potenciômetro controlar a posição do servo motor.

Tudo bem, vamos começar!

Como funcionam os servomotores

UMA servo motor controla a rotação de um motor DC que foi engrenado para reduzir a velocidade e aumentar o torque. O circuito necessário é incorporado ao servo para controlar o ângulo exato de rotação, para poder controlar sua rotação um grau de cada vez. O controle é obtido pela largura de um pulso elétrico enviado ao servo pelo controlador. Para o projeto de amostra, usaremos um Arduino UNO e uma biblioteca específica que cria as funções necessárias para controlar o servo motor.

Além disso, dependendo do servo usado, considere usar uma fonte de alimentação CC separada para proteger o Arduino.

Controlando Servo Motores com Arduino 33

O servo motor espera um pulso a cada 20 ms. O servo determina a quantidade de rotação, dependendo da largura dos pulsos fornecidos pelo Arduino. Para a maioria dos servomotores, um 1ms pulse resulta em um zero rotação de graus, um 1,5 ms pulse resulta em um 90 graus rotação e uma 2ms pulse resulta em uma completa 180 graus rotação, como mostrado acima.

Leia Também  The future of dentistry is functional. Here's why.

Os arduinos geralmente incluem uma biblioteca para simplificar o controle de um servo motor. A biblioteca está incluída no Arduino IDE e carrega o Biblioteca Servo.h é a primeira coisa inserida no programa.

Controlando Servo Motores com Arduino 35

Configurando o Servo Motor

Agora, vamos ver como controlar o servo motor. Mas primeiro, tenha seus componentes prontos e conecte-os de acordo com o diagrama acima.

  • Micro servo SG90
  • potenciômetro
  • resistores
  • capacitores
  • fonte de energia

Programando o Arduino

Abra o Arduino IDE e conecte-se ao UNO e use o seguinte código:

Controlando Servo Motores com Arduino 37
#include 
Servo servo1;
int servoPin = 9;
void setup(){
servo1.attach(servoPin);
}
void loop(){
servo1.write(0);
delay(1000);
servo1.write(90);
delay(1000);
servo1.write(180);
delay(1000);
}

Salvar e fazer upload o programa compilado no seu Arduino. O servo motor deve inicializar em zero graus, faça uma pausa por um segundo e depois vá para 90 graus, faça uma pausa por um segundo e depois vá para 180 graus, faça uma pausa por um segundo e comece novamente.

A primeira linha de código carrega o biblioteca isso facilita o controle do servo. Na próxima linha, você está criando um objeto na biblioteca para referenciar o servo motor específico em todo o código. Vários servos podem ser controlados; portanto, neste exemplo, usaremos servo1 para designar nosso servo. O pino usado para conectar o servo, serverPin, é usado no attach() função, servo1.attach(servoPin);.

Para mover os servos para qualquer direção, use o write() função, servo1.write(angle); . O ângulo deve estar em graus (0-180). O ângulo altera a largura do pulso enviado ao servo motor, que determina a quantidade de rotação.

Usando o servo.writeMicroseconds() Função

O comando servo.write(angle) funciona para a maioria dos servomotores, 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 um ponto intermediário. Usando o comando servo.write(angle) permite um máximo de 180 etapas. No entanto, existe um comando que permite até 1000 passos-servo.writeMicroseconds(). Para a maioria dos aplicativos, o mais simples servo.write(angle) vai funcionar muito bem. Mas se você quiser um controle mais preciso, poderá usar servo.writeMicroseconds().

No código anterior, altere o comando de servo1.write() para servo1.writeMicroseconds(). Altere os valores angulares de (0,90.180) graus a (1000,1500,2000) microssegundos. Carregue e execute o programa usando a mesma configuração de hardware. Para um servo motor capaz de um intervalo de até 180, os valores serão 1000 microssegundos = 0 graus, 1500 microssegundos = 90 graus e 2000 microssegundos = 180 graus.

#include 
Servo servo1;
int servoPin = 9;
void setup(){
servo1.attach(servoPin);
}
void loop(){
servo1.writeMicroseconds(1000);
delay(1000);
servo1.writeMicroseconds(1500);
delay(1000);
servo1.writeMicroseconds(2000);
delay(1000);
}

Dependendo do servo motor que você estiver usando, você poderá notar uma diferença. Curiosamente na minha configuração, enquanto monitorava os pulsos em um osciloscópio, notei que ao usar servo1.write(0);, a largura do pulso era de apenas 700 microssegundos, não 1000, que é a maneira como a função deve funcionar quando definida em zero graus. Mas ao usar servo1.writeMicroseconds(1000); a saída foi exatamente 1000 microssegundos.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Controlando um servo motor com interruptores de botão

Controlando Servo Motores com Arduino 39
Controlando Servo Motores com Arduino 41

Construa seu circuito como mostrado no diagrama acima e faça o upload do código mostrado abaixo.

#include
int pos = 90;
int pin4 = 4;
int pin3 = 3;
int LedHi = 5;
int LedLow = 6;
Servo servo1;
void setup() {
  pinMode(LedHi, OUTPUT);
  pinMode(LedLow, OUTPUT);
  pinMode(pin4, INPUT);
  pinMode(pin3, INPUT);
  Serial.begin(9600);
  servo1.attach(9);
}
void loop() {
  while (digitalRead(pin3) == HIGH && pos < 180) {
    digitalWrite(LedLow, LOW);
    pos++;
    servo1.write(pos);
    Serial.print("Degrees rotation= ");
    Serial.println(pos);
    if (pos == 180) {
      Serial.print("Reached top end ");
      digitalWrite(LedHi, HIGH);
    }
    delay(10);
  }

  while (digitalRead(pin4) == HIGH && pos > 0) {
    digitalWrite(LedHi, LOW);
    pos--;
    servo1.write(pos);
    Serial.print("Degrees rotation= ");
    Serial.println(pos);
    if (pos == 0) {
      Serial.print("Reached low end ");
      digitalWrite(LedLow, HIGH);
    }
    delay(10);
  }
}

Após fazer o upload do código compilado, abra o Monitor Serial no seu Arduino. Ao pressionar qualquer botão, o servo deve aumentar ou diminuir conforme mostrado no monitor serial. Inicialmente, o código definirá o servo em 90 graus. Use o botão conectado ao pino 3 para aumentar o ângulo. Quando você atinge 180 graus, a alta final da rotação, o led conectado a pino 5 irá ligar. Quando você atinge o limite inferior do intervalo, que é 0 graus, o led conectado a pino 6 irá ligar.

Para determinar o resultado do pressionamento do botão, um enquanto A instrução verifica o botão e o ângulo do eixo. while (digitalRead(pin3) == HIGH && pos < 180) determina que o botão foi pressionado (ALTO) e o ângulo é menor que 180; portanto, o programa adiciona um grau e faz um loop. O segundo botão while (digitalRead(pin4) == HIGH && pos > 0) determina que o botão foi pressionado (ALTO) e o ângulo é maior que 0. Isso faz com que o ângulo diminua em um e faça um loop. o LedHi e LedLow nível de leds são controlados por um E se declaração que verifica o ângulo para ver se é 0 ou 180. Os leds são desativados assim que o ângulo muda em cada um dos dois enquanto afirmações.

Controlando um Servo Motor um Potenciômetro

Controlando Servo Motores com Arduino 43
Controlando Servo Motores com Arduino 45

Construa o circuito como mostrado no diagrama usando um Potenciômetro de 10K para controlar o servo motor. Faça o upload do código abaixo.

#include 
int LowLed = 5;
int HiLed = 6;
Servo servo1;  
int pot = A0; 
int val;   

void setup() {
  servo1.attach(9);  
  pinMode(LowLed, OUTPUT);
  pinMode(HiLed, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  val = analogRead(pot);            
  val = map(val, 0, 1023, 0, 180);     
  servo1.write(val);                  
  Serial.println(val);
  if (val == 0)
    digitalWrite(LowLed, HIGH);
  if (val == 180)
    digitalWrite(HiLed, HIGH);
  if (val > 0)
    digitalWrite(LowLed, LOW);
  if (val < 180)
    digitalWrite(HiLed, LOW);
  delay(10);
}

Após o upload do código, abra o Serial Monitor no seu Arduino. Conforme você ajusta o potenciômetro, a rotação do servo muda de acordo. Quando você alcança o nível mais baixo No limite da faixa, o Led baixo acenderá e, quando você atingir o limite superior, o Led alto acenderá.

O código é direto. A primeira linha de código no Loop() A função deve ser:

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

A Leitura Analógica recebe a tensão do potenciômetro como sinal analógico. Ele aceita os valores de toda a gama de entradas aceitas em um Arduino (0-5V). Ele captura como um número inteiro no intervalo de (0-1023). Por exemplo, um DC valor de 0V seria capturado como o número inteiro 0; um valor de gama completa de 5V seria capturado como o número inteiro 1023e metade da faixa de entrada de 2.5V seria capturado como o número 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 da faixa de 0,1023, com 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 aplica-o ao servo. O servo recebe um pulso de servo1.write(val); e a largura do pulso é determinada pelo valor de val. O servo usa a largura desse pulso para determinar sua rotação.

Controlando Servo Motores com Arduino 37
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br