SÍGUENOS
INTRODUCCIÓN
Estoy completamente seguro que todos absolutamente todos hemos visto un semáforo en las calles, y como electrónicos en algún momento hemos querido construir uno, déjenme contarles que crear todo un sistema de un semáforo era mi reto desde hace mucho tiempo; pues ahora ya lo tengo completamente funcional. En este video les quiero enseñar paso a paso como se ha realizado este proyecto, pues veremos desde la construcción del esquemático electrónico, el diseño pcb, el desarrollo de la programación y finalmente veremos la practica en físico y, lo que más me encanta de este semáforo es que tendremos contadores descendentes de 3 colores; verde, amarillo y rojo, asimismo, se contará con 3 luces señalizadores de colores verde, amarillo y rojo.
ESPECIFICACIONES TÉCNICAS
- Tensión de alimentación……………………….…………12VDC
- Corriente de alimentación………………….……………500mA
- Contador descendente 2 digitos………………………..99 -00
- Colores del contador……………………………………….Verde, amarillo, rojo
- Salidas para luces señalizadores……………………..6
- Colores luces señalizadores…………………………….(Verde, amarillo, rojo)x2
- Entorno de programación………………………..……..Arduino
- Condiciones ambientales min……………….…..….-10°
- Condiciones ambientales max……………………….60°
- Dimensiones………………………………………………….100x80mm
- Empotrable………………………………………….………Sí
ESQUEMÁTICO ELECTRÓNICO
DISEÑO PCB:
Ordene ahora en JLCPCB
Tarjeta principal
Luces Semáforo
LISTA DE COMPONENTES ELECTRÓNICOS
Tarjeta principal
- U1; Microcontrolador ATmega328p-AU ( see & buy )
- U2; Circuito Integrado Transceiver USB CH340C ( see & buy )
- U3-U5; Circuito integrado Darlington transistor array driver ULN2803D ( see & buy )
- U6; Regulador de voltaje SMD (AMS 1117-5.0) 5.0V (see & buy)
- J1; Micro USB tipo B (see & buy)
- J2; Jack power 12V (see & buy)
- J3, J4; Pines espadines Macho ( see & buy )
- J5-J10; Molex 2 pines Header Male Pin ( see & buy )
- D1-D42; Led RGB smd (5x5mm) ( see & buy )
- D43; Led smd 1206 ( see & buy )
- D44; Diodo Schottky SS14-T (see & buy)
- C3, C4, C5; Capacitor cerámico 0.1uF (0603) ( see & buy )
- C7, C9; Capacitor ceramico 0.1uF(1206) (see & buy)
- C6; Capacitor electrolítico SMD 47uF ( see & buy )
- C8, Capacitor electrolítico SMD 220uF ( see & buy )
- Q1, Q2; Transistor SMD PNP ( see & buy )
- Q3-Q6; Transistor SMD NPN ( see & buy )
- R1-R28; Resistencia SMD 1/10W, 470 Ohm, package 0603 ( see & buy )
- R30, R31; Resistencia SMD 1/4W, 4.7k Ohm, package 1206 ( see & buy )
- R33, R35, R37, R39, R42; Resistencia SMD 1/10W, 10k Ohm, package 0603 ( see & buy )
- R34, R36, R38, R40; Resistencia SMD 1/4W, 1k Ohm, package 1206 ( see & buy )
- R41; Resistencia SMD 1/10W, 5k Ohm, package 0603 ( see & buy )
- R43, R44; Resistencia SMD 1/10W, 1k Ohm, package 0603 ( see & buy )
- R45; Resistencia SMD 1/10W, 1M Ohm, package 0603 ( see & buy )
- BTN1; Pulsador SMD (see & buy)
- X1; Crystal SMD 16Mhz ( see & buy )
Luces Semáforo
- R1-R6; Resistencia SMD 1/10W, 470 Ohm, package 0603 ( see & buy )
- D1-D19; Led ORANGE SMD,3.5×2.8mm ( see & buy )
- D1-D19; Led RED SMD,3.5×2.8mm ( see & buy )
- D1-D19; Led GREEN SMD,3.5×2.8mm ( see & buy )
- J1; Molex 2 pines Header Male Pin ( see & buy )
PASOS PARA SUBIR UN PROGRAMA
PASO 1 : SUBIR GESTOR DE ARRANQUE (BOOTLOADER)
Para poder usar un microcontrolador nuevo (atmega328p-U), es necesario subir un un gestor de arranque como también llamado “BOOTLOADER”, esto nos facilitará subir programas en futuras ocasiones.
finalmente para quemar el bootloader se tendrá que realizar a través de los pines ICSP, que prácticamente serían los pines [ (MOSI=11) (MISO = PIN12) (SCK=PIN13) (Slave=PIN10) ]. Para subir y quemar el gestor de arranque necesitaremos un arduino UNO ó MEGA y realizar las siguientes conexiones (ARDUINO UNO – MAIN BOARD SEMÁFORO).
PASO 2 : SUBIR PROGRAMA; PC – BOARD MAIN SEMAFORO
Después de haber subido el gestor de arranque finalmente ya podremos subir cualquier programa como normalmente lo realizamos a través del puerto serie.
CONEXIONES EXTERNAS
CÓDIGO
/* CREADO POR :{==[=======>>>> ELECTROALL <<<<<=======]==} INSTAGRAM : https://www.instagram.com/carlos_j_fuentess/ ó @carlos_j_fuentess FACEBOOK : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr PÁGINA WEB : https://www.electroallweb.com/ YOUTUBE : https://www.youtube.com/c/ELECTROALL ___________________________________________________________________ *** {==[=======> (SEMÁFORO CON CONTADORES ) <=======]==} *** ___________________________________________________________________ */ ////////////////////////////////////////////////// int a =2; /////////////////////////////////////// int b =3; /////////////////////////////////////// int c =4; ///////////////////////////////////////PINES PARA EL CONTADOR int d =5; ///////////////////////////////////////DE UNIDADES int e =6; /////////////////////////////////////// int f =7; /////////////////////////////////////// int g =8; /////////////////////////////////////// int A = 11; /////////////////////////////////////// int B = 12; /////////////////////////////////////// int C = 13; /////////////////////////////////////// int D = 14; ///////////////////////////////////////PINES PARA EL CONTADOR int E = 15; ///////////////////////////////////////DE DECENAS int F = 16; /////////////////////////////////////// int G = 17; /////////////////////////////////////// int GR = 9; // --VERDE-- //////////////////////////PINES CONTROL DE COLORES int RE = 10; // --ROJO-- ///////////////////////////PARA EL CONTADOR int SG = 18; ///--VERDE-- //////////////////////////PINES PARA EL CONTROL DE LAS int SR = 19; //--ROJO- /////////////////////////////LUECES DEL SEMAFOR ///////////////////////////////////////////////////// int uno [7] = {a,b,c,d,e,f,g};// UNIDADES int dos [7] = {A,B,C,D,E,F,G};// DECENAS //--UNIDADES--///////////////////////////////////////// int unidad0 [7] = {1,1,1,1,1,1,0};//= #0 int unidad1 [7] = {0,1,1,0,0,0,0};//= #1 int unidad2 [7] = {1,1,0,1,1,0,1};//= #2 int unidad3 [7] = {1,1,1,1,0,0,1};//= #3 int unidad4 [7] = {0,1,1,0,0,1,1};//= #4 int unidad5 [7] = {1,0,1,1,0,1,1};//= #5 int unidad6 [7] = {1,0,1,1,1,1,1};//= #6 int unidad7 [7] = {1,1,1,0,0,0,0};//= #7 int unidad8 [7] = {1,1,1,1,1,1,1};//= #8 int unidad9 [7] = {1,1,1,1,0,1,1};//= #9 //--DECENAS--//////////////////////////////////////////// int decena0 [7] = {1,1,1,1,1,1,0};//= #0 int decena1 [7] = {0,1,1,0,0,0,0};//= #1 int decena2 [7] = {1,1,0,1,1,0,1};//= #2 int decena3 [7] = {1,1,1,1,0,0,1};//= #3 int decena4 [7] = {0,1,1,0,0,1,1};//= #4 int decena5 [7] = {1,0,1,1,0,1,1};//= #5 int decena6 [7] = {1,0,1,1,1,1,1};//= #6 int decena7 [7] = {1,1,1,0,0,0,0};//= #7 int decena8 [7] = {1,1,1,1,1,1,1};//= #8 int decena9 [7] = {1,1,1,1,0,1,1};//= #9 int counter=11; //CONTADOR UNIDADES int valorD =3; //CONTADOR DECENAS int counter1=0; // CONTADOR PARA EL CAMBIO DE COLOR void setup() { for(byte i =0; i<7;i++){ pinMode (uno[i],OUTPUT); pinMode (dos[i],OUTPUT); } pinMode(GR,OUTPUT); pinMode(RE,OUTPUT); pinMode(SG,OUTPUT); pinMode(SR,OUTPUT); } void loop() { delay(1000); // TIEMPO DE CAMBIO //====================================CONTADOR VERDE DE 30 SEG=== //=============================================================== if(counter1==0){ if((valorD==0)&&(counter==0)){ valorD=0; counter1++; counter=6; } if ((counter==0)||(counter==10)){ valorD=valorD-1; } if (counter <=10){ if (counter==0){ counter=10; } } digitalWrite(GR, 1); digitalWrite(RE, 0); digitalWrite(SG, 1); digitalWrite(SR, 0); counter --; } //====================================CONTADOR AMBAR DE 4 SEG==== //=============================================================== if(counter1==1){ if((valorD==0)&&(counter==0)){ valorD=1; counter1++; } if (counter <=10){ if (counter==0){ counter=10; } } analogWrite(GR, 110); analogWrite(RE, 250); digitalWrite(SG, 0); digitalWrite(SR, 0); counter --; } //====================================CONTADOR ROJO 18 SEG======= //=============================================================== if(counter1==2){ if((valorD==0)&&(counter==0)){ valorD=3; counter1=0; } if ((counter==0)||(counter==10)){ valorD=valorD-1; } if (counter <=10){ if (counter<=0){ counter=10; } } digitalWrite(GR, 0); digitalWrite(RE, 1); digitalWrite(SG, 0); digitalWrite(SR, 1); counter --; } //==========================CONTADOR DE DIGITOS (UNIDADES)======= //=============================================================== switch(counter) { case 0: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad0[i]); } break; case 1: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad1[i]); } break; case 2: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad2[i]); } break; case 3: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad3[i]); } break; case 4: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad4[i]); } break; case 5: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad5[i]); } break; case 6: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad6[i]); } break; case 7: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad7[i]); } break; case 8: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad8[i]); } break; case 9: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad9[i]); } break; default: for(byte i=0;i<7;i++){ digitalWrite (uno[i],unidad0[i]); } break; } //==========================CONTADOR DE DIGITOS (DECENAS)======== //=============================================================== switch(valorD) { case 0: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena0[i]); } break; case 1: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena1[i]); } break; case 2: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena2[i]); } break; case 3: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena3[i]); } break; case 4: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena4[i]); } break; case 5: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena5[i]); } break; case 6: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena6[i]); } break; case 7: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena7[i]); } break; case 8: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena8[i]); } break; case 9: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena9[i]); } break; default: for(byte i=0;i<7;i++){ digitalWrite (dos[i],decena0[i]); } break; } }
1 comentario. Dejar nuevo
Alguna consulta o sugerencia?