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>

* http://arduino.berlios.de

*

*/

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

}