Powered By Blogger
Mostrando postagens com marcador sensor de reflectância. Mostrar todas as postagens
Mostrando postagens com marcador sensor de reflectância. Mostrar todas as postagens

domingo, 17 de março de 2013

LINUSBot - Line Follower Robot - Controle PID






LINUSBot - Controle PID


Este é um complemento do primeiro posto do LINUSBot.

Agora o controle dos movimentos do seguidor de linha é com PID; controle Proporcional, Integral, Derivativo. Isso torna os movimentos durantes as curvas muito mais suave e durante as retas, ele pode desenvolver maior velocidade, chegando à velocidade máxima.
O controle PID proporciona ao Robot uma "aprendizagem", fazendo com que o robot possa desenvolver melhor nas curvas e retas do circuito.

Agora vamos a uma breve introdução e resumo sobre o controle PID.
Basicamente, este tipo de controlador efetua as seguintes ações:


Sistema PID básico


1 - Controle Proporcional:
Multiplica o "erro" corrente por uma constante Kp.
O "erro", é a diferença entre a saída real e a saída desejada e é realimentado no sistema, ou seja: 
A saída real é subtraída da saída desejada (set point), assim, é calculado o erro.  Esse erro é inserido no controlador PID como entrada, e o controlador PID (calculando os termos P I D), comanda o sistema para tentar eliminar esse erro.
Garantindo assim o ganho necessário para chegar próximo do sinal de saída desejado o mais rápido possível e com a melhor estabilidade do sistema.

2 - Controle Integral:
O termo Integral, multiplica o erro corrente e sua duração por uma constante Ki, fazendo uma somátorio de toda essa informação.
O termo Integral quando somado ao termo Proporcional; acelera o processo de chegar ao estado estacionário do seu sistema, além de proporcionar um sinal mais próximo da saída desejada. Em outras palavras, ele também elimina (ou pelo menos tenta eliminar) a parcela residual de erro e chega mais rápido ao resultado desejado.


3 - Controle Derivativo:
O termo Derivativo, faz com que a razão de mudança do sinal de erro seja multiplicada por uma constante Kd. A intensão é predizer o erro e assim diminuir a taxa com que os erros produzem mudanças no sistema.



Podemos usar os 3 termos juntos para formar um controlador PID, ou suas variaçãoes, tais como:


Controlador P (algumas vezes utilizado):
Neste caso o uso de pequenos vlores da constante Kp é a melhor maneira de conseguir chegar ao valor desejado, mas o seu controle será lento (ele demora pra chegar ao valor desejado).  Se você aumentar o valor de Kp, sobre-impulsos podem ocorrer e o seu sistema ficará estável.



Controlador PI (mais usado):

Ele remove a parcela residual de erro no caso estacionário (melhorando a resposta a transientes), mas neste caso você poderá ter sobre-impulso e também inversão de estado, ocorrendo oscilação do sistema e causando instabilidade, podendo o sistema ser sobre-amortecido,  ou sub-amortecido, ou oscilatório.
Este tipo de controle deixa o sistema mais lento. Usando valores maiores de Ki, é possível deixar o sistema mais rápido, porem aumenta o sobre-impulso diminuíndo a margem de estabilidade do seu sistema.


Controlador PD (raramente utilizado):
Usado para diminuir a magnetude do sobre-impulso dos sistemas que usam Controlador Integral e melhorar a estabilidade do sistema. Porém o controle Derivativo, amplifica a magnetude de ruído do termo de erro do sistema e pode deixar o processo instável. O controlador PD diminui o tempo para chegar ao valor desejado, consideravelmente.... para isso o ganho derivativo Kd deve ser alto. Isso diminui o tempo de controle, porém aumenta a largura de banda do sistema, deixando o sistema susceptível a ruídos.


Controlador PID (algumas vezes utilizado):
Usando PID (combinação de PI+PD), removemos a razão de erro do sistema e diminuímos  o tempo da resposta com uma resposta transistória razoável (sem oscilações ou instabilidades).


Este estudo pode ser encontrado no link: http://www.youtube.com/watch?v=wbmEUi2p-nA




Esta é  o modo básico de implementação de um PID via software:


previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start


Veja Mais em: http://en.wikipedia.org/wiki/PID_controller

No projeto do LINUSBot, foi usado os seguintes parãmetros:
Kp = 1/20 
Ki  = 1/10000
Kd = 3/2

O código completo pode ser baixado do link:



http://www.4shared.com/file/iPVAVCwy/LINUSBot_9_3pi_modelo_PID.html


Obtenha todos os arquivos necessários no GitHub:
https://github.com/Arduinobymyself/LINUSBot.git


Veja o vídeo do LINUSBot em ação e confira os resultados.

http://www.youtube.com/watch?v=FKq6WeBBH14




Dúvidas e sugestões para: arduinobymyself@gmail.com





domingo, 27 de janeiro de 2013

LINUSBot - Robot Seguidor de linhas





Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);


LINUSBot - Line Follower - Seguidor de Linhas


O funcionamento deste Robot é bastante simples.

Sensores Infra-vermelho colocados à frente do chassis (neste projeto usaremos o um chassi apropriado do tipo redondo) irão monitorar quando o nosso Robot está sobre uma linha negra ou quando está sobre um fundo  branco.
No caso de o Robot estar sobre a linha negra, ele irá sempre à frente; e no caso de sair da linha e cair em uma área branca, ele irá determinar se deverá corrigir para a esquerda ou para a direita, e assim manter-se sobre a linha negra.

Como sensores será usado o array de sensores infra-vermelho Pololu (também chamado de sensor de reflectância) QTRx8RC, constituído de 8 sensores (serão usados somente 5) QRE1113GR.
Essse array, tem uma saída digital e pode ser facilmente utilizado (usando a biblioteca apropriada da Pololu) para determinar a posição da linha em relação aos sensores.





Este array de sensores pode ser quebrado para formar um conjunto com 6 sensores e outro com 2 sensores.
Para mais informações sobre o array de sensores infra-vermelho, visite:

http://www.pololu.com/catalog/product/961

Neste primeiro projeto, usaremos um controle rudmentar para o nosso robot, ou seja nos preocuparemos em manter o robot seguindo a linha apenas...
Para isto criaremos uma pista de teste para o robot rodar, e poderemos observar que os movimentos do robot serão um tanto quanto "robóticos", ou seja: não muito suaves, porém bruscos.


Pista:
Montada conforme diagrama abaixo em um fundo branco e linha preta.

Curvas de 6".








HARDWARE E COMPONENTES:

Material necessário:
1 X Arduino UNO, MEGA, Duemilanove ou Teensy 2.0++
1 x prototype shield (opcional)(altamente recomendável)
1 x PONTE-H dupla
2 x Gear Box com relação 30:1 de transmissão e motor DC associado
2 x Rodas Polulu ou equivalente
2 x Baterias 9V 400 mA/h
2 x clip de bateria 9V
1 x Ball caster (terceira roda)
fios e cabos para as conexões
parafusos, porcas, arruelas, espaçadores para a montagem
2 x peças de acrílico para o corte do chassis
ferramentas em geral



Projeto, esquema, construção - detalhes:


Corte Circular

Recorte das Rodas

Parte Inferior

Parte Superior





Vamos às pinagens:

1 - motores ligados aos pinos de saída da Ponte-H;
2 - bateria de 9V ligado ao VCC (+) e GND (-) da Ponte-H;
3 - pinos in1, in2, in3 e in4 da Ponte-H ligado ao arduino nos pinos: 10, 11, 5 e 6 respectivamente;
4 - pinos 1, 2, 3, 4 e 5 do sensor QTR, ligar aos pinos A0, A1, A2, A3 e A4 (observar que o sensor 1 deve ser o mais à esquerda);
5- LCD ligar como no diagrama: pinos R/W - 13, Enable - 12, dados - 9, 8, 7 e 4 (depende do tipo do seu display);
6 - Botão ligado ao pino 2 do Arduino;
7 - Buzzer ligado ao pino 3 do Arduino;
8 - Sensor de bateria ligado ao pino A5
consiste de dois resistores 10K/5K ligados ao GND/VCC e no centro ligado ao arduino. Como abaixo

|GND|---/\/\/\/------/\/\/\/-----|VCC|
            10K     |    5K
                      |


Esquema geral de conexões



Chassis:

O chassi foi criado especificamente para este projeto do robot Seguidor de linhas "LINUSBot"

Abaixo está o projeto completo do chassi, com dimensões e as vistas de cortes.

Também as fotos reais das fases de montagem.

A disposição dos módulos no chassis pode ser de acordo com o seu próprio design, porém devem ser respeitados alguns critérios, tal como: o peso dos componentes deverm ser apoiados na parte traseira e nunca na frente do chassis.... etc...

