Literalmente la pregunta de todo el mundo en estos días es; cuando terminará la pandemia?, cuando volverá todo a la normalidad?, cuando saldrá la cura?, mientras se hace larga la espera la economía se va en declive. Viendo toda esta situación, por ejemplo, el gobierno de mi país ya inició la re activación económica, eso quiere decir de que las tiendas y los centros comerciales se están aperturando gradualmente, pero cumpliendo con una serie de protocolos. Y nosotros como electrónicos tememos mucho que aportar para la prevención de la propagación de este virus, por eso en episodio crearemos contadores de aforos para centros comerciales y tiendas pequeñas, de esta manera tendremos un control exacto de las personas que se encuentran dentro de las instalaciones. Recordemos que para prevenir la propagación se a reducido la capacidad de aforo de un local comercial, eso quiere decir que si mas antes de la pandemia su capacidad era de 100 personas, ahora es de 50 personas, entonces al instalar nuestro sistema se tendrá el control exacto de las personas. El funcionamiento de nuestro sistema es algo simple, inicialmente contaremos con dos sensores, en la cual uno de ellos cuenta el ingreso y el otro sensor cuenta la salida de las personas, y cuando llega al tope, en este caso 50 personas, inmediatamente empezará a sonar una alarma indicando de que ya no pueden ingresar más personas; este no dejará de sonar hasta que el conteo sea menor que 50 personas dentro del local comercial.
DATOS TÉCNICOS
- Tensión de alimentación……………………….…………12VDC
- Corriente de alimentación………………….……………300mA
- Programación Directa………………………………….….Ordenador – Contador de aforos
- Entorno de programación………………………..……..Arduino IDE
- Condiciones ambientales min………………………….-10°
- Condiciones ambientales max…………………..…….55°
- Entradas digitales “sensores” 12VDC………………2
- Salida con transistor 12V / 2A…………………………….1
- Dimensiones…………………………………….…….……….100x100mm
- Empotrable…………………………………………….………Sí
APLICACIÓN
- Contador de aforo de personas
- Contador de parqueo de carros
ESQUEMÁTICO ELECTRÓNICO
DESCARGAR DISEÑO EN PROTEUS 8.9 (apoyame con tu donación para comprar materiales)
MATERIALES
- U1; Microcontrolador ATmega328p AU (see & buy)
- U2-U3; Circuito integrado ULN2803D (see & buy)
- U4; Circuito integrado CH340C (see & buy)
- U5; Regulador de Step-Down LM2576S-5.0/TR (see & buy)
- U6-U7; Opto acoplador TPL127 (see & buy)
- D1-D42; led 5mm rojo (see & buy)
- D43, D46-D47; led green SMD Package (1206) (see & buy)
- D44; Diodo Schottky Barrier Diodes B330A-13-F (see & buy)
- D45; Diodo Schottky SS14-TP (see & buy)
- R22-R23; Resistencia SMD 20k Ohm, package 1206 (see & buy)
- R17; Resistencia SMD 1/10W, 10k Ohm, package 0603 ( see & buy )
- R1-R14; Resistencia SMD 1/10W, 470 Ohm, package 0603 ( see & buy )
- R18-R20; Resistencia SMD 1/10W, 1k Ohm, package 0603 ( see & buy )
- R15; Resistencia SMD 1/10W, 4.7k Ohm, package 0603 ( see & buy )
- R16; Resistencia SMD 1/10W, 1M Ohm, package 0603 ( see & buy )
- C1; Capacitor cerámico 0.1µF, package 1206 (see & buy)
- C4-C8; Capacitor cerámico 0.1uF (0603) ( see & buy )
- C2; Capacitor electrolítico 470µF/35V (see & buy)
- C3; Capacitor electrolítico 220µF/16V, (see & buy)
- BTN1; Pulsador SMD (see & buy)
- J1; Micro USB tipo B (see & buy)
- J2,J3; conectores espadines macho (see & buy)
- J4,J6-J7; Borneras de conexión 2 pines (see)
- J2; Jack power 12V (see & buy)
- L1; Inductor 100uH (see & buy)
- X1; Cristal 16Mhz (see & buy)
PARTES DE LA TARJETA ELECTRÓNICA
VISTA SUPERIOR
VISTA INFERIOR
CÓDIGO ARDUINO
/* 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 ________________________________________________________ {==[=======> (CONTADOR DE AFORO DE PERSONAS, PROYECTO COVID) <=======]==} ________________________________________________________ */ // no cambiar las el const int const int pulsador_asc = 2; // ENTRADA IN1 PARA CONTAR ASCENDENTEMENTE // ascendentes const int pulsador_des = 3; // ENTRADA IN2 PARA CONTAR DESCENDENTEMENTE // descendentes //VARIABLES PARA EL CONTADOR ASCENDIENTE // estas variables si puede ser cambiado int contador = 0; // contador para el numero de veces presinados int estado_pulsador_asc = 0; // estado actual del pulsador int lastButtonState_asc = 1; // estado anterior del pulsador //VARIABLES PARA EL CONTADOR DESCENDIENTE // estas variables si puede ser cambiado int estado_pulsador_des = 0; // estado actual del pulsador int lastButtonState_des = 1; // estado anterior del pulsador const int sir = 18; ////////////////////////////////////////////////// int a = 11; /////////////////////////////////////// int b = 12; /////////////////////////////////////// int c = 13; ///////////////////////////////////////PINES PARA EL CONTADOR int d = 14; ///////////////////////////////////////DE UNIDADES int e = 15; /////////////////////////////////////// int f = 16; /////////////////////////////////////// int g = 17; /////////////////////////////////////// int A = 4; /////////////////////////////////////// int B = 5; /////////////////////////////////////// int C = 6; /////////////////////////////////////// int D = 7; ///////////////////////////////////////PINES PARA EL CONTADOR int E = 8; ///////////////////////////////////////DE DECENAS int F = 9; /////////////////////////////////////// int G = 10; /////////////////////////////////////// ///////////////////////////////////////////////////// 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 = 0; //CONTADOR UNIDADES int contadorD = 0; //CONTADOR DECENAS int counter1 = 0; // CONTADOR PARA EL CAMBIO DE COLOR void setup() { Serial.begin(9600); pinMode(pulsador_asc, INPUT_PULLUP); //Resistencia de pullup interna pinMode(pulsador_des, INPUT_PULLUP); //Resistencia de pullup interna pinMode(sir, OUTPUT); for (byte i = 0; i < 7; i++) { pinMode (uno[i], OUTPUT); pinMode (dos[i], OUTPUT); } } void loop() { // almacenamos la lectura de la entrada de pin 2 estado_pulsador_asc = digitalRead(pulsador_asc); estado_pulsador_des = digitalRead(pulsador_des); // comparar el estado del botón a su estado anterior if (estado_pulsador_asc != lastButtonState_asc) { // si el estado fue cambiado, incremente el conteo digitalWrite(sir, 1); if (estado_pulsador_asc == HIGH) { // si el estado actual es alto, entonces // que pase de off a on: digitalWrite(sir, 0); if (counter < 99) { contador++; counter++; Serial.print("CONTEO= "); Serial.println(contador); Serial.print("CONTEO_sis= "); Serial.println(counter); delay(100); if (counter == 10 || counter == 20 || counter == 30 || counter == 40 || counter == 50 || counter == 60 || counter == 70 || counter == 80 || counter == 90) { contadorD++; delay(100); } } } } lastButtonState_asc = estado_pulsador_asc; // comparar el estado del botón a su estado anterior if (estado_pulsador_des != lastButtonState_des ) { // si el estado fue cambiado, decrementa el conteo digitalWrite(sir, 1); if (estado_pulsador_des == HIGH) { // si el estado actual es alto, entonces // que pase de off a on: digitalWrite(sir, 0); if (counter > 0 ) { contador--; counter--; Serial.print("CONTEO= "); Serial.println(contador); Serial.print("CONTEO_sis= "); Serial.println(counter); delay(100); if (counter == 9 || counter == 19 || counter == 29 || counter == 39 || counter == 49 || counter == 59 || counter == 69 || counter == 79 || counter == 89) { contadorD--; delay(100); } if (contador == -1) { contador = 9; } } } } //guarda el último estado actual como el ultimo estado //para el proximo bucle lastButtonState_des = estado_pulsador_des; if (contador == 10) { contador = 0; } switch (contador) { 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; } switch (contadorD) { 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; } if(counter >= 50){ if (counter >= 50) { digitalWrite(sir, 1); } else { digitalWrite(sir, 0); } } }