Sensor de Luz – Aprendendo a usar o LDR

571 Flares Twitter 0 Facebook 571 Google+ 0 571 Flares ×

Sensor de Luz

Que tal construir um dispositivo que seja capaz de detectar luz? Você pode, por exemplo, fazer uma lâmpada que ligue sozinha durante a noite. Nesse tutorial, iremos aprender a usar um componente simples e barato que pode ser usado em diversos projetos, o LDR.

Relembrar é viver

Quem nunca se perguntou como os postes ligam sozinhos de noite? Quantas vezes, quando éramos crianças tentamos apagar as lâmpadas deles usando um laser? Possivelmente, muitos de nós já sabíamos qual era o dispositivo que acionava as lâmpadas.

O nome do dispositivo responsável por saber a hora certa de iluminar é conhecido como fotocélula ou relé fotocélula. Ele recebe a luz através dessa parte transparente. Como é possível ver na imagem abaixo, a fotocélula possui um LDR que irá medir a luminosidade.

14066-MLB190694169_5989-O

Fig 1 – Fotocélula

 

Nessa fotocélula, quando o valor de luminosidade é menor do que o valor desejável, ele comuta uma chave que poderá ligar uma lâmpada, por exemplo.

LDR

O LDR, sigla em inglês de Light-Dependent Resistor, que significa resistor dependente de luz, nada mais é do que o que o próprio nome diz. Tipicamente, quanto maior a luz incidente nesse componente, menor será sua resistência.

ldr

Fig 2 – Um típico LDR

 

O LDR é constituído de um semicondutor de alta resistência, que ao receber uma grande quantidade de fótons oriundos da luz incidente, ele absorve elétrons que melhoram sua condutibilidade, reduzindo assim sua resistência.

Dessa forma, esse semicondutor pode assumir resistências na ordem de mega Ohm no escuro e resistência na ordem de poucas centenas quando exposto a luz.

Mãos à obra – Fazendo um sensor de luz

Ingredientes:

  • Fios Jumper’s
  • Protoboard
  • Arduino Uno Rev3
  • 1x LED
  • 1x Resistor 300Ohm
  • 1x LDR
  • 1x Resistor 10kOhm

Misturando os ingredientes

Agora vamos conectar os componentes do projeto. Para isso, desligue o cabo USB de seu Arduino e monte seu circuito conforme a figura a seguir.

Fig 3 – Esquema de montagem

 

Veja como ficou o nosso:

Fig 4 – Montagem na prática

 

Levando ao forno

Conecte seu Arduino ao computador e abra a IDE Arduino.

Antes de carregar um programa, você precisa selecionar qual porta você deseja usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino Uno)”.

Você também precisa garantir que o tipo de placa apropriado está selecionado em Ferramentas(Tools) no submenu Placa (Board).

Preparando a cobertura

Crie um programa (sketch) e salve com o nome de “programa_sensor_de_luz”.

Com o seu programa salvo, escreva nele o código conforme escrito abaixo.

//Sensor de luz

int ledPin = 7; //Led no pino 7
int ldrPin = 0; //LDR no pino analígico 8
int ldrValor = 0; //Valor lido do LDR

void setup() {
 pinMode(ledPin,OUTPUT); //define a porta 7 como saída
 Serial.begin(9600); //Inicia a comunicação serial
}

void loop() {
 ///ler o valor do LDR
 ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023

 //se o valor lido for maior que 500, liga o led
 if (ldrValor>= 800) digitalWrite(ledPin,HIGH);
 // senão, apaga o led
 else digitalWrite(ledPin,LOW);

 //imprime o valor lido do LDR no monitor serial
 Serial.println(ldrValor);
 delay(100);
}

Após escrever o código, clique em Upload para que o programa seja transferido para seu Arduino.

Experimentando o prato

Caso tenha ocorrido tudo como esperado, ao cobrir o LDR, o LED irá acender. Abra o monitor serial para verificar o que está sendo lido na entrada A0.

gif_sensordeluz

Fig 5 – Funcionamento do projeto

 

Entendendo o Hardware

Divisor de tensão

Quando temos n resistência associadas em série temos o nome de divisor de tensão. Em um circuito divisor de tensão, temos uma queda de tensão em cada resistência igual ao produto da resistência com a corrente do circuito.

Como a corrente do circuito é calculada pela divisão da tensão sobre todos os resistores dividido pela soma dos resistores, teremos a tensão em cima de um resistor igual a resistência desse resistor vezes a tensão total dividida pela soma dos resistores.

O exemplo a seguir mostra como funciona o cálculo o para dois resistores.

divisor de tensão

Fig 6 – Divisor de tensão

 

Quando usamos um LDR, que é uma resistência foto-variável, podemos usar da propriedade do divisor de tensão para medir a variação da queda de tensão em cima do mesmo. . Sabemos que a tensão total e a resistência total são fixas. Dessa forma, o divisor de tensão vai variar com a resistência entre A0 e GND.

divisor de tensão ldr

Fig 7 – Leitura do LDR

 

 

Levando em conta que quanto menos luz incidir sobre o LDR maior será sua resistência, teremos a tensão sobre o LDR e por conseguinte o valor de A0 maior com um índice de luminosidade incidente menor, isto é, num local mais escuro.

 

Entendendo o Software

