Sensor de proximidade simples para o RCX

Para os mais especializados em mecânica e electrónica em LEGO.
Responder
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Sensor de proximidade simples para o RCX

Mensagem por AVCampos »

Já tinha visto em vários sítios que se podia combinar o sensor de luz do RCX com o emissor de infravermelhos dele e ficar com um sensor de proximidade... assim não é preciso dar com o nariz nas coisas para saber que elas estão lá. 8)

O sensor de luz aponta na mesma direcção que o RCX, e mede os infravermelhos que este emite e que são reflectidos por algum obstáculo. Mais fácil de construir não há:
[align=center][img width=320]http://www.brickshelf.com/gallery/AVCam ... sensor.png[/img][/align]

Era o que eu tinha planeado para o Explorador e o Mk. II, mas nunca consegui que o programa funcionasse bem: precisava duma calibração complicada e mesmo assim dependia muito da luz à volta!

Então lembrei-me duma coisa simples: simplesmente medir a luz sem os infravermelhos ligados, medir a seguir com eles, e ver a diferença. Se houver uma diferença grande, é porque está algo perto e cuidado! Resolvi partilhar o método aqui, para o caso de dar jeito a algum de vós.

Estruturalmente, fica assim:
  • Fazer uma leitura do valor de luz
  • Iniciar a emissão contínua de mensagens por infravermelhos
  • Fazer uma nova leitura do valor de luz
  • Parar a emissão de mensagens por infravermelhos
  • Se as duas leituras tiverem uma diferença maior que determinada constante, dar o alerta
Para testar isto, fiz o seguinte programa de NQC (que está em inglês no link da imagem, para quem tiver preguiça de copy-paste ;)):

Código: Selecionar todos

#define LIMIAR 160

task main ()
{
	int valorvelho;
	SetSensorType (SENSOR_1, SENSOR_TYPE_LIGHT);
	SetSensorMode (SENSOR_1, SENSOR_MODE_RAW);
	SetTxPower (TX_POWER_HI);

	while (true)
	{
		valorvelho = SENSOR_1;
		start Enviar;
		if (abs (SENSOR_1 - oldvalue) > LIMIAR)
			PlaySound (SOUND_CLICK);
		stop Enviar;
	}
}

task Enviar ()
{
	while (true)
		SendMessage (255);
}
Com este programa, o RCX apita como um detector de metais sempre que se aproxima a menos de alguns decímetros de alguma coisa, tanto de dia como de noite, seja uma parede branca ou um gato preto. ;D Deve ser possível melhorar o programa, para só medir a luz no mesmo instante em que tem os infravermelhos ligados, mas não experimentei. :)

Este método também deve funcionar da mesma maneira com o NXT e o seu sensor de luz! Por exemplo, o sensor de ultra-sons aponta para a frente do robot para medir a distância a obstáculos, enquanto o de luz aponta para baixo para detectar o bordo da mesa (ou degraus) e não cair.

Como, ao contrário do sensor do RCX, pode-se ligar e desligar o LED vermelho que tem, em princípio fará a mesma coisa mas com luz visível em vez de infravermelhos. Terá a vantagem de se poder ter o sensor onde se quiser e não atrelado ao "tijolo", mas deve dar um efeito de "pisca-pisca" com o LED a acender e apagar. Alguém quer experimentar e ver se funciona? :expectation:
Avatar do Utilizador
Jorge Reis
Sócio
Sócio
Mensagens: 5863
Registado: 26 jul 2006, 22:54
Localização: Braga

Re: Sensor de proximidade simples para o RCX

Mensagem por Jorge Reis »

Excelente descoberta e muito bem apresentado, PARABÉNS.

Lembraste daquele projecto de robótica que te falei?

é este tipo de coisinha que gostava de ver mais vezes aqui exploradas no fórum :fixe:

Força nisso rapaz :fixe:
Imagem
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 16131
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada) / Sesimbra
Contacto:

Re: Sensor de proximidade simples para o RCX

Mensagem por Conchas »

Será o mesmo principio que foi utilizado com este Segway ???

FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

Sanjoanense :brincka: 2026, 3-5 de Outubro
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: Sensor de proximidade simples para o RCX

Mensagem por AVCampos »

