Ejercicio 22: Alumbrado público
Los LEDs se encienden cuando la intensidad de la luz ambiente baja por debajo de un nivel preestablecido.
Se apagan cuando sube por encima de dicho nivel.
| Novedades hardware | Novedades software |
| Fotorresistencia (LDR) | |
Requisitos:
- 4 LED, 4 resistencias de 220 ohmios
- Una fotorresistencia (LDR), una resistencia de 1K
Planteamiento: Cuando llega la noche se encienden las farolas
Presentación:
- Fotorresistencia(LDR).
- Monitorización de la señal del sensor.
En este ejercicio transformamos una entrada analógica en una salida digital estableciendo un umbral para la interpetación de la señal analógica.
De esta forma, si el valor de la señal analógica, almacenado en la variable medida es inferior al umbral, almacenado en la variable nivel, se ejecuta el procedimiento enciende( ), y si es superior, se ejecuta el procedimiento apaga( ).
Para establecer el valor del umbral, monitorizamos los valores que el conversor analógico-digital(DAC) proporciona a partir de los valores de voltaje en el PIN analógico 0, al que está conectado el divisor de tensión que forman la LDR y la resistencia de pull-down de 1K. Estos valores aparecen en el Monitor serie de la IDE cuando usamos el comando printInteger tomando como su argumento el valor de la variable medida.
Así podemos comprobar los diferentes valores de la señal del sensor para diferentes condiciones de iluminación, elegir el que más nos convenga e introducirlo en la variable nivel.
Variantes:
- Cambia el nivel de intensidad de luz que activa el encendido.
- Usa el comando printString(“.....”) para añadir un comentario al valor de la medida en el Monitor serie.
VIDEO DEL EJERCICIO 22
CODIGO FUENTE
Copyright (C) 2006 Juan Carlos Alonso de Mena
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation;
See the GNU General Public License for more details?
int fotosensor=0;
int cadenaLeds[]={6,7,8,9};
int n=0;
int medida=0; //variable que guarda el valor de la señal del sensor
int nivel=200; //variable con la que se compara la señal del sensor
void setup(){
for(n=0;n<4;n++){
pinMode(cadenaLeds[n],OUTPUT);
}
beginSerial(9600);
}
void monitoriza(){ //procedimiento que envía al Monitor serie el valor de la señal del sensor
printInteger(medida);
printString(" ");
delay(100);
}
void enciende(){ //procedimiento que enciende por turno las luces
for(n=0;n<4;n++){
digitalWrite(cadenaLeds[n],HIGH);
delay(1000);
}
}
void apaga(){ //procedimiento que apaga todas las luces
for(n=0;n<4;n++){
digitalWrite(cadenaLeds[n],LOW);
}
}
void loop(){
medida=analogRead(fotosensor);
monitoriza();
if (medida<nivel){ //si detecta menos intensidad de luz de la que ponemos como límite
enciende();
}
else{ //si detecta más intensidad de luz que el límite prefijado
apaga();
}
}
Volver?
Copyright (c) 2006 Juan Carlos Alonso de Mena
Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.2 or any later version published by the
Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts. A copy of the license is included in the section entitled
GNU Free Documentation License?.