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

Acessando a Raspberry Pi remotamente: SSH e VNC

por Artur Rodrigues
4 anos ago

Entenda a Principal Diferença entre Arduino e ESP32

por Danilo Nogueira
4 anos ago

Aprendendo a utilizar o sensor de som com Arduino

por autocore
8 anos ago
Sair da versão mobile