Powered By Blogger
Mostrando postagens com marcador Chassis Robot. Mostrar todas as postagens
Mostrando postagens com marcador Chassis Robot. Mostrar todas as postagens

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!

domingo, 16 de dezembro de 2012

PINGBot - Robot Explorador







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);



PINGBot - O Robot Explorador


PINGBot é o Robot Explorador que usa um sensor ultra-sônico para poder desviar de objetos presentes em seu caminho.

Como já vimos em um post anterior, o sensor ultra-sônico emite pulsos na frequência de 40KHz (imperceptível ao ouvido humano e de animais), esses pulsos ao baterem em um objeto, são refletidos e retornam ao sensor, depois de um determinado tempo; sabendo o tempo total de ida e volta dos pulsos e a velocidade do som no meio (ar), fica fácil calcular a distancia percorrida pelos pulsos e assim determinar a distância do objeto em relação ao sensor.
Veja o post sobre sensor PING para maiores detalhes.

No nosso segundo projeto Robótico, o usaremos o mesmo chassis do BUGBot, agora com uma PONTE-H dual com um chip L298H para controlar 2 motores DC (controle de direção e velocidade), o que dará maior agilidade ao nosso protótipo.

O funcionamento básico é o seguinte:

Ao inicializar o sistema o chassi do robot, será mantido parado e o sensor calculará a distancia FRONTAL, DIREITA e ESQUERDA; ele fará uma comparação destas distância e assim poderá decidir qual é o melhor caminho a seguir (o maior caminho sempre será a melhor opção !).
Depois disto, ele iniciará a exploração, até o momento em que irá encontrar um objeto interferindo em seu progresso (ele deverá aproximar-se no máximo até uma distância limite, em centímetros, do objeto), quando ele deverá: parar, e analisar novamente as distâncias: FRONTAL, DIREITA e ESQUERDA; para assim poder novamente decidir qual é o melhor caminho a seguir - voltando novamente ao ciclo de operação.


Falando em termos de lógica de programação, temos:

