GERBER:

https://mega.nz/file/2BZUzS5I#Ho_CL-OzVEn6gYVKNqsvBhpyxhEkakie7-dDosJz0Gs

SCHEMATIC DIAGRAM

Here we will see the schematic diagram of how the connections will go to later create the tracks on the PCB, there we can see the values of each electronic component and also the integrated circuits.

FUNCTIONING

We will start with the most basic of the project, which is the power supply. This circuit has a 5V power supply. We will directly have to use a source of that voltage since it does not have a regulator included. If we connect a higher voltage source, it can burn the microcontroller, so we must be very careful.

Now we will see that our project works with the atmega328p, that is to say, with the arduino and we can program it with the ARDUINO IDE without problem, but we have to remove the PCB from the chip and record it in an ARDUINO. We have not included a direct programming to reduce the PCB a bit.

The programming is based on serial data, that is to say, with only 3 pins we can control the 74HC595 integrated circuits. We will use the common cathode displays for the visualization of the numbers and also 3 pushbuttons to control the timer, that is, 1 start, 1 stop and 1 reset this timer controls approximately 9 hours 59 minutes more than enough time for our projects

CODE ARDUINO

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

// 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 contadorU            = 0;
int contadorD            = 0;
int contadorC            = 0;
int contadorM            = 0;
int contadorUU           = 0;
int estado_left_sen      = 0;      // estado  del pulsado actual
int lastButtonState_left = 0;     // estado  del pulsado anterior

boolean start            = false;
boolean stopp            = false;

//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 UNDs para nuestro display
//El display tiene las conexiones alcontrario ell pin 8 del 74hc595 es el primer dijito binario

const int NUM[] = { // 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
};

void setup() {

  pinMode(left_sen, INPUT);
  pinMode(right_sen, INPUT);

  pinMode(latch, OUTPUT);
  pinMode(clockpin, OUTPUT);
  pinMode(data, OUTPUT);

  pinMode (alrm, OUTPUT);

  digitalWrite(latch, LOW);
  shiftOut(data, clockpin, MSBFIRST, NUM[contador]); // lee el arreglo y pasa cada NUM a lectura binaria
  shiftOut(data, clockpin, MSBFIRST, NUM[contador]); // lee el arreglo y pasa cada NUM a lectura binaria
  shiftOut(data, clockpin, MSBFIRST, NUM[contador]); // lee el arreglo y pasa cada NUM a lectura binaria
  shiftOut(data, clockpin, MSBFIRST, NUM[contador]); // lee el arreglo y pasa cada NUM a lectura binaria
  shiftOut(data, clockpin, MSBFIRST, NUM[contador]); // lee el arreglo y pasa cada NUM a lectura binaria
  digitalWrite(latch, HIGH);
}
void loop()
{
  estado_left_sen = digitalRead(left_sen);
  estado_right_sen = digitalRead(right_sen);

  if (estado_left_sen != lastButtonState_left) {
    if (estado_left_sen == LOW) {
      start = true;
    }
  }
  lastButtonState_left  = estado_left_sen;

  if (start == true) {
    if (contadorU >= 10) {
      contadorU = 0;
    }
    if (contadorU >= 9) {
      contadorD++;
    }
    if (contadorD >= 6) {
      contadorD = 0;
 contadorC++;
...
Read more »