LusoRobótica - Robótica em Português

Robótica => Projectos de robótica => Projectos Concluídos => Tópico iniciado por: preytender em 15 de Julho de 2010, 07:46

Título: Beta - Plataforma de Teste
Enviado por: preytender em 15 de Julho de 2010, 07:46
Aqui esta o meu primeiro projecto concluido, decidi dar-lhe o nome de "Beta".
A ideia era construir uma plataforma onde fosse possivel testar varios tipos de componentes e executar diferentes tarefas.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg24.imageshack.us%2Fimg24%2F5552%2Fbetavf.jpg&hash=011545ea9353073a13234d318525b8b32e1b36f2)
O robot deveria transportar uma breadboard de 830 pinos para poder testar varias ligações sem ter nada definitivo.
Para a construção do chassis decidi utilizar acrilico por ser forte, facil de cortar e agradavel para a vista. Os espaçadores foram feitos com um tubo de aluminio.

Aqui esta a comparação entre a ideia original desenhada no Google SketchUp e o resultado final.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg175.imageshack.us%2Fimg175%2F9827%2Fsketchup.jpg&hash=21198c01287597cadcc764e4b5f3362f22f9a4fe)
Lista de Componentes

......: Placa de Acrilico
......: Tubo de Aluminio (Separadores)
......: Porcas, Parafusos e Anilhas M2 e M3
......: 6 Pilhas Recarregaveis AA NiMH 1,2V 1700mAh
......: Suporte de Pilhas 6xAA
 
......: Arduino Duemilanove
......: Breadboard 830 Pinos
......: Resistencias, condensadores e fios para ligações.
 
......: Buzzer - (Emite um som sempre que um programa é iniciado ou parado.)
......: Push Button - (Iniciar/Parar a execução do programa seleccionado, pressionado longamente permite alterar de programa)
......: Led REG - (Identifica que programa se encontra seleccionado ou a correr. Cada programa tem uma cor diferente)
 
......: Ponte-H (SN754410)
......: Motores (Dual Gearbox From Tamiya)
......: Rodas (Tamiya 70096 Off-Road Tires)
......: Pololu Ball Caster
 
......: Sensor QTR-8RC
......: Sensor IR Sharp

Para um principiante que tem necessidade de comprar todos os componentes da lista, como foi o meu caso, estamos a falar de um custo aproximado de cerca de 100€.
Basta substituir alguns elementos e retirar alguns sensores que facilmente conseguimos valores bem mais baixos, foi uma opção e considero um investimento para futuras criações. 

Na breadboard podemos ver as ligações de muitos dos componentes utilizados.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg35.imageshack.us%2Fimg35%2F3985%2Fbreadboard.jpg&hash=85d1a8758e7a5fd6564f1bbef05c3b3b6c4dcec2)
Uma das caracteristicas importantes do Beta é que deve poder ser montado e desmontado facilmente por isso aqui está um video com todo o processo de montagem.
O video esta em HD por isso se não conseguirem ver os textos ou quiserem ver mais detalhes podem colocar em 720p e full screen.

BetaBot - Montagem (http://www.youtube.com/watch?v=4NSHgDql65w#)

A ideia é poder programar o Beta para fazer varias tarefas, para já é capaz de seguir linhas, evitar obstaculos e limpar uma arena (sumo).
Acho que dado o seu tamanho até as faz relativamente bem, espero terminar brevemente um video para mostrar e depois coloco aqui juntamente com todo o código fonte.

No video foram colocados agradecimentos ao forum da LR porque sem a vossa ajuda o Beta não tinha passado de um esboço do google.
Obrigado.

************************************************ Inserido em 27-03-2011 ************************************************



Algumas Actualizações Efectuadas
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg846.imageshack.us%2Fimg846%2F1983%2Fupdatesm.jpg&hash=1a8beaa98f661dd125325391b8ef6038f88badb5)

Caster Ball: Com o passar do tempo a Caster Ball começou a ganhar ferrugem e a criar muito atrito por isso foi substituida por uma versão bem mais barata encontrada no AKI

Contador Binario: Inicialmente a breadboard foi montada com um Led RGB, para cada opção do menu era associada uma cor. Este método torna-se complicado, principalmente quando existem várias opções no menu. A solução foi criar um contador binario substituindo o Led RGB por três Led’s normais, cada Led representa um bit permitindo contar até sete.


Montagem e Ligações da Breadboard
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg26.imageshack.us%2Fimg26%2F4843%2Fbreadboard2.jpg&hash=f1e27b18ccf4b98aa644c250092dfc08d1403b50)

Na breadboard estão montados os seguintes componentes: Um botao de menu, a ponte-h, tres leds para contador binario e um buzzer.
Para ver com mais detalhe as ligações estao disponiveis no link em baixo mais fotos da breadboard.
https://picasaweb.google.com/preytender/Beta?feat=directlink (https://picasaweb.google.com/preytender/Beta?feat=directlink)

1. Ligar Breadboard: Ligar 5v do arduino a barra vermelha da breadboard e GND do arduino a barra azul.

2. Botao de Menu: Ligar do I9 para Analog 5.

3. Buzzer: Ligar do I52 para Analog 0.

4. Contador Binario: Ligar G39 para Analog 2, Ligar G41 para Analog 3, Ligar G43 para Analog 4

5. Sensor Sharp: Fio vermelho do sensor para A33, fio preto do sensor para A34, fio amarelo do sensor para A35.  Ligar E35 para Analog 1

6. Sensor QTR: GND do sensor para barra azul da breadboard e Vcc para barra vermelha da breadboard.
Pino 1 Sensor ->  DIGITAL 1       Pino 2 Sensor ->  DIGITAL 2       Pino 3 Sensor ->  DIGITAL 3         Pino 4 Sensor ->  DIGITAL 4     
Pino 5 Sensor ->  DIGITAL 7       Pino 6 Sensor ->  DIGITAL 8       Pino 7 Sensor ->  DIGITAL 9         Pino 8 Sensor ->  DIGITAL 12

7. Ponte-H: Ligar A22 a Vin do Arduino
Motor Direito: Fios Motor Ligar a  F27 e F29 depois ligar G16 a DIGITAL 6 e G21 a DIGITAL 5
Motor Esquerdo: Fios Motor Ligar a  E27 e E29 depois ligar D16 a DIGITAL 11 e D21 a DIGITAL 10


Programação - Codigo anexado no final da mensagem

Organizei e comentei bastante o codigo de forma a mais tarde o poder reutilizar noutros projectos.
Foram criadas classes separadas para a gestao do buzzer, do contador binario e dos motores. 
No ficheiro principal existe a função de menu, que permite escolher que funcao executar, e uma função para cada uma das tarefas diferentes.