incluir as bibliotecas;
inicializar as variáveis e constantes;
definir e inicializar os pinos;
inicializar comunicação serial;
"INÍCIO"
chamar rotina de parada dos motores;
posicionar servo a 90 graus;
fazer leitura de distância e armazenar (FRONTAL);
posicionar servo a 0 graus;
fazer leitura de distância e armazenar (ESQUERDA);
posicionar servo a 180 graus;
fazer leitura de distância e armazenar (DIREITA);
comparação(1): FRONTAL maior que ESQUERDA?;
sim:- comparação(2): FRONTAL maior que DIREITA?;
sim:- chamar rotina para seguir em frente;
não:- chamar rotina para girar a direita;
não:- (comparação(1) menor que:- chamar função para girar a esquerda;
caso nenhuma condição for possível (todas as distâncias exatamente iguais:- andar para frente por um tempo e parar, e assim começar novamente o ciclo.
andar até detectar distância menor que 20 centímetros;
loop para a posição "INÍCIO";

rotina para seguir em frente:
colocar nível alto no pino 2 e nível baixo no pino 1 de ambos os motores (definida rotação para frente;
habilitar o "enable" de ambos os motores com um valor PWM para controle da velocidade;
temporizar a ação;

Rotina para girar à direita:
colocar nível alto no pino 2 e nível baixo no pino 1 do motor esquerdo, definindo rotação para frente;

colocar nível baixo no pino 2 e nível alto no pino 1 do motor direito, definindo rotação para traz;
habilitar o "enable" de ambos os motores com um valor PWM para controle da velocidade;
temporizar a ação;

Rotina para girar à esquerda:
colocar nível baixo no pino 2 e nível alto no pino 1 do motor esquerdo, definindo rotação para traz;

colocar nível alto no pino 2 e nível baixo no pino 1 do motor direito, definindo rotação para frente;
habilitar o "enable" de ambos os motores com um valor PWM para controle da velocidade;
temporizar a ação;

Rotina para parada dos motores:
desabilitar o "enable" de ambos os motores com um valor baixo;
colocar valor baixo em ambos os pinos 1 e 2 dos motores;




Notar que:
os motores devem ser ligados de forma que quando acionado (valor alto) o pino 2  de cada motor (mantido o pino 1 em nível baixo) o mesmo tenha a rotação no sentido correto para levar o robot para frente.


Vejamos um fluxograma para realizar estas funções (somente exemplo):















Isso nos dá uma ideia de como efetuar a programação do Arduino e o que ele deve executar.

Nota:
Utilizando o mesmo hardware, uma segunda versão com um código mais simples e enxuto, foi criada.  Onde o funcionamento é o seguinte:
Inicialmente o robot anda para frente até encontrar um obstáculo a uma distância menor do que a distância limite; 
Então ele analisa a distância à direita - se a distância à direita for maior que a distância limite - ele opta por girar à direita e seguir em frente; 
Se a distância à direita for, também, menor que a distância limite - então ele analisa a distância à esquerda - se a distância à esquerda for maior do que a distância limite - ele opta por girar à direita e seguir em frente; 
Caso nenhuma das distâncias, tanto direita ou esquerda for satisfatória - então ele dá um gira à 180 graus e segue em frente.
Iniciando novamente o ciclo.

Na seção Software e Programação, você encontra as duas versões para download.


Hardware & Material:

Nesta seção vamos verificar as necessidades em termos de material necessário e hardware utilizado.

Usar o chassis construído para o BUGBot - Robot seguidor de Luz. Veja o post para maiores detalhes de construção.

Lista de material:
1 x Arduino UNO, MEGA, Duemilanove, Duecemila ou Teensy 2.0++
1 x Sensor ultra-sônico HC-SR04
1 x PONTE-H dual
1 x Servo Motor HXT900 9g/1,8Kg
1 x Kit Tamiya Box Gear com dois motores DC 3-6V
Pack de baterias para alimentar o Arduino e os Motores (9V)
Chassis para montagem
Fios e cabos para as conexões.


Sensor Ultra-Sônico HC-SR04:
HC-SR04, pinos VCC,Trig, Echo e GND
Ponte-H Dupla:




Detalhe da PONTE-H, outros modelos podem ser usados
Cada um com seus detalhes de interconexão

Layout & Esquemas:

Circuito do PINGBot;
Verificar as pinagens utilizadas no programa (algumas modificações foram feitas).




A alimentação do Arduino, pode ser utilizada a partir da pont-H.
Aconselho uma alimentação independente, com GNDs comuns entre elas. (devido a corrente elevada puxada pelos motores)

Muito cuidado com as ligações para não inverter alimentações... o dano pode ser irreversível.



Correspondência; pinos Arduino x Elementos Externos:

***Use esta correlação dos pinos e a versão 9 do código,
Modificações foram feitas com relação ao diagrama***


Arduino -> Elemento Externo


0  ->  N/A
1  ->  N/A

2  ->  N/A
3  ->  sensor PING pino echo
4  ->  sensor PING pino Trigger
5  ->  PONTE-H pino in1
6  ->  PONTE-H pino in2
7  ->  N/A
8  ->  N/A
9  ->  servo motor
10 -> PONTE-H pino in3
11 -> PONTE-H pino in4
12 -> buzzer
13 -> N/A 

Novo código pode ser obtido no github:

https://github.com/Arduinobymyself/PINGBot.git


"Tive muitos problemas com ruído no sistema sensor de distância, o qual foi resolvido adicionando capacitores de 100nF entre os pinos dos motores DC e suas carcaças (além do capacitor que normalmente é adicionado entre seus pinos).

O ruído interferia na leitura feita pelo sensor PING; de modo que o robot seguia em frente e parava, sem ter um objeto efetivamente ao alcance estipulado."

Abaixo o esquema que resolveu o problema:





Fotos reais do projeto na fase de execução:

Lembrar que o chassis utilizado foi o chassis do BUGBot, veja o post relacionado a ele para maiores detalhes de construção.


fixação do servo motor

Ponte H fixada e motores conectados

Sensor PING + anteparo + haste fixação do servo

Anteparo em acrílico

Sensor PING fixado ao servo motor

Servo motor fixado com fita dupla-face (experimento)

Arduino com ProtoShield e ligações

Servo motor fixado com cola quente - melhor opção (experimento)

Fixação ideal do servo, seria com parafusos


Detalhe do servo e sensor

Detalhe da ponte-H

detalhe do protoshield
 Numa primeira instancia, coloquei um buzzer para sinalizar movimentação... depois acabei tirando.
Mas a função ainda está no programa e é só implementar.

Retirado o buzzer, adicionado uma chave liga-desliga (alimentação da ponte-H)

Detalhe da bateria de alimentação da ponte-H

Detalhe da bateria de alimentação do Arduino

Vista Geral por cima

Vista Geral por cima

Vista Geral de frente
Detalhe dos capacitores adicionados para a solução de ruído

O problema de compartimento para baterias, também foi solucionado, utilizando duas peças plásticas (usadas em marcenaria e fabricação de móveis).
As peças foram colocadas em cima da roda 360 graus, aproveitando os parafusos de fixação da mesma.
Assim foi resolvido o problema e ainda deu mais estabilidade ao chassis.

As duas peças  usadas para fixar as baterias do motor e do Arduino
 Notar que a bateria do motor é do tipo recarregável... isso ajuda a economizar e dá maior potência ao carro.


Baterias acopladas

Visão superior

Software e Programação:

Várias versões foram feitas na fase de testes iniciais.
Foi feito programa para testes dos motores, duas versões para debug do software, até chagar a versão final V.5.
E mais as versões V.6 e V.7 para usar com servos de rotação contínua "servos hakeados", que pretendo montar em um outro chassis (redondo).

Os ajustes deram bastante trabalho, foram mais de 30h trabalhando no projeto. Acredito que para cada chassis e para cada tipo de motor utilizado, seja necessário uma demanda de tempo para debug e ajustes.

Obtenha o código e as bibliotecas do projeto no GitHub abaixo:
https://github.com/Arduinobymyself/PINGBot.git


Parâmetros de velocidade devem ser muito bem ajustados para compensar as diferenças dos motores (sabendo que não existem dois iguais e levando em conta os parâmetros do Gear-Box). 





Vídeos & Testes:

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

Assintam diretamente no YouTube, ou no screencast pelos links abaixo (para uma melhor qualidade).

Vídeo 1 (versão 4 do PINGBot):
screencast: http://www.screencast.com/t/C6KN0SNhO69p
youtube: http://youtu.be/h5sZfQm27yI



Vídeo 2 (versão 4 do PINGBot):
screencast: http://www.screencast.com/t/lMa4ZLQIAJj
youtube: http://www.youtube.com/watch?v=T-sAsfuGtDs       



Vídeo 3 (versão 5 do PINGBot):
screencast: http://www.screencast.com/t/7pmwaWJhu4dy
youtube: http://youtu.be/b4cjVJgoDPc


Vídeo 4 
Funcionamento geral do Robot em ação - saindo de uma situação de bloqueio.

screencast: http://www.screencast.com/t/9Uow4fyDy
youtube: http://www.youtube.com/watch?v=KMZmRc_-FhQ





Obrigado a todos!
Divulguem o blog arduinobymyself.blogspot.com.br, para que assim possamos divulgar conhecimento!
Hardware e Software livre para todos.


Este foi o último post do ano de 2012.

Boas festas, feliz natal e próspero Ano Novo

Em 2013, novos projetos virão...