Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Individuelle 4×4 Tic-Tac-Toe Visitenkarten-Platine – Design, Bau und Programmierung

Überblick

Dieses Tutorial führt Sie durch die Erstellung einer individuellen Visitenkarten-Platine (PCB), die gleichzeitig als 4×4 Tic-Tac-Toe-Spiel dient. Die Vorderseite zeigt das EDISON SCIENCE CORNER Logo, Social-Media-Icons und einen QR-Code, der zu einem YouTube-Kanal verlinkt. Auf der Rückseite verbirgt sich ein voll funktionsfähiger Spielschaltkreis, der von einem ATmega328, NeoPixel-LEDs und Tastschaltern gesteuert wird.

Komponenten & Zubehör

BauteilAnzahl
Microchip ATmega328P‑AU1
NeoPixel RGB LED Strip (WS2812B)16 (4×4)
Tastschalter, oberflächenmontiert16
Individuelle PCB (JLCPCB)1
Arduino UNO (zur Programmierung)1
USB Micro‑Buchse1
Kondensatoren 22 pF (0805)2
Kondensatoren 100 nF (0805)2
Widerstände 1 kΩ (0805)3
Widerstand 10 kΩ (0805)1
16 MHz Quarz1
LEDs (SMD 0805)2

Benötigte Werkzeuge & Maschinen

Software & Online-Dienste

Schritt 1: PCB designen & fertigen lassen

Mit EasyEDA wurde eine 89 mm × 50 mm große Platine (Standard-Visitenkartengröße) entworfen und eine 4×4 Tic-Tac-Toe-Matrix geroutet. Der Schaltplan nutzt einen ATmega328 als zentralen Mikrocontroller und integriert 16 WS2812B-LEDs sowie 16 Tastschalter. Nach Abschluss des Layouts wurden die Gerber-Dateien exportiert und zu JLCPCB hochgeladen. Mit einer Platinendicke von 0,8 mm in Schwarz traf die fertige PCB nach zwei Wochen ein und entsprach der erwarteten Qualität für Hobbyprojekte.

Schritt 2: Komponenten beschaffen

Beziehen Sie alle Bauteile gemäß der obigen Liste. Sämtliche Teile sind gängig, preiswert und bei Elektronikdistributoren wie Digi-Key, Mouser oder AliExpress erhältlich.

Schritt 3: Bestücken & Löten

Beginnen Sie mit dem Löten der USB-Micro-Buchse, setzen Sie dann den ATmega328 und die passiven Bauteile ein. Anschließend löten Sie den NeoPixel-LED-Strip und richten jede LED auf den zugehörigen Tastschalter aus. Löten Sie sorgfältig alle 16 Schalter mit korrekter Orientierung. Ein geübter Bastler benötigt für die komplette Montage etwa eine Stunde.

Schritt 4: Programmierung

Verbinden Sie die Platine per USB mit dem PC. Laden Sie den folgenden Sketch über die Arduino IDE hoch:

Code herunterladen

Der Sketch initialisiert das 16-LED-Array, verarbeitet Tastendrücke der 4×4-Tastenmatrix und implementiert eine einfache Gewinnlogik. Spieler 1 nutzt grüne LEDs, Spieler 2 blaue LEDs. Bei einem Gewinn blinkt das Brett in der Gewinnfarbe; füllt sich das Brett ohne Gewinner, blinkt es rot.

Schritt 5: Spielen & Genießen

Drehen Sie die Karte um, um die Spielseite zu enthüllen. Jeder Tastendruck beleuchtet die entsprechende LED. Das Spiel folgt den klassischen Tic-Tac-Toe-Regeln, jedoch mit einem 4×4-Gitter und Farbindikatoren. Genießen Sie ein einzigartiges, tragbares Spiel, das auf Konferenzen und Networking-Events als Gesprächsanlass dient.

Quellcode

Nachfolgend finden Sie den vollständigen Arduino-Sketch (C/C++), der in diesem Projekt verwendet wird. Er umfasst Tastatur-Handling, LED-Steuerung und Gewinnlogik.

#include <Keypad.h>
#include <FastLED.h>