Neste momento a função seguelinhas está bastante boa e foi testada no circuito do estoril :) anexado em baixo.
A tarefa de evitar obstaculos ainda esta muito basica.

Apos fazer upload do codigo basta carregar no botao para iniciar o programa 1, durante a execução de um programa carregar continuamente ira fazer com que termine a execução, caso não esteja a correr nenhum programa carregar continuadamente no botao permite mudar de opção o contador binario indica que opção esta seleccionada.


Espero que a informação adicionada seja util e ajude a resolver algumas duvidas quanto as ligações e programação.
Abraço.

Título: Re: Beta - Plataforma de Teste
Enviado por: metRo_ em 15 de Julho de 2010, 10:17
Parabéns, estás com uma base espetacular! Já há algum tempo que ando para fazer algo semelhante, para depois experimentar algoritmos, componentes, etc.

Depois vai acrescentando ao tópico testes que vás fazendo. :)
Título: Re: Beta - Plataforma de Teste
Enviado por: GnGz em 15 de Julho de 2010, 11:59
Parabéns ... Gostei bastante...
Título: Re: Beta - Plataforma de Teste
Enviado por: TigPT em 15 de Julho de 2010, 12:54
Bem.. com esta qualidade de projecto e de apresentação do mesmo.. só posso criticar uma coisa. Uma músiquinha no vídeo fazia falta (podes adicionar agora com o Audio Swamp no Youtube).

Muitos parabéns. Tens ai uma excelente base para trabalhar no robot e ir evoluindo o mesmo.
Título: Re: Beta - Plataforma de Teste
Enviado por: pedro12 em 15 de Julho de 2010, 14:02
Parabéns o robot esta muito fixe, ando aqui a tentar fazer algo do mesmo tipo, mas o teu esta mesmo muito bonito, uma boa apresentaçao, tudo arrumado xD.

Parabéns!!!
Título: Re: Beta - Plataforma de Teste
Enviado por: amando96 em 15 de Julho de 2010, 14:27
As bordas do acrilico estão perfeitas  :o Cortaste á mão? Está com muito bom aspecto, continua  :D
Título: Re: Beta - Plataforma de Teste
Enviado por: trif@sico em 15 de Julho de 2010, 16:55
Simplesmente genial  :D estou de boca aberta
Título: Re: Beta - Plataforma de Teste
Enviado por: LoneWolf em 15 de Julho de 2010, 17:46
Boas, acho que já foi tudo dito, mas volto a dizer lol, parabéns esta muito fixe e tem um aspecto muito profissional e limpo, continua nesse bom caminho e a ver se alguma vez consiga fazer algo parecido  ;D

Abraços e boa continuação
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 15 de Julho de 2010, 18:52
Obrigado a todos passei a noite toda a fazer o video, hoje quando acordei e vi que estava na primeira página até pensei que tinha escrito mal o endereço.  ;D

Depois vai acrescentando ao tópico testes que vás fazendo. :)

Claro que sim, já estou a preparar mais um video.

Bem.. com esta qualidade de projecto e de apresentação do mesmo.. só posso criticar uma coisa. Uma músiquinha no vídeo fazia falta (podes adicionar agora com o Audio Swamp no Youtube).

Poix, a cena é que quando estou ao computador costumo estar a ouvir musica por isso no youtube tiro sempre o som dos videos, a não ser que seja falado claro. Mas já tenho mais comentarios nesse sentido por isso ... Tens alguma sugestão ?

As bordas do acrilico estão perfeitas  :o Cortaste á mão? Está com muito bom aspecto, continua  :D

As unicas ferramentas que usei foi uma serra normal e uma dremel. Com a serra fui cortando as diagonais, depois mudei para a dremel com aquele cilindro de lixa e fui arredondando, o circulo pode não ter ficado perfeito mas os acabamento ficaram muito suaves.


... a ver se alguma vez consiga fazer algo parecido  ;D


Tenho a certeja que vais conseguir, utilizando as tuas palavras  :P

... eu também não sou pessoa de desistir facilmente das coisas o máximo que pode acontecer era adiar, mas tal não acontece pois sou muito teimoso e quando meto uma coisa na cabeça....ui....
Título: Re: Beta - Plataforma de Teste
Enviado por: msr em 15 de Julho de 2010, 19:06
Parabéns! Está brutal!

Ando a fazer um brinquedo do género, a ver se daqui a uns dias ponho aqui qualquer coisa. No entanto os acabamentos do meu estão mesmo à "pedreiro" comparado com a perfeição do teu. Tambem usei uma dremel com aquele cilindro de lixa, mas aquece muito o acrilico e dificilmente consegui fazer "linhas rectas" e bem polidinhas.

Tambem podias fazer um videozito com as habilidades que o bixaroco consegue fazer. Seguir linhas e tal. Muitos parabens tambem pela apresentação!
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 15 de Julho de 2010, 21:32
Fiquei a pensar nas vossas questões sobre as bordas do acrilico e lembrei-me de uma coisa, realmente as bordas do Beta levaram um tratamento especial.
Depois de lixar tudo com a dremel fiz umas passagens com o cilindro de polir, nada de especial demorei cerca de 5 minutos mas faz diferença.

