4×4 电子棋盘原型:RFID 与霍尔传感器融合实现棋子识别
项目动机
传统电子棋盘依赖“初始局面固定 + 磁簧管/霍尔传感器追踪移动”方案,无法支持任意摆放棋子开始分析。作者设计 4×4 原型板,结合 RFID 标签(棋子身份)与霍尔传感器(位置占用),实现“先刷标签识别身份,再落子任意格”的自由摆放功能,并用 LED 指示合法落子位置,适合教学演示。
核心创新:双传感器融合识别
- 霍尔传感器 (16 个,A1126 全极性):每格一个,检测棋底磁铁存在与否 → 得到“占用矩阵”
hes_bool_matrix[4][4](0=有棋, 1=空) - 125 kHz RFID 读写器 (UART):置于棋盘一侧,落子前先将棋子靠近读取唯一 ID → 查表得棋子类型 (1=后, 2=兵) → 写入“类型矩阵”
id_type_matrix[4][4] - LED 指示 (16 颗):拾起棋子后,依据棋子走法规则点亮合法目标格(后:横/竖/斜;兵:前进 1-2 格),辅助初学者
硬件清单
- Arduino Mega 2560 ×1(54 数字 IO 足够直驱 16 霍尔 + 16 LED + RFID TX/RX)
- 全极性霍尔传感器 A1126 ×16
- 5 mm LED ×16
- 125 kHz RFID 模块 (UART) ×1 + 3M RFID 标签 ×2
- 全尺寸无焊面包板 ×1、跳线若干
- 结构件:有机玻璃底板、光面纸贴格、木条框、亚克力颜料绘棋盘格、10 mm 圆磁铁 ×2、兵/后棋子各 1
- 工具:烙铁、电钻、螺丝刀
制作步骤
- 21×21 cm 硬纸板划 4×4 格,每格嵌入霍尔传感器 (3 脚) 与 LED (2 脚),焊接跳线引出
- 第二层硬纸板固定 Mega 与面包板,按 Fritzing 原理图接线:霍尔信号脚直接 Mega D2–D10, D44–D47;LED 阳极经限流电阻接 D22–D37;RFID TX/RX 接 D11/D12 (SoftwareSerial);所有 GND 汇总
- 编写测试代码逐个验证霍尔 (有磁铁输出 0) 与 LED 点亮
- 棋子底部粘磁铁 + RFID 标签,通过串口监视器记录两标签 14 字节 ID 序列(后:
queen_id,兵:pawn_id) - 烧录主程序
thinK_code.ino,上电按提示依次刷两枚棋子标签并落子,系统建立初始局面 - 后续拾起任意棋子 → 霍尔检测到空格 → LED 亮起合法目标 → 落子新格 → 自动更新矩阵
- (可选)木质/亚克力外壳美化
软件逻辑详解
ID 比对与棋子类型判定
compare_ID(a,b) 逐字节比对 14 字节数组,全匹配返回 true。read_tags() 等待 RFID 数据填充 new_id[14],返回计数 count 区分首/次棋子。
初始化流程
first_figure():比对 ID 确定类型,扫描霍尔矩阵找到值为 0 的格 → 写入id_type_matrix,记录坐标temp_vect,LED 闪烁确认second_figure():同理,但排除temp_vect已占用格
主循环 figure_reading()
- 全扫描霍尔矩阵更新
hes_bool_matrix - 统计占用格数:若 0 或 1 格 → 循环等待(需两子在板上)
- 若 2 格:读取
id_type_matrix确认各棋子坐标存入figure_pos[2][2],熄灭所有 LED - 延时 2 秒检测哪枚棋子被拾起(霍尔变 1)→ 记录
empty_pos与temp(类型),该格类型清零 - 根据
temp调用move_queen()(全向射线) 或兵走法 (前进 1/2 格) 点亮目标 LED - 递归调用
figure_reading()等待落子完成
局限与改进方向
- RFID 125 kHz 读取不稳定,需多次尝试;建议改用 13.56 MHz (RC522) 或 NFC
- 仅 4×4 两子,扩展至 8×8 需 64 霍尔 + 更大矩阵/多路复用,成本显著上升
- 未实现完整国际象棋规则(吃子、王车易位、升变等),仅演示走法提示
- 代码大量硬编码引脚,建议改用数组/循环重构
资源下载
完整代码 thinK_code.ino、Fritzing 原理图 4x4demo_q0nvG3T3nS.fzz、多阶段实物照片均可下载。作者提供邮件/Slack 技术支持。
制造工艺