LEDs Bi-Direccionais
Outubro 28, 2009 at 10:50 pm | In Arduino, Outros | Leave a CommentTags: Arduino, bidireccional, bidirectional, led
O que é que se pode fazer com um LED? Resposta: apenas luz. Errado! O que se pretende com este artigo é exactamente mostrar que os LEDs, para além de dispositivos de Output também podem funcionar como Input.
Estudos realizados comprovam que se acendermos um LED e invertermos a sua polaridade muito rapidamente, o tempo que o LED demora a ficar a zero depende da luz ambiente.
É claro que quando digo tempo, estamos a falar de fracções de segundo, que não se notam a olho nu, mas que um microcontrolador consegue medir.
Como funciona?
Pin 1 OUT HIGH -------( + LED - )------- Pin 2 OUT LOW Delay 50ms Pin 1 OUT LOW -------( + LED - )------- Pin 2 OUT HIGH Pin 1 IN Medir tempo que Pin 1 leva a ficar 0 Repetir desde o início
Quando nós temos muita luz, o tempo vai ser menor.
Por outro lado, quando temos pouca luz, vai demorar mais tempo.
Experiência
Confesso que no início estava séptico em relação a estes conceitos novos. Fazer do LED um dispositivo de entrada é algo que nunca tinha ouvido sequer falar, muito menos tinha visto. Portanto, não há nada como testar.
É possível testar a validade destas novas ideias através do Arduino, utilizando apenas 2 Pinos e a porta de série.
O código:
int p1 = 2;
int p2 = 3;
int wait = 50;
int value;
void setup()
{
// Desactiva as resitências "pull-up" embutidas no Arduino
_SFR_IO8(0x35) |= 4;
_SFR_IO8(0x35) |= (1<<4);
pinMode(p1, OUTPUT); // Define p1 como uma saída (OUTPUT)
pinMode(p2, OUTPUT); // Define p2 como uma saída (OUTPUT)
Serial.begin(9600); // Iniciar a ligação serial
}
void loop()
{
value = 0;
// Emitir LUZ
digitalWrite(p1, HIGH);
digitalWrite(p2, LOW);
delay(wait);
// Trocar os potenciais : LED = -5V
digitalWrite(p1, LOW);
digitalWrite(p2, HIGH);
// Trocar o modo do pin
pinMode(p2, INPUT);
// Medir o tempo que o p2 leva a ficar a LOW
while(digitalRead(p2) != 0)
value++;
pinMode(p2, OUTPUT);
digitalWrite(p1, HIGH);
digitalWrite(p2, LOW);
Serial.println(value, DEC); // Tira os // se quiseres mostrar o valor na consola
}
Façam upload do código, abram a Consola e confiram que o valor altera para diferentes luzes ambiente. Podem acender e apagar a luz, ou iluminar bem o LED e passar a mão por cima dele.
Mais além
Se quiserem ir mais além, lanço um desafio. Façam um 2º LED acender, conforme o valor inferido pelo 1º LED.
Depois, adicionem novos pares e façam uma fila de LEDs, e criem um efeito com os dedos a passar por cima dos LEDs sensores.
Boas experiências
Exemplo
Aqui está um exemplo do que se pode conseguir através deste princípio.
Fontes de Informação
http://projects.dimension-x.net/technology-and-projects/ledsensors
Sem comentários ainda »
Feed RSS para comentários a este post. TrackBack URI
Publicar um comentário
Blog em WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.

