Neste tutorial vamos usar um LDR (Light Dependent Resistor) para simular uma compensação de luz de 5 níveis, ou seja, dependendo se há mais ou menos luz incidindo no sensor o sistema liga ou desliga uma série de LEDs.
Este programa poderia ser usado em um sistema de iluminação com cinco linhas de luz que vão acendendo conforme o sol se põe, compensando progressivamente a deficiência de luz.
Além disso, um potenciômetro ajusta o nível crítico mínimo de luz, a partir do qual se ativará o circuito.

O Que Vou Aprender?

- Leitura serial de um sensor analógico
- Utilização de uma leitura analógica
- pino AREF do Arduino

Conhecimentos Prévios

- Função digitalWrite()
- Condicional if/else

Código Fonte

Download do arquivo em formato .ino

Materiais Necessários

Para este tutorial você vai precisar de 1 Arduino Uno R3, 1 LDR, 5 LEDs, 1 potenciômetro, 5 Resistores 330Ω, 1 Protoboard, 1 Cabo USB - AB e Jumpers premium. Ou você pode utilizar os componentes do Kit Iniciante com Arduino Uno R3.

Tutorial Multilógica-Shop Arduino Sensor LDR

 

Diagrama

Tutorial Multilógica-Shop Arduino Sensor LDR

 

Código Fonte

/*
 Sensor LDR
 Conectar um LDR a uma entrada analogica para controlar cinco saidas em funcao da luz ambiente.
 Este codigo e de dominio publico.
 Criado em 27/11/2011 por Arduteka.
 Modificado em 13/01/2014 por Multilogica-Shop.
*/
 
//Armazenar os dados recolhidos pelo sensor LDR:
int valorLDR = 0;
 
//Definir os pinos de entrada dos LEDs:
int pinLed1 = 12;
int pinLed2 = 11;
int pinLed3 = 10;
int pinLed4 = 9;
int pinLed5 = 8;
 
//Definir pino de entrada do sensor LDR
int pinLDR = 0;
 
void setup()
{
  Serial.begin(9600);
 
//Definir os pinos de saida dos LEDs:
  pinMode(pinLed1, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  pinMode(pinLed3, OUTPUT);
  pinMode(pinLed4, OUTPUT);
  pinMode(pinLed5, OUTPUT);
 
  //Definimos o uso de uma referencia externa:  
  analogReference(EXTERNAL);
 
}
void loop()
{
  //Guardar o valor da leitura de uma variavel:
  valorLDR = analogRead(pinLDR);
  Serial.println(valorLDR);
 
  //Definicao do padrao de controle dos LEDs:
  if(valorLDR >= 1023)
  {
    digitalWrite(pinLed1, LOW);
    digitalWrite(pinLed2, LOW);
    digitalWrite(pinLed3, LOW);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else if((valorLDR >= 823) & (valorLDR < 1023))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, LOW);
    digitalWrite(pinLed3, LOW);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
 
  else if((valorLDR >= 623) & (valorLDR < 823))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, LOW);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else if((valorLDR >= 423) & (valorLDR < 623))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, HIGH);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else if((valorLDR >= 223) & (valorLDR < 423))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, HIGH);
    digitalWrite(pinLed4, HIGH);
    digitalWrite(pinLed5, LOW);
  }
  else
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, HIGH);
    digitalWrite(pinLed4, HIGH);
    digitalWrite(pinLed5, HIGH);
  }
}

 

Dica

Quando o Arduino recebe um sinal analógico ele o converte para digital em 1024 partes. Esta operação é padrão já que o Arduino pensa que o sinal que vai receber varia entre 0v e 5v o que nos dá um valor para cada parte de aproximadamente 4,88 mV. Mas podemos dizer que não, que realmente o sistema vai funcionar entre 0v e 3v, obtendo assim 1024 partes distribuídas entre 0v e 3v, o que nos dá um valor para cada parte de 2,9 mV, ou seja, uma resolução muito maior. A distribuição destes valores vamos dividir igualmente em nosso programa para fazer uma ativação progressiva das linhas de iluminação.

Se colocarmos a referência muito baixa, os LEDs começam a funcionar com menos luz ambiente que se colocarmos um sinal mais alto, lembre-se:

    Mais luz = menor resistência = Vout maior
    Menos luz = maior resistência = Vout menor

Este controle será feito via potenciômetro, onde poderemos calibrar o sistema através da luz ambiente.

 pinMode(EXTERNAL);

Com esta instrução estamos dizendo a nosso Arduino que não use a tensão de referência (+5V), mas sim a que vamos aplicar através do pino AREF.

 

Este tutorial é parte integrante do Guia Iniciante Arduino, desenvolvido pela equipe da Multilógica-Shop. Faça download grátis do arquivo com 15 tutoriais. Neste guia você também vai encontrar, além de indicações de instalação e tutoriais, uma grande quantidade de informações sobre todo o ambiente que está ao redor desta plataforma.

Guia Arduino Iniciante Multilógica-Shop 2.0