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++;
}
}
}