Arne
Basic 2k - Experiência 8 - Controle de Servos
A
proposta Nesta oitava experiência
demonstrarei como utilizar Arne Basic 2k no controle de servos. E como
já é de
costume, primeiro acho interessante
mostrar um pouco da teoria para
em seguida apresentar a parte prática. A teoria Os servos são dispositivos muito empregados no fascinante mundo da robótica educacional. O fato é que, de todos os elementos capazes de converter energia elétrica em "movimento" mecânico, o servo é o que permite uma maior gama de aplicações. Podemos emprega-los na construção de braços mecânicos, usa-los como simples caixas de redução para locomoção de pequenos robôs, tratamento e controle de alavancas, entre outras. Na figura abaixo você pode ver a estrutura de um servo básico. Ele é constituído de um motor, um dispositivo de realimentação e um sensor de posição (geralmente um potenciômetro). É o dispositivo de realimentação que permite que a “alavanca” seja colocada na posição desejada, de acordo com a "resposta" do sensor de posição. Assim um servo permite transformar sinais elétricos em movimentos proporcionais. Isso porque existe uma “proporcionalidade” entre os sinais que são levados ao servo e a posição da alavanca.
De acordo com a largura do pulso (sinal) recebido, o servo irá posicionar sua “alavanca”. Estes pulsos têm largura pré-determinada que variam de 1x10-3 segundos a 2x10-3 segundos, aproximadamente, com espaçamentos de 20x10-3 segundos, dependendo do fabricante. Sendo assim, podemos posicionar sua alavanca simplesmente variando a largura do pulso (sinal) a ser enviado.
Nota:
É importante conhecer o servo a ser
empregado em um
determinado projeto para o seu sucesso e uma consulta ao fabricante
poderá ajudar neste sentido. Muitos projetos podem
simplesmente não funcionar adequadamente pela simples troca de
um servo, previamente indicado.
Na figura abaixo você tem o
esquema
elétrico proposto para esta experiência. Como você mesmo pode ver,
trata-se também de um
circuito extremamente
simples. Eu recomendo a montagem do mesmo em uma matriz de
contatos, afinal você está apenas "testando" um circuito. A
chave S1 faz o servo de rotação girar em sentido horário e avança
alguns graus o servo de posição também no sentido horário. Já a chave
S2 faz a mesma coisa em ambos os servos, portém no sentido
anti-horário..
Para esta experiência foi usado um LED em PB2, que piscará a uma
freqüência de aproximadamente 20Hz. Para
operar os servos foi utilizado uma função interna do BASCOM, que
permite configurar até 14 servos e controlá-los de forma independente.
Esta função utiliza o timer0 e neste caso, ao usar a função SERVO o usuário do Arne Basic não poderá utilizar o timer0. Você
pode ver o código fonte logo abaixo. Este programa é
mais um
excelente exemplo da estrutura da Linguagem de programação BASIC
utilizada pelo compilador BASCOM-AVR. Ele mostra o recurso do compilador para o controle de servos. Vamos em frente com nossas experiências!!! Como diria o sr. Miagui - "Daniel San!!! Vamos para Japão! A hora da verdade continua!" ehehehehe Código:'******************************************************************************* '* Programa TESTE_SERVO_ARNEBASIC2K.BAS '* Desenvolvido por Márcio José Soares '* para do Arne Basic 2k '* '* Obs.: Este programa foi desenvolvido para testar o uso de servos '* com o Arne Basic 2k. Veja o circuito em www.arnerobotics.com.br '* '* Servo 1 - servo de rotação '* Servo 2 - servo de posição '* '* S1 gira horário servo de rotação e incrementa posição do servo de posição '* S2 gira anti-horário servo de rotação e decrementa posição do servo de posição '* '******************************************************************************* '******************************************************************************* 'Configs necessários ao microcontrolador $crystal = 10000000 $regfile = "attiny2313.dat" Config Portb = &B11111111 'todo portB é saída Config Portd = &B11101010 'todo portD é saída, exceto PD0, PD2 e PD4 '******************************************************************************* 'Configura servos Config Servos = 2 , Servo1 = PortD.6 , Servo2 = PORTD.5 , Reload = 10 '******************************************************************************** 'Variáveis globais dim myPOS as byte '******************************************************************************* 'Liga pinos de I/O's a "nomes" mais fáceis ao entendimento humano ;-) S1 Alias Pind.2 'pino de entrada para chave 1 S2 Alias Pind.4 'pino de entrada para chave 2 LED Alias PORTB.2 'LED '******************************************************************************* 'Declaração das subrotinas Declare Sub Check_tec() '******************************************************************************* 'Habilita int para usar servo Enable Interrupts '******************************************************************************* 'Início do programa Servo(1) = 100 'inicia girando horário Servo(2) = 150 'posição central myPOS = 150 Waitms 500 'aguarda 0,5 segundo '******************************************************************************* 'Laço principal... faz eternamente Do call Check_tec() 'verifica teclas toggle LED Loop '******************************************************************************* 'Subrotina para verificar se alguma tecla foi pressionada Sub Check_tec() waitms 50 'debounce para chaves if S1 = 0 then 'S1 pressionada? Servo(1) = 100 'valor para giro horário if myPOS < 250 then 'ainda dentro do limite? myPOS = myPOS + 5 'incrementa posição Servo(2) = myPOS 'assume posição end if end if if S2 = 0 then 'S2 pressionada Servo(1) = 50 'valor para giro anti-horário if myPOS > 100 then 'ainda dentro do limite? myPOS = myPOS - 5 'incrementa posição Servo(2) = myPOS 'assume posição end if end if End sub End 'fim do program |
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |