Buscar

15ª Experiência - Servo 1 - Controlando 1 Servo motor

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Servomecanismos 
 
Neste capítulo, iniciaremos nossa análise dos servomotores ou servomecanismos. Um servo e um 
motor com um sistema de feedback, que auxilia no controle da posição do motor. Servos 
tipicamente giram 180 graus, ainda que você também possa adquirir servos de rotação continua, 
ou até mesmo modificar um servo padrão para obter esse efeito. Caso você já tenha tido um 
aviãozinho de controle remoto, já se deparou com servos; eles são utilizados para controlar as 
superfícies de voo. Carros de controle remoto utilizam servos no mecanismo de direção, e barcos 
de controle remoto, para controlar o leme. Da mesma forma, eles são muitas vezes utilizados 
como as juntas moveis dos braços de pequenos robôs, e para controlar movimentos em 
animatronics. 
 
Talvez até o final deste capitulo você se inspire em colocar alguns servos dentro de um ursinho 
de pelúcia ou outro brinquedo, dando-lhe movimento. As figuras 9.1 e9.2 mostram algumas outras 
formas pelas quais podemos utilizar servos. 
 
Figura 9.1 – Servo sendo utilizado para controlar um medidor (imagem por Tod E. Kurt). 
 
Gracas a biblioteca Servo.h, que acompanha o IDE do Arduino, e muito facil controlarservos. Os 
tres projetos deste capitulo sao bem simples e pequenos, quando comparadosa alguns dos outros 
projetos do livro, mas, ainda assim, sao muito eficientes. Vamos 
iniciar com um programa muito simples para controlar um servo, depois passaremospara dois 
servos, e terminaremos com dois servos controlados por um joystick. 
 
 
Figura 9.2 – Tres servos controlando a cabeca e os olhos de um robo (imagem por Tod E. Kurt). 
Projeto – Controle de um servo 
 
Neste projeto bem simples, voce controlara um unico servo utilizando um potenciometro. 
 
Componentes necessários 
 
Sera necessario que voce adquira um servo RC padrao; qualquer servo de tamanho 
pequeno ou medio sera suficiente. Servos maiores nao sao recomendados, pois exigem 
suas proprias fontes de alimentacao, uma vez que consomem muita corrente. Voce 
tambem necessitara de um potenciometro; praticamente qualquer potenciometro 
rotativo sera suficiente. Utilizei um de 4,7 kΩ para teste. Alem disso, talvez voce queira 
conectar seu Arduino a uma fonte de alimentacao externa. 
 
Servo RC Padrão 
 
 
Potenciômetro rotativo 
 
Conectando os componentes 
O circuito para o projeto 25 e muito simples. Faça as conexões como mostra a figura 9.3. 
 
 
Figura 9.3 – Circuito para o Projeto 25 – Controle de um servo 
 
O servo tem três fios saindo dele. Um sera vermelho e ira para os +5 V. Outro, preto ou marrom, 
ira para o terra. O terceiro, branco, amarelo ou laranja, sera conectado ao pino digital 5. 
 
O potenciômetro rotativo tem seus pinos externos conectados ao +5 V e ao terra, e o pino do meio, 
ao pino analógico 0. 
Assim que estiver satisfeito com a forma como tudo foi conectado, digite o código a seguir. 
 
Digite o código 
Agora, para ver um dos programas mais curtos do livro, consulte a listagem 9.1. 
Listagem 9.1 – Código para o projeto 25 
// Projeto 25 
#include <Servo.h> 
Servo servo1; // Cria um objeto servo 
void setup() { 
servo1.attach(5); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico) 
} 
void loop() { 
int angle = analogRead(0); // Lê o valor do potenciômetro 
angle=map(angle, 0, 1023, 0, 180); // Mapeia os valores de 0 a 180 graus 
servo1.write(angle); // Escreve o ângulo para o servo 
delay(15); // Espera de 15ms, para permitir que o servo atinja a posição 
} 
Projeto 25 – Controle de um servo – Análise do código 
 
Primeiramente, incluímos a biblioteca Servo.h: 
#include <Servo.h> 
Depois, um objeto Servo, servo1, e declarado: 
Servo servo1; // Cria um objeto servo 
No loop de inicialização, você anexa o servo que acabou de criar ao pino 5: 
servo1.attach(5); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico) 
O comando attach anexa um objeto servo, criado via programação, a um pino designado. O 
comando attach pode receber um unico parametro, como no caso presente, ou tres parametros. Se 
tres parametros forem utilizados, o primeiro sera o pino, o segundo sera o angulo minimo (0 grau), 
medido em largura de pulso, em microssegundos (544, por padrao), e o terceiro parametro sera o 
angulo de grau maximo (180 graus), medido em largura de pulso, tambem em microssegundos 
(2400, por padrao). Isso sera explicado na analise do hardware. Para a maioria dos projetos, voce 
pode simplesmente definir o pino, e ignorar o segundo e o terceiro parametros opcionais. 
 
