Como utilizar o Servo Motor SG90 com Arduino?
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
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:
- Peso: 9 g
- Dimensão: 22,2 x 11,8 x 31 mm aprox.
- Torque de parada: 1,8 kgf · cm
- Velocidade de operação: 0,1 s / 60 graus
- Tensão de operação: 4,8 V (~ 5V)
- Largura da banda morta: 10 µs
- Faixa de temperatura: 0 ºC – 55 ºC
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:
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:
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:
Fonte: AutoCore Robótica
- Alimentação positiva (vermelho) – 5V;
- Terra (Preto ou Marrom) – GND;
- (Amarelo, Laranja ou Branco) – Eles são ligados a um pino digital de entrada e saída;
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:
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!
Usando esse código adaptado para 2 motores SG90 , obviamente em portas digitais separadas e variaveis diferentes, os motores ficam malucos.
Se comento o “attach” de 1 deles, funciona.
O que pode ser?
Olá Aurelio tudo bem?
Perdão a demora, mas vamos lá!
Você criou dois objetos servos e fez um attach para cada um?
Ex:
Servo1.attach(9)
Servo4.attach(7)
Outra questão é de colocar esses servos nos “pinos especiais” do Arduino como os pinos: 5,6,9,10,11
Se ainda persistir o erro, mande o código para eu poder lhe ajudar melhor!
Abraços!