#define LED_PIN 5
#define NUM_LEDS 16
#define LED_TYPE WS2812B
#define COLOR_ORDER GBR
#define BRIGHTNESS 30

CRGB leds[NUM_LEDS];
int player = 1;
char board[16] = {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'};
char key;
int moveCount = 0;

const byte ROWS = 4;
const byte COLS = 4;

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {A0, A1, A2, A3};
byte colPins[COLS] = {A4, A5, 2, 3};

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(9600);
  LEDS.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);

  // Alle LEDs kurz grün, dann blau aufleuchten lassen (Funktionstest)
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < NUM_LEDS; j++)
      leds[j] = (i % 2 == 0) ? CRGB::Green : CRGB::Blue;
    FastLED.show();
    delay(500);
  }
  FastLED.clear();
}

void loop() {
  key = customKeypad.getKey();

  if (key && player == 1) {
    int idx = keyToIndex(key);
    leds[idx] = CRGB::Green;
    FastLED.show();
    board[idx] = 'X';
    if (checkWinner('X')) { announceWinner(1); }
    player = 2;
    delay(1000);
  }

  if (key && player == 2) {
    int idx = keyToIndex(key);
    leds[idx] = CRGB::Blue;
    FastLED.show();
    board[idx] = 'O';
    if (checkWinner('O')) { announceWinner(2); }
    player = 1;
    moveCount++;
    delay(1000);
  }

  if (moveCount == 8) { announceDraw(); }
}

int keyToIndex(char k) {
  switch (k) {
    case '1': return 0;  case '2': return 1;  case '3': return 2;  case 'A': return 3;
    case '4': return 4;  case '5': return 5;  case '6': return 6;  case 'B': return 7;
    case '7': return 8;  case '8': return 9;  case '9': return 10; case 'C': return 11;
    case '*': return 12; case '0': return 13; case '#': return 14; case 'D': return 15;
  }
  return -1;
}

bool checkWinner(char mark) {
  const int lines[10][4] = {
    {0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}, // Reihen
    {0,4,8,12}, {1,5,9,13}, {2,6,10,14}, {3,7,11,15},   // Spalten
    {0,5,10,15}, {3,6,9,12}                             // Diagonalen
  };
  for (auto &line : lines) {
    if (board[line[0]] == mark && board[line[1]] == mark &&
        board[line[2]] == mark && board[line[3]] == mark)
      return true;
  }
  return false;
}

void announceWinner(int p) {
  CRGB color = (p == 1) ? CRGB::Green : CRGB::Blue;
  while (true) {
    for (int i = 0; i < NUM_LEDS; i++) leds[i] = color;
    FastLED.show(); delay(500);
    FastLED.clear(); FastLED.show(); delay(500);
  }
}

void announceDraw() {
  while (true) {
    for (int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB::Red;
    FastLED.show(); delay(1000);
    FastLED.clear(); FastLED.show(); delay(500);
  }
}

Schaltplan

Individuelle 4×4 Tic-Tac-Toe Visitenkarten-Platine – Design, Bau und Programmierung

Alle Design-Dateien, Stücklisten (BOM) und der Code stehen zum Download bereit.

Herstellungsprozess

  1. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  2. Multi-Position Temperatursensor-System für Smart-Home-Integration
  3. 37-LED-Roulette-Spiel mit Arduino Nano bauen – Europäisches Layout
  4. DIY Arduino USB Gaming Controller – Bauen Sie Ihren eigenen High-Performance Gamepad
  5. Touchscreen-Tic-Tac-Toe auf Arduino Due bauen
  6. MotionSense: Smarte Einbruchserkennung mit Arduino & ESP8266
  7. 3D-Drucker Brandschutz: Intelligentes Sensorsicherheitssystem
  8. Pixel Chaser: Interaktives One-Tap-LED-Spiel mit Arduino Nano
  9. Arduino-basierte abstoßende Magnetschwebung: Einfache Schaltung & DIY-Anleitung
  10. CoroFence Thermaldetektor: PIR-Sensor & IoT-Integration mit Panasonic GridEye