Controlando o brilho da lâmpada com um sensor de luz
Vamos ensinar o que é um LDR, como ele funciona e vamos utilizá-lo para controlar o brilho de uma lâmpada.
!Informações importantes
Todas as coisas simples, com um toque adicional, podem ser fantásticas. Acrescentando um LDR podemos fazer com que a luz de uma lâmpada responda às necessidades do ambiente. Quando está mais escuro precisamos de mais luz, e quando está mais claro, menos luz.
O LDR, Light Dependent Resistor em inglês, é um componente eletrônico passivo do tipo resistor variável. Mais especificamente, é um resistor cuja resistência varia conforme a intensidade da luz que incide sobre ele.
!Identificando os componentes
!Identificando os componentes
Para montar o circuito, siga atentamente os passos a seguir:
- Conecte um dos terminais do LDR no pino 5V
- Conecte o outro terminal do LDR no pino A3
- Conecte um dos terminais do resistor no pino A3
- Conecte o outro terminal do resistor no pino GND
Ao final da montagem estará assim:
!Componentes de código
Vamos utilizar uma função especifica que recebe o valor lido do sensor e retorna um valor relativo ao brilho para a situação.
int intensity(int sensorValue) { float intensityReturn; float bright = (sensorValue / 4); intensityReturn = 255 - bright; Serial.print(intensityReturn); return intensityReturn; }
!Executando no Arduino
int lamp = 3; int ldr = A3; int button = A0; int light; int intensity(int sensorValue) { float intensityReturn; float bright = (sensorValue / 4); intensityReturn = 255 - bright; Serial.print(intensityReturn); return intensityReturn; } int getButtonState() { int value = analogRead(button); if (value < 69) { return 1; } else if (value >= 69 && value <= 230) { return 2; } else if (value >= 231 && value <= 407) { return 3; } else if (value >= 408 && value <= 630) { return 4; } else if (value >= 631 && value <= 896) { return 5; } else { return 0; } } int readButton() { int state = getButtonState(); int count = 1; while (count < 5) { delay(5); int newState = getButtonState(); if (newState == state) { count++; } else { count = 1; } state = newState; } return state; } void setup() { pinMode(lamp, OUTPUT); analogWrite(lamp, 0); } void loop() { // --- Estado: lampada ligada, botao solto // Lampada ligada enquanto botao nao esta apertado int btn; while ((btn = readButton()) != 5) { int sensorValue = analogRead(ldr); light = intensity(sensorValue); analogWrite(lamp, light); } // --- Estado: lampada desligada, botao apertado // Desliga a lampada analogWrite(lamp, 0); // Espera soltar o botao while (readButton() != 0); // --- Estado: lampada desligada, botao solto // Espera apertar o botao while (readButton() != 5); // --- Estado: lampada ligada, botao apertado // Espera soltar o botao while (readButton() != 0); }
!Sua Vez!
Modifique o código acima para que o funcionamento seja indicado pelos LEDs
Resposta
int lamp = 3; int ldr = A3; int button = A0; int light; int ledAmarelo = A1; int ledVerde = A2; int intensity(int sensorValue) { float intensityReturn; float bright = (sensorValue / 4); intensityReturn = 255 - bright; Serial.print(intensityReturn); return intensityReturn; } int getButtonState() { int value = analogRead(button); if (value < 69) { return 1; } else if (value >= 69 && value <= 230) { return 2; } else if (value >= 231 && value <= 407) { return 3; } else if (value >= 408 && value <= 630) { return 4; } else if (value >= 631 && value <= 896) { return 5; } else { return 0; } } int readButton() { int state = getButtonState(); int count = 1; while (count < 5) { delay(5); int newState = getButtonState(); if (newState == state) { count++; } else { count = 1; } state = newState; } return state; } void setup() { pinMode(lamp, OUTPUT); pinMode(ledAmarelo, OUTPUT); pinMode(ledVerde, OUTPUT); analogWrite(lamp, 0); } void loop() { // --- Estado: lampada ligada, botao solto // Lampada ligada enquanto botao nao esta apertado int btn; while ((btn = readButton()) != 5) { int sensorValue = analogRead(ldr); light = intensity(sensorValue); analogWrite(lamp, light); digitalWrite(ledVerde, HIGH); } // --- Estado: lampada desligada, botao apertado // Desliga a lampada analogWrite(lamp, 0); // Espera soltar o botao while (readButton() != 0); digitalWrite(ledVerde, LOW); digitalWrite(ledAmarelo, HIGH); // --- Estado: lampada desligada, botao solto // Espera apertar o botao while (readButton() != 5); // --- Estado: lampada ligada, botao apertado // Espera soltar o botao while (readButton() != 0); digitalWrite(ledAmarelo, LOW); }