Tirei a ideia deste video
The Matrix Continuum - Polishing (http://www.youtube.com/watch?v=LBfM4hATI64#)

Ja as cortei a tanto tempo que já não me lembrava de ter feito isto.
Título: Re: Beta - Plataforma de Teste
Enviado por: OxyGen em 15 de Julho de 2010, 23:48
Tenho andado à procura de um tutorial destes ha muito tempo... tenho andado a fazer os meus testes com 2 motores separados e uns sensores completamente soltos... definitivamente é um excelente projecto...
Título: Re: Beta - Plataforma de Teste
Enviado por: pedro12 em 17 de Julho de 2010, 14:37
ola, ja te tinha dado os parabens, ate agora so tinha lido e visto as imagens, hoje tive a ver o teu video e esta mesmo muito bom, gostava de saber como fizeste aqueles espaçadores(onde compraste esse tipo de peças pequenas(parafusos porcas...))

Tal como ja disseram a unica coisa que falta no video é mesmo a musica, mas nao ha problema meto a musica no PC   ;D
Título: Re: Beta - Plataforma de Teste
Enviado por: pedro12 em 17 de Julho de 2010, 17:46
O que me referia em cima eram ás:

......: Tubo de Aluminio (Separadores)
......: Porcas, Parafusos e Anilhas M2 e M3
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 17 de Julho de 2010, 19:15
Ola Pedro,

A placa de acrilico, tubo de aluminio, porcas e parafusos foram todos comprados no Aki mas tambem arranjas facilmente na MaxMat.
Os parafusos M2 são dificeis de arranjar mas podes ignorar, só precisei deles para o sensor QTR.

Tentei arranjar uns espaçadores já feitos mas não havia nada com as medidas que queria por isso decidi fazer os meus.

Comprei porcas e parafusos M4 e depois comprei um tubo de aluminio com 1 cm de diametro.
Cortei em quatro tubos com 3,5 cm de comprimento (convem fazer um corte limpo para a placa assentar bem). 
Coloquei uma porca dentro de cada ponta do tubo, a porca deve entrar à forca, se necessário dar umas pancadinhas com um martelo.
Para garantir que não sai mais apliquei umas gotas de super cola, cuidado para a cola não ir para a rosca.

Tens aqui uma foto para veres melhor, se quiseres em vez de parafusos M4 podes usar outras medidas mas garante que a porca entra mesmo mesmo a justa no tubo, até podes ver na foto os sulcos gravados pelas arestas no interior do tubo.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg256.imageshack.us%2Fimg256%2F6172%2Fespacador.jpg&hash=d4f6172ae41d20d715d259f71e1272afcc9e003e)
O acabamento do corte não é muito importante porque depois leva uma anilha de aluminio ou nylon por cima e fica perfeito.

Com relação a musica no video estive a ver a opção audio swap do youtube mas se utilizar isso pode passar a aparecer publicidade no video por isso este vai ter que ficar sem musica.

Qualquer duvida estas a vontade.
Abraço
Título: Re: Beta - Plataforma de Teste
Enviado por: OxyGen em 18 de Julho de 2010, 02:51
em relação a esses espaçadores não era necessário esse trabalho todo... existe barão roscado à venda... depois era so colocar as porcas e estava feito...
Título: Re: Beta - Plataforma de Teste
Enviado por: Fifas em 18 de Julho de 2010, 03:10
Está um trabalho muito bom! Parece feito por um profissional!

Parabens! ;)

Ter um robot para servir de base de testes a sensores/motores/etc é sempre útil :D
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 18 de Julho de 2010, 03:20
Uma pergunta se puderes/quiseres dizer, que diametro tem a tua base?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 18 de Julho de 2010, 03:48
Boa Noite

A base tem 20 cm de diametro, é mais ou menos o suficiente para caber a breadboard com algum espaço de manobra.

em relação a esses espaçadores não era necessário esse trabalho todo... existe barão roscado à venda... depois era so colocar as porcas e estava feito...

Sem duvida, é bem mais rápido, facil e barato.  ;D

A primeira versão foi assim só que achei que com tubos de aluminio como são mais largos podiam ser mais estaveis para alem de mais agradaveis a vista. Decidi tentar colar as porcas so para ver se funcionava, fiquei tão satisfeito que fiz todos assim.

Abraço.
Título: Re: Beta - Plataforma de Teste
Enviado por: pedro12 em 18 de Julho de 2010, 14:41
Obrigado pela resposta preytender e obrigado pela sugestão diferente oxygen!
Título: Re: Beta - Plataforma de Teste
Enviado por: OxyGen em 18 de Julho de 2010, 23:41
Boa Noite

A base tem 20 cm de diametro, é mais ou menos o suficiente para caber a breadboard com algum espaço de manobra.

em relação a esses espaçadores não era necessário esse trabalho todo... existe barão roscado à venda... depois era so colocar as porcas e estava feito...

Nada contra... "o teu projecto as tuas ideias"...

Agora estou à espera do próximo xD
Sem duvida, é bem mais rápido, facil e barato.  ;D

A primeira versão foi assim só que achei que com tubos de aluminio como são mais largos podiam ser mais estaveis para alem de mais agradaveis a vista. Decidi tentar colar as porcas so para ver se funcionava, fiquei tão satisfeito que fiz todos assim.

Abraço.
Título: Re: Beta - Plataforma de Teste
Enviado por: OxyGen em 25 de Julho de 2010, 19:56
boas... por acaso não me podes dizer onde arranjaste esse suporte para pilhas?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 25 de Julho de 2010, 20:26
Boas,

O suporte comprei aqui: http://www.dimofel.com/ (http://www.dimofel.com/) na loja do Porto.

Já nao me lembro quanto custou, a banana para ligar no arduino não vinha incluida comprei à parte no mesmo sitio.

Abraço.
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 25 de Julho de 2010, 20:41

Ora aqui esta...  ;D

Lista de vários suportes: http://www.catalogo.dimofel.pt/catalogue/index.php?searchCatalogueValue=&searchField=&searchValue=&action=listFo&catId=223&start=20 (http://www.catalogo.dimofel.pt/catalogue/index.php?searchCatalogueValue=&searchField=&searchValue=&action=listFo&catId=223&start=20)

O meu em particular:http://www.catalogo.dimofel.pt/catalogue/index.php?action=detailFo&id=65690&backLink=%2Fcatalogue%2Findex.php%3FsearchCatalogueValue%3D%26searchField%3D%26searchValue%3D%26action%3DlistFo%26catId%3D223%26start%3D20 (http://www.catalogo.dimofel.pt/catalogue/index.php?action=detailFo&id=65690&backLink=%2Fcatalogue%2Findex.php%3FsearchCatalogueValue%3D%26searchField%3D%26searchValue%3D%26action%3DlistFo%26catId%3D223%26start%3D20)
Título: Re: Beta - Plataforma de Teste
Enviado por: AcidDagger em 09 de Setembro de 2010, 03:08
Parabens pelo robot preytender

http://makebits.net/betabot-por-preytender/ (http://makebits.net/betabot-por-preytender/)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 15:49
podem m ajudar com o qtr-8rc
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 26 de Março de 2011, 15:54
Qual é a duvida ?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 15:58
é axim eu tenho esse sensor mas n consigo obter valor na porta com. e alguns sensores n tem volatagem.
o meu objectivo e quando tiver a chegar a uma linha ele virar s pa outro lado sem a passar
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 16:00
eu fiz o meu robo com base no k tu realizas t
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 26 de Março de 2011, 16:17

A primeira coisa que eu fiz foi ligar tudo, passar por cima de uma folha de papel com uma risca preta e visualizar os valores dos sensores para perceber o que me estava a acontecer :) Reperei que devem estar mesmo muito proximos do papel por isso coloquei aqueles espacadores para descer o sensor ao maximo.

A minha função para seguir linha (Utiliza algoritmo PID mas podes tirar e faz a leitura dos valores no fim)