[quote="Jorge Reis"]
é este tipo de coisinha que gostava de ver mais vezes aqui exploradas no fórum :fixe:[/quote]
Também eu gostava! Os roboticistas não são muitos por cá, e têm pouca tendência de criar coisas novas (eu incluído). :'( Vamos lá pessoal, vamos matar a fome de engenhos uns dos outros! :expectation:

[quote="Conchas"]
Será o mesmo principio que foi utilizado com este Segway ???[/quote]
É bem possível, não faço ideia! Pode ser que a taxa de imagens do vídeo não deixe ver a cintilação do LED, ou então ele está sempre ligado e são medidos valores absolutos de luz. Seja como for, ou o Legway tem muito peso à frente ou está programado para manter uma distância do sensor ao chão muito curta, pois tem de ser empurrado para trás para ficar no mesmo sítio. ;)
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 16131
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada) / Sesimbra
Contacto:

Re: Sensor de proximidade simples para o RCX

Mensagem por Conchas »

É uma questão de programação.
O do Philo não se comporta da mesma maneira.

Coloquei este porque o video é mais animado e o do Philo acho que não está no YouTube.
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

Sanjoanense :brincka: 2026, 3-5 de Outubro
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: Sensor de proximidade simples para o RCX

Mensagem por AVCampos »

[quote="Conchas"]
É uma questão de programação.[/quote]
Exacto! Por isso é que passei tantos eventos (pelo menos, que me lembre, o último aniversário da PLUG e a PLUGfest do Laranjeiro) de nariz metido no computador às voltas com a programação do bicho e sem funcionar bem. :notcool: E, no fim de contas, tinha este ovo de Colombo à espera de se esparramar contra a minha cara. :D
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 16131
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada) / Sesimbra
Contacto:

Re: Sensor de proximidade simples para o RCX

Mensagem por Conchas »

Muitas vezes mais vale deixar de lado durante uns tempos, que as boas ideias acabam por vir quando meno se espera. ;)
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

Sanjoanense :brincka: 2026, 3-5 de Outubro
aparicio
Jr. Member
Jr. Member
Mensagens: 98
Registado: 26 jun 2009, 09:50

Re: Sensor de proximidade simples para o RCX

Mensagem por aparicio »

Viva,

Fiz o seguinte teste no NXT (código NXC):
(ver também  http://www.plug.pt/forum/http://localho ... 077#p57077)

Código: Selecionar todos

int sensorLuzOff; // valor com led off
int sensorLuzOn;  // valor com led on

task main(){

     SetSensorLight(IN_3);     // sensor de luz
     SetSensorMode(IN_3,IN_MODE_PCTFULLSCALE);
     ResetSensor(IN_3);
                 
     ClearScreen();

     while(true){

                 // led on
                 SetSensorType(IN_3,IN_TYPE_LIGHT_ACTIVE);
                 sensorLuzOn = Sensor(IN_3);   // leitura com led on
                 
                 Wait (1000);
                 
                 // led off
                 SetSensorType(IN_3,IN_TYPE_LIGHT_INACTIVE);
                 sensorLuzOff = Sensor(IN_3);     // leitura com led off

                 ResetSensor(IN_3);
                 Wait (1000);
                                 
                 TextOut(0,LCD_LINE1,"SensorLuzOn", true);   // true limpa LCD
                 TextOut(0,LCD_LINE2,NumTOStr(sensorLuzOn));

                 TextOut(0,LCD_LINE4,"SensorLuzOff", false);
                 TextOut(0,LCD_LINE5,NumTOStr(sensorLuzOff));
    }
}
O valor medido com e sem o led ligado varia bastante, principalmente quando há pouca luz ambiente.

Mesmo assim ainda consegui distinguir uma bola vermelha de uma azul com pouca luz. Com o led ligado a diferença entre a leitura entre cores é muito mais elevada. Apontando o sensor para a janela obtive a mesma leitura em ambos os casos.

Uma coisa é certa: vou poupar bateria nos casos em que houver muita luz ambiente :)
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: Sensor de proximidade simples para o RCX

Mensagem por AVCampos »

Nesta aplicação é mau haver diferenças de leituras conforme as cores: o ideal é as leituras variarem só com a distância ao objecto e não com as suas características.

Mas, mantendo tudo parado, é bastante promissor haver diferenças acentuadas com o LED ligado e desligado! Assim podes medir com ele desligado para obter a luz ambiente, e medir com ele ligado para obter a ambiente + a reflectida pelo obstáculo. :fixe:
Responder