03.Prácticas Con LDR.
Arduino.
1º Practica. Sacada de Arduino CC
Sensor de Luz o LDR (Light Dependent Resistor):
Descripción:
Un LDR es una resistencia variable, que varia su valor dependiendo de la cantidad de luz que incide sobre su superficie. Cuanta mas intensidad de luz incide en la superficie de la LDR menor será su resistencia y cuanto menos luz incide mayor será la resistencia. Suelen ser utilizados como sensores de luz ambiental o como una fotocélula que activa un determinado proceso en ausencia o presencia de luz.
Un sensor de luz se compone de una LDR como parte de un divisor de tensión resistivo.
Ejemplo:
Vout=((Rbotton/(Rbottom+Rtop))*Vin
Si la LDR es usada como Rtop, como en el primer circuito, da tensión alta (HIGH) en la salida cuando la LDR está en la luz, y una tensión baja (LOW) en la salida cuando la LDR está en la sombra.
La acción del divisor de tensión es inversa cuando la LDR es usada como Rbottom en lugar de Rtop, como en el segundo circuito. El circuito da tensión Baja (LOW) en la salida cuando la LDR está en la luz, y una tensión alta (HIGH) en la salida cuando la LDR está en la sombra. El circuito divisor de tensión dará una tensión de la salida que cambia con la iluminación, de forma inversamente proporcional a la cantidad de luz que reciba (sensor de oscuridad).
Listado de componentes:
1 LDR
1 Resistencia de 1kΩ
Un par de cables
El esquema del circuito puede quedar de la siguiente forma:
El circuito consta de un divisor de tensión formado por la LDR y la resistencia de 1kΩ.
El circuito sobre la placa de pruebas quedaría de la siguiente forma:
construir un medidor de luz.
Para ello utilizaremos:
Los componentes necesarios son:
2 led verdes
2 led rojos
1 led amarillo
5 resistencias de 220 ohms
1 sensor LDR
1 resistencia para poner en serie con el LDR de valor 1K, 10K o 100K segun la luz ambiental. (Variara la sensibilidad del medidor)
El esquema:
/*
********************************
* Light Meter Example V0.1
********************************
* Created by Quim Ll.
* 17-1-2011
*
* www.drbit.nl
* www.skmcreatiu.com
* http://blog.drbit.nl
*/
// definimos los nombres de los led y sus pines
// Los leds formaran un medidor para la luz tipo VU-meter
#define L1 13 // verde
#define L2 12 // verde
#define L3 11 // amarillo
#define L4 10 // rojo
#define L5 9 // rojo
// Entrada Analogica A0 para sensor de luz LDR
#define pinEntrada 0
int valorEntrada = 0; // Variable donde ponemos el valor de la luz
int estado_leds = 0; // Variable donde ponemos el estado de los leds segun intensidad luz
// Seteamos puertos como salida para leds + entrada para el sensor
void setup() {
pinMode(L1,OUTPUT);
pinMode(L2,OUTPUT);
pinMode(L3,OUTPUT);
pinMode(L4,OUTPUT);
pinMode(L5,OUTPUT);
pinMode(pinEntrada,INPUT);
}
void loop() {
valorEntrada = analogRead (pinEntrada); // Leemos sensor de luz
// Nos da un numero de entre 0 y 1024
// proporcional a la intesidad de luz
estado_leds = (5 * valorEntrada)/1024; // Esta funcion nos da un numero del 0 al 5 (El 5 no se utiliza)
// proporcional a la intesidad de luz
// obtenida anteriormente
if (estado_leds == 0) {
digitalWrite (L1, HIGH);
digitalWrite (L2, LOW);
digitalWrite (L3, LOW);
digitalWrite (L4, LOW);
digitalWrite (L5, LOW);
}
if (estado_leds == 1) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, LOW);
digitalWrite (L4, LOW);
digitalWrite (L5, LOW);
}
if (estado_leds == 2) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, HIGH);
digitalWrite (L4, LOW);
digitalWrite (L5, LOW);
}
if (estado_leds == 3) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, HIGH);
digitalWrite (L4, HIGH);
digitalWrite (L5, LOW);
}
if (estado_leds == 4) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, HIGH);
digitalWrite (L4, HIGH);
digitalWrite (L5, HIGH);
}
}
2º Practica
Versión2 - Medidor de luz
Ene l siguiente ejemplo añadimos comunicación serie para ver internamente que es lo que arduino esta recibiendo. Con esta información podremos modificar o el hardware o el código para aprovechar mejor la data entrante.
Para ver la data cargamos el codigo en el arduino y una vez en marcha abrimos el "serial terminal" en la interface IDE de arduino. Alli tendríamos que ver la data que arduino esta mandando a la computadora por el cable USB. En el arduino veremos que se enciende el led TX (Transmisión)
/*
********************************
* Light Meter Example V0.2
********************************
* Created by Quim Ll.
* 17-1-2011
*
* www.drbit.nl
* www.skmcreatiu.com
* http://blog.drbit.nl
*/
// definimos los nombres de los led y sus pines
// Los leds formaran un medidor para la luz tipo VU-meter
#define L1 13 // verde
#define L2 12 // verde
#define L3 11 // amarillo
#define L4 10 // rojo
#define L5 9 // rojo
// Entrada Analogica A0 para sensor de luz LDR
#define pinEntrada 0
int valorEntrada = 0; // Variable donde ponemos el valor de la luz
int ledsEncender = 0; // Variable donde ponemos el estado de los leds segun luz
void setup() {
Serial.begin (9600); // empezar comunicacion con pantalla
setearpuertos(); // configura los puertos , llamamos a la funcion que esta descrita mas abajo en el codigo
TESTLED (); // Test de todos los leds, funcion descrita mas abajo en el codigo
}
void loop() {
valorEntrada = analogRead (pinEntrada); // Leemos valor entrada (LUZ)
visualizarValor(); /// Muesta el valor en pantalla
ledsEncender = procesaValor (valorEntrada); // Obtenemos numero del 0 -5
procesarLeds (ledsEncender); // Actuar en funcion del numero obtenido
// Encendiendo apagando leds correspondientes
}
/// FUNCIONES //////
void procesarLeds (int valor) {
if (valor == 0) {
digitalWrite (L1, HIGH);
digitalWrite (L2, LOW);
digitalWrite (L3, LOW);
digitalWrite (L4, LOW);
digitalWrite (L5, LOW);
}
if (valor == 1) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, LOW);
digitalWrite (L4, LOW);
digitalWrite (L5, LOW);
}
if (valor == 2) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, HIGH);
digitalWrite (L4, LOW);
digitalWrite (L5, LOW);
}
if (valor == 3) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, HIGH);
digitalWrite (L4, HIGH);
digitalWrite (L5, LOW);
}
if (valor == 4) {
digitalWrite (L1, HIGH);
digitalWrite (L2, HIGH);
digitalWrite (L3, HIGH);
digitalWrite (L4, HIGH);
digitalWrite (L5, HIGH);
}
}
int procesaValor (int valor) {
int x;
x = (5 * valor)/1024;
// Mostrar en pantalla
Serial.print (" - leds a enceder: ");
Serial.println (x);
return x;
}
void TESTLED() {
// encender de los pines del 1 al 5-
// sostener un tiempo - apagar unisono
digitalWrite(L1,HIGH);//encender el L1
delay (500);
digitalWrite(L2,HIGH);
delay (500);
digitalWrite(L3,HIGH);
delay (500);
digitalWrite(L4,HIGH);
delay (500);
digitalWrite(L5,HIGH);
delay (3000);
digitalWrite(L1,LOW);
digitalWrite(L2,LOW);
digitalWrite(L3,LOW);
digitalWrite(L4,LOW);
digitalWrite(L5,LOW);
delay (1000);
}
void setearpuertos() {
pinMode(L1,OUTPUT);
pinMode(L2,OUTPUT);
pinMode(L3,OUTPUT);
pinMode(L4,OUTPUT);
pinMode(L5,OUTPUT);
pinMode(pinEntrada,INPUT);
}
void visualizarValor ()
{
Serial.print (valorEntrada);
delay (300);
}
Otra Practica con un solo diodo:
Código:
/* Analog Read
* ------------------
*
* Enciende y apaga un LED (light emitting diode) conectado al pin digital #13.
* La cantidad de tiempo que el LED estará encendido y apagado depende del
* valor obtenido de analogRead().
* La salida del sensor de luz o divisor de tensión, está conectado
* a la entrada del pin 3, por lo que
* a más luz, el parpadeo del LED será menor y a menos luz el parpadeo del LED mayor.
* (sensor de oscuridad)
*
* copyleft 2005 DojoDave <http://www.0j0.org>
*
*/
int LightPin = 3; // selecciona el pin de entrada para el sensor de luz
int ledPin = 13; // selecciona el pin para el LED
int val = 0; // variable para almacenar el valor capturado desde el sensor
void setup() {
pinMode(ledPin, OUTPUT); // declara el ledPin en modo salida
}
void loop() {
val = analogRead(LightPin); // read the value from the sensor
digitalWrite(ledPin, HIGH); // enciende el LED
delay(val); // detiene el programa por un tiempo
digitalWrite(ledPin, LOW); // apaga el LED
delay(val); // detiene el programa por un tiempo
}