Secuencia de Leds con Arduino

Publicado: febrero 10, 2012 en Arduino
Etiquetas:, , ,

Hace un tiempo compre una placa de Arduino pero por falta de tiempo, había hecho algunos ejemplos pero quería al menos documentar como funciona de una manera sencilla (para dummies), ademas que acabando de cursar una materia de la Universidad llamada Microprocesadores en la cual se aprendió bastante pero también miraba que todo lo que hacíamos en las prácticas se me facilitaría la vida si usara mi placa de Arduino (además que aunque los pic’s son baratos tocaba comprar quemador de pic’s) y bueno de ahi surgío este pequeño ejemplo, espero que les guste y cualquier cosa no duden en preguntar o colaborar en el aprendizaje de esta gran placa.

Materiales

1 Placa de arduino
1 Protoboard
8 Leds (cualquier color)
8 resistencias de 220  Ω
1 resistencia de 1 K Ω
1 pulsador
Cable Utp

1 El programa consiste en que al presionar el pulsador los leds cambien de secuencia, las secuencias son las siguientes (1) Leds Encendidos (0) Leds apagado:

a)
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0
.
.
1 0 0 0 0 0 0 0

b)
0 0 0 1 1 0 0 0
0 0 1 1 1 1 0 0
0 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1

c)
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 1 1
.
.
1 1 1 1 1 1 1 1

d)
0 0 0 0 1 1 1 1
1 1 1 1 0 0 0 0
.
.

2. Como sabemos los leds tiene un anodo (+) y un catodo (-), de un lado conectaremos todos los Catodos a las resistencias de 220 Ω y estas a GND y de los anodos conectaremos a los pines del 2 al 9, las resistencias se colocan con el fin que no quemar los leds.

3. Conectamos el pulsador de la siguiente manera de un lado a 5V y del otro conectamos una resistencia a tierra y tambien un cable al pin A0 que sera el que nos permita cambiar de secuencia cada vez que lo presionemos, Se coloca la resistencia de 1 k Ω  porque haria un puente entre GND y el pin A0 de esta manera la lectura de entrada sera siempre 0, al presionar el pulsador lo que hace es hacer puente entre 5V y A0, de esta manera conseguimos el valor de 1 con esto los valores de entrada unicamente seran 1 y 0.

Aquí muestro el montaje realizado en un software llamado Fritzing V 0.7.0 de licencia GNU GPL v3 el cual lo pueden conseguir en http://www.fritzing.org

Montaje en Protoboard

Esquema Proyecto

4. Cargar el siguiente código, esta explicado.


int saltar=0; // Variable que indica el numero de la secuencia a ejecutarse

void setup() {

pinMode(A0, INPUT); //indicamos el pin de entrada
for(int i=2;i<=9;i++){ //indicamos los pines de salida
pinMode(i, OUTPUT);
}
}

void loop() {
if (digitalRead(A0)==HIGH){ //Al presionar el pulsador
saltar++; // Cambia de secuencia
if (saltar>3){ //Solo hay 4 secuencias 0,1,2 y 3 al ser 3 . .
saltar=0; // Vuelve a secuencia 0
}
while (digitalRead(A0)==HIGH){} // Mientras se pulsa no haga nada mas
}

if(saltar==0){ //Si es 1 inicie funcion de secuencia1
secuencia1();
}
if(saltar==1){ //Si es 2 inicie funcion de secuencia2
secuencia2();
}
if(saltar==2){ //Si es 3 inicie funcion de secuencia3
secuencia3();
}
if(saltar==3){ //Si es 4 inicie funcion de secuencia4
secuencia4();
}

}
void secuencia1(){
for (int i=2; i<=9; i++){ //Pin 2 al 9
digitalWrite(i, HIGH); // Prenda pin actual
digitalWrite(i-1,LOW); // Apage el Anterior
delay(50); // retardo entre prender y apagar
}
for (int i=9; i>=2; i--){ //Al contrario de la
digitalWrite(i, LOW); // anterior secuencia va de 9 a 2
digitalWrite(i-1,HIGH);
delay(50);
}
}

