基于 Arduino Nano 的超高灵敏度电磁场检测器制作指南
项目简介
本项目利用 Arduino Nano 构建一款便携式电磁场(EMF)强度检测仪。通过一根简单的铜线作为天线,配合 16×2 LCD 显示屏、蜂鸣器与 LED 多模态指示,可直观呈现环境电磁场相对强度。灵敏度可通过代码参数与外接电阻双重调节,适用于家电辐射排查、线缆走向探测、CRT 显示器泄漏场测量等场景。整机体积小巧,由 9V 电池供电,便于现场作业。
核心元器件清单
| 组件 | 型号/规格 | 关键参数 | 数量 |
|---|---|---|---|
| 主控板 | Arduino Nano R3 | ATmega328P,5V/16MHz,体积紧凑 | 1 |
| 显示模块 | Adafruit 16×2 LCD(白字蓝底) | HD44780 兼容,4-bit 并口驱动 | 1 |
| 声音指示 | 无源蜂鸣器 | 5V 驱动,频率随场强变化 | 1 |
| 光指示 | 通用 LED(红/绿) | PWM 控制亮度反映场强 | 1 |
| 灵敏度切换 | 拨动开关(单刀双掷) | 切换两组分压电阻,实现高/低灵敏度档位 | 1 |
| 检测天线 | φ1.5mm 裸铜线 | 长度约 10-15cm,可替换为任意金属片 | 1 |
| 分压电阻 | 10kΩ / 1MΩ 等 | 接于 A0 与 GND 间,值决定基础增益 | 若干 |
电路原理与设计要点
检测机制
铜线天线耦合环境交变电磁场,感应微弱交流电压经分压电阻分压后送入 Nano A0 模拟输入。MCU 内部 ADC 采样后,通过滑动窗口平滑、峰值保持、指数衰减算法,驱动 LCD 自定义字符模拟仪表盘指针、蜂鸣器频率/占空比、LED 亮度三通道同步输出。
灵敏度双重调节
- 硬件档位:拨动开关切换不同阻值分压电阻,改变前端增益,粗调量程。
- 软件校准:代码中
constrain()与map()参数可微调 ADC 映射范围,细调动态响应。
电源管理
9V 电池经板载稳压器供电 Nano,待机电流约 20mA,连续工作 >20 小时。建议加装电源指示 LED 与低电压检测逻辑。
软件架构与核心算法
主程序流程
- 初始化:LCD 自定义字符(刻度背景、指针 5 亚像素位置、峰值标记、立体声图标)、串口、中断引脚(编码器/按键)。
- 中断服务:编码器 A/B 相正交解码判定旋转方向;按键中断切换自动/手动搜台模式。
- 主循环:
- 读取 ADC,滑动平均(5 次)+ 峰值保持(100ms)+ 指数衰减平滑。
- 映射至 0-14 格 LCD 条形图,绘制指针与峰值标记。
- 同步驱动 PWM 输出(蜂鸣器/LED),串口打印调试信息。
关键代码片段
// ADC 采样与平滑核心
const int numReadings = 5;
int readings[numReadings]; int idx = 0; long total = 0;
int inputPin = A0;
void loop() {
total -= readings[idx];
readings[idx] = analogRead(inputPin);
total += readings[idx];
idx = (idx + 1) % numReadings;
int avg = total / numReadings;
// 峰值保持与衰减
static int peak = 0, decayTimer = 0;
if (avg > peak) peak = avg;
if (millis() > decayTimer) { peak = max(peak - 1, 0); decayTimer = millis() + 50; }
// 映射显示
int bar = map(constrain(avg, 0, 100), 0, 100, 0, 14);
drawBar(bar, peak / 7); // 绘制 LCD 条形图
analogWrite(BUZZER_PIN, map(avg, 0, 1023, 0, 255));
analogWrite(LED_PIN, map(avg, 0, 1023, 0, 255));
}
组装与调试步骤
- 按原理图在面包板/万用板搭建电路,天线引线尽量远离 MCU 与电源线,减少干扰。
- 上传固件,上电观察 LCD 启动动画与自检。
- 零点校准:置于远离电器的开阔地,调节分压电阻或代码映射参数,使读值接近 0。
- 灵敏度验证:靠近已知辐射源(如手机充电器、微波炉、CRT 显示器),观察指针偏转、蜂鸣器音调变化。3m 外检测到 CRT 泄漏场即为合格。
- 装入外壳,固定天线、LCD 窗口、拨动开关、电池仓,完成成品。
常见问题与优化
- 读数抖动大:增大
numReadings、加装 0.1μF 滤波电容于 A0-GND、屏蔽天线引线。 - 量程不足:更换更高阻值分压电阻(如 10MΩ),或引入运放前置放大(需注意噪声)。
- 误触发:软件增加迟滞比较器,硬件加装金属屏蔽罩隔离 MCU 数字噪声。
- 频率响应:当前设计对 50/60Hz 工频及谐波最敏感,高频 RF 需专用对数周期天线。
应用场景拓展
- 家庭/办公环境电磁辐射巡检,定位高辐射源并指导屏蔽改善。
- 弱电工程中非接触式寻找通电线缆走向、断点定位。
- 教学演示电磁感应原理、无线充电线圈磁场分布可视化。
- 结合 GPS/SD 卡模块,制作电磁环境地理信息采集记录仪。
制造工艺
- 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
- DIY ADXL335 地震检测仪 — 低功耗三轴加速度计项目
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
- DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
- DIY Arduino Nano 示波器:10 Hz–50 kHz / 128×64 LCD
- DIY Arduino 电子波疗设备 - 基于拉德尼克疗法的 EMR 治疗仪
- 打造可靠的 Arduino 气象站:DHT 传感器 + LCD + RTC
- 低成本 Arduino 闪电探测器制作指南
- 使用 Arduino 制作便携式 RFID 门锁——分步指南
- 超灵敏音频升降仪:飞行员专用精密气压计