自制高精度测距轮:Arduino Nano + 旋转编码器 + 1602 LCD
组件与材料
| Arduino Nano R3 | ×1 |
| 1602 字符型 LCD (白字蓝底) | ×1 |
| 带按键旋转编码器 | ×1 |
| 10 kΩ 单圈电位器 (LCD 对比度) | ×1 |
| 220 Ω 电阻 (LCD 背光限流) | ×1 |
所需工具
- 电烙铁
软件
- Arduino IDE
项目原理
测距轮利用旋转运动学公式 s = rθ 计算行程。旋转编码器每转输出 N 个脉冲,轮子半径 R,则:
- 单圈行程 = 2πR
- 单脉冲行程 = 2πR / N
代码中仅需修改 N(编码器每转脉冲数,典型 20-48)与 R(轮半径,cm)即可适配不同轮子。

硬件接线
- 编码器 A 相 → D2,B 相 → D3(均启用内部上拉)
- LCD:RS=D5, E=D6, D4-D7=D7-D10
- 电位器中间脚 → LCD V0,两端接 VCC/GND
- 背光 A 接 5V 经 220Ω,K 接 GND
代码
/* Measuring Wheel
* by Mirko Pavleski
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
int pin1 = 2, pin2 = 3;
int Pos = 0, State, LastState;
const float pi = 3.14;
const float R = 3.25; // 轮半径 cm
const int N = 40; // 编码器每转脉冲数
float distance = 0;
void setup() {
pinMode(pin1, INPUT_PULLUP);
pinMode(pin2, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print("MEASURING WHEEL");
LastState = digitalRead(pin1);
}
void loop() {
State = digitalRead(pin1);
if (State != LastState) {
if (digitalRead(pin2) != State) Pos++; else Pos--;
}
distance = (2 * pi * R / N) * Pos;
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.setCursor(5, 1);
lcd.print("cm ");
LastState = State;
}
原理图
制造工艺
- 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
- MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
- 基于 Arduino、Yaler 与 IFTTT 构建 Web 化 IoT 仪表盘
- DIY 高频频率计 - Arduino Nano 实测 6.5MHz,三档测量时间可选
- 高精度空气质量监测仪:Sharp GP2Y1010AU0F 粉尘传感器 + Arduino Nano
- Arduino Nano 手持盖革计数器:DIY 核辐射检测仪
- Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
- Arduino Nano 与 WS2812 灯带打造 1D 乒乓球游戏——分步 DIY 教程
- 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