Sensor de proximidade simples para o RCX
Enviado: 29 jul 2009, 22:48
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á. 
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:
):
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.
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?
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
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);
}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?