Aquí traigo otro ejemplo usando sensores de inclinación para controlar en encendido de LEDs. Para el montaje hemos usado:
- 2 Sensores de inclinación. (Sensores “todo o nada” en mi caso).
- 6 resistencias de 2200 Ω (aunque se puede hacer usando sólo 3).
- 4 Diodos fotoemisores (LEDs).
Y el montaje es el de la siguiente imagen:
Las lecturas de las entradas están puestas en la zona analógica por el simple hecho de dejar el mayor número de salidas posibles por si se quiere dejar el mayor número de salidas posibles para el array. La idea es simple, que dependiendo del sensor que esté activo, el array de LEDs se vaya encendiendo de una dirección o en la contraria si es el otro sensor el que está activo. Si no están activados ninguno de los dos, el LED de control estará activo, mientras se mantiene el último LED del array que se encendió.
Una implementación para esta idea es el siguiente programa:
/**
* Ejemplo de uso de un sensor de inclinación para el control
* automático de luces. En este caso, cuatro LEDs. Si el sensor
* de inclinación "izq" está conduciendo, el array de tres LEDs se
* encenderán de derecha a izquierda, y si es el sensor "der" el
* que está activo, se encenderán en sentido contrario. En el
* caso de que ninguno de los dós esté activo, se encenderá el LED
* conectado al pin 13, y se mantendrá encendido el último LED del
* array activo.
*
* Para más información sobre el montaje físico, explicaciones
* o dudas, podéis visitar el blog:
* http://lamenteenvuelo.wordpress.com/
* Licencia: CC - BY - NC - SA
* http://creativecommons.org/licenses/by-nc-sa/3.0/es/
*/
/*
* Sensor de inclinacion hacia la izquierda, en entrada analógica
* para dejar los pines digitales libres.
*/
int izq = 0;
/*
* Sensor de inclinacion hacia la derecha, en entrada analógica
* para dejar los pines digitales libres.
*/
int der = 2;
/*
* Salida que se ilumina cuando ninguno de los sensores de
* inclinación están activos.
*/
int ninguno = 13;
// Salida digital en la que colocamos el primer LED.
int minimo = 5;
// Salida digital en la que colocamos el último LED.
int maximo = 7;
/*
* Contador para indicar que LED es el último iluminado. Un buen
* valor es el led central del array.
*/
int contador = 6;
void setup() {
// Iniciamos todos los led como salidas.
for(int i = minimo; i<=maximo; i++)
{
pinMode(i, OUTPUT);
}
/*
* Inicializamos el LED que se activa cuando no están los sensores
* activos como salida.
*/
pinMode(ninguno, OUTPUT);
/*
* Caso inicial: suponemos que ninguno de los sensores están
* activos.
*/
digitalWrite(contador, HIGH);
digitalWrite(ninguno, HIGH);
}
void loop() {
// Guardamos en una variable el último activo.
int aux = contador;
// Tomamos los valores de los sensores.
int vizq = analogRead(izq);
int vder = analogRead(der);
// Si "izq" está conduciendo:
if( vizq>150)
{
// Desactivamos el LED de control.
digitalWrite(ninguno, LOW);
// Comprobamos que no estemos en el extremo del array.
if(contador150)
{
// Desactivamos el LED de control.
digitalWrite(ninguno, LOW);
// Comprobamos que no estemos en el extremo del array.
if(contador>minimo)
{
// Si no lo estamos, disminuímos el contador.
contador--;
}
else
{
// Si lo estamos, volvemos al final.
contador = maximo;
}
}
// Si ninguno de los dos está activo:
else
{
// Activamos el LED de control.
digitalWrite(ninguno, HIGH);
}
// Si ha cambiado contador, actualizamos los LEDs en activo.
if(aux != contador)
{
digitalWrite(aux, LOW);
digitalWrite(contador, HIGH);
}
// Dormimos el proceso durante 0.1 segundos.
delay(100);
}
Como siempre, os dejo el archivo para descarga aquí, en el que incluyo el programa, el archivo Fritzing, una imagen de la captura anterior.


La pagina de tu Blog se ha actualizado…
[..]Articulo Indexado Correctamente en la Blogosfera de Sysmaya[..]…