Como utilizar o Servo Motor SG90 com Arduino?

Servo-Motor-SG90
Font Size

Olá, tudo bem? Hoje aprenderemos a utilizar o nosso Arduino para poder conhecer um dispositivo muito utilizado no ramo da robótica para realizar movimentos com uma angulação de giro muito preciso. Estou falando dos servos motores, um modelo especial de motor no qual conseguimos fazer com que ele se movimente X graus para esquerda ou para a direita.

Quer saber como ele faz isso? Então me acompanhe e venha descobrir como realmente funciona um servo motor. Vamos nessa?

Veja também – Como Utilizar Processing com Arduino: Parte 3

Conhecendo o Servo Motor SG90

Servo Motor SG90

Fonte: AutoCore Robótica

O servo motor que vamos utilizar no projeto de hoje será o servo motor SG90, um dos modelos de servos motores mais utilizados em projetos de robótica e mecatrônica. Isso em virtude da sua utilização ser bem simples e o seu custo benefício ser um dos menores do mercado. Então aproveite e já passa em nossa Loja AutoCore Robótica e garanta já o seu, combinado?

Especificações:

Documentação

Tudo bem, mas por quê utilizar um servo motor no lugar de um motor DC?

Boa pergunta! Contudo mais uma vez a resposta é bem simples, tudo DEPENDE. Depende do seu projeto com motores, o que você quer que o seu motor em questão faça.

Bom vamos lá, um servo motor vai lhe permitir o controle preciso do ângulo de giro, além do controle da velocidade e da sua aceleração, ou seja, se você quer um motor que gire X graus para qualquer lado, utilize um servo.

Agora se o seu projeto precise de um motor que apenas gire infinitamente para qualquer um dos lados, utilize um motor DC.

Funcionamento do Servo Motor SG90

Então vamos agora entender todo o funcionamento do servo motor, um dos pontos muito importantes que devemos dominar é o de buscar entender como ele consegue realizar o giro “perfeito”. Tal giro “perfeito” só é possível graças a um conceito muito importante quando falamos de motores, é o tal do PWM.

Entretanto, aqui iremos abordar apenas o conceito de Duty Cycle, uma consequência da ação do PWM. Não sabe o que ele é? Venha descobrir isso agora!

Observe esta imagem abaixo:

Gráfico de tempo para girar o servo motor

Fonte: AutoCore Robótica

Agora repare na primeira linha, onde o ângulo de 0° está associado a 1ms no positivo, ou seja, teve um pulso elétrico que durou 1ms. Depois quando ele está à 90° é porque ele teve um pulso de 1.5ms. Por fim, quando ele chega aos 180°, isso significa que ele sofreu um pulso elétrico de 2ms.

Mas onde está o duty cycle ai?

Para começar, o duty cycle que vamos estudar é definido como o tempo que o sinal elétrico fica no positivo, porém é mais chique falar porcentagem, dessa forma:

Duty cycle é a porcentagem do tempo que o pulso (ou onda) esteve no positivo.

Agora fazendo uma associação, observe que 1ms é o 0° do servo e que 2ms é o 100% ou seja são os 180° do servo, então quanto tempo do pulso será 90°? A metade correto? Por isso tem 1.5ms, bacana não?

Agora para entender o conceito de duty cycle, observe a imagem abaixo:

                      Diagrama de tempo

Fonte: Vida Silício

Perceba então que o duty cycle, de uma forma mais detalhada, é a razão entre o tempo em que o sinal permanece na tensão máxima (5V) e o tempo total de oscilação.

Tranquilo? Muita teoria não? Então vamos agora para a prática e encerrar o nosso estudo de hoje com chave de ouro!

Hardware do Servo Motor

Agora vamos conhecer o hardware dos servos motores que são bem tranquilos, observe que eles geralmente possuem 3 pinos como podemos ver na imagem abaixo:

Servo Motor SG90

Fonte: AutoCore Robótica

Manipulando um Servomotor com Arduino

Basicamente, o nosso projeto de hoje vai se basear em girar o potenciômetro e o nosso servo irá seguir o mesmo movimento do potenciômetro. Então bora separar os materiais de hoje!