Espero que ajude

Código: [Seleccione]
void progSegueLinhas() {

  //Verificar se é necessário calibrar os sensores
  if (bCalibrate==0) {
 
    mBuzzer.playOnSound();         // Inicio Calibracao
    int i;
    for (i = 0; i < 250; i++) {    // Processo de calibração demora 5 segundos
      qtr.calibrate();
      delay(20);
    }
    mBuzzer.playOffSound();        // Fim Calibração
    bCalibrate=1;                  // Marcar Calibração como ja efectuada
  }
 
  // Get calibrated sensor values returned in the sensors array, along with the line position
  // Position will range from 0 to 2000, with 1000 corresponding to the line over the middle sensor
 
  unsigned int vSensors[8];
  int iPosition = qtr.readLine(vSensors);
  int iError = iPosition-3500;
 
  int pd=0;    // Power Difference
 
  // Com PID Control - Set the motor speed based on proportional and derivative PID terms
  // Note When doing PID, it's very important you get your signs right, or else the control loop will be unstable
 
  float kP=0.1;             // kP proportional constant (0.09)
  float kI=0;                // kI integral constant (Não utilizado)
  float kD=0;             // kD derivative constant (0.05)
 
  int P = iError;            // Proportional - Varia entre [-2500,2500] valor de 0 significa que esta centrado
  int I = 0;                 // Integral - Soma dos varios P (Não utilizado)
  int D = iError-lastError;  // Derivative - Diferenca entre erro actual e erro anterior
  lastError = iError;        // Guardar ultimo erro
 
  int power_difference = (P*kP)+(I*kI)+(D*kD);

  // Evitar ultrapassar velocidades maximas
  if(power_difference > maxSpeed) power_difference = maxSpeed;   
  if(power_difference < -maxSpeed) power_difference = -maxSpeed;   
 
 
  if(power_difference < 0)   
    mDrive.drive(maxSpeed, maxSpeed+power_difference);   // Virar Direita
  else 
    mDrive.drive(maxSpeed-power_difference, maxSpeed);   // Virar Esquerda
 
 
  // Impressão dos Valores para Debug
  Serial.print("QTR Sensor:");
  Serial.print(vSensors[0]);   Serial.print("  ");
  Serial.print(vSensors[1]);   Serial.print("  ");
  Serial.print(vSensors[2]);   Serial.print("  ");
  Serial.print(vSensors[3]);   Serial.print("  ");
  Serial.print(vSensors[4]);   Serial.print("  ");
  Serial.print(vSensors[5]);   Serial.print("  ");
  Serial.print(vSensors[6]);   Serial.print("  ");
  Serial.print(vSensors[7]);   Serial.print("  ");
  Serial.print("  Position:"); Serial.print(iPosition);
  Serial.print("  Error:"); Serial.print(iError);
  Serial.print("  PID:"); Serial.println(power_difference);
   
  //delay(2000);
 
}



Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 16:20
e onde eu posso defenir onde estao ligados os sensores?

e ja agora os sensores sao ligados no analogicos ou digitais do arduino?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 26 de Março de 2011, 16:24
1. Fora da função tens que inicializar o sensor

Código: [Seleccione]

#include <PololuQTRSensors.h>

PololuQTRSensorsRC qtr((unsigned char[]) {1,2, 3, 4, 7, 8, 9,12}, 8);  // Sensor QTR


O codigo tambem response a tua segunda pergunta :)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 16:27
diz me so o que faz o float?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 26 de Março de 2011, 16:31

float é um tipo de dados tal como int ou char

A diferenca para o int é que permite utilizar casas decimais o que no meu caso era necessário.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 16:36
ah ok

vou esperimentar o codigo no meu robo e depois por o robo quando detectar a linha por os motores a andarem para outro lado...

s percisar d ajuda posso vir a este topico???


cumpz  ;)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 16:42
dix m so mais ou menos a quantos cm tens o sensor do chao?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 26 de Março de 2011, 16:44

Cerca de 0,9 cm , quanto mais baixo melhor são as leituras.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 16:46
ok
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 17:02
n me podes dar o teu contacto do msn?

pa exclarecimento de duvidas?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 26 de Março de 2011, 17:10

Não tenho por habito estar ligado no msn.

Fazemos o seguinte, ja me tinham pedido um esquema com as ligações da breadboard e do arduino por isso vou tentar tirar umas fotos com as ligações e coloco aqui tudo explicado juntamente com o codigo completo.



Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 17:12
hum...ok pode ser ajudava imenso...

bgdao  ;)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 26 de Março de 2011, 17:16
entao quando puderes colocar agradecia....


 ;) ;)
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 04:31
Adicionei no inicio do topico toda a informação necessária para fazer a ligação dos componentes e anexei um ficheiro rar com o codigo.

Espero que ajude, abraço.  ;)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 12:55
podias m so dizer onde encontras t a livraria lib_drive.h???


 :) :) :)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 16:27
olh alguma vex o teu arduino ao fazer upload do codigo deu t um erro


avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51




 :-\
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 16:42
Ola, com relação ao lib_Drive, já fiz esse codigo ha algum tempo na altura vi muitas coisas em muitos sitios  :D decidi fazer essa classe porque assim podia colocar la todas as funcoes que considero uteis para gestão dos motores e quando tiver outro robot basta copiar esse ficheiro.

Ontem, quando estava a fazer o esquema das ligações retirei tudo da breadboard, liguei tudo conforme indicado e fiz o upload do codigo que esta no rar.

Ficou tudo a funcionar correctamente, estas a apontar para a porta correcta quando fazes o upload ?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 16:43
ja passou o erro tinha-se passado da cabeça n percebi


 :P
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 17:30
dix me so como e k eu posso fazer com k kuando o robo chegue a linh e s vire pa outro lado, em vex d a seguir?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 17:47

Devem existir varias maneiras de o fazer, assim rapidamente o que fazia era:

1. Em cada ciclo ver se algum sensor esta em cima da linha.

2. Se algum estiver em cima da linha descobrir qual é.

2.1.  Se for o central quer dizer que a linha esta a frente, podes escolher qq um dos lados para rodar.
2.2   Se for um dos dois sensores  mais a esquerda quer dizer que estas a "raspar" com o lado esquerdo, deves virar ligeiramente para a direita
2.2   Se for um dos dois sensores  entre os centrais e os das pontas mais a esquerda quer dizer que estas a "bater violentamente" com o lado esquerdo, deves tentar rodar rapidamente para a direita

(Aplicar as mesmas regras para o lado oposto)


3. Se nao houver nenhum sensor em cima da linha podes continuar a andar em frente.


