Xmas Tree Led - Arbol de navidad a leds



Por los motivos obvios de la época navideña les propongo un simple árbol de navidad con leds y que a su vez es de bajo costo.

Tal vez la palabra simple sea un tanto camuflada ya que posee un microcontrolador para lograr los efectos, pero hoy en día no hay mucho problema con ellos, aunque si no tienen idea de cómo programar tal vez puedan rediseñar el circuito por ejemplo para implementar un 4017 y un 555 para el encendido de los leds, o bien transistores.

La idea del proyecto también es impulsar a realizar algún proyecto tradicional como lo suelen hacer en otras partes del globo.

Volviendo al proyecto, es un secuenciador de luces con un PIC16F628A (se elige este por el bajo costo y por la cantidad de pines suficiente para este tamaño de arbolito), se pueden usar MCU mas chicos por ejemplo cualquiera de la línea 12F pero hay que multiplexar los leds creando una matriz para aprovechar sus 6 pines de datos.

Podríamos decir que lo más divertido de esto es diseñar el PCB ya que sea la cara visible del árbol y luego programarle los efectos, si bien en este proyecto yo hice más de 10 efectos diferentes, solo mostrare 3 para que no sea muy extenso el programa de ejemplo.
Como se puede ver en el PCB pueden agregarle mensajes y demas.

El circuito:


El PCB:

El programa:


#include <16F628A.h>
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD
#use delay(int=4000000)
void main(){
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   int i;
   while(true){
      i=0;
      while(i<10){
         output_b(0b01010101);
         output_a(0b00000101);
         delay_ms(400);
         output_b(0b10101010);
         output_a(0b00001010);
         delay_ms(400);
         i++;
      }  
      i=0;
      while(i<10){
         output_b(0b00110011);
         output_a(0b00000011);
         delay_ms(200);
         output_b(0b11001100);
         output_a(0b00001100);
         delay_ms(200);
         i++;
      }     
      i=0;
      while(i<2){
         output_b(0b11111111);
         output_a(0b00001111);
         delay_ms(200);
         output_b(0b00000000);
         output_a(0b00000000);
         delay_ms(200);
         i++;
      }  
      i=0;
      while(i<20){
         output_b(0b00010000);
         output_a(0b00000000);
         delay_ms(10);
         output_b(0b00000000);
         output_a(0b00001000);
         delay_ms(10);
         output_b(0b01000000);
         output_a(0b00000000);
         delay_ms(10);
         output_b(0b00000100);
         output_a(0b00000000);
         delay_ms(10);
         output_b(0b00000000);
         output_a(0b00000010);
         delay_ms(10);
         output_b(0b00001000);
         output_a(0b00000000);
         delay_ms(10);
         output_b(0b00100000);
         output_a(0b00000000);
         delay_ms(10);     
         output_b(0b00000001);
         output_a(0b00000000);
         delay_ms(10);    
         output_b(0b00000000);
         output_a(0b00000001);
         delay_ms(10);    
         output_b(0b00000010);
         output_a(0b00000000);
         delay_ms(10);
         output_b(0b00000000);
         output_a(0b00001000);
         delay_ms(10); 
         output_b(0b10000000);
         output_a(0b00000000);
         i++;
      }
   }
}

No hay comentarios.:

Publicar un comentario