Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
组件与材料
| 组件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| PHPoC WiFi Shield for Arduino | 1 |
| 电阻 100k Ω | 1 |
| 电阻 1M Ω | 1 |
| 杜邦线 | 若干 |
项目简介
本项目演示如何利用 Arduino 模拟输入引脚测量电压,并通过分压电路将测量范围扩展至 55V。结合 PHPoC WiFi Shield,可在智能手机网页上实时查看电压值。
工作原理
Arduino 模拟输入最大仅支持 5V。为测量更高电压,需使用分压电路:
理论公式: V_measure = (R1 + R2) / R2 × V_in
选取 R1 = 1MΩ,R2 = 100kΩ,分压比 = 11,最大可测电压 = 11 × 5V = 55V。大阻值可限制流经引脚电流,保护 Arduino。
实际问题与校准
实际中存在两大误差源:
- 电阻标称值误差导致分压比偏差
- Arduino 供电电压波动致使模拟基准电压 (V_REF) 不稳定
解决方案分两步校准:
- 测量真实分压比:将待测电压接 A0,已知 3.3V 接 A1,ratio = A1读值 / A0读值。运行
ResistorCalibration.ino并通过串口绘图器获取比值。 - 实时校准基准电压:主电路中将 3.3V 接 A1,每次测量前计算 V_REF = 1023 × 3.3 / A1值,再换算 V_in 和 V_measure。
操作步骤
- 按“电阻校准接线图”接线,上传
ResistorCalibration.ino - 打开串口绘图器,记录 ratio 值
- 将 ratio 写入
Voltmeter.ino第 5 行 - 按“主接线图”重新接线,上传
Voltmeter.ino - 将
voltmeter.php与背景图voltmeter_body.jpg上传至 PHPoC Shield - 手机浏览器访问
https://phpoc_shield_ip/voltmeter.php即可查看电压
核心代码片段
ResistorCalibration.ino(校准)
double ratio;
int analogReadAverage(int pin, int n) {
unsigned long sum = 0;
for (int i = 0; i < n; i++) { sum += analogRead(pin); delay(2); }
return sum / n;
}
double resistorCalibration() {
double A0 = analogReadAverage(A0, 20);
double A1 = analogReadAverage(A1, 20);
return A1 / A0;
}
void setup() { Serial.begin(9600); }
void loop() {
ratio = resistorCalibration();
Serial.print("ratio:"); Serial.println(ratio);
delay(200);
}
Voltmeter.ino(主程序)
double ratio = 11.59; // 替换为校准值
double mapFloat(double x, double in_min, double in_max, double out_min, double out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
double getVoltageReference() {
double A1 = analogReadAverage(A1, 20);
return 1023.0 * 3.3 / A1;
}
void loop() {
double V_REF = getVoltageReference();
double A0 = analogReadAverage(A0, 20);
double V_in = mapFloat(A0, 0, 1023, 0, V_REF);
double V_measure = ratio * V_in;
Serial.println(V_measure);
delay(200);
}
voltmeter.php(Web 界面)
利用 WebSocket 实时接收串口数据,在 Canvas 上绘制七段码风格电压表。需随 voltmeter_body.jpg 一同上传至 PHPoC Shield。
接线提示
文中提供多张实物接线照片,展示分压电路、PHPoC Shield 连接及手机端显示效果。
制造工艺
- DIY Photoshop 硬件控制台:Arduino Nano RP2040 实现快捷键外设
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- Arduino 红外心率传感器 DIY:低成本高精度,串口绘图器实时波形
- 基于Arduino UNO的精准频率与占空比测量
- Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
- Arduino 声纳实时测距与 Processing 可视化
- MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
- Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
- DIY 智能 Arduino 机械臂:主从控制与动作记忆教程
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 可编程三轴机械臂套件:Arduino + 蓝牙 本地/远程双模控制