O que achas ?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 19:16
sim..
pk isto vai ser basicamente com irsharp para seguir um object, mas depois kero k ele nao saia de uma zonaq limitada com uma limha qui entra o qtr
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 19:18
a programaçao do sensor ir ja tenho, o que me ta a complicar e o qtr


e este projecto e para entregar daki a 2 semana.. e touy m a ver comlicado por causa disto...

Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 19:28

Vais ver que é bem mais facil do que parece, ja nao mexia no meu ha algum tempo mas com as tuas perguntas fiquei com vontade de experimentar.  ;D

Vou tentar fazer o codigo para ver o resultado depois ponho aqui.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 19:30
hum ok...eu no qtr tou a utilizar 4 sensores 1,4,5,8. e no arduino tou a utilizar os pin digitais de 0 a 3
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 19:31
diz me so uma coisa supostamente para ver s todos os sensores trabalham têm d ter volatagem todos os k tiverem ligados ao arduino?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 19:44

Pelo que percebo parece que quando ligas o pino 5v e gnd do sensor a breadboard estas a alimentar todos os sensores independentemente de teres ligado ao arduino ou nao. Se apontares a maquina fotografica do telemovel aos sensores podes ver que ficam todos acessos.

Claro esta que se nao os ligares ao arduino este nao vai receber os respectivos valores, isso fica definido quando inicializas o sensor no codigo.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 19:45
sim tens a luzes assesas mas s eu for ver a voltagem dos sensores k estou a utilizar a alguns k n têm nenhum valos e outros têm....
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 20:03

Estou a utilizar este codigo para ver os valores dos sensores:

Código: [Seleccione]
void progDebugQTR() {
   
   //Verificar se é necessário calibrar os sensores
  if (bCalibrate==0) {
 
    mBuzzer.playOnSound();         // Inicio Calibracao
    int i;
    for (i = 0; i < 250; i++) {    // Processo de calibração demora 5 segundos
      qtr.calibrate();
      delay(20);
    }
    mBuzzer.playOffSound();        // Fim Calibração
    bCalibrate=1;                  // Marcar Calibração como ja efectuada
  }
 
 
  unsigned int vSensors[8];
  int iPosition = qtr.readLine(vSensors);
 
  // Impressão dos Valores para Debug
  Serial.print("QTR Sensor:");
  Serial.print(vSensors[0]);   Serial.print("  ");
  Serial.print(vSensors[1]);   Serial.print("  ");
  Serial.print(vSensors[2]);   Serial.print("  ");
  Serial.print(vSensors[3]);   Serial.print("  ");
  Serial.print(vSensors[4]);   Serial.print("  ");
  Serial.print(vSensors[5]);   Serial.print("  ");
  Serial.print(vSensors[6]);   Serial.print("  ");
  Serial.print(vSensors[7]);   Serial.print("  ");
  Serial.print("  Position:"); Serial.println(iPosition);
     
     
  delay(5000);
   
}


Teoricamente analisando os valores da variavel iPosition e os valores individuais de cada sensor deve dar para perceber o que esta a acontecer.

Quando desligo um sensor do arduino ele começa a retornar o valor 1000.  :o
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 20:07
vou testar
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 20:12
n nsei pk mas ja tou a ter o ptoblema do upload outra vez e tenho bem a porta com

n percebo

 :-\
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 20:17
a mim ta tudo a 0 n percebo...

Código: [Seleccione]
#include <PololuQTRSensors.h>
   
    int bCalibrate=0;     

    PololuQTRSensorsRC qtr((unsigned char[]) {0,1,2,3,4,5,6,7,8}, 8);

    void setup()
    {
Serial.begin(9600);
    }

   void loop() {
   
 
  if (bCalibrate==0) {
 
   
    int i;
    for (i = 0; i < 250; i++) {    // Processo de calibração demora 5 segundos
      qtr.calibrate();
      delay(20);
    }
   
    bCalibrate=1;                  // Marcar Calibração como ja efectuada
  }
 
 
  unsigned int vSensors[8];
  int iPosition = qtr.readLine(vSensors);
 
  // Impressão dos Valores para Debug
  Serial.print("QTR Sensor:");
  Serial.print(vSensors[0]);   Serial.print("  ");
  Serial.print(vSensors[1]);   Serial.print("  ");
  Serial.print(vSensors[2]);   Serial.print("  ");
  Serial.print(vSensors[3]);   Serial.print("  ");
  Serial.print(vSensors[4]);   Serial.print("  ");
  Serial.print(vSensors[5]);   Serial.print("  ");
  Serial.print(vSensors[6]);   Serial.print("  ");
  Serial.print(vSensors[7]);   Serial.print("  ");
  Serial.print("  Position:"); Serial.println(iPosition);
  delay(5000);
   
}




Código: [Seleccione]
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
QTR Sensor:0  0  0  0  0  0  0  0    Position:0
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 20:24

 ;D Ora ai esta o teu problema

Como e que inicializaste o sensor no topo do codigo ?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 20:25
todo o codigo que coloquei e o k eu tenho
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 20:31

tens que ter em atenção esta linha:
PololuQTRSensorsRC qtr((unsigned char[]) {0,1,2,3,4,5,6,7,8}, 8);

como so estas a utilizar 4 sensores acho que devias mudar para:
PololuQTRSensorsRC qtr((unsigned char[]) {0,1,2,3}, 4);




Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 21:38
ja me ta a dar o erro d novo o k sera isto....

n consigo fazer upload
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 21:54
obtenho estes valores com a alteração k dises t

Código: [Seleccione]
QTR Sensor:0  0  0  0  29703  511  28684  53513    Position:3000
QTR Sensor:0  0  0  0  29703  511  28684  53513    Position:3000
QTR Sensor:0  0  0  1000  29703  511  28684  53513    Position:3000
QTR Sensor:0  0  0  833  29703  511  28684  53513    Position:3000
QTR Sensor:0  0  1000  1000  29703  511  28684  53513    Position:2500
QTR Sensor:0  0  1000  0  29703  511  28684  53513    Position:2000
QTR Sensor:0  0  1000  0  29703  511  28684  53513    Position:2000
QTR Sensor:0  0  1000  0  29703  511  28684  53513    Position:2000
QTR Sensor:0  0  1000  1000  29703  511  28684  53513    Position:2500
QTR Sensor:0  0  0  1000  29703  511  28684  53513    Position:3000
QTR Sensor:0  0  1000  0  29703  511  28684  53513    Position:2000
QTR Sensor:0  0  1000  1000  29703  511  28684  53513    Position:2500
QTR Sensor:0  0  1000  1000  29703  511  28684  53513    Position:2500
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 22:59

