Icono del sitio ELECTROALL

juego de mesa de futbol con Arduino

Aproximadamente en el año 2018 trabajé en la parte de mantenimiento en un empresa de juegos electrónicos, ahí aprendí muchas cosas de electrónica, y hoy les compartiré y les  enseñaré a como desarrollar parte electrónica de una mesa de juego de futbol. Prácticamente veremos desde el principio de funcionamiento, el esquemático electrónico, la creación de una tarjeta PCB y finalmente seremos testigos del funcionamiento del proyecto completo.

ESPECIFICACIONES TÉCNICAS
  1. Tensión de alimentación……………………….…………12VDC
  2. Corriente de alimentación………………….……………150mA
  3. Entadas digitales nivel bajo……………….……………….4
  4. Programación directa(PC – main board)………………………..Sí
  5. Salida RELAY………………………………………………………4
    • Tensión salida AC…………………………..….……220V
    • Corriente AC………………………………………….8A
    • Tensión DC……………………………………………30V
    • Corriente DC…………………………………………8A
  6. Salida TRANSISTOR………………………………………….4
    • Tensión salida DC…………………………….……12V
    • Corriente DC……………………….……………….5A
  7. Condiciones ambientales min……………………….….-10°
  8. Condiciones ambientales max…………………..……….85°
  9.  Empotrable…………………………………………………………Sí
ESQUEMÁTICO ELECTRÓNICO
CREACIÓN DE TARJETA PCB
LISTA DE MATERIALES
Categoría Cantidad Referencias Valor PCB Package DATASHEET
Condensadores 8 C1,C2,C3,C5,C6,C7,C11,C12 100nF 0603_CAP (see & buy)
Condensadores 1 C4 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
Resistencias 10 R1,R7,R8,R10,R12,R14,R16,R18,R22,R23 10k 0603_RES  (see & buy)
Resistencias 8 R2,R3,R9,R11,R13,R15,R17,R38 1k 0603_RES  (see & buy)
Resistencias 1 R4 1M 0603_RES  (see & buy)
Resistencias 4 R5,R6,R20,R21 10k 1206_RES  (see & buy)
Resistencias 1 R19 4.7k 0603_RES  (see & buy)
Resistencias 14 R24,R25,R26,R27,R28,R29,R30,R31,R32,R33,R34,R35,R36,R37 220 0603_RES  (see & buy)
Integrados 1 U1 ATMEGA328P QFP80P900X900X120-32  (see & buy)
Integrados 1 U2 CH340C SO16  (see & buy)
Integrados 2 U3,U4 ILD207T SO8  (see & buy)
Integrados 2 U5,U6 74HC595 SO16  (see & buy)
Integrados 1 U7 7805 P1  (see & buy)
Transistores 4 Q1,Q2,Q3,Q4 MJD112-001 TO228P1003X238-3  (see & buy)
Transistores 1 Q5 PMBT3904,215 SOT23-3  (see & buy)
Diodos 1 D1 B330A-13-F DIOM5336X240  (see & buy)
Diodos 1 D2 RR1VWM6STFTR SOD2614X116  (see & buy)
Diodos 2 D3,D4 LED-RED LEDC2012X120  (see & buy)
Miscelánea 2 1,2 DISPLAY 7SEG Común
Miscelánea 1 BTN1 RST BUTTON SMD 2P  (see & buy)
Miscelánea 1 J1 MICRO USB B MICRO USB B  (see & buy)
Miscelánea 4 J2,J5,J6,J7 TBLOCK-M3 T-BLOCK 3PIN BLUE  (see & buy)
Miscelánea 2 J3,J4 TBLOCK-M2 T-BLOCK 2PIN BLUE  (see & buy)
Miscelánea 1 RL1 12V RL12V NORMAL  Común
Miscelánea 1 X1 CRYSTAL SMD S OSCILADOR SMD CERAMIC RESONATORS  (see & buy)
CONEXIONES EXTERNOS
COMO SUBIR BOOTLOADER
PROPÓSITO GENERAL
CODIGO
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
const int coin = 4;          // pin 4 como entrada para el coin

//VARIABLES PARA EL CONTADOR ASCENDIENTE
// estas variables si puede ser cambiado
int contador             = 0;
int contador1            = 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 relay = 12; // relay

//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 (relay, 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);
  estado_coin = digitalRead(coin);

  if (go == false) {
    if (estado_coin != lastButtonState_coin) {
      // si el estado fue cambiado, incremente el conteo
      if (estado_coin == LOW) {
        go = true;
        if (go == true) {
          digitalWrite(relay, 1);
          delay(3000);
          digitalWrite(relay, 0);
        }
      }
    }
  }
  lastButtonState_coin  = estado_coin;
  if (go == true) {
    // comparar el estado del botón a su estado anterior
    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 >= 10) {
          contador = 0;
        }
        contador++;
        digitalWrite(latch, LOW);
        shiftOut(data, clockpin, MSBFIRST, numero[contador]); // lee el arreglo y pasa cada numero a lectura binaria
        digitalWrite(latch, HIGH);
        delay(200);
      }
    }
    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 (contador1 >= 10) {
          contador1 = 0;
        }
        contador1++;
        digitalWrite(latch1, LOW);
        shiftOut(data1, clockpin1, MSBFIRST, numero1[contador1]); // lee el arreglo y pasa cada numero a lectura binaria
        digitalWrite(latch1, HIGH);
        delay(200);
      }
    }
    //guarda el último estado actual como el ultimo estado
    //para el proximo bucle
    lastButtonState_right  = estado_right_sen;
  }
  total = contador + contador1;
  if (total == 9) {
    go = false;
    delay(2000);
    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);
    total = 0;
  }

}
VIDEO
Salir de la versión móvil