Icono del sitio ELECTROALL

Contador de aforo automático, proyecto; prevención COVID 19

YouTube
YouTube
Instagram
Instagram
GitHub
GitHub

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
  1. Tensión de alimentación……………………….…………12VDC
  2. Corriente de alimentación………………….……………300mA
  3. Programación Directa………………………………….….Ordenador – Contador de aforos
  4. Entorno de programación………………………..……..Arduino IDE
  5. Condiciones ambientales min………………………….-10°
  6. Condiciones ambientales max…………………..…….55°
  7. Entradas digitales “sensores” 12VDC………………2
  8. Salida con transistor 12V / 2A…………………………….1
  9. Dimensiones…………………………………….…….……….100x100mm
  10. Empotrable…………………………………………….………Sí
APLICACIÓN
  1. Contador de aforo de personas
  2. 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
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);
  }
  }
}
VIDEO
Salir de la versión móvil