Primeiro protótipo:
Feito em madeirite fino de 3 mm.  Funcionou muito bem, poderia ser um projeto final.

Vejamos algumas fotos:


2 partes circulares de madeirite cortadas


Corte nas laterias para acomodação das rodas
Detalhe de fixação dos motores/rodas (parte de baixo), sensores e ball caster (taxinha)

Detalhe de fixação do array Pololu

Detalhe de fixação dos motores (parte de  cima)

Fixação dos espaçadores das camadas inferior e superior

Disposição inicial dos módulos na parte superior

Parte inferior


Parte superior, disposição de espaçadores dos módulos

Modulos fixados


Parte superior cabeada, segundo o diagrama esquemático

Pronto para o primeiro teste

Testado e aprovado, faltando alguns ajustes no software

Detalhe dos sensores cabeados; um grupo de 6 sensores e um grupo de 3 alimentação e controle dos LEDs infra

Detalhe da parte superior

Detalhe da parte inferior e sensores

Detalhe das baterias e ball caster (ainda a taxinha)

Uma grande solução para o Ball casters, é usar um roll-on de um batton de brilho.  Isso a Pololu cobra 2$, e você pode adquirir por R$1,00

Este é o original Pololu.
http://www.pololu.com/catalog/product/174

Ficou excelente esta solução... Recomendo!



Ball caster feito de Batton tipo Roll-on

Detalhe do caster-ball, um pingo de cola tudo e resolvido.

Rodas:
Pololu $7
http://www.pololu.com/catalog/product/1088




Diâmetro - 32 x 7 mm

Uma solução usada, foi comprar uma moto de plastico cuja roda é aproximadamente o mesmo diâmetro, e revestila com uma fita isolante de pressão plástica. R$5,00.
Vejam nas fotos que ficou muito boa a solução.



Motores:
SolarBotics Pololu $20 cada
http://www.pololu.com/catalog/product/641

Se você puder gastar, Recomendo!
Estes motores e gearbox são excelentes, pequenos, baixo cosumo, grande torque, relação 30:1, etc...

Solução encontrada R$30,00 kit com dois
motor, roda off-road, gearbox 30:1
http://seriallink.com.br/loja/product_info.php?cPath=55&products_id=188&language=pt&osCsid=o5b62h3u44ohs0bkh9v57r9up0



Bem eficaz!
A adaptação das rodas utilizadas, ficou perfeitamente ajustada.



Segundo protótipo:

Feito em acrílico.


Corte das duas placas de acrílico no formato circular



Recorte para as rodas

Posicionamento do sensor
 Notar que o sensor do meio, deve ficar alinhado ao centro da placa


Detalhe da ranhura para os pinos do sensor

Furação e inserção do sensor na ranhura

Fixação com parafusos

Posicionamento dos módulos


Detalhe de pinagem dos sesnores



Pista de teste


Detalhe de pinagem do LCD




Após o primeiro teste, bem sucedido de primeira




SOFTWARE E PROGRAMAÇÃO:

No link abaixo você encontra a versão completa e explicada do software utilizado.

http://www.4shared.com/file/8yKb70LD/LINUSBot_9_3pi_modelo.html

Obtenha todos os arquivos necessários no GitHub:
https://github.com/Arduinobymyself/LINUSBot.git

O projeto foi desenvolvido, nos moldes do Robot 3pi da Pololu.

Nove versões foram desenvolvidas com vários tipos de sensores LDRs, Infra-vermelho TCRT5000, TIL32/TIL78 e o array QTR-8RC da pololu.

Para este primeiro protótipo, o desempenho foi muito bom.

Vejam o vídeo para confirmação.







VÍDEOS E TESTES:

Dúvidas e sugestões para: arduinobymyself@gmail.com

Primeiro Protótipo:
screencast: http://www.screencast.com/t/mVXhRPWH
youtube: http://www.youtube.com/watch?v=YEzRKP34UGs&feature=youtu.be


Segundo protótipo:

screencast: http://www.screencast.com/t/6LN3XlDg3cJ
youtube: http://youtu.be/Z046AKObE34









Aguarde o próximo post, onde veremos um controle mais preciso do LINUSBot, utilizando controle PID (Proporcional Integral Derivativo).


E o próximo projeto de um Maze Solver (LINUSBot resolvendo labirintos...)

Até lá......... vai ser Show!