Conocer el valor máximo que recibe Arduino de una fotorresistencia cuando incide sobre ella la mayor intensidad de luz puede ser muy útil en muchos escenarios.
Si alguna vez has conectado una fotorresistencia con Arduino (como hicimos anteriormente aquí: «Cómo conectar una fotorresistencia con Arduino«) y has medido los valores que recibes desde Arduino, verás que el resultado no es muy estable y puede ser un poco engorroso determinar el valor correspondiente a la máxima intensidad lumínica.
En este tutorial te voy a explicar cómo medir el valor más alto de todos los recibidos de la fotorresistencia y a discriminar el resto. Estoy segura que te será muy útil en muchos casos.
Indice de contenidos
Materiales
Para realizar este tutorial necestias los siguientes materiales:
- Una placa Arduino (Yo usaré Arduino UNO)
- Una fotorresistencia (LDR)
- Una resistencia de 10kΩ
- Una protoboard
- Cables
- Un ordenador con el IDE de Arduino instalado
Conexiones
Tienes que conectar la fotorresistencia con Arduino de la siguiente forma:
Es el mismo circuito que ya expliqué anteriormente en este artículo: Cómo conectar una fotorresistencia con Arduino. Si no lo has leído y no tienes muy claro cómo funciona una fotorresistencia y cómo se conecta con Arduino, deberías leerlo antes de continuar para evitar dañar tu placa.
Simplemente conecta un extremo de la fotorresistencia a 5V y el otro extremos a un pin analógico del Arduino. Como puedes ver en el ejemplo, yo utilizo el pin analógico 3 (A3), pero tu puedes usar otro si lo prefieres.
Para terminar, conecta en serie la resistencia de 10kΩ. Un extremo de esta resistencia va conectado al pin de la fotorresistencia que se conecta con Arduino, y el otro extremo va conectado a GND.
Una vez que tengas todo conectado correctamente vamos a continuar con el sketch.
Sketch
El sketch que usaremos para conocer el valor máximo de una fotorresistencia es el siguiente:
//declaraciones
const int FR = A3;
int entrada = 0;
int max = 0;
//configuración
void setup() {
Serial.begin(9600);
}
//función loop
void loop() {
entrada = analogRead(FR);
if (entrada > max){
max=entrada;
Serial.println(max);
}
delay(500);
}
Declaraciones
Empecemos por las declaraciones. La primera parte del sketch.
Como puedes comprobar, he declarado una constante entera (FR) y dos variables enteras (entrada y max).
La constante FR es el pin analógico en el que está conectada la fotorresistencia. El pin A3.
La variable entera entrada la usaremos más tarde para leer el valor que recibe el Arduino de la fotorresistencia a través del pin analógico. Inicialmente tiene valor 0.
En cuanto a la variable entera max. Nos servirá para almacenar el valor máximo de entre todos los que entren por el pin analógico A3. Inicialmente tiene valor 0 y es importante que así sea, más adelante veremos el motivo.
Configuración
En este sketch no necesitamos configuraciones muy complejas. Simplemente tenemos que inicializar el puerto serie para monitorizar el valor máximo que vayamos calculando. Para eso usamos Serial.begin:
Serial.begin(9600);
Recuerda, la configuración en Arduino siempre se realiza dentro de la función setup.
Función loop
Dentro de la función loop tenemos que definir el proceso para medir el valor máximo de la fotorresistencia.
Como la función loop se ejecuta de forma repetitiva, por cada iteración que realice haremos una lectura del pin analógico A3 y guardaremos el dato en la variable entrada:
entrada = analogRead(FR);
Una vez obtenida la entrada, la tenemos que comparar con el valor almacenado en la variable max. Para ello usamos una instrucción if:
if (entrada > max){
Inicialmente, la variable max tiene valor 0, por lo que es muy probable que el valor recibido de la fotorresistencia sea superior a 0 y se cumpla la condición.
Arduino solo recibirá valor 0 de la fotorresistencia en oscuridad total, y lo que buscamos con este sketch es la máxima intensidad, por lo que nos interesa que sea superior a 0.
Si la condición entrada > max se cumple, en las siguientes instrucciones sustituimos el valor de max por el de entrada y lo enviamos al puerto serie para que se imprima en el monitor serie:
max=entrada;
Serial.println(max);
Como la función loop se repite, en las siguientes iteraciones la variable max ya no tendrá valor 0, por lo que la instrucción if evaluará si la siguiente entrada, obtenida del puerto analógico, es mayor que el último valor almacenado en max. Si se cumple, se vuelve a sustituir max por la nueva entrada y se imprime. Si no es mayor, significa que anteriormente ya se leyó una entrada con valor mayor, por lo que no se sustituirá.
El valor de la variable max se sustituye siempre que la entrada sea mayor que el valor que almacena. El objetivo es encontrar el más alto.
Para hacer la prueba de forma correcta, coloca el circuito con la fotorresistencia sin tapar en el lugar en el que quieras hacer la medición con la iluminación a la máxima intensidad. Arranca el sketch y observa los resultados leídos. Inicialmente verás que los valores van aumentando, pero llegará un punto en el que no entren valores mayores y el último valor mostrado en el monitor serie será el valor máximo para esa intensidad de luz.
Yo ejecuté el sketch en una habitación con la luz encendida durante un rato y obtuve el siguiente resultado:
Después del 519 ya no aparecieron más valores. Eso significa que no entraros valores superiores.
Si te fijas en el resto de valores que se midieron, son muy próximos al valor máximo. Tiene sentido porque la intensidad de la luz era la misma, pero las fotorresistencias no son elementos de medida con una alta precisión, por eso es útil hacer este proceso que nos ayude a determinar un valor único de referencia.
Pruébalo con diferentes iluminaciones, a ver que valor máximo obtienes en cada caso.