用 Leap Motion 控制的激光坦克——Arduino、树莓派、RGB LED
组件与物料
| 组件 | 数量 |
|---|---|
| 红外 LED | 1 |
| 红外接收器 | 1 |
| Arduino UNO | 1 |
| 树莓派 2 Model B | 1 |
| RF24 无线模块 | 1 |
| RGB LED(共阴) | 1 |
| L293D 电机驱动芯片 | 1 |
| 面包板 | 1 |
| 杜邦线 | 1 |
| 电池盒 | 1 |
| AA 充电电池(NiMH) | 1 |
| 乐高积木 | 1 |
| 万向轮(3/8 英寸) | 1 |
| Leap Motion 控制器 | 1 |
项目简介
该项目旨在打造一组机器人坦克进行对战,操作员通过 Leap Motion 控制器获得更真实的车辆控制体验。设计初衷是低成本、易复现,让更多人能动手制作。
硬件架构
- 车体:通用乐高积木搭建,关键部位用强力胶固定电机、面包板等组件。
- 动力:4 节 AA 充电电池供电。
- 主控:Arduino Uno R3。
- 驱动:两个直流电机驱动后轮,前轮配单个万向轮,由 L293D 驱动芯片控制。
- 武器:单颗红外 LED 发射“激光”编码。
- 装甲:红外接收传感器检测对方坦克发射的红外信号,判定命中。
- 抬头显示 (HUD):一颗 RGB LED 指示坦克状态(剩余装甲、开火反馈等)。
- 无线控制:树莓派 2 运行 Node.js,通过 RF24 模块与坦克双向通信。
手势控制逻辑
利用 Leap Motion JavaScript SDK 识别双手姿态,经 Node.js 服务器转发指令至坦克:
- 双手前推 → 前进
- 双手后拉 → 后退
- 左手前推、右手后拉 → 右转
- 右手前推、左手后拉 → 左转
- 双手回中立位置 → 停止
- 单手前推、另一手放下 → 发射武器

红外发射聚焦技巧
普通红外 LED 发散角大,不利于对战精度。项目采用廉价放大镜透镜配合导光管,将红外光束聚焦成窄束,显著提升命中判定的方向性与公平性。

360° 红外装甲实现
单个红外接收器仅能覆盖约 90°。项目使用 4 颗红外接收器配合 74HCT21 与门芯片级联,任意一颗传感器检测到信号即输出高电平,仅占用单个 Arduino 引脚即可实现全向检测。

项目搭建步骤
- 按原理图组装两辆坦克,下载 Arduino 库并分别上传 tank1、tank2 固件。
- 将 RF24 模块接线树莓派,安装 Raspbian 与 Node.js。
- 在树莓派上编译安装 RF24 库。
- 从 GitHub 下载 Node.js 服务端代码,配置并启动 Web/REST 服务。
- 电脑安装 Leap Motion 驱动,浏览器打开树莓派 Web 页面选择控制坦克 1 或 2。
- 点击校准,双手悬停于 Leap Motion 上方完成中立位标定,即可开始操控。
代码与原理图
完整代码托管于 GitHub。原理图涵盖红外发射/接收、RGB 状态指示、L293D 电机驱动、RF24 无线通信、树莓派 Node.js 网关等模块。
制造工艺