Componentes necessários

Montagem do Circuito com o Servo Motor SG90

Vamos agora realizar a montagem do nosso circuito. Para isso, basta conectar os componentes do projeto de acordo com a imagem abaixo:

              Ligação do circuito no Arduino

Fonte: Arduino e Cia

O micro servo tem três fios saindo dele como já falado. Um deles é vermelho e irá para os +5V. Outro, preto ou marrom, irá para o GND. O terceiro, branco, amarelo ou laranja, será conectado ao pino digital 8.

Monte o potenciômetro com os seus pinos externos conectados um no +5V e o outro no GND e o pino do meio ao pino analógico A0.

Pinos conectados? Tudo de acordo? Então vamos ao código!

Código do projeto comentado

/*
      ------------ AUTOCORE ROBÓTICA -------------      
      Projeto: Controlando Servo Motor com potenciômetro
      Autor: Danilo Nogueira
      Data: 13/08/2018
*/

#include <Servo.h>
// Criando um objeto (servo) com nome servoAutocore
Servo servoAutocore;
 
// Esta função "setup" roda apenas uma vez quando a placa e ligada ou resetada ok?
void setup() {
  
  // Aqui estou associando o servomotor (físico)
  // que está pino conectado ao pino 5, ao objeto servoAutocore (lógico)
servoAutocore.attach(8);
}
 
void loop() {
 int angulo = analogRead(0);              // Lê o valor do potenciômetro
 angulo = map(angulo, 0, 1023, 0, 180);   // Mudança de Escala (intervalo)

 servoAutocore.write(angulo);     // Escreve o ângulo para o servomotor
 delay(20);                       // Espera de 20ms, Suficiente para que o servomotor atinja a posição
}

Vamos entender a fundo 

Biblioteca Servo.h

Então vamos agora analisar mais a fundo nosso código. Observe que temos um comando novo em nosso código, a biblioteca Servo.h. Baixe ela agora clicando neste link esta biblioteca pois ela é muito importante sabia?  Isso porque ela implementa as funcionalidades de um servomotor tornando sua utilização MUITO MAIS simples.

Declarando um servo motor

Dicas dadas, agora bora aprender a declarar um servo. Assim, ao utilizar essa biblioteca trataremos cada servomotor como um objeto, dessa forma precisamos declará-lo no início do código.

Servo servoAutocore; // Cria um objeto com nome servoAutocore (pode colocar qualquer nome)

Depois de declarado, sempre que quisermos mexer em alguma função desse servo, devemos usar o nome da função precedida do nome do servo e um ponto.

servoAutocore.exemplo(); // chama função exemplo() para o objeto servoAutocore

Declarando uma porta de controle do servo motor

Você poderá declarar quantos servos for usar, levando em conta a limitação física de sua placa Arduino como já falei nas dicas lá em cima e além disso, cada servo pode ter qualquer nome, mas é aconselhável que se use nomes intuitivos para facilitar o entendimento do código maravilha?

Declaramos os servos? É preciso agora definir em que porta está conectado o fio de controle de cada servo, para isso usamos a função attach(pino).

servoAutocore.attach(5); // associa o servomotor (físico), conectado no pino 5, ao objeto servoAutocore (lógico)que foi criado

Você já declarou? Definiu o seu pino? Agora é hora de mandar girar!

Controlando a Posição do servo motor

Para poder realizar o seu controle de giro, utilizamos a função write(angulo) a qual define em um servomotor padrão o ângulo em graus na qual ele deve se posicionar.

servoAutocore.write(angulo); //angulo: posição em graus para servos comuns

Conclusão

Eai? Deu tudo certo? Não? Então não deixe de mandar mensagem .

Dicas? Dúvidas? Idéias de post? Críticas? Só comentar abaixo ok?

Forte abraço!

Posts relacionados

Controle Remoto de Ventilador com Arduino

por autocore
5 anos ago

Módulo Relé

por autocore
9 anos ago

Conhecendo Mais a Fundo Sobre RGB

por Danilo Nogueira
3 anos ago