Powered By Blogger
Mostrando postagens com marcador Display. Mostrar todas as postagens
Mostrando postagens com marcador Display. 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!

sábado, 24 de março de 2012

Arduino, Termômetro

Arduino by my Self
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);



Olá! a todos,

Neste post veremos como usar um Thermistor como componente de sensoreamento da temperatura ambiente.  E como usar o Arduino para adquirir as informações e visualizar isto em um display LCD 16 x 2.
Ajuste necessário: um termômetro digital para saber a temperatura do ambiente e assim ajustar o Arduino Termômetro.

O HARDWARE:
Para esta experiência necessitaremos de:
1 x Arduino UNO ou Duemilanove
1 x Bread Board
1 x LCD 16x2 I2C
1 x Thermistor de 10KO
1 x Potenciômetro de 50KO
Fios e Cabos


O CIRCUITO:

Ligar os pinos do LCD da seguinte forma:
GND ao negativo da alimentação
VCC ao positivo da Alimentação
SDA ligar ao pino analógico 4 do Arduino
SCL ligar ao pino analógico 5 do Arduino

O Thermistor deve ser ligado da seguinte maneira:
Um terminal do Thermistor deve ser conectado diretamente ao VCC, o outro terminal deve ser ligado ao pino 2 de um potenciômetro.
O pino central do potenciômetro deve ser ligado ao pino 1 dele mesmo, e o pino 1 deve ser conectado ao GND.
Na junção, entre o terminal do Thermistor e o pino 2 do potenciômetro, deve ser ligado o pino analógico 0 do Arduino.


                                  _                                ________
                                   \                              c|               |
VCC |---------------/\/\/\/\-------------2-/\/\/\/\-1-----+-------|GND
                                       \                           Potenciômetro
                                      Thermistor


Qual é a necessidade do potenciômetro?
O Thermistor é de 10 KO à temperatura ambiente de 25 Graus Celcius. Isso significa que se estivermos a 25 Graus Celsius, sua resistência terá exatamente 10KO e se colocarmos uma outra resistência fixa de 10KO como divisor de tensão, teremos metade do valor de VCC, ou seja 2,5V no pino analógico 0 do Arduino. Assim fica fácil parametrizar que quando tivermos 2,5V no pino analógico 0 , termos 25 Graus Celcius.
Como geralmente nosso ambiente não estará a 25 Graus Celcius, necessitamos do potenciômetro para saber qual resistência devemos colocar como divisor de tensão, e assim fazer um ajuste fino.
De posse de um termômetro digital (quanto mais preciso melhor), podemos fazer o ajuste;

Nota: se girarmos totalmente o POT em direção ao negativo o circuito nunca mostrará nenhuma temperatura.  Se quiser pode ser colocado um resistor de 5KO em série com o POT e assim ter um valor fixo e ajustar o valor somente dentro de uma faixa.

Existem dispositivos semicondutores que podem ser usados para medir a temperatura ambiente com maior precisão que um Thermistor, por exemplo o LM35,  ou o LM335, mas isto será tema de um outro post.

Vejamos o circuito feito em fritzing:

Arduino Termômetro - Esquema

O SOFTWARE:
Abaixo o software completo e comentado.
Visite para maiores informações; http://arduino.cc/playground/ComponentLib/Thermistor2


/*
  Este exemplo é um código de domínio público.
*/


#include <Wire.h> // inclui a biblioteca Wire


 #include <LiquidCrystal_I2C.h> // inclui a biblioteca do LCD

 // initialize the library with the numbers of the interface pins
 LiquidCrystal_I2C lcd(0x27, 16, 2); // inicalização do LCD com o endereço de 
                                     // pinos utilizados no Arduino
                                     
 //Código extraído de ...http://www.arduino.cc/playground/ComponentLib/Thermistor2

 #include <math.h> // inclui a biblioteca math

 double Thermister(int RawADC) { 
                                 // pega os dados lido do Thermistor quando chamada a função
                                 // e armazena em RawADC, este é um valor relacionado a
                                 // queda de tensão
 double Temp; // variável usada no cálculo
 Temp = log(((10240000/RawADC) - 10000));
                                         // relaciona o valor de queda de tensão lido com resistência
                                         // 10000 é o valor da resistência do Thermistor
                                         // se for necessário usar um Thermistor diferente
                                         // ajustar o valor corretamente

 // formula para dar a temperatura em Kelvin
 Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp)); 
 Temp = Temp - 273.15;            // converte de Kelvin para Celcius

 return Temp; // retorna o valor da temperatura calculada
 }

 void setup() {
   // configura o LCD
   lcd.init();                           // inicializa o lcd 
   lcd.backlight();                  // com luz de fundo
   Serial.begin(9600);           // inicializa a comunicação serial
   // imprime mensagens no LCD
  
 }

 void loop() {
   
   lcd.clear();                                      // limpa o LCD
   lcd.setCursor(0,0);                         // posiciona o cursor na coluna 0 x linha 0
   lcd.print("Temp. Ambiente: ");         // texto para colocar significado ao que for apresentado
   lcd.setCursor(0,1);                        // posiciona o cursor na coluna 0 x linha 1
   lcd.print(int(Thermister(analogRead(0))));  // imprime o valor lido do thermistor correspondente
                                                                    // à temperatura
   lcd.print(" Graus C");                    // imprime a unidade medida
   delay(1000);                                // pausa até executar uma nova leitura e visualização
 }
 // Fim da Compilação



O VÍDEO:

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

Nesta experiência não teremos vídeo, pois ela é bem simples e está bem documentada.

Segue fotos do projeto.

Visão Geral
Temperatura no Display
Thermistor em azul
Pinagem


Até o próximo post, Bons experimentos!