Governo do Estado de Pernambuco Secretaria de Educação Secretaria Executiva de Educação Profissional Escola Técnica Estadual Professor Agamemnon Magalhães ETEPAM Servo Motores Jener Toscano Lins e Silva
O que é um servo motor? Servomotor é uma máquina, mecânica ou eletromecânica, que apresenta movimento proporcional a um comando, em vez de girar ou se mover livremente sem um controle mais efetivo de posição como a maioria dos motores. Servomotores são dispositivos de malha fechada, ou seja: recebem um sinal de controle; verificam a posição atual; atuam no sistema indo para a posição desejada (Wikipedia). Microcontroladores - Prof. Jener Toscano 2
Parte interna do Servo Motor Internamente ele possui um motor dc, um potenciômetro, um circuito de controle e geralmente um conjunto de engrenagens acopladas ao motor para aumentar a força e ao mesmo tempo diminuir a rotação. Microcontroladores - Prof. Jener Toscano 3
Funcionamento do comando de posicionamento O comando funciona através de pulsos temporizados. A posição vai depender de quanto tempo o pulso fica em nível lógico 1 (geralmente 5v nos servos de modelismo) e quanto tempo fica em nível lógico 0 (geralmente 0v nos servos de modelismo). Por padrão temos de enviar para o servo um pulso a cada 20ms (ciclo). Microcontroladores - Prof. Jener Toscano 4
Produção dos pulsos Podemos usar microcontroladores ou temporizadores como por exemplo o LM555. Na IDE do Arduino temos dois exemplos já prontos que utilizam a biblioteca <Servo.h>. Que são o (File>Examples>Servo> Knob) que comanda um servo através da leitura de um potenciômetro na porta analógica e o outro (File>Examples>Servo> Sweep) que fica fazendo o servo ir de 0 a 180 graus e depois voltar para 0 repetidamente. As pinagens mais comuns são: Microcontroladores - Prof. Jener Toscano 5
Fluxograma Controle do servo motor 10 a 170 graus Microcontroladores - Prof. Jener Toscano 6
Controlando um servo motor /* Este exemplo usa a função servopulse para mover o servo de 10 até 170 e depois retorna */ int servopin = 3; //servo conectado ao pino digital 3 int myangle; //armazena o ângulo atual do servo int pulsewidth; //variável utilizada pela função servopulse void setup() pinmode(servopin, OUTPUT); //configura pino 3 como saída void servopulse(int servopin, int myangle) //função criada para gerar o pulso pulsewidth = (myangle * 10) + 600; digitalwrite(servopin, HIGH); delaymicroseconds(pulsewidth); digitalwrite(servopin, LOW); void loop() for(myangle = 10; myangle <= 170; myangle++ ) //servo inicia em 10 graus e vai rotacionando ate 170 graus servopulse(servopin, myangle); //chama função servopulse para gerar novo pulso delay(20); //aguarda 20ms para um novo ciclo for(myangle = 170; myangle >= 10; myangle - -) //agora servo inicia em 170 e rotaciona para 10 graus servopulse(servopin, myangle); //chama a função para gerar o novo pulso delay(20); //aguarda 20ms para um novo ciclo Microcontroladores - Prof. Jener Toscano 7
Controle de um servo motor com um potenciômetro Microcontroladores - Prof. Jener Toscano 8
Fluxograma Microcontroladores - Prof. Jener Toscano 9
Servo motor Controlando através da <Servo.h> /* Controlando a posição de um servo através de um potenciômetro */ #include <Servo.h> Servo myservo; int potpin = 0; int val; // inclui a biblioteca para controle do servo motor // cria um objeto servo com nome myservo // pino analógico que conecta com o potenciômetro // variável para armazenar o valor lido do analógico (potenciômetro) void setup() myservo.attach(3); // conecta o objeto servo myservo ao pino digital 3 void loop() val = analogread(potpin); // lê o valor analógico do potenciômetro (valor entre 0 e 1023) val = map(val, 0, 1023, 0, 179); // muda a escala de 0-1023 para 0-179 myservo.write(val); //define o valor/posição do servo motor delay(15); //espera 15ms Microcontroladores - Prof. Jener Toscano 10
Visite o site: http://omecatronico.com.br Microcontroladores - Prof. Jener Toscano 11