domingo, 7 de marzo de 2010

Sensor Luz & Piezo

Vamos a controlar una serie de LEDs a partir de un sensor de luz y un sensor piezoeléctrico. Cuando haya poca luz ambiente los LEDs generarán un juego de luces. Este juego de luces irá cambiando a cada golpe recibido por el sensor piezoeléctrico.

El circuito lo implementaremos de la siguiente manera:
8 LEDs númerados desde el pin 6 al 13 (digitales)
8 LEDs a ground

+ Lado positivo sensor Luz a +5V
+ Lado positivo sensor Luz a pin 4 (analógico)
- Lado negativo sensor Luz a ground

+ Piezo a través de resistencia (33O-990 Ohmios) al pin 4 (analógico)
- Piezo a ground



Código .pde


//El siguiente circuito generará diferentes juegos de luces según los golpes que reciba el sensor piezoeléctrico.
//Los LEDs se activarán cuando no haya casi luz ambiente.

const int vectorLED[]={6,7,8,9,10,11,12,13};
const int sensorLuz=5;
const int sensorPiezo=4;
int valorPiezo=0;
int valorLuz=0;
int sensorMax=0;
int sensorMin=1022;
int contadorPiezo=0;
int i=0;

void setup()
{
Serial.begin(9600);
pinMode(sensorPiezo,INPUT);
pinMode(sensorLuz,INPUT);
for(i=0; i<8; i++)
{
pinMode(vectorLED[i], OUTPUT);
}
digitalWrite(13, HIGH);
while(millis()<5000)
{
valorLuz=analogRead(sensorLuz);
if(valorLuz>sensorMax)
{
sensorMax=valorLuz;
}
if (valorLuz {
sensorMin=valorLuz;
}
}
digitalWrite(13, LOW);
}

void loop()
{
valorLuz=analogRead(sensorLuz);
valorLuz=map(valorLuz, sensorMin, sensorMax, 0, 255);
valorLuz=constrain(valorLuz, 0, 255);
valorPiezo=analogRead(sensorPiezo);
if(valorPiezo<40)
{
contadorPiezo++;
}
if(valorLuz>200 && (contadorPiezo%5)==1)
{
do{
for(i=0; i<8; i++)
{
digitalWrite(vectorLED[i], HIGH);
delay(120);
}
for(i=7; i>=0; i--)
{
delay(120);
digitalWrite(vectorLED[i], LOW);
}
valorLuz=analogRead(sensorLuz);
valorLuz=map(valorLuz, sensorMin, sensorMax, 0, 255);
valorLuz=constrain(valorLuz, 0, 255);
}while(valorLuz>200);
}
if(valorLuz>200 && (contadorPiezo%5)==2)
{
do{
for(i=0; i<8; i+=2)
{
digitalWrite(vectorLED[i], HIGH);
delay(120);
}
for(i=1; i<8; i+=2)
{
digitalWrite(vectorLED[i], HIGH);
delay(120);
}
for(i=7; i>=0; i--)
{
digitalWrite(vectorLED[i], LOW);
}
valorLuz=analogRead(sensorLuz);
valorLuz=map(valorLuz, sensorMin, sensorMax, 0, 255);
valorLuz=constrain(valorLuz, 0, 255);
}while(valorLuz>200);
}
if(valorLuz>200 && (contadorPiezo%5)==3)
{
delay(300);
digitalWrite(vectorLED[0], HIGH);
digitalWrite(vectorLED[1], HIGH);
delay(300);
digitalWrite(vectorLED[4], HIGH);
digitalWrite(vectorLED[5], HIGH);
digitalWrite(vectorLED[0], LOW);
digitalWrite(vectorLED[1], LOW);
delay(300);
digitalWrite(vectorLED[2], HIGH);
digitalWrite(vectorLED[3], HIGH);
digitalWrite(vectorLED[4], LOW);
digitalWrite(vectorLED[5], LOW);
delay(300);
digitalWrite(vectorLED[6], HIGH);
digitalWrite(vectorLED[7], HIGH);
digitalWrite(vectorLED[2], LOW);
digitalWrite(vectorLED[3], LOW);
delay(300);
digitalWrite(vectorLED[6], LOW);
digitalWrite(vectorLED[7], LOW);
}
if(valorLuz>200 && (contadorPiezo%5)==4)
{
for(i=0; i<8; i++)
{
digitalWrite(vectorLED[i], HIGH);
delay(60);
digitalWrite(vectorLED[i-1], LOW);
delay(60);
}
digitalWrite(vectorLED[7], LOW);
}
if(valorLuz>200 && (contadorPiezo%5)==0)
{
for(i=0; i<8; i++)
{
valorPiezo=analogRead(sensorPiezo);
if(valorPiezo<40)
{
contadorPiezo++;
}
digitalWrite(vectorLED[i], LOW);
}
}
}

1 comentario: