LusoRobótica - Robótica em Português

Electrónica => Sensores => Tópico iniciado por: Arknum em 25 de Maio de 2010, 14:43

Título: Sensor QTR-8RC
Enviado por: Arknum em 25 de Maio de 2010, 14:43
Boas

Comecei a fazer experiencias com este sensor e deparei-me com algumas dúvidas.
Consegui liga-lo e funcionou como neste topico http://lusorobotica.com/index.php?topic=1971.45 (http://lusorobotica.com/index.php?topic=1971.45)

Agora a questão. Como eu "ainda" não tenho um arduino, utilizo um PIC16f84a e não possui entradas analógicas e pelo que me apercebi as saidas deste sensor são analógicas, como faço, ou melhor, qual é a melhor forma para passar as saidas deste sensor para digital?
Eu fiz uma experiencia e funicionou mais ou menos bem, utilizei um comparador LM358 e um potencimetro e na saida do comparador um led que acendia quando tapava o led. Só não experimentei ligar ao PIC, mas fiquei com a sensação que não seria a melhor opção. Alguem tem alguma sugestão?
Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 25 de Maio de 2010, 15:07
Podes trocar esse PIC por um 16F88 ?  esse já tem entradas analógicas.


No entanto, este LINK (http://www.pololu.com/catalog/product/961) tem uma boa explicação na zona "Interfacing the QTR-8RC Outputs to Digital I/O Lines"

Aí explica como ligar uma saída dessas analógica, a um pino de entrada. É o método de carga/descarga do condensador.

Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 25 de Maio de 2010, 15:21
Boas

Infelizmente não consegui ver o link que colocaste (estou na escola e é bloqueado) vejo em casa.
Mas qual aconselhas utilizar? com o condensador ou o comparador ou trocar o pic?
Diz-me só o seguinte, esse PIC que aconselhas funciona de igual modo do que o 16f84, isto é, tem as mesmas interrupções, e esquema de ligações? Desculpa estar a fazer estas perguntas meio tolas, bastaria ir pesquisar mas onde estou agora não consigo ver quase nenhuma página, a escola bloqueia uase tudo, felizmente não bloqueia o da Lusorobotica. Já agora são faceis de arranjar esses Pics?
Mais uma vez peço desculpa por tanta questão.
Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 25 de Maio de 2010, 17:58
podes usar o condensador directo com o PIC16F84, se não quiseres trocar de PIC. Aliás... esse é óptimo para aprender as bases, mas falta-lhe quase tudo de periféricos.

Se pesquisares a série PIC16, vais ver que a arquitectura é toda idêntica. Até o pinout é igual nas caixas de 18pinos.

Os PICs podem ser comprados nas boas lojas de electrónica, ou então tentar as amostras directamente do faricante.
Título: Re: Sensor QTR-8RC
Enviado por: fred gomes em 25 de Maio de 2010, 17:59
o sensor QTR 8RC têm as saídas são digitais.. mas funcionam de maneira difente do que a leitura digital normal, acho que têm haver com comprimento de impulso por condensadores, (no post que mensionates têm um código que eu fiz para efectuar a leitura dos sensores, tens de usar a biblioteca que a pololu fornece).. para que funcionalidade queres esses sensores? seguidor de linhas?, se for, que posso disponibilizar te um código que já tenho feito usando o controlo PID..,
Título: Re: Sensor QTR-8RC
Enviado por: fred gomes em 25 de Maio de 2010, 18:03
http://www.pololu.com/docs/0J19/3 (http://www.pololu.com/docs/0J19/3)

tens ai um exemplo de um código que a polou fornece..
Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 25 de Maio de 2010, 18:09
o sensor QTR 8RC têm as saídas são digitais.. mas funcionam de maneira difente do que a leitura digital normal, acho que têm haver com comprimento de impulso por condensadores, (no post que mensionates têm um código que eu fiz para efectuar a leitura dos sensores, tens de usar a biblioteca que a pololu fornece).. para que funcionalidade queres esses sensores? seguidor de linhas?, se for, que posso disponibilizar te um código que já tenho feito usando o controlo PID..,

As saídas não são digitais, são analógicas. Podem é ler-se com um pino digital, se se medir o tempo que o condensador demora a descarregar.

# O pino do micro vira saída e carrega o condensador
# o pino vira entrada, reset do temporizador, e espera até o condensador descarregar
# qd o condensador descarrega, o estado lógico da entrada muda

Por isso é q se pode fazer leitura "analógica", com um pino digital.


Este sistema é bastante usado para medição grosseira de temperaturas, com micros de poucos recursos. Uma NTC/PTC é o suficiente para tal.

Se se pretender usar o sensor com comparadores analógicos, sempre se pode optar pelo PIC16F628A, ou outro mais moderno com comparadores internos.

Mas é um excelente desafio de treino usar uma entrada digital e medir a temporização :)
Título: Re: Sensor QTR-8RC
Enviado por: fred gomes em 25 de Maio de 2010, 18:33
eu não sabia bem como funcionava, sabia que tinha haver com isso dos condensadores, e disse que a leitura era digital pq se efectuam nos pinos digitais, 

