ARToolKit - Realidade Aumentada



Já a algum tempo vi no programa Prototype This o uso do software ARToolKit, que permite o uso de realidade aumentada, para o projeto de luta de robôs. Este fim de semana instalei o software no Ubuntu  e usei o adaptador USB Easycap ( exemplo no ML) para conectar uma camera Hi8 que tenho a tempos. O mais complicado na verdade foi fazer o adaptador USB funcionar no linux com o driver aberto. Para windows ele tem um software próprio que vem junto no pacote. Depois de muitas idas e vindas com dependências e reboots consegui estabilizar o sistema e fazer o teste com os exemplos que vem no pacote do ARToolKit.

É realmente muito bacana e divertido e os projetos que estão sendo desenvolvidos pelo mundo são sensacionais, desde manuais de montagem de móveis a livros infantis com recursos de realidade aumentada.

Vale a pena conhecer esta tecnologia que está ao alcance de todos sem custo além de uma camera, que pode ser uma webcam barata, e algum esforço de fim de semana.





Outros links


IR RECEIVER - CONTROLE REMOTO DE TV


A pouco tempo comprei dois receptores de ir por R$ 0,20 cada e fiquei pensando como utilizá-los com a arduino, depois de pesquisar um bocado entendi como funciona a transmissão dos comandos entre o controle remoto e a TV.
É realmente muito interessante pois a gente percebe como cada fabricante desenvolveu um protocolo próprio para seus sistemas, neste site http://www.ustr.net/infrared/infrared1.shtml existe uma explicação bem detalhada.

Usar um receptor de ir com o arduino é bastante simples, a conexão é feita com uma porta digital, no caso deste que usei a pinagem é a seguinte:


A única informação que achei sobre o sensor acima ( acredito que seja este) está neste link o modelo é 1838b e os detalhes:

Supply voltage: 2.7 to 5.5V
Transmission distance :18-20m .

No experimento deste post conectei o pino de dados na porta digital 2 e os de força direto nas portas do arduino (alimentando a bradboard). Usei um controle remoto universal programado com os códigos da TV da sony e usei o código abaixo. As possibilidades são muitas, fazer um controle remoto para robôs ou controlar os equipamentos de casa. Imagine entrar em uma sala e ligar automáticamente o som ou a tv no canal ou estação que você mais gosta?

O código analisa os pulsos recebidos pela porta digital e apresenta na saida serial da IDE do arduino usando o comando pulseIn e transforma em números que são os códigos dos controles remotos da sony, com adaptações é possível usar qualquer marca. Este link tem um exemplo sobre como determinar os códigos .

-----------------------------------------------------------------------
/* 
Program that reads key presses of a sony remote control
Created by Kurtis Waterston, March 6 2010
Realesed into the public domain
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1267950229
*/

int irDet = 2;
int key = 0;
int data[12];
int state;

void setup() {
 Serial.begin(9600);                         //For debugging
 pinMode(irDet, INPUT);                      //IR detector connected to digital pin 2
}

void loop() {                                //Main loop
 if (pulseIn(irDet, LOW) > 2200) {          //Check for start pulse
   getIRkey();
   Serial.print("Key press is = ");
   Serial.println(key);
 }

}

int getIRkey() {                             //Read pulses
 data[0] = pulseIn(irDet, LOW);
 data[1] = pulseIn(irDet, LOW);
 data[2] = pulseIn(irDet, LOW);
 data[3] = pulseIn(irDet, LOW);
 data[4] = pulseIn(irDet, LOW);
 data[5] = pulseIn(irDet, LOW);
 data[6] = pulseIn(irDet, LOW);
 data[7] = pulseIn(irDet, LOW);
 data[8] = pulseIn(irDet, LOW);
 data[9] = pulseIn(irDet, LOW);
 data[10] = pulseIn(irDet, LOW);
 data[11] = pulseIn(irDet, LOW);

 for(int x = 0; x <= 11; x++) {              //Decide wether pulses are 1's or 0's
   if(data[x] > 1000) {
     data[x] = 1;
   }
   else {
     data[x] = 0;
   }
 }

 int result = 0;                            //Convert array into interger
 int seed = 1;
 for(int i=0;i<11;i++) {
   if(data[i] == 1) {
     result += seed;
   }
   seed = seed * 2;
 }
 key = result;
 return result;
}

---------------------------------------------------------------------------------

Uma imagem do setup:








ARDUINO LASER TRIPWIRE - ARMADILHA LASER




No post passado eu estava analisando o uso de um LDR para produzir sons com a arduino, como já estava com o setup montado resolvi fazer a experiência da armadilha de laser dessas de filme de roubo de jóias ou obras de arte aonde os bandidos tem que passar pelos alarmes de laser para conseguir seu objetivo. Minha filha brincou um bocado tentado passar pelo raio do laser sem ser "detectada".

Estes são os elementos que usei:

1 Apontador laser barato - R$ 3,00
1 LDR de 5 mm
1 Alto-falante de 8 oms pequeno

O apontador laser é alimentado por 3 baterias botão bem pequenas, por isso tive que liga-lo a uma bateria mais potente, as baterias originais não aguentaram nem 5 minutos ligadas. Coloquei duas baterias de telefone sem fio de 2.4 volts NiMH ligadas em paralelo para obter 4.8 volts.

Soldei o positivo na carcaça de metal do apontador e o terra na mola que segura as baterias. Desta forma consegui uma fonte de laser bem forte e contante, isso é importante porque para fazer o alarme temos que medir a variação de voltagem vinda do sensor LDR.

No meu caso o valor da leitura do sensor na porta analógica 0 com iluminação ambiente foi de 300 e com o laser foi de 1000. Coloquei no código um valor de 800 para o disparo do alarme.



A montagem é a seguinte:

1. Alto falante com o fio vermelho ligado a porta digital 8 e o preto ao ground;
2. LDR com uma "perna" ligada a 5 volts e a outra ao ground por meio de um resistor de 10 kOhms ( marrom/preto/laranja/dourado) e a porta analógica 0. Existem muitos exemplos de montagem de LDR como estes

Neste exemplo estou usando a TATUINO NANO que é uma placa ótima para todos que querem experimentar com a IDE do arduino, ela pode ser conectada diretamnete na breadbord:



O código é muito simples:

------------------------------------------------------------------------------------------------

/*
 claudio miklos 16/05/2010
 
 */


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

void loop()
{
Serial.print("Analog reading = ");
Serial.println(analogRead(0)); // the raw analog reading
  
if(analogRead(0) <= 800){
  
tone(8, 1000, 10);
}

}
-----------------------------------------------------------------------------------------





Foi interessante conmhecer o TONE do arduino, no entanto tive problemas na comunicação serial, me parece que a comunicação serial interfere no comando tone.

Internet of Things

LUX com arduino GPRS shield e sensor LDR.

/*
Graph: Feed 38642, Datastream lux
*/

Laboratórios, Lojas e Produtos

Blogs, Comunidades e Revistas