Já parece melhor..  nao te esquecas que so deves olhar para os valores das 4 primeiras colunas do debug as restantes sao lixo que esta na memoria.

Os valores individuais de cada sensor variam entre 0 e 1000.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 23:00
n percebo porque isto me da valores diferentes com o mesmo codigo...-.-
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 27 de Março de 2011, 23:07

Pois, agora a tua guerra deve ser tentar obter valores consistentes.
Testa varias situações e tem em atenção que a calibração e iluminação faz muita diferença.
Muda o codigo para imprimir so ate ao sensor[3] para esconder o lixo.

Boa sorte.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 23:13
e k isto d vex enquando da valores maiores do que 0 no branco, no preo das os 1000.
mas depois outras vezes no branco da valores de 0 e no preto da valores maiores que 0...

o que sera?
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 27 de Março de 2011, 23:29
Como é que tens o QTR-8RC ligado, não terás ai um mau contacto, ou uma solda mal feita?

Esse erro do upload pode aparecer, por a porta serial demorar mais tempo a abrir que o normal, ou o chip não fazer reset a tempo, ou se tiveres alguma coisa ligada no digital 0 e digital 1.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 27 de Março de 2011, 23:42
era mesmo de ter ligado 2 sensores aos 2 primeiros pinos.... agora ja funcionam os sensores todos mas da m valores muito baixos tipo 7 ,8,20 no maximo kuando esta sobre a linha preta e na branca da sempre 0...
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 28 de Março de 2011, 00:09
Como é que os estás a calibrar?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 00:24
tens aki o codigo k tenho para o sensor qtr


Código: [Seleccione]
#include <PololuQTRSensors.h>

int bCalibrate=0;     

PololuQTRSensorsRC qtr((unsigned char[]) {2,3,4,7}, 4);

void setup()
{
  Serial.begin(9600);
}

void loop() {

  if (bCalibrate==0) {

    int i;
    for (i = 0; i < 250; i++) {
      qtr.calibrate();
      delay(20);
    }

    bCalibrate=1;                 
  }


  unsigned int vSensors[8];
  int iPosition = qtr.readLine(vSensors);

  // Impressão dos Valores para Debug
  Serial.print("QTR Sensor:");
  Serial.print(vSensors[0]);   
  Serial.print("  ");
  Serial.print(vSensors[1]);   
  Serial.print("  ");
  Serial.print(vSensors[2]);   
  Serial.print("  ");
  Serial.print(vSensors[3]);   
  Serial.print("  ");
  Serial.print("  Position:");
  Serial.println(iPosition);
  delay(5000);
}
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 18:23
este codigo cada vez k o testo da m valores diferentes -.-
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 28 de Março de 2011, 18:31
Acho que tens que virar o sensor ao contrário e passar um papel por cima dos sensores enquanto ele está a calibrar, o TigPT tem um video a mostrar como se faz.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 18:46
n sabes o link?
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 28 de Março de 2011, 18:47
Está aqui no forum, pesquisa por qtr-8rc.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 19:06
dix m so uma coisa do codigo como posso por o sensor a obter valores mais rapido e depois de maneira a que kuando o valor for mair do que 10 os motores andem?


Código: [Seleccione]
#include <PololuQTRSensors.h>

int bCalibrate=0;     

int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H


PololuQTRSensorsRC qtr((unsigned char[]) {2,3,4,7}, 4);

void setup()
{
  Serial.begin(9600);

  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
}

void loop() {

  if (bCalibrate==0) {

    int i;
    for (i = 0; i < 250; i++) {
      qtr.calibrate();
      delay(20);
    }

    bCalibrate=1;                 
  }
if(bCalibrate > 10)   
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
    digitalWrite(motor2Pin1, LOW);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, HIGH);  // Fazem com que o motor da esquerda ande em frente
    delay (1800);
   
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
    digitalWrite(motor2Pin1, HIGH);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, LOW);  // Fazem com que o motor da esquerda ande em frente
    delay (1800);
   
   
  unsigned int vSensors[4];
  int iPosition = qtr.readLine(vSensors);

  // Impressão dos Valores para Debug
  Serial.print("QTR Sensor:");
  Serial.print(vSensors[0]);   
  Serial.print("  ");
  Serial.print(vSensors[1]);   
  Serial.print("  ");
  Serial.print(vSensors[2]);   
  Serial.print("  ");
  Serial.print(vSensors[3]);   
  Serial.print("  ");
  Serial.print("  Position:");
  Serial.println(iPosition);
  delay(5000);
}
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:00
alguem me pode dar uma dica do post anterior?

 ;) ;)
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 28 de Março de 2011, 21:04

Boas, reduz o valor do delay que tens no fim do codigo. Passa de  delay(5000); para tipo  delay(20);

Ja agora ja conseguinste calibrar correctamente a barra de sensores ?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:05
ok..eu agora estou a utilizar 2 sensores e kuando esta no branco da m um certo valor kuando detecta o preto fica nos 1000.
por isso penso que estao bons...
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 28 de Março de 2011, 21:09

Ja agora o codigo que tens em cima não faz muito sentido  :o

A tua variavel bCalibrate  nunca é maior que 10. Acho que o que queres é colocar nessa instrução if a variavel iPosition.

Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:14
sim eu sei eu tou com duvidas e k variavel e que hei d por la..para que os motores so andem kuando o sensor detectar um certo valor..

Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 28 de Março de 2011, 21:19
Diz-me duas coisas:

Quais sao os 2 pinos do arduino que estas a utilizar ??
Qual é o da esquerda e qual é o da direita. ??
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:21
o pin 2 digital no arduino e o sensor1, no pin7 e o sensor8....ou seja o 1 e da direita e o 8 e da esquerda...
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 28 de Março de 2011, 21:30
A minha sugestão:

Código: [Seleccione]
#include <PololuQTRSensors.h>

int bCalibrate=0;
int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H

PololuQTRSensorsRC qtr((unsigned char[]) {2,7}, 2);

void setup(){

Serial.begin(9600); 
pinMode(motor1Pin1, OUTPUT);   
pinMode(motor1Pin2, OUTPUT);   
pinMode(motor2Pin1, OUTPUT);   
pinMode(motor2Pin2, OUTPUT);
}