mas já fiquei a perceber como funciona essa leitura, :)
Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 26 de Maio de 2010, 13:38
asena podias dar um exemplo em C de como fazer isso?


# O pino do micro vira saída e carrega o condensador
# o pino vira entrada, reset do temporizador, e espera até o condensador descarregar
# qd o condensador descarrega, o estado lógico da entrada muda

Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 26 de Maio de 2010, 14:22
asena podias dar um exemplo em C de como fazer isso?

# O pino do micro vira saída e carrega o condensador
# o pino vira entrada, reset do temporizador, e espera até o condensador descarregar
# qd o condensador descarrega, o estado lógico da entrada muda

A página do sensor (http://www.pololu.com/catalog/product/961) dá uma boa explicação de como o fazer.

RB0 é o pino usado. TMR0 sem divisor e incrementado pelo clock interno, no caso do PIC incrementa a Fosc/4.
A ideia é carregar o condensador, e depois contar o tempo que demora a sua descarga.

C para PIC ::


   TRISB = TRISB & 0b11111110;     //torna o RB0 uma saída, e não mexe nos outros pinos
   RB0 = 1;          //saida a 1, para carregar o condensador
   DelayUs(50);   //espera 50us

   TRISB = TRISB | 0b00000001;     //torna o RB0 uma entrada de alta impedância

   TMR0 = 0;     //limpa o contador

   while (RB0);   //enquanto o pino estiver a nivel lógico 1, mantém-se aqui

   TMR0_lido = TMR0;   //guarda o valor do tempo passado


Consoante o tempo que demora a descarregar, podemos saber se estava na linha, ou não. É uma questão de testes, consoante as condições do terreno.
Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 30 de Maio de 2010, 01:19
Boas

Estive a fazer experiencias para ver se conseguia ver a saida do qtr num pino digital e não consegui.

1º- Liguei uma saida do qtr(saida 1) a um pino do condensador 10nF e o outro pino a uma entrada do Pic (entrada RB0).
2º- Utilizei este programa para tentar ver os tempos do condensador

Código: [Seleccione]
#include <16F84.h>
#fuses hs,noprotect,nowdt
#use delay (clock=4000000)                                         // igual ao cristal
#use RS232(baud=2400, bits=8, parity=N, xmit=pin_a1, rcv=pin_a0)

int TMR0_lido;

main()
{

while (1){

   set_TRIS_B(11111110);     //torna o RB0 uma saída, e não mexe nos outros pinos
   output_high(pin_B0);          //saida a 1, para carregar o condensador
   Delay_Us(10);   //espera 10us
   set_TRIS_B(00000001); //TRISB = TRISB | 0b00000001;   
   set_timer0(0); //TMR0 = 0;     //limpa o contador
   while (input(PIN_B0));   //enquanto o pino estiver a nivel lógico 1, mantém-se aqui
   TMR0_lido=get_timer0();  //TMR0_lido = TMR0;   //guarda o valor do tempo passado
   printf("HiThere");//só para escrever alguma coisa
   printf(get_timer0());//para ver se escrevia desta forma
   printf(TMR0_lido);
   Delay_ms(1000);
}
}

O resultado foi só HiThere de 1 em 1 segundo, não me aparecia nenhum valor.

Devo estar a fazer alguma coisa mal mas não sei o que é.
ALguem me pode ajudar?

Obrigado
Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 31 de Maio de 2010, 10:06
# estás a usar o esquema de ligação que o fabricante aconselha?  o condensador liga ao sensor e à alimentação

# os pinos não usados do PIC, devem ser configurados como SAÍDA. Qualquer pino configurado como entrada, e q não esteja ligado, é propenso a gerar confusão.

# tens q converter os valores binários/décimais, para ASCII, antes de os mandares para a porta série

# "printf" é tudo menos bom para programar. Só serve para encher a memória do PIC. Usa  porta série directa.

Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 31 de Maio de 2010, 16:22
Boas

O esquema que utilizei foi este:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg31.imageshack.us%2Fimg31%2F77%2Fsemttulotul.png&hash=9c116f79062c7ca51bfd42805d675289) (http://img31.imageshack.us/i/semttulotul.png/)

Uploaded with ImageShack.us (http://imageshack.us)

Mas pelo que dizeste asena já vi que está mal. Estive à procura do esquema do fabricante mas não descobri, consegues-me enviar o esquema correcto? se sim porreiro agradeço desde já.

Não sei se deste uma vista de olhos no código, está correcto?
tentei fazer como tu dizeste e como estava no site do fabricante.

O set_tris_b(xxxxxx) configura os pinos como entrada ou saida conforme é 0 ou 1.

Não faço mesmo ideia como converter os valores para ascii, pensei que não era preciso fazer nada bastava enviar por rs232. Os valores do TMR0 não são de 0 a 255?quando faço get_timer0()?

E em vez de utilizar printf() dizes que é melhor o puts()?
Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 31 de Maio de 2010, 16:43
#
Segundo esta imagem ::
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.pololu.com%2Fpicture%2F0J629.600.png&hash=3c0a662fc6064887b9a8292e774c188e)
podes ver como está o condensador de 10nF ligado. Está entre o VCC e o COLECTOR do transistor. O PIC vai apenas ler a tensão nesta junção, através de uma resistência para limitar a corrente de carga.

#
Se as ligações estão correctas? assim de repente sim. mas não confirmei o pinout do MAX. Assim que puderes, muda para um PIC16F628A (no mínimo), para não teres que usar cristal e para usares a USART por hardware interna

#
Tens aqui a TABELA ASCII (http://www.asciitable.com/). Vê como podes converter os valores. É simples.

#
Uma função ou outra... depende de como a puts() está escrita. Isso são funções da biblioteca STDIO e a  outra do compilador...  eu prefiro usá-las escritas por mim. São mais rápidas e ocupam pouco espaço. Tive que as fazer, na altura em que comecei a aprender PIC e só havia 16C54 e 16C84.
Procura por bit-bang software usart pic. O google é teu amigo.


Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 31 de Maio de 2010, 17:19
asena não consigo ver a imagem.

em relação ao resto vou a google o nosso amigo :P
 e mais uma vez obrigado.
Já agora asena não fazes formação nos açores(São Miguel)?
se fizeres avisa-me.
Título: Re: Sensor QTR-8RC
Enviado por: senso em 31 de Maio de 2010, 17:33
A imagem de certeza que esta no site da pololu ou no datasheet que eles fizeram, vais até lá e procuras por qtr-8rc.
Aliás, basta meter qtr 8rc no google que vais logo para a página da pololu, que tem lá tudo...
http://www.pololu.com/catalog/product/961 (http://www.pololu.com/catalog/product/961)
Título: Re: Sensor QTR-8RC
Enviado por: AcidDagger em 31 de Maio de 2010, 22:40
tenho um sensor igual a esse, comprei na loja do LR
Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 01 de Junho de 2010, 00:10
Bom, isto já por implicancia minha está quase a ir tudo ao ar e ponho isto num pic16f877, mas ultima tentativa a ver se aprendo alguma coisa.

Fiz a ligação agora da seguinte maneira
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg163.imageshack.us%2Fimg163%2F5403%2Fsemttulohrt.png&hash=570aabbaa420ca9bccb698562a2e20f4) (http://img163.imageshack.us/i/semttulohrt.png/)

Uploaded with ImageShack.us (http://imageshack.us)

Parece-me que agora está bem ligado. Não utilizei a resistencia de 220 pq não tinha nenhuma então pus uma de 270.

Utilizei este codigo
Código: [Seleccione]
#include <16F84.h>
#fuses hs,noprotect,nowdt
#use delay (clock=4000000)                                         // igual ao cristal
#use RS232(baud=2400, bits=8, parity=N, xmit=pin_a1, rcv=pin_a0)
#use fast_io(b)
int TMR0_lido;
int ler;

main()
{

while (1){

   set_TRIS_B(11111110);     //torna o RB0 uma saída, e não mexe nos outros pinos
   output_high(pin_B0);          //saida a 1, para carregar o condensador
   Delay_Us(10);   //espera 50us
   set_TRIS_B(00000001); //TRISB = TRISB | 0b00000001;     //torna o RB0 uma entrada de alta impedância
   set_timer0(0);//limpa o contador
   while (input(PIN_B0));   //enquanto o pino estiver a nivel lógico 1, mantém-se aqui 
   TMR0_lido=get_timer0();//guarda o valor do tempo passado
   ler=get_rtcc();
   putc(ler);
   putc(get_timer0());
   

}
}


Mas a unica coisa que recebo é 0 tapo o sensor e nada.

Será o código ou a ligação que está mal, não faço ideia, Alguem me pode dar umas luzes sff.
Título: Re: Sensor QTR-8RC
Enviado por: Sérgio_Sena em 01 de Junho de 2010, 11:14
Pelo que se vê do esquema eléctrico interno do sensor, todos os componentes necessários já lá estão incluidos.
Podes ligar directamente a saída do sensor, ao PIC.

Experimenta.
Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 01 de Junho de 2010, 12:52
e o código o que te parece?
Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 02 de Junho de 2010, 15:06
Já fiz ligação directa e nada, dá-me sempre 0 e penso que a programação está de acordo com que o fabricante diz, não percebo!!

Algum dica?
Título: Re: Sensor QTR-8RC
Enviado por: senso em 02 de Junho de 2010, 15:40
Onde é que estás a inicializar o timer e com que velocidade/frequencia, essa parte do código não está aqui, ou pelo menos não estou a ver.
Título: Re: Sensor QTR-8RC
Enviado por: Arknum em 02 de Junho de 2010, 23:11
Obrigado a todos esse problema está resolvido.
Pelo vistos senso era mesmo a inicialização do timer que faltava ao código.
Já agora fica aqui o codigo

Código: [Seleccione]
#include <16F84.h>
#fuses hs,noprotect,nowdt
#use delay (clock=4000000)                                         // igual ao cristal
#use RS232(baud=2400, bits=8, parity=N, xmit=pin_a1, rcv=pin_a0)
#use fast_io(b)
int TMR0_lido;
long ler;

main()
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_8); //Set Timer0 prescaler to 8
while (1){

   set_TRIS_B(11111110);     //torna o RB0 uma saída, e não mexe nos outros pinos
   output_high(pin_B0);          //saida a 1, para carregar o condensador
   Delay_Us(50);   //espera 50us
   set_TRIS_B(00000001); //TRISB = TRISB | 0b00000001;     //torna o RB0 uma entrada de alta impedância
   //TMR0 = 0;     //limpa o contador
   set_timer0(0);
   while (input(PIN_B0));   //enquanto o pino estiver a nivel lógico 1, mantém-se aqui
   ler=get_timer0();
   putc(ler);
   putc(get_timer0());

}
}

Depois de ter feito umas experiencias e ter retirado os tempos fiz este codigo para colocar um led a piscar se existisse um objecto num sensor do array ou mantinha-se a 0 se não detectasse nada, mas o led so fica liga se eu colocar um objecto mesmo em cima do sensor e quando lá nao tenho nada o led está sempre a piscar que nem um doido.

Alguem me ajuda sff.

O codigo que utilizei foi este

Código: [Seleccione]
#include <16F84.h>
#fuses hs,noprotect,nowdt
#use delay (clock=4000000)                                         // igual ao cristal
#use RS232(baud=2400, bits=8, parity=N, xmit=pin_a1, rcv=pin_a0)
#use fast_io(b)
long ler;

main()
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_8); //Set Timer0 prescaler to 8
while (1){

   set_TRIS_B(11111110);     //torna o RB0 uma saída, e não mexe nos outros pinos
   output_high(pin_B0);          //saida a 1, para carregar o condensador
   Delay_Us(50);   //espera 50us
   set_TRIS_B(00000001);     //torna o RB0 uma entrada de alta impedância
   set_timer0(0);//limpa o contador
   while (input(PIN_B0));   //enquanto o pino estiver a nivel lógico 1, mantém-se aqui

   ler=get_timer0();
   if(ler<=30)
      output_high(PIN_A2);
      else
      output_low(PIN_A2);
}
}

