domingo, 20 de maio de 2018

Mostrando LDR em porcentagem - Arduino

Mencionei que seria interessante adicionar um LDR em nosso projeto de datalogger, pois podemos assim cruzar informações, a exemplo: Com 50% de luminosidade a amplitude térmica é 30% menor que a 80% de luminosidade. Nem sei se isso vai ser possível, mas vamos lá.



Um LDR é um resistor que varia seu valor de acordo com a luz, e essa leitura é feita de forma analógica, que no Arduino se apresenta com valores entre 0 e 1023. Então quando fizermos a leitura em um LDR ideal, sem receber luz alguma o arduino lerá 1023. Quando a leitura for no LDR exposto ao máximo de luz a leitura será 0.

Então temos duas condições que trabalharemos com mínimos e máximos diferentes:

1) Quando vamos medir um ambiente variável qualquer:
Nesse ambiente não existe um controle de qual será a luminosidade mínima e máxima, inclusive ela não não pode ser controlada. Nesse caso se define que o valor mínimo será 1023 e o máximo 0. Um exemplo de situação é quando se deseja capturar dados de luminosidade a campo.

Quando se deseja comparar o crescimento vegetativo de uma muda de café, uma exposta a sol pleno em sistema convencional. A outra parcialmente sombreada em um consórcio com mogno. Assim você terá a informação da luminosidade e do crescimento, e pode cruzar esses dados. Mesma coisa sobre peso de 1000 grãos, qualidade do grão, etc...

2) Quando podemos controlar a luminosidade dentro de uma faixa de valores. Um exemplo seria uma câmara fechada, nela eu possuo uma lâmpada, e preciso controlar e armazenar o percentual de luminosidade que a planta está recebendo de acordo com a intensidade da lâmpada.
Assim eu coloco a lâmpada no mínimo e gravo o valor lido pelo LDR, depois no máximo e novamente gravo o valor, e utilizo eles como limites do LDR, assim meu percentual será entre esses limites.

Você deve ter percebido que o LDR pode ser utilizado com alguma validade em experimentos cuja luminosidade máxima e mínima são controladas. Agora em experimentos que os valores serão 0 e 1023 isso pode ser um problema, se for utilizado para comparação entre dois valores o uso pode ser válido:
Descobrir que a planta Y recebe 25% mais luz que a planta Z.
Agora para valores absolutos o LDR não se demonstra tão interessante, porque descobrir o máximo de luz (valor 0) não traz precisão. No meu LDR colado ao led de celular mais forte que encontrei o valor foi de 23.

Um LDR é muito barato e fácil de usar, é até difícil comprar unidades na internet, normalmente a venda se dá em kits. Mas existem outros tipos de sensores que podem ser mais confiáveis para medições absolutas, de luz ou de semelhantes:
  • LDR 5mm: R$0,29
  • LDR 7mm: R$0,95
  • Sensor de Lux BH1750: R$11,50
  • Sensor de UV GYML8511: R$19,40
  • Sensor de Luz TEMT6000: R$17
Ok, agora que discutimos um pouco sobre o LDR, seu funcionamento, aplicações e alternativas vamos aos códigos:

O primeiro código é para descobrir o valor máximo e mínimo de leitura do LDR naquele ambiente.



Execute o código acima com o Arduino ligado na serial, submeta o LDR a menor luminosidade por algum tempo e depois a maior luminosidade por um tempo, assim depois basta armazenar o valores. Seu LDR precisa apresentar o valor de 1023 quando coberto com duas camadas de fita isolante.

O próximo código é a conversão da escala dos valores de 0 a 1023 para 0 a 100. Esse código será o utilizado em seu programa para ambos os casos, após o código eu explico como trabalhar com ele.



 Para a conversão de escala vamos utilizar a função map do Arduino, nesse caso vamos ler a porta e gravar no ValorLDR, depois converter essa leitura na escala nova e gravar na variável LDR. Logo após vamos exibir o valor na serial seguido do símbolo de porcentagem.

Como usar a função map com o LDR

map(valorLDR, LDR_mínima_luz, LDR_máxima_luz, 0, 100);

Na função map basta substituir os dois valores com os valores conseguidos no teste anterior, o 600 seria o valor conseguido com a mínima luz e 23 com a máxima luz.

Se o LDR for utilizado no ambiente, sem controle máximo e mínimo se utiliza os valores padrões de 1023 e 0, ficando assim:

LDR = map(valorLDR, 1023, 0, 0, 100);

Acredito que tudo foi bem discutido e estamos aptos a adicionar um LDR em nossos projetos agronômicos. Sempre escolhendo se ele é a opção correta para efetuar a leitura. Agora quando for para um controle (como acender uma luz) o LDR é incrível.

Até mais quando vamos adicionar o LDR no datalogger de terra.

Nenhum comentário:

Postar um comentário