void secuencia2(){
int k=11; // inicializo una variable auxiliar K
for(int i=6; i<=9;i++){ //leo de 6 a 9
digitalWrite(i, HIGH); // prendo pin actual
digitalWrite(k-i, HIGH); // prendo pin de la diferencia 11-6 = 5
delay(50); //retardo
}
for(int i=9; i>=2;i--){ // Al contrario de lo anterior
digitalWrite(i, LOW);
digitalWrite(k-i, LOW);
delay(50);
}
}

void secuencia3(){
for(int i=2; i<=9; i++){
digitalWrite(i,HIGH);
delay(50);
}
for(int i=9; i>=2;i--){
digitalWrite(i,LOW);
delay(50);
}
}

void secuencia4(){
int k=11;
for(int i=2; i<=5;i++){
digitalWrite(i,HIGH);
digitalWrite(k-i,LOW);
}
delay(150);
for(int i=2; i<=5;i++){
digitalWrite(i,LOW);
digitalWrite(k-i,HIGH);
}
delay(150);
}

Ahi los dejo con una imagenes y un video de lo que hace.

Espero que les haya gustado y les sirva de ayuda para inicializarce en Arduino.

comentarios
  1. mmsouto dice:

    Me ha gustado mucho la idea, estoy en ello a la espera de que me llegue material para probarlo y despues tratar de controlar de la misma forma reles y puede que anulando el pulsador para que sean los cambios ciclicos, es para hacer un cartel luminoso con efectos.

    A ver como va la cosa

    Saludos y sigue asi 😉

    • Yo he trabajado con matrix de leds en las que se puede escribir letras para hacer anuncios, en el ejemplo utilice el pulsador para tener en cuenta como es el uso de un pulsador en los montajes y como implementar en el código.

  2. barincho dice:

    hola buenas tardes, soy nuevo en el foro y estoy probando y aprendiendo programar en c pics, y la secuencia que mostras me interesa para lograr efectos como los barrales de la policia o bomberos, yo no poseo arduino, pero creo que copiando el programa y compilandolo con el ccs puedo lograr programarlo con el pickit 2, la preguenta es si se puede incluir en el programa el cambio de secuencia sin usar un pulsador, es decir encienco el circuito y solo hace los cambios de secuencia? desde ya muchas gracias

  3. ola amigo buen día mi nombre es germán zuñiga coutiño estudio en la universidad tecnológica de tlaxcala tengo un proyecto de leds giratorios pero me falla la programacion del arduino sabes como hacerle ejemplo tengo mi ventilador de giratorio con leds pero quiero ponerle mi nombre ayudame

  4. Victor dice:

    Muy bueno intentare realizarlo estoy incursionando, Desde ya muchas gracias. comentare mi avance.

  5. Gabriel dice:

    Que tal, muy ineresante e instructivo el tutorial. mi duda es como puedo hacer para que al presionar el boton, se enciendan gradualmente, queden encendiddos y al presionar de nuevo el boton, se apaguen, pero de manera inversa? muchas gracias!

  6. Mario Mijes dice:

    Probando tu codigo de arduino, la secuencia no se repite infinitamente, solo se ejecuta 1 vez hasta que oprima de nuevo, que puedo hacer para que se repita y cambie hasta que oprima el boton?

  7. Angel 8@ dice:

    Interesante Proyecto, hay forma de modificar el codigo para que unicamente con el pulsador haga un corrimiento de luz… ? y hasta que lo vuelvas a pulsar vuelvan a encender todos y apagarse ? , saludos e interesantes propuestas !!! gracias por contestar

    • Hola pues si claro se tendría que hacer un ciclo, lastimosamente hace un tiempo no hetrabajado con la placa y de hecho no tengo una conmigo, pero si se podría hacer, sería de meter eso en un ciclo.

  8. gusitos dice:

    Hola, podrías decirme como poner el mismo código pero sin pulsador?
    Gracias

    • Pues tendrias que hacer un ciclo con un delay para que incremente la variable saltar, segun el tiempo que quieras que dure la secuencia, y ya en el montaje no conectas nada en la entrada, solo con el delay haría todo por cada secuencia.

  9. Salvador dice:

    Hola, por ejemplo en la primera secuencia que prende de uno en uno, para que el boton pare el led y se quede prendido donde presionamos y cuando presionemos otra vez continue esta secuencia donde se quedo, como seria?

  10. juan dice:

    hola oyepuedo utilizar tu codigo para 24 salidas pregunta solo cambio el numero de leds verdad

Replica a Gabriel Cancelar la respuesta