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

Continue navegando


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ção continua 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.