Muy probablemente el resultado sea decepcionante: el LED brilla poco y
cuando pasamos la mano por encima de la fotoresistencia el brillo del
LED baja un poco más, pero dependiendo de las condiciones de luz
ambiental es probable que no se note apenas nada.
La solución es el calibrado del sensor, esto es, hacer una lectura de
los valores que devuelve el sensor en el ambiente en el que va a
trabajar y ajustar los valores de salida a este rango. Para ello
emplearemos el comando map().
map(valor, desdeBajo, desdeAlto, hastaBajo, hastaAlto)
valor: el número (valor) a mapear.
desdeBajo: el límite inferior del rango actual del valor.
desdeAlto: el límite superior del rango actual del valor.
hastaBajo: límite inferior del rango deseado.
hastaAlto: límite superior del rango deseado.
desdeBajo: el límite inferior del rango actual del valor.
desdeAlto: el límite superior del rango actual del valor.
hastaBajo: límite inferior del rango deseado.
hastaAlto: límite superior del rango deseado.
Primero debes realizar el programa sin la línea de programación en rojo. Cuando leas los valores en pantalla de la entrada analógica, ya podras calcular cuales son los valores máximos y mínimos que alcanza la variable valor y podras ajustar el valor max y min.
int lightPin = 0; //define el pin de la foto-resistencia
int ledPin=11; //define el pin para el LED
int valor; //define una variable en la que haremos los cálculos
int min = 0; //valor mínimo que da la foto-resistencia
int max = 0; //valor máximo que da la foto-resistencia
void setup() {
Serial.begin(9600); //Inicializa la comunicación serie
pinMode( ledPin, OUTPUT ); }
void loop() {
valor = analogRead(lightPin);
valor = map(valor, min, max, 0, 255);
analogWrite(ledPin, valor);
Serial.println(valor);
delay(100); //pequeño retardo para darle tiempo al LED a responder y la escritura del valor leído.
}
int ledPin=11; //define el pin para el LED
int valor; //define una variable en la que haremos los cálculos
int min = 0; //valor mínimo que da la foto-resistencia
int max = 0; //valor máximo que da la foto-resistencia
void setup() {
Serial.begin(9600); //Inicializa la comunicación serie
pinMode( ledPin, OUTPUT ); }
void loop() {
valor = analogRead(lightPin);
valor = map(valor, min, max, 0, 255);
analogWrite(ledPin, valor);
Serial.println(valor);
delay(100); //pequeño retardo para darle tiempo al LED a responder y la escritura del valor leído.
}
El comando map() re-mapea un número desde un rango
hacia otro. Esto significa que, un valor contenido en el al rango
desdeBajo-desdeAlto será mapeado al rango hastaBajo-hastaAlto.
No se limitan los valores dentro del rango, ya que los valores fuera
de rango son a veces objetivos y útiles, así que si le pasamos un valor
fuera del rango inicial calculará una salida dentro del rango de salida.
Se puede utilizar el comando constrain() tanto antes como después de ésta función si es importante respetar los límites de los rangos.
Ten en cuenta que los límites “inferiores” de algún rango pueden ser
mayores o menores que el límite “superior” por lo que map() puede
utilizarse para revertir una serie de números, por ejemplo:
y = map(x, 1, 50, 50, 1);
La función maneja correctamente también los números negativos, por ejemplo:
y = map(x, 1, 50, 50, -100);
también es válido y funciona correctamente.
El comando map() usa matemática de enteros por lo que no generará números en coma flotante, es decir, su uso se limita a valores o variables del tipo int.
Trata de aplicar la función map() al ejercicio por
ti mismo, de modo que el LED brille al mínimo cuando tapas con la mano
la LDR y al máximo cuando la LDR capta la luz de ambiente. Si te atascas
aquí tienes la solución, aunque te sentirás más orgulloso si lo
resuelves sin mirar.
Fuente: http://www.ardumania.es/ejercicio-4-ldr/
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.