domingo, 25 de março de 2012

Sensor de Luminosidade com LDR - Parte 2

Arduino by my Self
Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);



Bom vamos à parte prática do assunto de sensoreamento de luz.

Primeira experiência:

Esquema de Ligação do LDR e LED
Nesta experiência vamos verificar o controle PWM de um LED, partindo das informações provenientes de um LDR, ou seja:
Quanto maior a luminosidade incidente no LDR maior o brilho no LED vise-versa.
Usamos também a comunicação serial para fazer uma leitura dos dados obtidos pelo LDR.
Um controle bem simples, mas utilizado em muitos projetos relacionados com iluminação.

Abaixo listamos o hardware necessário:
1 x Arduino UNO ou Duemilanove
1 x Bread Board
1 x LDR
1 x LED
1 x Resistor 220O
1 x Resistor 10KO
Fios, Cabos e Jumpers



Você pode usar vários valores de resistor em conjunto com o LDR para formar o divisor de tensão para obter diferentes resultados e semsibilidades do sensor, dependendo que você quer medir (quantidade de luminosidade)

Abaixo o software comentado:


/* Sketch simples, para testes com LDR */

// definição de variáveis
int photocellPin = 0;     // o LDR e seu resistor de pulldown são conectados ao pino a0
int photocellReading;     // leitura analógica do divisor do sensor
int LEDpin = 11;          // pino do LED
int LEDbrightness;        // variável para conter o brilho do LED
void setup(void) {
  // envia informação para o monitor serial
  Serial.begin(9600);   // inicializa a comunicação serial
}

void loop(void) {
  photocellReading = analogRead(photocellPin); // faz a leitura do LDR  

  Serial.print("Leitura analógica = "); // escreve mensagem
  Serial.println(photocellReading);     // escreve a quantidade lida

  // LED brilhará mais no escuro 
  // isso significa que temos que inverter a leitura de 0-1023 para 1023-0
  photocellReading = 1023 - photocellReading;
  
  // mapeamento dos valores de 0-1023 para 0-255 que é o que o a função analogWrite usa
  LEDbrightness = map(photocellReading, 0, 1023, 0, 255);
  analogWrite(LEDpin, LEDbrightness); // acende o LED com o brilho determinado

  delay(100); // pausa
}

// Fim da compilação


Resultados:
O resultado esperado é uma leitura no monitor serial dos valores do LDR (dependendo do resistor utilizado como divisor de tensão) dentro de uma faixa
Aconselho colocar um potênciometro de 1MO em série com um resistor de 1KO, no lugar do resistor fixo de 10KO, para assim fazer o ajuste de sensibilidade.
Abaixo uma janela do monitor serial.

Relacionado ao LED, ele deve variar sua luminosidade conforme a faixa monitorada desde ausência de brilho até máximo brilho, conforme o LDR esteja iluminado ou sem iluminação, respectivamente (veja o vídeo abaixo).


Segunda Experiência:

Nesta segunda experiência, veremos como mensurar os valores com limiares pré estabelecidos de luminosidade.
Faixa de:

0 - 9 = escuridão
10 - 199 = penumbra
200 - 499 = iluminado
500 - 799 = brilhante
800 - 1023 = muito brilhante


Não será usado nenhum cálculo ou mapeamento.
A mensagem será mostrado no monitor serial, mas é facilmente adaptado em um display LCD 16x2

O hardware e o material utilizado podem ser os mesmos da primeira experiência, eliminando o LED que não será usado.

Programa comentado:


/* simples teste com LDR
para maiores informações: 
www.ladyada.net/learn/sensors/cds.html */

int photocellPin = 0;     // pino a0 conectado ao LDR e resistor dde 10K pulldown
int photocellReading;     // armazena o valor da leitura analógica

void setup(void) {
  // mostra os valores lido no monitor serial
  Serial.begin(9600);   // inicializa a comunicação serial
}

void loop(void) {
  photocellReading = analogRead(photocellPin);  // faz a leitura analógica do LDR

  Serial.print("Valor Analog. = ");   // mensagem
  Serial.print(photocellReading);     // o valor lido

  // alguns limiares para quantizar valores determinados
  if (photocellReading < 10) {
    Serial.println(" - Dark"); // escuridão
  } else if (photocellReading < 200) {
    Serial.println(" - Dim"); // penumbra, entardecer
  } else if (photocellReading < 500) {
    Serial.println(" - Light"); // luz
  } else if (photocellReading < 800) {
    Serial.println(" - Bright"); // brilhante
  } else {
    Serial.println(" - Very bright"); // muito brilhante
  }
  delay(1000);
}


Resultados:

Conforme o LDR é iluminado ou não, detectamos o quanto de luminosidade ele tem e de acordo com parâmetros de iluminação determinados pela tabela, informamos num display ou no monitor serial a  faixa que se encontra a iluminação do LDR.
Veja abaixo uma tela da comunicação serial recebendo os valores:





Abaixo o vídeo das duas experiências:




Espero que o tema tenha sido interessante e até o próximo post.


Dúvidas e sugestões enviem para: arduinobymyself@gmail.com