Arduino Nano 多传感器气象站:BMP280 + DHT11 + GUVA-S12SD + DS3231 + OLED
传感器套件
| 传感器 | 测量量程/接口 | 引脚映射 |
|---|---|---|
| BMP280 | 气压 300~1100 hPa / 温度 -40~85°C / SPI | CS→D10, MOSI→D11, MISO→D12, SCK→D13 |
| DHT11 | 温度 0~50°C / 湿度 20~90% RH / 单总线 | DATA→D2 |
| GUVA-S12SD | UV 指数 0~11+ / 模拟电压 | OUT→A0 |
| DS3231 RTC | 时钟/日历 / I2C | SDA→A4, SCL→A5 |
| 0.96″ SSD1306 OLED | 128×64 白色 / I2C | SDA→A4, SCL→A5(与 RTC 共用总线) |
机箱设计
Autodesk Fusion 360 建模,Ender 3 打印(绿色 PLA,20% 填充,70 mm/s,需支撑),STL 文件随项目提供。机箱预留传感器探头窗口、OLED 透明窗、USB 供电口、复位键孔。
关键库安装
Adafruit_BMP280、Adafruit_SSD1306、Adafruit_GFX、DHT sensor library、DS3231(或RTClib)- 字体文件:
Fonts/FreeSans9pt7b.h、Fonts/FreeMonoBoldOblique12pt7b.h
软件流程与显示页面
主循环按 5 秒轮询切换 4 个页面:
- 时钟页:DS3231 读取时/分/秒、AM/PM、年/月/日、星期(中文/英文均可)。
- 气压页:BMP280 读取气压(hPa)、海拔(基于当地基准气压 1005.47 hPa 计算)。
- 温湿度页:BMP280 温度 + DHT11 湿度,底部装饰位图条。
- UV 指数页:GUVA-S12SD 模拟电压换算
UV_index = (Vout / 0.1),整数显示。
核心代码片段
// UV 指数计算
float sensorValue = analogRead(A0);
float sensorVoltage = sensorValue / 1024.0 * 5.0;
int UV_index = sensorVoltage / 0.1;
// OLED 显示封装
display.clearDisplay();
display.setFont(&FreeSans9pt7b);
display.setCursor(x, y);
display.print(value);
display.display();
完整代码见 Code 栏,已整理为单 .ino 文件,含位图数组、字体设置、页面切换逻辑。
校准与注意事项
- BMP280 海拔基准
- 代码中
bmp.readAltitude(1005.47)的参数需替换为你所在地标准大气压(可查气象局网站)。 - DS3231 首次授时
- 先运行库自带
DS3231_set.ino通过串口写入当前时间,再烧录主程序。 - DHT11 读取间隔
- 规范要求 ≥1 s,本项 5 s 切页自动满足。
- I2C 总线共用
- RTC 与 OLED 共用 A4/A5,需确保上拉电阻到位(模块板载通常已有)。
原理图
制造工艺
- 树莓派太阳能气象站DIY指南
- 树莓派 2 搭建户外气象站:接入 ADS‑WS1 串口气象站
- 树莓派自制气象站:每日邮件推送温湿雨数据
- 高级气象站 v2.0:BME280 实时监测温度/气压/湿度/海拔 (Windows 10 IoT Core)
- Arduino驱动的六发鸡尾酒自动调配站 – 打造你的专属智能调酒机
- 多位置温度传感器系统,助力智能家居集成
- 高性能 Arduino 气象气球数据记录器
- 自制 10 美元便携 Arduino 气象站 - Nano + DHT22 + BMP180 + LCD
- Arduino + ThingSpeak 实时气象监测站
- ESP8266 WiFi气象站:DHT22温湿度传感器 + ThingSpeak云端记录
- 基于 Arduino MKR GSM 1400 和 Hologram IoT 的智能腕带
- 智能健康监测站:Arduino、蓝牙与传感器实现远程生理指标监测