Recapitulando
Na aula passada iniciamos o nosso estudo do uso de sensores com placas Arduino e vimos como exemplo o uso de um Sensor LDR Analógico que é um transdutor que converte a intensidade luminosa em leituras que indicam o nível de luminosidade de um ambiente.
Também explicamos que sensores podem estar instados em placas conhecidas como módulos ou shields que implementam facilidades no uso de sensores e componentes. Tivemos também um primeiro contato com a plataforma Tinkercad que permite a simulação do Arduino com outros componentes.
No entanto faltou mostrar o uso de um módulo LDR e como converter as leituras do sensor em uma grandeza física para medir a luminosidade. Essa é a nossa proposta para hoje.
Conhecendo o módulo
Um módulo sensor LDR geralmente é uma placa onde além do LDR encontraremos um pequeno potenciômetro que serve para ajustar a sensibilidade do sensor. Este potenciômetro é chamado de trimpot e é ajustado com uma chave fenda ou chave philips. Lembrando que potenciômetros são resistores de resistência variável.
![]() |
Módulo Sensor LDR e trimpot em destaque |
Um módulo sensor LDR pode apresentar três ou quatro terminais. Dois deles são para alimentação, os demais podem ser um único terminal digital ou um terminal analógico e outro digital. Esse terminal digital oferece apenas duas saídas possíveis: ligado e desligado é permite utilizar o módulo sem um microprocessador.
Já a saída analógica nos dará uma escala sendo o seu uso interessante quando queremos transformar a leitura do sensor em uma medida de grandeza como o lux. O lux é a medida da intensidade luminosa, ou iluminância, por unidade de área. Não confundir com o lumen que é a quantidade de luz emitida por uma fonte.
Com relação às especificações, geralmente valem aquelas relacionadas com o componente principal utilizado como LDR como no exemplo da aula passada. Além disso o módulo terá uma tensão de trabalho que geralmente está em torno de 3,3 a 5 volts.
Leituras vs grandezas
É importante ressaltar que muitas vezes um sensor ou módulo nos dará a leitura de uma medida elétrica que deverá passar por uma conversão quando desejarmos uma grandeza física e nem sempre essa conversão será uma regra de três simples, pois nem todo sensor trabalhará com uma escala linear.
Muitas vezes as leituras variam em uma escala logarítmica, exigindo uma fórmula mais sofisticada para conversão. Essas informações são passadas geralmente pelos Datasheets do sensor (manual do fabricante) que devem ser consultados antes da aquisição do componente.
![]() |
Intensidade de luz vs Resistência do LDR. Fonte: www.sta-eletronica.com.br |
Voltando ao Wokwi
Nós usamos o Tinkercad na aula passada porque ele tem no seu catálogo um sensor LDR analógico simples. Como hoje precisaremos de um módulo LDR voltaremos ao Wokwi e para ganhar tempo vou disponibilizar o projeto montado através do link que você deve abrir e salvar uma copia, por exemplo, com o nome Framework Arduino II: Aula 02 Módulo LDR digital.
Link: https://wokwi.com/projects/412928736386168833
Entendendo a montagem
Usei a mesma situação da aula passada, isto é, fiz um led ser acionado de acordo com a leitura do sensor LDR que desta vez está embutido em um módulo. Este módulo possui duas formas de trabalho: Como sensor digital e como sensor analógico, dependendo do terminal que escolhido para leitura.
Para essa primeira montagem escolhi o terminal digital e o conectei ao pino digital 3 do Arduino, logo esse sensor só me dará a leitura LOW ou HIGH.
Sketch para o módulo como sensor digital
Nesse Sketch declarei uma variável para armazenar a leitura do sensor e outras duas para definir o pino usado pelo led e pelo LDR (linhas 1 a 3). Também iniciei o monitor seria e configurei o pino do led como saída e o do LDR como entrada (linhas 6 a 8).
No looping do projeto estou armazenando a leitura do LDR na variável e imprimindo ela no monitor serial (linhas 13 a 15). Depois executo um teste if que, se a leitura for HIGH, o led se acende (linhas 16 a 18). Do contrário, o led se apaga (linhas 19 a 21).
Deixei um delay longo de um segundo para permitir o acompanhamento da leitura.
- int leitura = 0;
- int led=5;
- int LDR=3;
- void setup()
- {
- Serial.begin(9600);
- pinMode(led, OUTPUT);
- pinMode(LDR, INPUT);
- }
- void loop()
- {
- leitura = digitalRead(LDR);
- Serial.print("Leitura: ");
- Serial.println(leitura);
- if (leitura==HIGH){
- digitalWrite(led,HIGH);
- }
- else{
- digitalWrite(led,LOW);
- }
- delay(1000);
- }
Iniciando a simulação
Para testar adequadamente essa montagem, devemos iniciar a simulação do Wokwi da forma que estamos acostumados e depois clicar no sensor LDR para abrir a janela de simulação de luminosidade, e arrastar a bolinha azul da barra de lux, alterando a luminosidade conforme a figura abaixo:
![]() |
Diminuindo a luminosidade é necessário acender o Led |
![]() |
Aumentando a luminosidade não há necessidade do Led |
Trabalhando com o módulo em analógico
O Wokwi nos dá uma página de referência do sensor como se fosse um datasheet e através dele encontramos a formula para transformar a leitura analógica do sensor em valores de lux de luminosidade.
Para consultar uma referência, basta clicar no botão "?" verde que aparece quando selecionamos um componente. Caso queira ver a referência do LDR clique aqui.
![]() |
Botão para abrir referências do Wokwi |
De acordo com essa referência, o Módulo Sensor LDR do Wokwi utiliza uma fórmula que leva em consideração que existem dois parâmetros que controlam a sensibilidade do LDR: rl10 e gama. Onde rl10 é a resistência do LDR com nível de iluminância de 10 lux e o valor gama é a inclinação do gráfico log(Resistência) / log(lux).
Ainda segundo essa referência, a fórmula assume esses dois itens como constantes nos valores de 50 para rl10 e 0,7 para o gama. Entraria também na fórmula o valor da voltagem resultante da leitura do sensor obtida por: Voltagem = leitura do sensor/1024 * 5 onde 1024 é o número leituras possíveis de uma entrada analógica e o 5 é a voltagem de trabalho do Arduino.
Com essa voltagem, calcula-se a resistência que é dada por:
Resistencia= 2000*voltagem / (1 - voltagem / 5)
E finalmente chegamos a fórmula da Luminosidade em Lux:
lux = pow(rl10 * 1e3 * pow(10, gama) / Resistencia, (1 / gama));
A fórmula acima já está escrita em C, por isso o uso da função pow() que serve para calcular um número elevado a uma potencia, por exemplo: pow(5,2) é igual a 25. Já a 1e3 equivale a 1 x 10³ ou seja 1000, porém na forma de um número double e não inteiro.
Como fica a montagem e o sketch do módulo analógico?
Para ganhar tempo preparei uma montagem de um projeto com o Módulo Sensor LDR do Wokwi trabalhando como analógico e controlando o acendimento de um led em caso de escuridão. Você acessar o projeto pelo link aqui. Não esqueça de salvar uma cópia:
Link: https://wokwi.com/projects/412934465070809089
![]() |
Montagem e simulação do módulo trabalhando como analógico |
Sketch analógico
O que temos de diferente nesse Sketch é no início a declaração das constantes e variáreis utilizadas na fórmula. No looping temos a aplicação das fórmulas já mencionadas. Cabe esclarecer que esses valores de gama e rl10 são específicos desse módulo do Wokwi. Para outro módulo deve ser consultado o datasheet do fabricante.
Codificamos para que no monitor serial saiam todas as informações utilizadas, isto é, leitura, voltagem, resistência e luminosidade em lux. Repare que o valor de lux está muito próximo da barra de luminosidade do simulador.
Para acender o Led adotamos leituras de luminosidade abaixo de 0,5 lux.
- const float gama = 0.7;
- const float rl10 = 50;
- float voltagem, resistencia,lux;
- int leitura = 0;
- int led=5;
- int LDR=14;
- void setup()
- {
- Serial.begin(9600);
- pinMode(led, OUTPUT);
- pinMode(LDR, INPUT);
- }
- void loop()
- {
- leitura = analogRead(LDR);
- voltagem = leitura/ 1024. * 5;
- resistencia= 2000 * voltagem / (1 - voltagem / 5);
- lux = pow(rl10 * 1e3 * pow(10, gama) / resistencia, (1 / gama));
- Serial.println("*************************");
- Serial.print("Leitura: ");
- Serial.println(leitura);
- Serial.print("Voltagem: ");
- Serial.println(voltagem);
- Serial.print("Resistência: ");
- Serial.println(resistencia);
- Serial.print("Lux: ");
- Serial.println(lux);
- if (lux<=0.5){
- digitalWrite(led,HIGH);
- }
- else{
- digitalWrite(led,LOW);
- }
- delay(1000);
- }
Hoje vimos a importância de se consultar o datasheet de um fabricante para converter leituras de sensores em grandezas físicas. Vimos também que essa conversão nem sempre é linear e que módulos trazem mais opções de uso que os sensores isolados.
Na próxima aula conheceremos relês.
Referências
BLOG DA ROBÓTICA. Utilizando o Sensor de Luminosidade LDR no Arduino. Disponível em <https://www.blogdarobotica.com/2020/09/29/utilizando-o-sensor-de-luminosidade-ldr-no-arduino/> Acesso em 24 out 2024.
BLOG ELETROGRATE. Controle de luminosidade com Arduino e sensor LDR. Disponível em <https://blog.eletrogate.com/controle-de-luminosidade-com-arduino-e-sensor-ldr/> Acesso em 24 out 2024.
PORTAL VIDA DE SILÍCIO. Sensor de Luz – Aprendendo a usar o LDR com Arduino. Disponível em <https://portal.vidadesilicio.com.br/sensor-de-luz-com-ldr/> Acesso em 24 out 2024.
TRANSDUTOR. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2020. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Transdutor&oldid=57369248>. Acesso em: 24 out. 2024.
USINA INFO. Módulo Sensor de Luminosidade LDR 4 pinos - Saída Digital e Analógica. Disponível em <https://www.usinainfo.com.br/sensor-de-luminosidade/modulo-sensor-de-luminosidade-ldr-4-pinos-saida-digital-e-analogica-8781.html> Acesso em 25 out 2024.