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);
}