Arduino - Módulo LDR

O módulo sensor de luz LDR é capaz de detectar e medir a luz no ambiente ao redor. O módulo oferece duas saídas: uma saída digital (LOW/HIGH) e uma saída analógica.

Neste tutorial, vamos aprender a usar um Arduino e um módulo sensor de luz LDR para detectar e medir o nível de luz. Especificamente, vamos ver o seguinte:

Módulo Sensor de Luz LDR
image source: diyables.io

Depois disso, você pode modificar o código para acionar um LED ou uma lâmpada (através de um relé) quando ele detectar luz.

Se você preferir um sensor de luz na sua forma bruta, sugiro conferir o tutorial Arduino - Sensor de Luz.

Sobre o Módulo Sensor de Luz LDR

O módulo sensor de luz LDR pode ser usado para detectar a presença de luz ou medir o nível de luz no ambiente ao redor. Ele oferece duas opções, através de um pino de saída digital e de um pino de saída analógica.

Pinagem

O módulo sensor de luz LDR tem quatro pinos:

  • Pino VCC: deve ser conectado ao VCC (3.3V a 5V).
  • Pino GND: deve ser conectado ao GND (0V).
  • Pino DO: é um pino de saída digital. Ele fica em HIGH quando está escuro e em LOW quando há luz. O valor limite entre escuro e claro pode ser ajustado usando um potenciômetro embutido.
  • Pino AO: é um pino de saída analógica. O valor de saída diminui quando a luz fica mais forte e aumenta quando a luz fica mais fraca.
Pinagem do Módulo Sensor de Luz LDR
image source: diyables.io

Além disso, ele tem dois LEDs indicadores:

  • Um LED indicador PWR-LED para a alimentação.
  • Um LED indicador DO-LED para o estado da luz no pino DO: ele fica aceso quando há luz e apagado quando está escuro.

Como Funciona

Para o pino DO:

  • O módulo tem um potenciômetro embutido para definir o limite de luz (sensibilidade).
  • Quando a intensidade da luz no ambiente está acima do valor limite (claro), o pino de saída do sensor fica em LOW e o DO-LED acende.
  • Quando a intensidade da luz no ambiente está abaixo do valor limite (escuro), o pino de saída do sensor fica em HIGH e o DO-LED apaga.

Para o pino AO:

  • Quanto maior a intensidade da luz no ambiente (claro), menor o valor lido no pino AO.
  • Quanto menor a intensidade da luz no ambiente (escuro), maior o valor lido no pino AO.

Observe que o potenciômetro não afeta o valor no pino AO.

Diagrama de Ligação

Como o módulo sensor de luz tem duas saídas, você pode escolher usar uma ou as duas, dependendo do que você precisa.

  • O diagrama de ligação entre o Arduino e o módulo sensor de luz LDR usando apenas o DO.
Diagrama de ligação do Arduino com Módulo Sensor de Luz LDR

This image is created using Fritzing. Click to enlarge image

  • O diagrama de ligação entre o Arduino e o módulo sensor de luz LDR usando apenas o AO.
Diagrama de ligação do Arduino com Módulo LDR

This image is created using Fritzing. Click to enlarge image

  • O diagrama de ligação entre o Arduino e o módulo sensor de luz LDR usando o AO e o DO.
Diagrama de ligação do Arduino com Módulo Sensor de Luz

This image is created using Fritzing. Click to enlarge image

A ligação real:

Conexão do Arduino com Módulo Sensor de Luz LDR

Código Arduino - Ler o valor do pino DO

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-ldr-module */ #define DO_PIN 2 // Arduino's pin connected to DO pin of the ldr module void setup() { // initialize serial communication Serial.begin(9600); // initialize the Arduino's pin as an input pinMode(DO_PIN, INPUT); } void loop() { int lightState = digitalRead(DO_PIN); if (lightState == HIGH) Serial.println("The light is NOT present"); else Serial.println("The light is present"); }

Passos Rápidos

  • Copie o código acima e abra-o na Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
  • Cubra e descubra o módulo sensor de luz LDR com a mão ou com algum objeto
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The light is present The light is present The light is NOT present The light is NOT present The light is NOT present The light is present The light is present The light is present
Ln 11, Col 1
Arduino Uno on COM15
2

Lembre-se: se você perceber que o LED fica sempre aceso ou sempre apagado, mesmo quando há luz, você pode ajustar o potenciômetro para regular a sensibilidade à luz do sensor.

Agora podemos personalizar o código para acionar um LED ou uma lâmpada quando a luz for detectada, ou até fazer um servo motor girar. Você encontra mais informações e instruções passo a passo nos tutoriais listados no final deste tutorial.

Código Arduino - Ler o valor do pino AO

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-ldr-module */ #define AO_PIN A0 // Arduino's pin connected to AO pin of the ldr module void setup() { // initialize serial communication Serial.begin(9600); } void loop() { int lightValue = analogRead(AO_PIN); Serial.println(lightValue); }

Passos Rápidos

  • Copie o código acima e abra-o na Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
  • Cubra e descubra o módulo sensor de luz LDR com a mão ou com algum objeto
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
145 146 146 572 678 945 956 1001 1002 1012 1013 645 546 346 172
Ln 11, Col 1
Arduino Uno on COM15
2

Vídeo

O vídeo de demonstração abaixo usa o código abaixo. Observe que o vídeo mostra o Arduino Uno R4, mas funciona da mesma forma no Arduino Uno R3:

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-ldr-module */ const int LDR_PIN = A0; const int LED_PIN = 9; const float ALPHA = 0.1; float emaValue = 0; int currentPWM = 0; int targetPWM = 0; void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); // Initialize EMA with the first LDR reading emaValue = analogRead(LDR_PIN); } void loop() { // ======================================== // 1. Read the LDR sensor value // ======================================== int rawValue = analogRead(LDR_PIN); // ======================================== // 2. Apply EMA filtering // ======================================== emaValue = ALPHA * rawValue + (1.0 - ALPHA) * emaValue; // ======================================== // 3. Determine the LED brightness // ======================================== if (emaValue < 500) { // Daylight targetPWM = 0; } else if (emaValue < 550) { // Low light targetPWM = 70; } else if (emaValue < 600) { // Twilight targetPWM = 150; } else { // Dark targetPWM = 255; } // ======================================== // 4. Apply smooth dimming // ======================================== if (currentPWM < targetPWM) { currentPWM++; } else if (currentPWM > targetPWM) { currentPWM--; } // ======================================== // 5. Control the LED using PWM // ======================================== analogWrite(LED_PIN, currentPWM); // ======================================== // 6. Print debugging information // ======================================== Serial.print("Raw: "); Serial.print(rawValue); Serial.print(" | EMA: "); Serial.print(emaValue); Serial.print(" | Target PWM: "); Serial.print(targetPWM); Serial.print(" | Current PWM: "); Serial.println(currentPWM); // ======================================== // 7. Sampling interval // ======================================== delay(20); }

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!