Alguna vez se han preguntado, será difícil realizar un reloj de tiempo real de manera profesional que cuyo display muestre los segundos, minutos y horas?, la respuesta es SÍ!. Efectivamente hoy aprenderemos a como desarrollar dicho proyecto, prácticamente veremos desde el desarrollo del esquemático electrónico, diseño pcb y diseño de la carcasa para finalmente tener un resultado completamente profesional.
ESPECIFICACIONES TÉCNICAS
- Tensión de alimentación……………………….…………12VDC
- Corriente de alimentación………………….……………400mA
- Entadas digitales (Pulsadores incluidos)…………3
- Salidas a transistor……………………………………………1
- Salidas para display de 7seg……………………………6
- Entorno de programación………………………..………..Arduino IDE
- Condiciones ambientales min……………………….….-40°
- Condiciones ambientales max…………………..……….150°
- Dimensiones de la pcb..…………………………………….100x116mm
- Dimensiones carcasa ..…………………………………..….500x140mm
- Empotrable………………………………….……………………Sí
LISTA DE COMPONENTES ELECTRÓNICOS
Categoría | Cantidad | Referencias | Valor | PCB Package | Datasheet |
Condensadores | 5 | C1,C2,C3,C5,C6 | 100nF | 0603_CAP | |
Condensadores | 1 | C4 | 10uF | 1206_CAP | |
Condensadores | 1 | C7 | 470uF | CAP SMD 10.5X10MM ALUMINUM 470UF/35V | |
Condensadores | 1 | C8 | 220uF | CAP SMD 6.3X7.7MM ALUMINUM 220UF/16V | |
Condensadores | 1 | C9 | 100nF | 1206_CAP | |
Condensadores | 1 | C10 | 1000uF | ELEC-RAD25 | |
Resistencias | 2 | R1,R2 | 4.7k | RES_ARRAY 0603X4 | |
Resistencias | 11 | R3,R6,R7,R8,R9,R10,R11,R12,R15,R16,R19 | 10k | 0603_RES | |
Resistencias | 1 | R4 | 1M | 0603_RES | |
Resistencias | 1 | R5 | 470 | 0603_RES | |
Resistencias | 4 | R13,R14,R17,R18 | 1k | 0603_RES | |
Resistencias | 1 | R20 | 220 | 0603_RES | |
Integrados | 1 | U1 | ATMEGA2560 | QFP50P1600X1600X120-100 | |
Integrados | 1 | U2 | AT24C512B | SO8 | |
Integrados | 1 | U3 | DS3232 | SO16W | |
Integrados | 6 | U4,U7,U9,U11,U15,U17 | 74HC245 | SO20W | |
Integrados | 6 | U5,U6,U8,U10,U14,U16 | ULN2803 | SO18W | |
Integrados | 1 | U12 | CH340C | SO16 | |
Integrados | 1 | U13 | LM2576-5,0 | TO170P1410X464-6 | |
Integrados | 1 | U18 | TLP127 | SOIC250P670X300-4 | |
Transistores | 1 | Q1 | MJD112-001 | TO228P1003X238-3 | |
Diodos | 1 | D1 | RR1VWM6STFTR | SOD2614X116 | |
Diodos | 2 | D2,D3 | B330A-13-F | DIOM5226X230N | |
Diodos | 1 | D4 | LED-RED | LEDC2012X120 | |
Miscelánea | 1 | BAT1 | 3V | BAT 3V | |
Miscelánea | 1 | BTN1 | RST | BUTTON SMD 2P | |
Miscelánea | 3 | BTN2,BTN3,BTN4 | BUTTON | BUTTON TH 2P | |
Miscelánea | 1 | F1 | 1A | FUSE SMD | |
Miscelánea | 1 | J1 | CONN-SIL7 | CONN-SIL7 | |
Miscelánea | 6 | J2,J3,J4,J5,J9,J10 | PINREX 733-72-08TB10 | PINREX 733-72-08TB10 | |
Miscelánea | 1 | J6 | CONN-H4 | CONN-SIL4 | |
Miscelánea | 1 | J7 | MICRO USB B | MICRO USB B | |
Miscelánea | 2 | J8,J11 | TBLOCK-M2 | T-BLOCK 2PIN BLUE | |
Miscelánea | 1 | L1 | 100u | INDUCTOR 100UH | |
Miscelánea | 1 | X1 | CRYSTAL SMD S | OSCILADOR SMD CERAMIC RESONATORS |
CONEXIONES EXTERNAS
CODIGO Arduino
#include <Wire.h> #include "Sodaq_DS3231.h" char DiaSemana[][4] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"}; // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga // Ejemplo 2018 noviembre 11, 08:00:00 dia 6-Sabado (0=Dom, 1=Lun, 2=Mar, 3=Mie, 4=Jue, 5=Vie, 6=Sab) // DateTime dt(2021, 5, 19, 21, 52, 0, 3); int a_seg = 62; /////////////////////////////////////// int b_seg = 63; /////////////////////////////////////// int c_seg = 64; ///////////////////////////////////////PINES PARA EL CONTADOR int d_seg = 66; ///////////////////////////////////////DE unidad_segES int e_seg = 65; /////////////////////////////////////// int f_seg = 61; /////////////////////////////////////// int g_seg = 67; /////////////////////////////////////// int A_seg = 55; /////////////////////////////////////// int B_seg = 57; /////////////////////////////////////// int C_seg = 56; /////////////////////////////////////// int D_seg = 59; ///////////////////////////////////////PINES PARA EL CONTADOR int E_seg = 58; ///////////////////////////////////////DE decena_segS int F_seg = 54; /////////////////////////////////////// int G_seg = 60; /////////////////////////////////////// int a_min = 30; /////////////////////////////////////// int b_min = 31; /////////////////////////////////////// int c_min = 32; ///////////////////////////////////////PINES PARA EL CONTADOR int d_min = 34; ///////////////////////////////////////DE UNIDADES int e_min = 33; /////////////////////////////////////// int f_min = 29; /////////////////////////////////////// int g_min = 35; /////////////////////////////////////// int A_min = 23; /////////////////////////////////////// int B_min = 24; /////////////////////////////////////// int C_min = 25; /////////////////////////////////////// int D_min = 27; ///////////////////////////////////////PINES PARA EL CONTADOR int E_min = 26; ///////////////////////////////////////DE DECENAS int F_min = 22; /////////////////////////////////////// int G_min = 28; /////////////////////////////////////// int a_hor = 49; /////////////////////////////////////// int b_hor = 48; /////////////////////////////////////// int c_hor = 47; ///////////////////////////////////////PINES PARA EL CONTADOR int d_hor = 46; ///////////////////////////////////////DE unidad_horES int e_hor = 45; /////////////////////////////////////// int f_hor = 44; /////////////////////////////////////// int g_hor = 43; /////////////////////////////////////// int A_hor = 42; /////////////////////////////////////// int B_hor = 38; /////////////////////////////////////// int C_hor = 41; /////////////////////////////////////// int D_hor = 37; ///////////////////////////////////////PINES PARA EL CONTADOR int E_hor = 40; ///////////////////////////////////////DE decena_horS int F_hor = 39; /////////////////////////////////////// int G_hor = 36; /////////////////////////////////////// ///////////////////////////////////////////////////// int dos_seg [7] = {a_seg, b_seg, c_seg, d_seg, e_seg, f_seg, g_seg}; // unidad_segES int uno_seg [7] = {A_seg, B_seg, C_seg, D_seg, E_seg, F_seg, G_seg}; // decena_segS //--unidad_segES--///////////////////////////////////////// int unidad_seg0 [7] = {1, 1, 1, 1, 1, 1, 0}; //= #0 int unidad_seg1 [7] = {0, 1, 1, 0, 0, 0, 0}; //= #1 int unidad_seg2 [7] = {1, 1, 0, 1, 1, 0, 1}; //= #2 int unidad_seg3 [7] = {1, 1, 1, 1, 0, 0, 1}; //= #3 int unidad_seg4 [7] = {0, 1, 1, 0, 0, 1, 1}; //= #4 int unidad_seg5 [7] = {1, 0, 1, 1, 0, 1, 1}; //= #5 int unidad_seg6 [7] = {1, 0, 1, 1, 1, 1, 1}; //= #6 int unidad_seg7 [7] = {1, 1, 1, 0, 0, 0, 0}; //= #7 int unidad_seg8 [7] = {1, 1, 1, 1, 1, 1, 1}; //= #8 int unidad_seg9 [7] = {1, 1, 1, 1, 0, 1, 1}; //= #9 //--decena_segS--//////////////////////////////////////////// int decena_seg0 [7] = {1, 1, 1, 1, 1, 1, 0}; //= #0 int decena_seg1 [7] = {0, 1, 1, 0, 0, 0, 0}; //= #1 int decena_seg2 [7] = {1, 1, 0, 1, 1, 0, 1}; //= #2 int decena_seg3 [7] = {1, 1, 1, 1, 0, 0, 1}; //= #3 int decena_seg4 [7] = {0, 1, 1, 0, 0, 1, 1}; //= #4 int decena_seg5 [7] = {1, 0, 1, 1, 0, 1, 1}; //= #5 int decena_seg6 [7] = {1, 0, 1, 1, 1, 1, 1}; //= #6 int decena_seg7 [7] = {1, 1, 1, 0, 0, 0, 0}; //= #7 int decena_seg8 [7] = {1, 1, 1, 1, 1, 1, 1}; //= #8 int decena_seg9 [7] = {1, 1, 1, 1, 0, 1, 1}; //= #9 ///////////////////////////////////////////////////// int dos_min [7] = {a_min , b_min , c_min , d_min , e_min , f_min , g_min }; // UNIDADES int uno_min [7] = {A_min , B_min , C_min , D_min , E_min , F_min , G_min }; // DECENAS //--UNIDADES--///////////////////////////////////////// int unidad_min0 [7] = {1, 1, 1, 1, 1, 1, 0}; //= #0 int unidad_min1 [7] = {0, 1, 1, 0, 0, 0, 0}; //= #1 int unidad_min2 [7] = {1, 1, 0, 1, 1, 0, 1}; //= #2 int unidad_min3 [7] = {1, 1, 1, 1, 0, 0, 1}; //= #3 int unidad_min4 [7] = {0, 1, 1, 0, 0, 1, 1}; //= #4 int unidad_min5 [7] = {1, 0, 1, 1, 0, 1, 1}; //= #5 int unidad_min6 [7] = {1, 0, 1, 1, 1, 1, 1}; //= #6 int unidad_min7 [7] = {1, 1, 1, 0, 0, 0, 0}; //= #7 int unidad_min8 [7] = {1, 1, 1, 1, 1, 1, 1}; //= #8 int unidad_min9 [7] = {1, 1, 1, 1, 0, 1, 1}; //= #9 //--DECENAS--//////////////////////////////////////////// int decena_min0 [7] = {1, 1, 1, 1, 1, 1, 0}; //= #0 int decena_min1 [7] = {0, 1, 1, 0, 0, 0, 0}; //= #1 int decena_min2 [7] = {1, 1, 0, 1, 1, 0, 1}; //= #2 int decena_min3 [7] = {1, 1, 1, 1, 0, 0, 1}; //= #3 int decena_min4 [7] = {0, 1, 1, 0, 0, 1, 1}; //= #4 int decena_min5 [7] = {1, 0, 1, 1, 0, 1, 1}; //= #5 int decena_min6 [7] = {1, 0, 1, 1, 1, 1, 1}; //= #6 int decena_min7 [7] = {1, 1, 1, 0, 0, 0, 0}; //= #7 int decena_min8 [7] = {1, 1, 1, 1, 1, 1, 1}; //= #8 int decena_min9 [7] = {1, 1, 1, 1, 0, 1, 1}; //= #9 ///////////////////////////////////////////////////// int dos_hor [7] = {a_hor, b_hor, c_hor, d_hor, e_hor, f_hor, g_hor}; // unidad_horES int uno_hor [7] = {A_hor, B_hor, C_hor, D_hor, E_hor, F_hor, G_hor}; // decena_horS //--unidad_horES--///////////////////////////////////////// int unidad_hor0 [7] = {1, 1, 1, 1, 1, 1, 0}; //= #0 int unidad_hor1 [7] = {0, 1, 1, 0, 0, 0, 0}; //= #1 int unidad_hor2 [7] = {1, 1, 0, 1, 1, 0, 1}; //= #2 int unidad_hor3 [7] = {1, 1, 1, 1, 0, 0, 1}; //= #3 int unidad_hor4 [7] = {0, 1, 1, 0, 0, 1, 1}; //= #4 int unidad_hor5 [7] = {1, 0, 1, 1, 0, 1, 1}; //= #5 int unidad_hor6 [7] = {1, 0, 1, 1, 1, 1, 1}; //= #6 int unidad_hor7 [7] = {1, 1, 1, 0, 0, 0, 0}; //= #7 int unidad_hor8 [7] = {1, 1, 1, 1, 1, 1, 1}; //= #8 int unidad_hor9 [7] = {1, 1, 1, 1, 0, 1, 1}; //= #9 //--decena_horS--//////////////////////////////////////////// int decena_hor0 [7] = {1, 1, 1, 1, 1, 1, 0}; //= #0 int decena_hor1 [7] = {0, 1, 1, 0, 0, 0, 0}; //= #1 int decena_hor2 [7] = {1, 1, 0, 1, 1, 0, 1}; //= #2 int decena_hor3 [7] = {1, 1, 1, 1, 0, 0, 1}; //= #3 int decena_hor4 [7] = {0, 1, 1, 0, 0, 1, 1}; //= #4 int decena_hor5 [7] = {1, 0, 1, 1, 0, 1, 1}; //= #5 int decena_hor6 [7] = {1, 0, 1, 1, 1, 1, 1}; //= #6 int decena_hor7 [7] = {1, 1, 1, 0, 0, 0, 0}; //= #7 int decena_hor8 [7] = {1, 1, 1, 1, 1, 1, 1}; //= #8 int decena_hor9 [7] = {1, 1, 1, 1, 0, 1, 1}; //= #9 int hc_ac = 10; int hd_ac = 9; int mc_ac = 8; int md_ac = 7; int sc_ac = 6; int sd_ac = 5; boolean updt = false; void setup() { rtc.begin(); Wire.begin(); pinMode (hc_ac, OUTPUT); pinMode (hd_ac, OUTPUT); pinMode (mc_ac, OUTPUT); pinMode (md_ac, OUTPUT); pinMode (sc_ac, OUTPUT); pinMode (sd_ac, OUTPUT); digitalWrite(hc_ac, 0); digitalWrite(hd_ac, 0); digitalWrite(mc_ac, 0); digitalWrite(md_ac, 0); digitalWrite(sc_ac, 0); digitalWrite(sd_ac, 0); // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga // rtc.setDateTime(dt); for (byte i = 0; i < 7; i++) { pinMode (uno_seg[i], OUTPUT); pinMode (dos_seg[i], OUTPUT); } for (byte i = 0; i < 7; i++) { pinMode (uno_min[i], OUTPUT); pinMode (dos_min[i], OUTPUT); } for (int l = 0; l < 7; l++) { pinMode (uno_hor[l], OUTPUT); pinMode (dos_hor[l], OUTPUT); } } void loop() { DateTime now = rtc.now(); int seg = now.second(); int minut = now.minute(); int hor = now.hour(); switch (seg) { case 0: case 10: case 20: case 30: case 40: case 50: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg0[i]); } break; case 1: case 11: case 21: case 31: case 41: case 51: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg1[i]); } break; case 2: case 12: case 22: case 32: case 42: case 52: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg2[i]); } break; case 3: case 13: case 23: case 33: case 43: case 53: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg3[i]); } break; case 4: case 14: case 24: case 34: case 44: case 54: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg4[i]); } break; case 5: case 15: case 25: case 35: case 45: case 55: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg5[i]); } break; case 6: case 16: case 26: case 36: case 46: case 56: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg6[i]); } break; case 7: case 17: case 27: case 37: case 47: case 57: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg7[i]); } break; case 8: case 18: case 28: case 38: case 48: case 58: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg8[i]); } break; case 9: case 19: case 29: case 39: case 49: case 59: for (byte i = 0; i < 7; i++) { digitalWrite (uno_seg[i], unidad_seg9[i]); } break; } switch (seg) { case 0: case 5: for (byte i = 0; i < 7; i++) { digitalWrite (dos_seg[i], decena_seg0[i]); } break; case 10: case 15: for (byte i = 0; i < 7; i++) { digitalWrite (dos_seg[i], decena_seg1[i]); } break; case 20: case 25: for (byte i = 0; i < 7; i++) { digitalWrite (dos_seg[i], decena_seg2[i]); } break; case 30: case 35: for (byte i = 0; i < 7; i++) { digitalWrite (dos_seg[i], decena_seg3[i]); } break; case 40: case 45: for (byte i = 0; i < 7; i++) { digitalWrite (dos_seg[i], decena_seg4[i]); } break; case 50: case 55: for (byte i = 0; i < 7; i++) { digitalWrite (dos_seg[i], decena_seg5[i]); } break; } switch (minut) { case 0: case 10: case 20: case 30: case 40: case 50: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min0[i]); } break; case 1: case 11: case 21: case 31: case 41: case 51: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min1[i]); } break; case 2: case 12: case 22: case 32: case 42: case 52: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min2[i]); } break; case 3: case 13: case 23: case 33: case 43: case 53: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min3[i]); } break; case 4: case 14: case 24: case 34: case 44: case 54: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min4[i]); } break; case 5: case 15: case 25: case 35: case 45: case 55: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min5[i]); } break; case 6: case 16: case 26: case 36: case 46: case 56: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min6[i]); } break; case 7: case 17: case 27: case 37: case 47: case 57: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min7[i]); } break; case 8: case 18: case 28: case 38: case 48: case 58: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min8[i]); } break; case 9: case 19: case 29: case 39: case 49: case 59: for (byte i = 0; i < 7; i++) { digitalWrite (uno_min[i], unidad_min9[i]); } break; } if (minut >= 0 && minut <= 9) for (byte i = 0; i < 7; i++) { digitalWrite (dos_min[i], decena_min0[i]); } if (minut >= 10 && minut <= 19) for (byte i = 0; i < 7; i++) { digitalWrite (dos_min[i], decena_min1[i]); } if (minut >= 20 && minut <= 29) for (byte i = 0; i < 7; i++) { digitalWrite (dos_min[i], decena_min2[i]); } if (minut >= 30 && minut <= 39) for (byte i = 0; i < 7; i++) { digitalWrite (dos_min[i], decena_min3[i]); } if (minut >= 40 && minut <= 49) for (byte i = 0; i < 7; i++) { digitalWrite (dos_min[i], decena_min4[i]); } if (minut >= 50 && minut <= 59) for (byte i = 0; i < 7; i++) { digitalWrite (dos_min[i], decena_min5[i]); } switch (hor) { case 0: case 10: case 20: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor0[i]); } break; case 1: case 11: case 21: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor1[i]); } break; case 2: case 12: case 22: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor2[i]); } break; case 3: case 13: case 23: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor3[i]); } break; case 4: case 14: case 24: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor4[i]); } break; case 5: case 15: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor5[i]); } break; case 6: case 16: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor6[i]); } break; case 7: case 17: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor7[i]); } break; case 8: case 18: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor8[i]); } break; case 9: case 19: for (byte i = 0; i < 7; i++) { digitalWrite (uno_hor[i], unidad_hor9[i]); } break; } switch (hor) { case 0: for (byte i = 0; i < 7; i++) { digitalWrite (dos_hor[i], decena_hor0[i]); } break; case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: for (byte i = 0; i < 7; i++) { digitalWrite (dos_hor[i], decena_hor1[i]); } break; case 20: case 21: case 22: case 23: case 24: for (byte i = 0; i < 7; i++) { digitalWrite (dos_hor[i], decena_hor2[i]); } break; } }
2 comentarios. Dejar nuevo
Magníficos todos los proyectos que realizas. Eres un excelente profesional.
buenas tardes , nos facilitaria un video demostrativo de esta tarjeta con aplicativos de pulsadores interactuando con los numeros del tablero , saludos desde Ecuador