定制 4×4 井字棋名片 PCB – 设计、制作与代码指南
项目概览
本教程将指导您制作一张名片大小的定制 PCB,它既是名片,又是一个功能齐全的 4×4 井字棋游戏。正面印有 EDISON SCIENCE CORNER 徽标、社交媒体图标及链接 YouTube 频道的二维码;翻面则是由 ATmega328P、NeoPixel LED 与触觉开关组成的游戏电路。
元器件与物料清单
| 元件 | 数量 |
|---|---|
| Microchip ATmega328P‑AU | 1 |
| NeoPixel RGB LED 灯带 (WS2812B) | 16 (4×4) |
| 轻触开关,顶部触发 | 16 |
| 定制 PCB (JLCPCB) | 1 |
| Arduino UNO (用于烧录) | 1 |
| USB Micro 母座 | 1 |
| 电容 22 pF (0805) | 2 |
| 电容 100 nF (0805) | 2 |
| 电阻 1 kΩ (0805) | 3 |
| 电阻 10 kΩ (0805) | 1 |
| 16 MHz 晶振 | 1 |
| LED (SMD 0805) | 2 |
所需工具与设备
- 电烙铁 (通用)
- 无铅焊锡丝
- 焊接助焊剂
- 跳线套件 (5 cm, 10 根)
软件与在线服务
- Arduino IDE
- EasyEDA – PCB 设计平台
- JLCPCB – 低成本 PCB 打样 (5 片起 $2)
步骤 1: PCB 设计与打样
使用 EasyEDA 设计了一块 89 mm × 50 mm 的标准名片大小板卡,布局 4×4 井字棋矩阵。原理图以 ATmega328 为核心,集成 16 颗 WS2812B LED 与 16 个轻触开关。完成布局后导出 Gerber 文件上传至 JLCPCB,选用 0.8 mm 黑色板厚,两周收到成品,质量符合爱好者项目预期。
步骤 2: 准备元器件
参考上表清单,所有零件均为常见且低价,可从 Digi‑Key、Mouser 或速卖通等渠道采购。
步骤 3: 焊接组装
先焊接 USB Micro 母座,再放置 ATmega328 及其外围无源器件。随后焊接 NeoPixel 灯带,并将每颗 LED 与对应轻触开关对齐。仔细焊接全部 16 个开关,确保方向正确。熟练爱好者约需 1 小时完成全套焊接。
步骤 4: 程序烧录
通过 USB 连接电脑,在 Arduino IDE 中上传以下草图:
草图初始化 16 LED 阵列,处理 4×4 键盘矩阵按键,并实现简单胜负判定。玩家 1 使用绿色 LED,玩家 2 使用蓝色 LED。获胜时全板闪烁对应颜色;平局则闪烁红色。
步骤 5: 畅玩体验
翻到游戏面,每次按键点亮对应 LED。规则遵循经典井字棋,但采用 4×4 网格与颜色指示。这款便携小游戏既是独特的名片,也是会议、社交场合的绝佳话题开启者。
完整代码
下方为本项目使用的完整 Arduino 草图 (C/C++),包含键盘处理、LED 控制与胜负逻辑。
#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);
}
}
原理图
所有设计文件、BOM 与代码均可下载。
制造工艺
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- 多位置温度传感器系统,助力智能家居集成
- 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Arduino Due 触摸屏井字棋游戏 — 人机对战
- MotionSense:基于 Arduino 与 ESP8266 的智能入侵检测系统
- 3D 打印机防火卫士:智能传感器安全系统
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
- Arduino 简易排斥式磁悬浮:电路与 DIY 指南
- 进阶遥控夹爪机器人:精密抓取 DIY 指南
- 高性能 Arduino 气象气球数据记录器
- CoroFence 热成像检测器:Panasonic GridEye + PIR + IoT 集成