Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Визитка-PCB с игрой «Крестики-нолики» 4×4: руководство по проектированию, сборке и программированию

Обзор

В этом руководстве подробно описывается создание визитной карточки формата PCB, которая одновременно служит функциональной игрой «Крестики-нолики» 4×4. На лицевой стороне размещены логотип EDISON SCIENCE CORNER, иконки социальных сетей и QR-код, ведущий на YouTube-канал. На обратной стороне — полностью рабочая игровая схема на базе микроконтроллера ATmega328, светодиодов NeoPixel (WS2812B) и тактильных кнопок.

Компоненты и расходники

ЭлементКол-во
Микроконтроллер Microchip ATmega328P‑AU1
Лента NeoPixel RGB (WS2812B)16 (матрица 4×4)
Тактильные кнопки, вертикального нажатия16
Печатная плата (JLCPCB)1
Arduino UNO (для прошивки)1
USB Micro‑Female разъём1
Конденсаторы 22 пФ (0805)2
Конденсаторы 100 нФ (0805)2
Резисторы 1 кОм (0805)3
Резистор 10 кОм (0805)1
Кварцевый резонатор 16 МГц1
Светодиоды SMD 08052

Необходимые инструменты и оборудование

Программное обеспечение и онлайн-сервисы

Шаг 1: Проектирование и заказ платы

В EasyEDA была спроектирована плата размером 89 × 50 мм (стандартный размер визитной карточки) с матрицей 4×4 для игры. Схема построена на микроконтроллере ATmega328 и включает 16 светодиодов WS2812B и 16 тактильных кнопок. После завершения разводки были экспортированы гербер-файлы и загружены в JLCPCB. Платы толщиной 0,8 мм с чёрной маской прибыли через две недели — качество соответствует ожиданиям для хоббийных проектов.

Шаг 2: Подготовка компонентов

Список компонентов приведён выше. Все детали распространённые, недорогие и доступны у крупных дистрибьюторов (Digi‑Key, Mouser, AliExpress).

Шаг 3: Пайка

Начинаем с пайки USB micro‑female разъёма, затем устанавливаем ATmega328 и обвязку. Далее паяем ленту NeoPixel, выравнивая каждый светодиод с соответствующей кнопкой. Аккуратно припаиваем все 16 кнопок, соблюдая ориентацию. Вся сборка занимает около часа у опытного энтузиаста.

Шаг 4: Программирование

Подключаем плату к ПК через USB. Загружаем скетч через Arduino IDE:

Скачать код

Скетч инициализирует массив из 16 светодиодов, обрабатывает нажатия клавиатурной матрицы 4×4 и реализует простую логику определения победы. Игрок 1 — зелёные светодиоды, игрок 2 — синие. При победе плата мигает цветом победителя; при ничьей — красным.

Шаг 5: Игра и удовольствие

Переворачиваем карточку — открывается игровая сторона. Каждое нажатие зажигает соответствующий светодиод. Игра следует классическим правилам «Крестиков-ноликов», но на поле 4×4 с цветовой индикацией. Уникальная переносная игра, которая станет отличным поводом для разговора на конференциях и нетворкинге.

Исходный код

Полный скетч для Arduino (C/C++), включающий обработку клавиатуры, управление светодиодами и логику победы:

#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);
  // Тестовая индикация: зелёный, затем синий
  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}, // строки
    {0,4,8,12}, {1,5,9,13}, {2,6,10,14}, {3,7,11,15}, // столбцы
    {0,5,10,15}, {3,6,9,12} // диагонали
  };
  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);
  }
}

Схемы

Визитка-PCB с игрой «Крестики-нолики» 4×4: руководство по проектированию, сборке и программированию

Все файлы проекта, спецификация (BOM) и код доступны для скачивания.

Производственный процесс

  1. Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
  2. Многопозиционная система датчиков температуры для интеграции в умный дом
  3. Создание рулетки на 37 светодиодов с Arduino Nano
  4. DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
  5. Создание сенсорной игры «Крестики-нолики» на Arduino Due
  6. MotionSense: умная система обнаружения проникновения на Arduino и ESP8266
  7. Пожарная безопасность 3D-принтера: умная система обнаружения дыма
  8. Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano
  9. Магнитная левитация на отталкивании с Arduino: Простая схема и DIY-руководство
  10. CoroFence: термический детектор на GridEye + PIR с IoT