sábado, 6 de febrero de 2010

Control analógico con sensor de luz

El siguiente programa controla analógicamente la intensidad de un LED tricolor. Mientras menos luz ambiente detecte el sensor la intensidad del LED será mayor. Cuando haya mucha luz ambiente apagaremos el LED.
Con un botón podremos ir cambiando el color que generará el LED

El circuito lo implementaremos de la siguiente forma:

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

+ Botón al pin 2 (digital)
+ 5V al lado positivo del botón
- Boton a ground

+ Sensor luz al pin 0 (analógico)
+ Sensor luz al +5V
- Sensor luz a ground






const int rojo=9;
const int verde=10;
const int azul=11;

const int boton=2;
int contadorBoton=0;
int state=0;
int lastState=0;

const int sensorLuz=0;
int sensorValor=0;
int sensorMax=0;
int sensorMin=1026;

void setup()
{
pinMode(boton,INPUT);
pinMode(sensorLuz,INPUT);
pinMode(rojo,OUTPUT);
pinMode(verde,OUTPUT);
pinMode(azul,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(sensorLuz);
if(sensorValor>sensorMax)
{
sensorMax=sensorValor;
}
if (sensorValor {
sensorMin=sensorValor;
}
}
digitalWrite(13, LOW);//Apagamos el LED de la placa
}

void loop()
{
state=digitalRead(boton);
if(state!=lastState)
{
if(state==HIGH)
{
contadorBoton++;
}
lastState=state;
}
sensorValor=analogRead(sensorLuz);
sensorValor=map(sensorValor, sensorMin, sensorMax, 0, 255);
sensorValor=constrain(sensorValor, 0, 255);
if(contadorBoton%5==1)
{
analogWrite(rojo, sensorValor);
analogWrite(verde, 0);
analogWrite(azul, 0);
}
if(contadorBoton%5==2)
{
analogWrite(rojo, 0);
analogWrite(verde, 0);
analogWrite(azul, sensorValor);
}
if(contadorBoton%5==3)
{
analogWrite(rojo, 0);
analogWrite(verde, 12);
analogWrite(azul, sensorValor);
}
if(contadorBoton%5==4)
{
analogWrite(rojo, 0);
analogWrite(verde, sensorValor);
analogWrite(azul, 0);
}
if(contadorBoton%5==0)
{
analogWrite(rojo, sensorValor/2);
analogWrite(verde, sensorValor);
analogWrite(azul, sensorValor);
}
}

No hay comentarios:

Publicar un comentario