Hace un año publiqué un video sobre contadores de aforo para la prevención del contagio de corona virus. Si bien es cierto, en aquel video no había ningún problema en cuanto al funcionamiento general. Sin embargo, los números de los contadores eran pequeños, en consecuencia no se podía apreciar desde una distancia prolongada. Por otro lado, los cables de los sensores se tenía que instalar uno por uno. Aparte de ello, la tarjeta no tenía ningún tipo de cubierta lo que sería un protector o una carcasa. Por eso hoy crearemos un contador grande de 240mm, para que se pueda apreciar desde lejos. A parte de ello en esta versión se podrá visualizar la temperatura. además, contaremos con una alarma. No obstante, se integrará unos conectores molex, lo cual nos facilitará conectar los sensores, el cable de programación y la fuente de alimentación. Finalmente crearemos una carcasa con los respectivos segmentos para q tenga un toque profesional.
ESPECIFICACIONES TÉCNICAS
- Tensión de alimentación……………………….…………12VDC
- Corriente de alimentación………………….……………600mA
- 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
- Sensor de temperatura ………………………………………1
- Salida con transistor 12V / 2A………………………..1
- Dimensiones…………………………………….…….……….240x200mm
- Empotrable…………………………………………….………Sí
DISEÑO TARJETA PCB
LISTA DE COMPONENTES ELECTRÓNICOS
Categoría | Cantidad | Referencias | Valor | PCB Package | datasheet |
Condensadores | 6 | C1,C2,C3,C4,C5,C6 | 100nF | 0603_CAP | (see & buy) |
Condensadores | 1 | C7 | 470uF | CAP SMD 10.5X10MM ALUMINUM 470UF/35V | (see & buy) |
Condensadores | 1 | C8 | 220uF | CAP SMD 6.3X7.7MM ALUMINUM 220UF/16V | (see & buy) |
Condensadores | 1 | C9 | 100nF | 1206_CAP | (see & buy) |
Condensadores | 1 | C10 | 1000uF | ELEC-RAD25 | (see & buy) |
Resistencias | 4 | R1,R7,R8,R10 | 10k | 0603_RES | (see & buy) |
Resistencias | 3 | R2,R3,R9 | 1k | 0603_RES | (see & buy) |
Resistencias | 1 | R4 | 1M | 0603_RES | (see & buy) |
Resistencias | 2 | R5,R6 | 10k | 1206_RES | (see & buy) |
Resistencias | 1 | R11 | 220 | 0603_RES | (see & buy) |
Resistencias | 14 | R12,R13,R14,R15,R16,R17,R18, R19,R20,R21,R22,R23,R24,R25 |
100 | 1206_RES | (see & buy) |
Integrados | 1 | U1 | ATMEGA328P | QFP80P900X900X120-32 | (see & buy) |
Integrados | 1 | U2 | CH340C | SO16 | (see & buy) |
Integrados | 1 | U3 | ILD207T | SO8 | (see & buy) |
Integrados | 2 | U4,U9 | ULN2803 | SO18W | (see & buy) |
Integrados | 1 | U5 | LM35 | TO92 | (see & buy) |
Integrados | 1 | U6 | TLP127 | SOIC250P670X300-4 | (see & buy) |
Integrados | 2 | U7,U10 | 74HC595 | SO16 | (see & buy) |
Integrados | 1 | U8 | 7805 | P1 | (see & buy) |
Transistores | 1 | Q1 | MJD112-001 | TO228P1003X238-3 | (see & buy) |
Diodos | 56 | D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D12, D13,D14,D15,D16,D17,D18,D19,D20 ,D21,D22,D23,D24,D25,D26,D27,D28, D29,D30,D31,D32,D33,D34,D35,D36, D37,D38,D39,D40,D41,D42,D43,D44, D45,D46,D47,D48,D49,D50,D51,D52, D53,D54,D55,D56,D57 |
LED-RED | LED RED 5MM | (see & buy) |
Diodos | 1 | D11 | B330A-13-F | DIOM5336X240 | (see & buy) |
Miscelánea | 1 | BTN1 | RST | BUTTON SMD 2P | (see & buy) |
Miscelánea | 1 | J1 | MICRO USB B | MICRO USB B | (see & buy) |
Miscelánea | 2 | J2,J4 | PINREX 733-72-04TB10 | PINREX 733-72-04TB10 | (see & buy) |
Miscelánea | 1 | J3 | PWR_IN | JACK POWER 12V V3 | (see & buy) |
Miscelánea | 1 | J5 | TBLOCK-M2 | T-BLOCK 2PIN BLUE | (see & buy) |
Miscelánea | 1 | X1 | CRYSTAL SMD S | OSCILADOR SMD CERAMIC RESONATORS | (see & buy) |
CONEXIONES EXTERNAS
CÓDIGO
CONTADOR DE AFORO
int clockpin = 8; //Cuando ay que leer los bit SH int data = 6; //Envio datos DS int latch = 7; //indica pin de salida en el chip ST int clockpin1 = 9; //Cuando ay que leer los bit SH int data1 = 11; //Envio datos DS int latch1 = 10; //indica pin de salida en el chip ST // no cambiar el const int const int left_sen = 2; // pin 2 como entrada para el sensor izquierdo const int right_sen = 3; // pin 3 como entrada para el sensor derecho //VARIABLES PARA EL CONTADOR ASCENDIENTE // estas variables si puede ser cambiado int contador = 0; int contador1 = 0; int contadorD = 0; int total = 0; boolean go = false; int estado_coin = 0; // estado actual del pulsador int lastButtonState_coin = 0; // estado del pulsado anterior int estado_left_sen = 0; // estado del pulsado actual int lastButtonState_left = 0; // estado del pulsado anterior //VARIABLES PARA EL CONTADOR DESCENDIENTE // estas variables si puede ser cambiado int estado_right_sen = 0; // estado del pulsado actual int lastButtonState_right = 0; // estado del pulsado anterior const int alrm = 12; // alrm //Aqui esta el array que contiene todos los numeros para nuestro display //El display tiene las conexiones alcontrario ell pin 8 del 74hc595 es el primer dijito binario const int numero[] = { // display B 63, //Numero 0 en binario es : 11111100 6, //Numero 1 en binario es : 00000110 91, //Numero 2 en binario es : 11011010 79, //Numero 3 en binario es : 11110010 102, //Numero 4 en binario es : 01100110 109, //Numero 5 en binario es : 10110110 125, //Numero 6 en binario es : 10111110 7, //Numero 7 en binario es : 11100000 127, //Numero 8 en binario es : 11111110 103, //Numero 9 en binario es : 11110110 63, //Numero 0 en binario es : 11111100 }; const int numero1[] = { // display A 63, //Numero 0 en binario es : 11111100 6, //Numero 1 en binario es : 00000110 91, //Numero 2 en binario es : 11011010 79, //Numero 3 en binario es : 11110010 102, //Numero 4 en binario es : 01100110 109, //Numero 5 en binario es : 10110110 125, //Numero 6 en binario es : 10111110 7, //Numero 7 en binario es : 11100000 127, //Numero 8 en binario es : 11111110 103, //Numero 9 en binario es : 11110110 63, //Numero 0 en binario es : 11111100 }; void setup() { pinMode(left_sen, INPUT); pinMode(right_sen, INPUT); pinMode(latch, OUTPUT); pinMode(clockpin, OUTPUT); pinMode(data, OUTPUT); pinMode(latch1, OUTPUT); pinMode(clockpin1, OUTPUT); pinMode(data1, OUTPUT); pinMode (alrm, OUTPUT); contador1 = 0; digitalWrite(latch1, LOW); shiftOut(data1, clockpin1, MSBFIRST, numero1[contador1]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch1, HIGH); contador = 0; digitalWrite(latch, LOW); shiftOut(data, clockpin, MSBFIRST, numero[contador]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch, HIGH); } void loop() { // almacenamos la lectura de la entrada de pin 2 estado_left_sen = digitalRead(left_sen); estado_right_sen = digitalRead(right_sen); if (estado_left_sen != lastButtonState_left) { // si el estado fue cambiado, incremente el conteo if (estado_left_sen == LOW) { // si el estado actual es alto, entonces // que pase de off a on: if (contador < 99) { if (contador1 >= 10) { contador1 = 0; } contador++; contador1++; delay(200); digitalWrite(latch1, LOW); shiftOut(data1, clockpin1, MSBFIRST, numero1[contador1]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch1, HIGH); if (contador == 10 || contador == 20 || contador == 30 || contador == 40 || contador == 50 || contador == 60 || contador == 70 || contador == 80 || contador == 90) { contadorD++; digitalWrite(latch, LOW); shiftOut(data, clockpin, MSBFIRST, numero[contadorD]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch, HIGH); } } } } lastButtonState_left = estado_left_sen; // comparar el estado del botón a su estado anterior if (estado_right_sen != lastButtonState_right ) { // si el estado fue cambiado, decrementa el conteo if (estado_right_sen == LOW) { // si el estado actual es alto, entonces // que pase de off a on: if (contador > 0) { contador--; contador1--; digitalWrite(latch1, LOW); shiftOut(data1, clockpin1, MSBFIRST, numero1[contador1]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch1, HIGH); if (contador == 9 || contador == 19 || contador == 29 || contador == 39 || contador == 49 || contador == 59 || contador == 69 || contador == 79 || contador == 89) { contadorD--; digitalWrite(latch, LOW); shiftOut(data, clockpin, MSBFIRST, numero[contadorD]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch, HIGH); } if (contador1 == 0) { contador1 = 10; } } } } lastButtonState_right = estado_right_sen; }
TEMPERATURA
int clockpin = 8; //Cuando ay que leer los bit SH int data = 6; //Envio datos DS int latch = 7; //indica pin de salida en el chip ST int clockpin1 = 9; //Cuando ay que leer los bit SH int data1 = 11; //Envio datos DS int latch1 = 10; //indica pin de salida en el chip ST // no cambiar el const int const int left_sen = 2; // pin 2 como entrada para el sensor izquierdo const int right_sen = 3; // pin 3 como entrada para el sensor derecho //VARIABLES PARA EL CONTADOR ASCENDIENTE // estas variables si puede ser cambiado int contador = 0; int contador1 = 0; int contadorD = 0; int total = 0; boolean go = false; int estado_coin = 0; // estado actual del pulsador int lastButtonState_coin = 0; // estado del pulsado anterior int estado_left_sen = 0; // estado del pulsado actual int lastButtonState_left = 0; // estado del pulsado anterior //VARIABLES PARA EL CONTADOR DESCENDIENTE // estas variables si puede ser cambiado int estado_right_sen = 0; // estado del pulsado actual int lastButtonState_right = 0; // estado del pulsado anterior const int alrm = 12; // alrm //Aqui esta el array que contiene todos los numeros para nuestro display //El display tiene las conexiones alcontrario ell pin 8 del 74hc595 es el primer dijito binario const int numero[] = { // display B 63, //Numero 0 en binario es : 11111100 6, //Numero 1 en binario es : 00000110 91, //Numero 2 en binario es : 11011010 79, //Numero 3 en binario es : 11110010 102, //Numero 4 en binario es : 01100110 109, //Numero 5 en binario es : 10110110 125, //Numero 6 en binario es : 10111110 7, //Numero 7 en binario es : 11100000 127, //Numero 8 en binario es : 11111110 103, //Numero 9 en binario es : 11110110 63, //Numero 0 en binario es : 11111100 }; const int numero1[] = { // display A 63, //Numero 0 en binario es : 11111100 6, //Numero 1 en binario es : 00000110 91, //Numero 2 en binario es : 11011010 79, //Numero 3 en binario es : 11110010 102, //Numero 4 en binario es : 01100110 109, //Numero 5 en binario es : 10110110 125, //Numero 6 en binario es : 10111110 7, //Numero 7 en binario es : 11100000 127, //Numero 8 en binario es : 11111110 103, //Numero 9 en binario es : 11110110 63, //Numero 0 en binario es : 11111100 }; const int sensorPin = A0; void setup() { Serial.begin(9600); pinMode(left_sen, INPUT); pinMode(right_sen, INPUT); pinMode(latch, OUTPUT); pinMode(clockpin, OUTPUT); pinMode(data, OUTPUT); pinMode(latch1, OUTPUT); pinMode(clockpin1, OUTPUT); pinMode(data1, OUTPUT); pinMode (alrm, OUTPUT); contador1 = 0; digitalWrite(latch1, LOW); shiftOut(data1, clockpin1, MSBFIRST, numero1[contador1]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch1, HIGH); contador = 0; digitalWrite(latch, LOW); shiftOut(data, clockpin, MSBFIRST, numero[contador]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch, HIGH); } void loop() { int value = analogRead(sensorPin); Serial.println(sensorPin); int millivolts = (value / 1023.0) * 5000; int celsius = millivolts / 10; Serial.print(celsius); Serial.println(" C"); switch (celsius) { case 0: case 10: case 20: case 30: case 40: case 50: contador1 = 0; break; case 1: case 11: case 21: case 31: case 41: case 51: contador1 = 1; break; case 2: case 12: case 22: case 32: case 42: case 52: contador1 = 2; break; case 3: case 13: case 23: case 33: case 43: case 53: contador1 = 3; break; case 4: case 14: case 24: case 34: case 44: case 54: contador1 = 4; break; case 5: case 15: case 25: case 35: case 45: case 55: contador1 = 5; break; case 6: case 16: case 26: case 36: case 46: case 56: contador1 = 6; break; case 7: case 17: case 27: case 37: case 47: case 57: contador1 = 7; break; case 8: case 18: case 28: case 38: case 48: case 58: contador1 = 8; break; case 9: case 19: case 29: case 39: case 49: case 59: contador1 = 9; break; } if (celsius >= 0 && celsius <= 9) { contadorD = 0; } if (celsius >= 10 && celsius <= 19) { contadorD = 1; } if (celsius >= 20 && celsius <= 29) { contadorD = 2; } if (celsius >= 30 && celsius <= 39) { contadorD = 3; } if (celsius >= 40 && celsius <= 49) { contadorD = 4; } if (celsius >= 50 && celsius <= 59) { contadorD = 5; } if (celsius >= 60 && celsius <= 69) { contadorD = 6; } if (celsius >= 70 && celsius <= 79) { contadorD = 7; } if (celsius >= 80 && celsius <= 89) { contadorD = 8; } if (celsius >= 90 && celsius <= 99) { contadorD = 9; } digitalWrite(latch1, LOW); shiftOut(data1, clockpin1, MSBFIRST, numero1[contador1]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch1, HIGH); digitalWrite(latch, LOW); shiftOut(data, clockpin, MSBFIRST, numero[contadorD]); // lee el arreglo y pasa cada numero a lectura binaria digitalWrite(latch, HIGH); delay(1000); }