lunes, 1 de febrero de 2010

Sensor de Luz

Vamos a utilizar un sensor de Luz para controlar el color de un LED y la melodía de un timbre. Cada vez que el sistema compruebe que el nivel de luz es bajo sonara el timbre y cambiará de color el LED.
Cuando el programa se comienza a ejecutar, le damos 5 segundos de tiempo para calibrar el sensor. Es recomendable cambiar la intensidad de la luz a la que está expuesto el sensor, de otro modo los valores que recoja como máximos y mínimos serán muy próximos y no funcionará como deseamos.

El circuito lo implementaremos de la siguiente manera:
+ Timbre al pin 3 (digital)
- Timbre a ground

+ 1º pin LED a 9 (digital)
- 2º pin LED a ground
+ 3º pin LED a 10 (digital)
+ 4º pin LED a 11 (digital)

+ sensor luz al pin 1 (analogico)
+ sensor luz a +5V (utilizar resistencia 333 - 1000 Ohm)
- sensor luz a ground






//Control del color del LED y de un timbre a partir de un sensor de Luz.
int ultimoTiempo=0;//Auxiliar para la comprobacion de tiempo
int tiempo=100;//Tiempo que hace cada comprobacion iterativamente

int rojo=9;
int verde=10;
int azul=11;
int cambioColor=1;

int sensorPin=1;//Pin del sensor de luz
int sensorValor=0;//Valor devuelto por el sensor
int sensorMax=0;//Valor maximo del sensor
int sensorMin=1000;//Valor minimo del sensor

int altavoz=3;//Pin del altavoz
int length=15; //Numero de notas
char notes[]="ccffffffeeaacac";//Notas
int beats[]= {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};//Duracion de cada nota
int intervalo=100;//Intervalo de duracion de cada nota (argumento de la duncion PlayNote

void playTone(int tone, int duration)
{
for (long i = 0; i<8; i++)
{
if (names[i]==note)
{
playTone(tones[i], duration);//Toca la nota correspondiente a las notas introducidas en la declaracion del array notes[]
}
}
}

void setup()
{
pinMode(rojo, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
pinMode(sensorPin, INPUT);
pinMode(altavoz, OUTPUT);
digitalWrite(13, HIGH);//Durante los 5 primeros segundos encendemos el LED de la placa mientras hace operaciones
while(millis()<5000)//Da valores maximos y minimos a al sensor de luz
{
sensorValor=analogRead(sensorPin);
if(sensorValor>sensorMax)
{
sensorMax=sensorValor;
}
if (sensorValor {
sensorMin=sensorValor;
}
}
digitalWrite(13, LOW);//Apagamos el LED de la placa
}

void loop ()
{
sensorValor=analogRead(sensorPin);//Leemos la señal del sensor de LUZ
sensorValor=map(sensorValor, sensorMin, sensorMax, 0, 255);//Se mapea la señal del sensor de Luz, se le da los valores maximos y minimos y el rango
sensorValor=constrain(sensorValor, 0, 255);//Limitamos el valor al rango que queremos 0-255
if(millis()-ultimoTiempo>tiempo)//Cada 'tiempo' controlamos el valor del sensor
{
ultimoTiempo=millis();
if(sensorValor>135)
if(sensorValor>135)
{
if(cambioColor%3==0)//Cambiamos el color cada vez que el sensor de LUZ Sobrepasa el rango 135
{
analogWrite(rojo,0);
analogWrite(verde,0);
analogWrite(azul,255);
}
if(cambioColor%3==1)
{
analogWrite(rojo,200);
analogWrite(verde,0);
analogWrite(azul,0);
}
if(cambioColor%3==2)
{
analogWrite(rojo,0);
analogWrite(verde,200);
analogWrite(azul,150);
}
cambioColor++;//Incrementamos la variable para hacer que cambie cada vez que el sensor de LUZ varie
for (int i = 0; i {
playNote(notes[i], intervalo);
}
}
else
{
analogWrite(rojo,0);
analogWrite(verde,255);
analogWrite(azul,0);
}
}
}

No hay comentarios:

Publicar un comentario