Voce pode conectar ate 12 servos a um Arduino Duemilanove (ou equivalente), e ate 48 no 
Arduino Mega — o que e perfeito para aplicacoes de controle robotico. 
 
Note que o uso dessa biblioteca desabilita a funcao analogWrite() (PWM) nos pinos 9 e 0. No Mega, 
voce pode ter ate 12 motores sem interferir com as funcoes PWM. O uso de 12 a 23 motores 
desabilitara a funcionalidade PWM nos pinos 11 e 12. 
 
No loop principal, lemos o valor analogico do potenciometro conectado ao pino analogico 0: 
 
int angle = analogRead(0); // Lê o valor do potenciômetro 
 
Depois, esse valor e mapeado de modo que o intervalo, agora, esteja entre 0 e 180, o que 
correspondera ao angulo de grau do braco do servo: 
 
angle=map(angle, 0, 1023, 0, 180); // Mapeia os valores de 0 a 180 graus 
 
Entao, voce pega o objeto servo e envia a ele o angulo apropriado, em graus: 
 
servo1.write(angle); // Escreve o ângulo para o servo 
 
Por fim, uma espera de 15ms e programada, para dar tempo ao servo, ate que alcance a posicao 
desejada: 
 
delay(15); // Espera de 15ms, para permitir que o servo atinja a posição 
 
Voce tambem pode utilizar o comando detach() para desanexar o servo de um pino, 
o que desabilitara o servo, permitindo que o pino seja utilizado para algo diferente. 
 
Da mesma forma, você também pode usar o comando read() para ler o angulo atual do servo (ou 
seja, o ultimo valor passado ao comando write()). 
 
Voce pode ler mais sobre a biblioteca Servo no site do Arduino, em http://arduino.cc/ 
en/Reference/Servo. 
 
Projeto 25 – Controle de um servo – Análise do hardware 
 
Um servo e uma pequena caixa, contendo um motor elétrico CC, um conjunto de engrenagens 
entre o motor e um eixo de saída, um mecanismo sensor de posição, e um circuito de controle. O 
mecanismo sensor de posição transmite a posição do servo para o circuito de controle, que utiliza 
o motor para ajustar o braço do servo na posição que ele deve ocupar. 
 
Servos podem ser encontrados em muitos tamanhos, e em velocidades e precisões diferentes. 
Alguns podem ser muito caros. Quanto mais poderoso ou preciso for seu servo, maior será o 
preço. Servos são mais comumente utilizados em aviões, carros e barcos de controle remoto. 
 
A posição de um servo e controlada fornecendo um conjunto de pulsos a ele. Estamos falando 
novamente de PWM, conceito com o qual você já trabalhou. A largura dos pulsos e medida em 
milissegundos. A taxa na qual os pulsos são enviados não e particularmente importante; e a 
largura do pulso que importa para o circuito de controle. Pulsos tipicos tem entre 40 Hz e 50 Hz. 
 
Em um servo padrão, a posição central e atingida fornecendo pulsos em intervalos de 1,5 
milissegundo; a posição de -45 graus com pulsos de 0,6 milissegundo e a posição de +45 graus 
com pulsos de 2,4 milissegundos. Você terá de ler o datasheet de seu servo para descobrir as 
larguras de pulso necessárias para os diferentes ângulos. Entretanto, neste projeto voce esta 
utilizando a biblioteca Servo.h, por isso não há com o que se preocupar: a própria biblioteca fornece 
o sinal PWM necessário para o servo. Sempre que você enviar um valor de angulo diferente para 
o objeto servo, o código na biblioteca cuidara de enviar o sinal PWM correto. 
 
Alguns servos fornecem rotação continua. Alternativamente, você também pode modificar um 
servo padrão, com uma certa facilidade, para obter rotação continua. 
 
Um servo de rotaçãocontinua e controlado da mesma forma, fornecendo um ângulo entre 0 e 180 
graus. Todavia, um valor de 0 fornecera rotação na velocidade máxima em uma direção, um valor 
de 90 será estacionário e um valor de 180 fornecera rotação na velocidade máxima, na direção 
oposta. Valores entre esses farão com que o servo rotacione em uma direção ou outra, a 
velocidades diferentes. Servos de rotação continua são ótimos para construção de pequenos 
robôs (Figura 9.4). Eles podem ser conectados a rodas, para fornecer controle preciso de 
velocidade e direção sobre cada uma delas. 
 
 
Figura 9.4 – Modificação de servo para obter rotação continua (imagem por Adam Grieg). 
 
Há outro tipo de servo, o atuador linear, que rotaciona um eixo até uma posição 
desejada, permitindo que você empurre ou puxe itens conectados a extremidade do 
eixo. Eles são muito utilizados no programa de TV “Mythbusters” (“Os Cacadores de 
Mitos”) pelo especialista em robotica da equipe do programa, Grant Imahara.

Outros materiais