void loop() {

if (bCalibrate==0) {   
  int i;
  for (i = 0; i < 250; i++) {
    qtr.calibrate();
    delay(20);   
  }
  bCalibrate=1;
  }

//Ler Valor dos sensores
unsigned int vSensors[2]; 
int iPosition = qtr.readLine(vSensors);

// Verificar se algum dos sensores encontrou a linha preta
if (vSensors[0]>900 || vSensors[1]>900) {
 
  if (vSensors[0]>900) {
     // Linha detectada pelo sensor 1 coloca aqui o codigo para virar para o outro lado
  } else {
    // Linha detectada pelo sensor 8 coloca aqui o codigo para virar para o outro lado   
  }
 
} else {
 
  // Aqui nenhum sensor encontra a linha por isso podes andar em frente ou fazer outra coisa.


}


delay(100);

}
 
 
 
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:31
vou testar bgdao...   :)
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:48
ta mesmo bom.. so uma coisa nao da d maneira a que o sensor consiga detectar mais alto valores menores do k os 900 m ?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 28 de Março de 2011, 21:52

Podes ajustar o valor de 900 para outro valor qualquer.

Testa para ver qual o melhor numero, por exemplo, se quando o sensor estiver na linha preta variar entra os 600 e os 1000 podes mudar para 600.
Se estiveres a andar muito rápido e passar por cima da linha podes tambem reduzir o delay de 100 para 20.



Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 21:54
sim isso eu sei ...mas kuando eu levanto o sensor a pouco mais de 0.5 cm ele vai dar um valor de 1000 ou 900 e pouco
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 28 de Março de 2011, 21:59
Poix... tal como ja te tinha dito quanto mais perto melhores sao as leituras.

Acho que durante o dia num sitio bem iluminado e com luz natural as coisas funcionam melhor.
Tenta arranjar o melhor numero possivel para te indicar com alguma margem de seguranca se esta ou nao em cima da linha.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 28 de Março de 2011, 22:01
pois ta certo bgd
depois post aki o resultado    ;D
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 01 de Abril de 2011, 19:40
boas tenho uma dusvida como e que posso juntar em simultaneo o cofigo de um IRsharp e um qtrc....?

tenho o objectivo de kuando detect um objecto va atras dele com IR...mas tb para que ele n saia de um certo sitio com o qtr


codigo do irsharp

Código: [Seleccione]
int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H
int IRpin = 0;      // analog pin for reading the IR sensor




void setup() {
  Serial.begin(9600);
  // Definir os pinos outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);   // start the serial port
}

void loop() {
  float volts = analogRead(IRpin)*0.0048828125;   // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
  float distance = 65*pow(volts, -1.10);          // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
  Serial.println(distance);                       // print the distance
  delay(100);                                     // arbitary wait time.
 
 
if (distance<55) {
 
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
 
    digitalWrite(motor2Pin1, HIGH);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, LOW);  // Fazem com que o motor da esquerda ande em frente
    delay (1800);                    // Tempo que vai ficar a fazer esta função
 
}
else
 {
 
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
 
    digitalWrite(motor2Pin1, LOW);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, HIGH);  // Fazem com que o motor da esquerda ande em frente
    delay (3500);                    // Tempo que vai ficar a fazer esta função
 
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3000);
   
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3500);
 
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
 
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    delay (2500);
 }
  }
 
 



codigo do qtr

Código: [Seleccione]
#include <PololuQTRSensors.h>

int bCalibrate=0;
int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H

PololuQTRSensorsRC qtr((unsigned char[]) {2,7}, 2);

void setup(){

Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);   
pinMode(motor1Pin2, OUTPUT);   
pinMode(motor2Pin1, OUTPUT);   
pinMode(motor2Pin2, OUTPUT);
}

void loop() {

if (bCalibrate==0) {   
  int i;
  for (i = 0; i < 250; i++) {
    qtr.calibrate();
    delay(20);   
  }
  bCalibrate=1;
  }

//Ler Valor dos sensores
unsigned int vSensors[2];
int iPosition = qtr.readLine(vSensors);

// Verificar se algum dos sensores encontrou a linha preta
if (vSensors[0]>900 || vSensors[1]>900) {
 
  if (vSensors[0]>900) {
     // Linha detectada pelo sensor 1 coloca aqui o codigo para virar para o outro lado
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3500);

} else {
    // Linha detectada pelo sensor 8 coloca aqui o codigo para virar para o outro lado   
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3500);
}
 
} else {
 
  // Aqui nenhum sensor encontra a linha por isso podes andar em frente ou fazer outra coisa.
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
 
    digitalWrite(motor2Pin1, HIGH);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, LOW);  // Fazem com que o motor da esquerda ande em frente
    delay (80);

}


delay(20);

  Serial.print("QTR Sensor:");
  Serial.print(vSensors[0]);   Serial.print("  ");
  Serial.print(vSensors[1]);   Serial.print("  ");
  Serial.print("  Position:");
  Serial.println(iPosition);
  delay(10);


}

todo o codigo foi testado
cumpz
Título: Re: Beta - Plataforma de Teste
Enviado por: metRo_ em 01 de Abril de 2011, 20:24
Explica melhor o que queres fazer?!

Basicamente vais ter que ter duas coisas a correr em simultâneo mas em que uma é corrida por exemplo a cada 100ms e outra a 1000ms, vais ter que seleccionar qual é o processo que necessita de acontecer mais rápido, para implementar isto existem já alguns tópicos aqui, pesquisa por posts do Njay que se não me engano são dele.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 01 de Abril de 2011, 20:26
eu quero k o robo va de encontro com um object mas ou mesmo tempo k n sai d um certo sitio..
Título: Re: Beta - Plataforma de Teste
Enviado por: metRo_ em 01 de Abril de 2011, 20:31
eu quero k o robo va de encontro com um object mas ou mesmo tempo k n sai d um certo sitio..

esse certo sitio é delimitado porque?!
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 01 de Abril de 2011, 20:37
por uma linha preta k o sensor detecta-
Título: Re: Beta - Plataforma de Teste
Enviado por: metRo_ em 01 de Abril de 2011, 20:41
1) mas uma linha fina ou algo grosso?! O robot é rápido ou lento?!
2) Como é feito o seguimento?!

As perguntas podem parecer chatas mas mais já ver que fazem muito sentido.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 01 de Abril de 2011, 20:57
as limhas tem cerca d 3cm, e o robo n anda muito dpressa...ate porque ele so com o codigo do qtr ele detecta bem a linha
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 01 de Abril de 2011, 21:45
come sera ? nao estpu a conseguir -.-
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 01 de Abril de 2011, 22:18
É juntar a leitura do IR que é um simples analogRead, e enquanto esse valor for menor que um valor pré-definido andas em frente e continuas a ler o qtr, se o qtr ler preto dá meia volta ou coisa assim.
Título: Re: Beta - Plataforma de Teste
Enviado por: metRo_ em 01 de Abril de 2011, 22:48
Eu ia tentar explicar de outra maneira mas se calhar ia complicar um bom bocado :s Basicamente era o facto de queres fazer duas coisas, imagina que uma coisas tem tipo mais importância que a outra então basicamente o que ia dizer era para executares mais vezes a que tem mais importância e a cada x vezes executavas a outra mas o que tu queres é só as duas a funcionar :S
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 00:56
sera k nao de para fazer
?
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 02 de Abril de 2011, 00:58
Claro que dá, o que tu queres é um sumo bot, ir contra um objecto e ficar dentro da linha preta, feito assim tipo um milhão de vezes, metes mini sumo bot arduino no google.
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 01:05
Boas