Primeiramente, em nosso programa usamos o comando de leitura analógica, já estudado no tutorial Entradas e Saídas Analógicas, para ler qual o valor em A0. Além disso, usamos a comunicação serial, também discutida em outro tutorial, Comunicação Serial Arduino . É importante que o leitor entenda como eles funcionam. Experimente ler nossos tutoriais anteriores.

Em resumo, nosso programa lerá qual é o valor do sinal em A0, que varia de 0 à 1023, e o comparará com um valor de referência que em nosso caso é 800. Tendo em vista que quanto mais escuro, maior será o valor de A0, caso A0 seja maior que o valor de referência o programa liga o LED conectado ao pino 7, caso contrario, ele  apaga o LED. O programa também imprime o valor de A0 com o intuito que possamos verificar a faixa de valores e até calibrar nosso sensor.

Tente mudar o valor de referência e veja que quanto maior esse valor, menor será sua sensibilidade.

Desafios

  1. Crie um alarme usando um buzzer e um LDR, explicado em nosso ultimo tutorial Usando buzzer com Arduino, Quando houver pouca luz, o alarme deve disparar.
  2. Usando 3 ou mais LED’s e um LDR, faça um programa que aumente o numero de LED’s acesos conforme a intensidade de luz seja menor.

 

Esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto!!

Revisão por Ícaro Lobo.

Apostila Arduino 800px

571 Flares Twitter 0 Facebook 571 Google+ 0 571 Flares ×

Allan Mota

Estudante de Engenharia Elétrica da UFES, integrante da ERUS - Equipe de Robótica da UFES e Fundador do Vida de Silício. Sonhador com uma única pretensão, fazer a diferença.

You may also like...

  • WeLL

    //Sensor de luz COM NÍVEL

    int ledPin7 = 7; //Led no pino 7
    int ledPin8 = 8; //Led no pino 8
    int ledPin9 = 9; //Led no pino 9
    int ldrPin = 0; //LDR no pino analógico 8
    int ldrValor = 0; //Valor lido do LDR

    void setup() {
    pinMode(ledPin7,OUTPUT); //define a porta 7 como saída
    pinMode(ledPin8,OUTPUT); //define a porta 8 como saída
    pinMode(ledPin9,OUTPUT); //define a porta 9 como saída
    Serial.begin(9600); //Inicia a comunicação serial
    }

    void loop() {
    ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023

    if (ldrValor>= 600) {
    digitalWrite(ledPin7, HIGH);
    digitalWrite(ledPin8, HIGH);
    digitalWrite(ledPin9, HIGH);
    }
    else {
    if (ldrValor>= 400) {
    digitalWrite(ledPin7, HIGH);
    digitalWrite(ledPin8, HIGH);
    }
    else {
    if (ldrValor>= 200) {
    digitalWrite(ledPin7, HIGH);
    }
    else {
    digitalWrite(ledPin7, LOW);
    digitalWrite(ledPin8, LOW);
    digitalWrite(ledPin9, LOW);
    }
    }
    }
    //imprime o valor lido do LDR no monitor serial
    Serial.println(ldrValor);
    delay(100);
    }

  • Luiz C

    Olá Allan. Será que pode me dar uma dica? Estou tentando montar um circuito simples com o LDR e arduino com a finalidade apenas de o horário da aurora e do ocaso, ou seja quando o Sol nasceu e quando se pôs. Para tanto estou registrando os valores de tensão obtidos a partir do fotoresistor. Aqui é que está o problema. Meu código só tem dado dois valores de tensão (mínima e máxima) 0,16V e 5,00V, ou seja é tudo ou nada, parece não haver para ele valores intermediários de iluminação. Será que você teria uma dica que eu pudesse testar? (obs.: estou usando o módulo pronto do LDR que vem com o potenciômetro, o arduino é o mega 2560 e tudo rodando no Linux Ubuntu). O código que estou usando é bem simples. Segue abaixo o código. Desde já agradeço. Att, Luiz.

    const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
    float sensorValue = 0.000; // value read from the pot

    void setup() {
    // initialize serial communications at 9600 bps:
    Serial.begin(9600);
    }

    void loop() {
    // read the analog in value:
    sensorValue = analogRead(analogInPin)*0.0048875;

    // print the results to the serial monitor:
    Serial.print(“Tensao = ” );
    Serial.println(sensorValue,2);

    delay(1000);
    }

  • Tayane

    Boa tarde, como faço na programação caso eu queira registrar a hora exata que o LED vai acender e mandar “printar” horário na tela?!

  • Natan Bittencourt

    Mas a resistência total não é fixa. Se a resistência do LDR é variável com a taxa de luz incidente, então a resistência total é variável.

  • adson

    oi gostaria de uma ajuda se poder me chama no meu whats 985148225 adson

  • Gabriel Fernandes

    Estou tendo problema ao carregar o programa na placa, aparece esta msg de erro:

    Biblioteca inválida encontrada em C:UsersUsuarioDocumentsArduinolibrariesprograma_sensor_de_luz: C:UsersUsuarioDocumentsArduinolibrariesprograma_sensor_de_luz

  • Greg Kappel

    Opa! To usando um ldr pra controlar um led. Ele acende quando a luz ta baixa. Mas de repente ele dá um pico. Ele varia de 20 a 80, 100. O que pode ser? Se for algo que eu possa estar fazendo errado, poderiam me ajudar?

  • João Pereira

    Muito bom site!!! precisa de crescer para ser ainda melhor!!! Parabéns!

  • Gabriel Schmidt

    Bom dia,teria como chamar no whathzap estou com algumas duvidas.Obrigado. (31)99745-4897