Título: Re: Sensor QTR-8RC
Enviado por: beirao em 05 de Novembro de 2010, 22:45
Viva,

Preciso de um sensor para detectar linhas e já tinha visto este na LR ha uns tempos. Alguém que já tenha trabalhado com ele, qual a distância máxima a que o sensor ainda se comporta como deve ser?

Obrigado!
Título: Re: Sensor QTR-8RC
Enviado por: NelsonPRSousa em 06 de Novembro de 2010, 10:52
Viva,

Preciso de um sensor para detectar linhas e já tinha visto este na LR ha uns tempos. Alguém que já tenha trabalhado com ele, qual a distância máxima a que o sensor ainda se comporta como deve ser?

Obrigado!
Nas questões técnicas do material está especifico:
# Optimal sensing distance: 0.125" (3 mm)

Certamente dará para um pouco mais, mas perde optimização.
Título: Re: Sensor QTR-8RC
Enviado por: senso em 06 de Novembro de 2010, 11:25
Se quiseres fazer um array á mão podes usar os TCRT5000 da vishay que penso que funcionam até 1cm
Título: Re: Sensor QTR-8RC
Enviado por: beirao em 07 de Novembro de 2010, 01:23

E para os robots da busca e salvamento o pessoal costuma usar os QRD114 ne? Mas esse, tal como o array QTR-8RC possui uma gama de distância muito pequena... mas secalhar vai ter de ser, nao posso gastar tanto dinheiro nos sharp..
Título: Re: Sensor QTR-8RC
Enviado por: amando96 em 07 de Novembro de 2010, 01:50
Os Sharp não são para detectar preto/branco, aliás, uma das suas características é a pouca diferença de sinal com cores diferentes, para seguir linhas os QDR 1114 são mesmo bons :) estragas um, compras outro por 1€ :)
Título: Re: Sensor QTR-8RC
Enviado por: NelsonPRSousa em 07 de Novembro de 2010, 13:35
Os Sharp não são para detectar preto/branco, aliás, uma das suas características é a pouca diferença de sinal com cores diferentes, para seguir linhas os QDR 1114 são mesmo bons :) estragas um, compras outro por 1€ :)
http://loja.lusorobotica.com/123-qtr-8rc-reflectance-sensor-array.html (http://loja.lusorobotica.com/123-qtr-8rc-reflectance-sensor-array.html)
Estes não são indicados para detectar linhas pretas para rescue?  :o
Título: Re: Sensor QTR-8RC
Enviado por: senso em 07 de Novembro de 2010, 14:06
Acho que ele se estava a referir a Sharps, que são os de distancia e não o QTR-8c que se procurares na internet tens montes de robots a usa-los para seguir linhas.
Título: Re: Sensor QTR-8RC
Enviado por: beirao em 07 de Novembro de 2010, 17:30