De momento estou um bocado ocupado porque tenho que acabar uma coisa para o traballho.
Se quiseres anexa o codigo que ja tens num post, posso tentar juntar os dois para veres se funciona.
Abraço.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 01:11
tenho o codigo dos dois sensores no post anterior ....ok?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 01:15
eu sei mas sempre que tento fazer copy e paste fica tudo seguido e depois tenho que separar as linhas  :o

ajudava se metesses como anexo pode ser num ficheiro txt.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 01:19
nao ta a dar para enviar  :-\
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 01:27
preytender@gmail.com
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 02 de Abril de 2011, 01:29
Podiam tratar dessas coisas por PM.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 01:30
PM?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 01:33
Tens razão senso, nao me lembrei disso ... 

Na realidade tambem ja tive problemas a fazer upload, vou inventar qq coisa e depois coloco aqui.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 01:39
ok ;)
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 02:07
Tenta isto:

Código: [Seleccione]
#include <PololuQTRSensors.h>


int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H
int IRpin = 0;      // analog pin for reading the IR sensor

PololuQTRSensorsRC qtr((unsigned char[]) {2,7}, 2);


void setup(){

Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);   
pinMode(motor1Pin2, OUTPUT);   
pinMode(motor2Pin1, OUTPUT);   
pinMode(motor2Pin2, OUTPUT);

//Vamos Calibrar aqui os sensores
int i;
for (i = 0; i < 250; i++) {
  qtr.calibrate();
  delay(20);   
}

}




void loop() {

// A ideia é bater num objecto mas nunca sair da area delimitada por isso vou dar prioridade ao controlo dos sensores qtr

//Ler Valor dos sensores
unsigned int vSensors[2];
int iPosition = qtr.readLine(vSensors);

// Verificar se algum dos sensores encontrou a linha preta
if (vSensors[0]>900 || vSensors[1]>900) {
 
  if (vSensors[0]>900) {
     // Linha detectada pelo sensor 1 coloca aqui o codigo para virar para o outro lado
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
   
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3500);

} else {
    // Linha detectada pelo sensor 8 coloca aqui o codigo para virar para o outro lado   
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3500);
}
 
} else {
  // Aqui nao fazer nada com os motores e passar esta decisao ao sensor IR
  sensorIR();
}

//Debug QTR
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]);   Serial.print("  ");
Serial.print(vSensors[1]);   Serial.print("  ");
Serial.print("  Position:");
Serial.println(iPosition);

}



void sensorIR() {
 
  //Ler Distancia 
  float volts = analogRead(IRpin)*0.0048828125;   // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
  float distance = 65*pow(volts, -1.10);          // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
  Serial.println(distance);                       // print the distance
  delay(100);                                     // arbitary wait time.
 
 
if (distance<55) {
 
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
 
    digitalWrite(motor2Pin1, HIGH);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, LOW);  // Fazem com que o motor da esquerda ande em frente
    delay (1800);                    // Tempo que vai ficar a fazer esta função
 
}
else
 {
 
    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
 
    digitalWrite(motor2Pin1, LOW);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, HIGH);  // Fazem com que o motor da esquerda ande em frente
   
    delay (3500);                    // Tempo que vai ficar a fazer esta função
 
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3000);
   
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
 
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (3500);
 
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
 
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    delay (2500);
 }
}
 



Penso que podes melhorar bastante a funcao de seguir o objecto.
Tenta minimizar o uso da instrução delay de forma a tornar os ciclos mais rapidos, desta forma validas o qtr mais vezes e evitas sair da zona.

 
Tenta e diz o que deu  ;D
Abraço.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 02:16
vou testar.. depois digo algo
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 14:26
testei mas parece k o robo n ta a seguir muito brm o qtr parece k de vez enquando detecta a linha e de vex enquando nao...
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 14:55
Pois, imaginei que isso pudesse acontecer  :-\

O problema e que o codigo fica muito tempo na funcao sensorIR por causa dos delays e nao testa o sensor QTR.

Podes tentar duas coisas:

1. reduzir o tempo de delay na funcao sensorIR
2. inverter a logica, no loop colocas o codigo da funcao sensorIR e crias uma funcao sensorQTR. deves chamar a funcao sensorQTR o maximo de vezes possivel.

Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 14:56
pois pk o IR funciona sempre o qtr e que nao
Título: Re: Beta - Plataforma de Teste
Enviado por: senso em 02 de Abril de 2011, 15:16
É tirar esses delays todos..
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 15:17
se eu os retirar o fara?
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 15:56

Se retirares os delays nao faz nada  ;D

A utilização dos delays faz parte da "ciencia" de programar no arduino.
São necessários mas quando utilizados fazem com que o programa pare nequele sitio e nao possa fazer mais nada.

O que tento fazer é programar com delays muito curtos e fazer ciclos para os repetir desta forma consegues executar outras tarefas entre eles.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 16:30
e que so me fala juntar estas 2 programações para acabar o meu trabalho   :-\
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 02 de Abril de 2011, 16:49
Sem stress  8)

Acho que deves tentar fazer por ti porque dessa forma vais aprender mais.
Em caso de desespero total posso te dar o codigo todo feito e testado no meu beta  ;)

Tens algum tipo de prazo ?
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 02 de Abril de 2011, 16:51
tenho ele deve estar pronto minimamente nesta sexta feira mas depois posso fazer so pequenos ajustes...
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 04 de Abril de 2011, 19:26
ainf«da bem k n fizeste o codigo todo xD

ja consegui o meu objectivo..assim eu aprendi como fazer


bgdao pessoal... 8)
Título: Re: Beta - Plataforma de Teste
Enviado por: preytender em 04 de Abril de 2011, 20:06

Fico contente, e que tal um videozito nem que seja de telemovel para o ver em acção.

Abraço.
Título: Re: Beta - Plataforma de Teste
Enviado por: zeneves em 05 de Abril de 2011, 00:19
ok daki a 1 ou 2 dias eu faço post

 ;)