Go Down

Topic: led touch (Read 2045 times) previous topic - next topic

mcanet

Hola,

He encontrado un experimento donde utilizan los leds para una doble función por un lado emitir luz y detección táctil (función de sensor).
 
- Mirar el experimento (tiene un video muy ilustrativo):
http://mrl.nyu.edu/~jhan/ledtouch/index.html

- Ha recopilado información sobre el tema:
http://projects.dimension-x.net/technology-and-projects/ledsensors/

Yo no he acabado entender como se podria hacer pero me parece un sensor muy interesante.

un saludo,

Mar Canet

DojoDave

buen punto,

yo ahora mismo estoy de tour Canada-USA pero me lo apunto para echar un vistazo. Lo has intentado montar?

/David

mar canet

No lo he intententado porque no acabo de enterder el circuito que se montan para hacerlo. Pero voy ha mirarlo en detalle todo para intentarlo.

Mar Canet


quique

Lo habeis probado ya?
Parece que se trata de poner al led en corriente inversa como si fuera un fotodiodo y luego cambiar el estado del pin a INPUT para ver lo que tarda en descargarse por el pin del microcontrolador. Yo lo he intentado pero el led no se me descarga por el pin así que le puse un potenciómetro a tierra para que se descargue por ahí el diodo. Jugando con el potenciómetro hay un punto en el que se deja de recibir 0 por el puerto serie y se pasa a a recibir 2000, que es el timeout que he fijado para medir la descarga del diodo. Ajustando este punto más o menos funciona  pero ni de lejos como en el vídeo. Además es bastante delicado encotrar el dichoso punto y las medidas tienen una componenete aleatoria bastante fuerte (algún electrón perdido por ahí).
Con esto sólo se ve que la cosa puede funcionar, me imagino que se puede depurar bastante.

Code: [Select]

/* Reading a  LED */
 
int bias  = 10;                 //  
int probe = 9;                  //
int val = 0;

void setup()
{
  pinMode(bias, OUTPUT);              
  digitalWrite (bias, HIGH);
  
  pinMode (probe, OUTPUT);
  digitalWrite (probe, LOW);
  
  beginSerial(9600);
}

void loop()
{
  int count = 0;

// Reverse Biass
  digitalWrite (bias, LOW);
  digitalWrite (probe, HIGH);
  delayMicroseconds (500);
  
// Discharge Measure

  pinMode(probe, INPUT);
  delay (1);
  val = digitalRead(probe);
  
  while(val == HIGH) {
  val = digitalRead(probe);
  count ++;
  if (count > 1999) {break;}
  }

  // Restore emiting  
  pinMode (probe, OUTPUT);
  digitalWrite (bias, HIGH);
  digitalWrite (probe, LOW);

  printInteger(count);
  serialWrite(10);
  serialWrite(13);
    
   count = 0;
   delay (200);

}


Go Up