Quando referi os sharp falava deste por exemplo:
http://loja.lusorobotica.com/126-pololu-carrier-with-sharp-gp2y0d810z0f.html (http://loja.lusorobotica.com/126-pololu-carrier-with-sharp-gp2y0d810z0f.html)

A minha questão é que o QTR-8RC e o QRD1114 têm um alcance muito curto... têm de estar quase colados ao chão, nao?
Título: Re: Sensor QTR-8RC
Enviado por: NelsonPRSousa em 07 de Novembro de 2010, 18:02

Quando referi os sharp falava deste por exemplo:
http://loja.lusorobotica.com/126-pololu-carrier-with-sharp-gp2y0d810z0f.html (http://loja.lusorobotica.com/126-pololu-carrier-with-sharp-gp2y0d810z0f.html)

A minha questão é que o QTR-8RC e o QRD1114 têm um alcance muito curto... têm de estar quase colados ao chão, nao?
Pois, a 0.3cm do chão...

Aqueles robots que vocês têm encomendados da Índia não têm uma placa destas?  ;)
Título: Re: Sensor QTR-8RC
Enviado por: beirao em 07 de Novembro de 2010, 18:06

Quando referi os sharp falava deste por exemplo:
http://loja.lusorobotica.com/126-pololu-carrier-with-sharp-gp2y0d810z0f.html (http://loja.lusorobotica.com/126-pololu-carrier-with-sharp-gp2y0d810z0f.html)

A minha questão é que o QTR-8RC e o QRD1114 têm um alcance muito curto... têm de estar quase colados ao chão, nao?
Pois, a 0.3cm do chão...

Aqueles robots que vocês têm encomendados da Índia não têm uma placa destas?  ;)

Isso são os qu-bot. mas são muito limitados, nao da para fazer muito com eles... portanto eu tenho uma equipa e vamos fazer um robot de raiz para participar no encontro do Clube de Robotica da ESTG. Mas quero fazer uma coisa generica, que depois dê para expandir. E os qu-bot usam uns simples emissores e receptores de IV, como estes por exemplo:
http://www.sonigate.com/?pt#!/3/13810/LED-5mm-Emissor-Infravermelho/ (http://www.sonigate.com/?pt#!/3/13810/LED-5mm-Emissor-Infravermelho/)
http://www.sonigate.com/?pt#!/3/13799/LED-3mm-Receptor-Infravermelho-L-932P3BT/ (http://www.sonigate.com/?pt#!/3/13799/LED-3mm-Receptor-Infravermelho-L-932P3BT/)

E eu questiono a utilização do QTR-8RC por causa do seu alcance... é que apesar de terem a vantagem de ser baratos, podem nao ser muito fiaveis..