亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

精准降雨预测:基于 Arduino、Python 与 Keras 的端到端气象站系统

元件与材料

元件数量
小型塑料盒(带可拆盖,建议 11×7×5 cm)1
3×AAA 电池盒1
3×AAA 镍氢充电电池1
6V 小型太阳能板1
Arduino Pro Mini 328P 5V/16MHz1
1N4004 二极管(防反充)1
NPN 三极管 + 1kΩ 电阻(外设供电开关)各 1
雨滴传感器1
HC-12 串口通信模块(节点端)1
HC-12 USB 串口模块(基站端)1
BME280 大气传感器(温湿度、气压)1
BH1750 光照传感器1
PCB、排针排母、KF301-2P 接线端子、导线、焊锡、胶水1 套
3.3V 稳压模块1

必备工具

系统总览

本项目构建一套**完全离网、超低功耗**的气象站,每 10 分钟采集一次温湿度、气压、光照、雨量、电池电压,经 HC-12 无线传回基站存入 MongoDB。随后使用 Python (Pandas + Keras) 对历史数据清洗、特征工程、训练神经网络,最终实现**未来 6 小时是否降雨的二分类预测**,准确率约 80%(600 天样本)。

核心优势

硬件制作要点

  1. 外壳开孔:4 个孔位分别引出太阳能板线、BME280、BH1750、雨量传感器引线
  2. PCB 布局:焊接 Arduino 母座、HC-12、3.3V LDO、二极管、三极管开关电路、两个 KF301-2P(太阳能/电池)、三组传感器母座
  3. 关键细节:必须拆除 Arduino Pro Mini 板载 LED(或剪断一脚),否则休眠电流将达 mA 级别
  4. 供电逻辑:太阳能经二极管→电池;三极管控制外设供电(D6 高电平导通);电池电压 > 4.2V 时改用普通 delay 代替深度睡眠,防止过充

Arduino 固件逻辑

// 核心循环(每 10 分钟)
void loop() {
  updateSensors();      // 读取 6 路传感器
  transmitData();       // HC-12 发送 "H1:78|T1:12|PS1:1022|L1:500|R1:0|V1:4010|"
  customSleep(75);      // 75 × 8s = 600s 深度睡眠
}

// 电压自适应睡眠
void customSleep(long cycles) {
  if (sensors.voltage > 4200) { delay(cycles * 8000); return; }
  digitalWrite(peripheralsPin, LOW);           // 断外设电
  for (int i=0; i

完整代码含 LowPower、SoftwareSerial、Adafruit_BME280、BH1750 库调用,详见 GitHub。

基站软件栈

  1. Anaconda 环境:Python 3.6.2 + pip install -r requirements.txt(含 Keras, Pandas, PyMongo, scikit-learn)
  2. MongoDB:存储时序数据,建议在 date 字段建索引
  3. 串口监听:python serial_listener.py 解析 HC-12 数据入库
  4. 特征工程:将 10 分钟原始点聚合为 6 小时窗口,计算每传感器的 min/max/mean/percentiles/趋势计数,构建 ~100 维特征
  5. 标签生成:has_rain = (rain_avg > 0.1) ? 1 : 0
  6. 滞后特征:引入前 8 个窗口(48 小时)的历史特征作为输入,经实验效果最优
  7. 归一化:StandardScaler 缩放至零均值单位方差
  8. 模型结构:Keras Sequential,Input(特征维) → Dense(1/2) → Dropout(0.05) → Dense(1/2) → Dropout → Dense(1, sigmoid)
  9. 训练:optimizer='rmsprop', loss='mae', epochs=50, batch=1
  10. 预测与通知:python predict.py --from-addr ... --to-addr ... 发送邮件预警

进阶:接入 Dark Sky 官方数据

若使用专业气象站历史数据(含风速、风向、紫外线等),准确率可从 80% 提升至 90%+。项目提供 darksky.py 下载脚本与 --data-source darksky 训练参数。

未来改进方向

  • 硬件:增加风速/风向、UV、气体传感器;多节点布设
  • 算法:网格搜索超参数(--grid-search)、尝试 LSTM/Transformer、融合外部气象源
  • 工程:容器化部署、自动化重训练、Web 仪表盘可视化

制造工艺

  1. 树莓派与 Python 构建远程温度传感器:分步实战指南
  2. DIY Photoshop 硬件控制台:Arduino Nano RP2040 实现快捷键外设
  3. 基于 Arduino 与 Python 的可靠 RFID 考勤系统
  4. 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
  5. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  6. Arduino 红外心率传感器 DIY:低成本高精度,串口绘图器实时波形
  7. 基于Arduino UNO的精准频率与占空比测量
  8. Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
  9. Arduino 声纳实时测距与 Processing 可视化
  10. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  11. u-blox LEA-6H GPS 模块:Arduino 与 Python 集成指南
  12. Python 重命名文件与目录:os.rename() 分步指南