基于Arduino的温室大棚环境监测与控制系统: 1.使用DHT11温湿度传感器,实时监测大棚温湿度,数据一方面实时显示在OLED屏,另一方面上传手机APP,湿度过低时自动控制加湿器进行加湿,达到一定湿度后停止加湿(加湿过程中,可以物理性关闭),温度过高时,可通过手机蓝牙控制风扇进行降温; 2.SGP30气体传感器,实时监测大棚内二氧化碳浓度含量和TVOC(空气质量),数据显示在屏幕上,可通过手机蓝牙控制窗户的开关(使用步进电机和ULN2003电机驱动模拟),进行空气交换(可以和风扇同时进行); 3.使用土壤湿度传感器实时检测大棚内土壤湿度,一方面将数据显示在屏幕上,另一方面上传手机APP,当土壤湿度低于阈值时,自动打开抽水机进行浇水,高于阈值停止浇水。 包含源码,库文件,APP,接线表,硬件清单等资料。 不包含实物! 不包含实物! 不包含实物!

最近帮朋友折腾了个大棚环境监控项目,完全基于Arduino开发。整个系统能实现温湿度自动调节、空气质量监测、土壤自动灌溉三大核心功能。最爽的是所有数据都能手机查看,还能远程控制设备。下面直接上干货。


硬件全家桶

主控用Arduino Mega(IO口多到任性),传感器全家福:

  • DHT11温湿度传感器 ×1
  • SGP30气体传感器 ×1
  • 土壤湿度传感器 ×1
  • 0.96寸OLED屏幕 ×1
  • HC-05蓝牙模块 ×1
  • ULN2003驱动板+28BYJ-48步进电机 ×1
  • 5V继电器模块 ×2(控制加湿器/水泵)
  • 小风扇 ×1

接线表(核心部分):

DHT11    → D2
SGP30    → SDA(20)/SCL(21)
OLED     → SDA(20)/SCL(21)
蓝牙TX   → RX1(19)
土壤传感器 → A0
步进电机 → IN1~IN4 → D8~D11
继电器1  → D3(加湿器)
继电器2  → D4(水泵)
风扇     → D5

代码里的骚操作

核心逻辑在三个传感器协同工作。先看温湿度控制部分:

// DHT数据采集
float h = dht.readHumidity();
float t = dht.readTemperature();

// OLED显示
u8g2.setCursor(0, 15);
u8g2.print("Humid:");
u8g2.print(h);
u8g2.print("%");

// 自动加湿
if(h < 60) digitalWrite(HUMIDIFIER_PIN, HIGH);
else digitalWrite(HUMIDIFIER_PIN, LOW);

// 蓝牙发送数据
if(millis() - lastBtTime > 5000){
    btSerial.print("TEMP:");btSerial.print(t);
    btSerial.print("|HUMI:");btSerial.println(h);
    lastBtTime = millis();
}

这里有个小技巧:用millis()做非阻塞延时,比delay()更优雅。蓝牙每5秒发送数据,避免手机端数据刷屏。

气体监测部分有个坑要注意——SGP30需要基线校准:

// 初始化校准
if(!sgp.IAQinit()){
    Serial.println("SGP30罢工了!");
    while(1);
}

// 读取TVOC和CO2
sgp.IAQmeasure();
Serial.print("TVOC:");Serial.print(sgp.TVOC);Serial.print(" ppb\t");
Serial.print("CO2:");Serial.print(sgp.eCO2);Serial.println(" ppm");

// 控制步进电机开窗
if(sgp.eCO2 > 1000 || sgp.TVOC > 500){
    openWindow(); // 自定义函数,控制步进电机转动
}

每次上电记得让传感器预热30秒,否则数据会飘。开窗动作用步进电机模拟,实际应用建议加限位开关。


土壤灌溉的防抖设计

土壤传感器容易受干扰,加了滑动平均滤波:

// 采样10次取平均
int soilMoisture = 0;
for(int i=0; i<10; i++){
    soilMoisture += analogRead(SOIL_PIN);
    delay(10);
}
soilMoisture /= 10;

// 转换为百分比(根据实际标定)
int moisturePercent = map(soilMoisture, 620, 310, 0, 100);

// 自动灌溉
if(moisturePercent < 30){
    digitalWrite(PUMP_PIN, HIGH);
    btSerial.println("PUMP:ON");
}else{
    digitalWrite(PUMP_PIN, LOW);
}

注意传感器的量程需要根据实际土壤类型标定,沙土和黏土的数值差异很大。


手机端控制方案

推荐使用"蓝牙串口助手"类APP,发送指令格式:

  • 开风扇 → T
  • 关风扇 → S
  • 开窗户 → W
  • 关窗户 → C

接收数据格式示例:

TEMP:25.3|HUMI:58%|TVOC:200ppb|CO2:800ppm|SOIL:45%

避坑指南
  1. DHT11读取失败时加个retry机制
  2. 步进电机别忘接续流二极管
  3. 继电器控制大功率设备时务必做物理隔离
  4. 多个I2C设备要检查地址是否冲突
  5. 供电不足会导致传感器数据异常

完整代码、库文件、APP源码、接线图已打包:

基于Arduino的温室大棚环境监测与控制系统: 1.使用DHT11温湿度传感器,实时监测大棚温湿度,数据一方面实时显示在OLED屏,另一方面上传手机APP,湿度过低时自动控制加湿器进行加湿,达到一定湿度后停止加湿(加湿过程中,可以物理性关闭),温度过高时,可通过手机蓝牙控制风扇进行降温; 2.SGP30气体传感器,实时监测大棚内二氧化碳浓度含量和TVOC(空气质量),数据显示在屏幕上,可通过手机蓝牙控制窗户的开关(使用步进电机和ULN2003电机驱动模拟),进行空气交换(可以和风扇同时进行); 3.使用土壤湿度传感器实时检测大棚内土壤湿度,一方面将数据显示在屏幕上,另一方面上传手机APP,当土壤湿度低于阈值时,自动打开抽水机进行浇水,高于阈值停止浇水。 包含源码,库文件,APP,接线表,硬件清单等资料。 不包含实物! 不包含实物! 不包含实物!

github.com/yourname/greenhouse-control(示例链接,需替换)

整套方案成本不到200块,比市面成品便宜不止亿点点。虽然不涉及实物搭建,但软件逻辑和硬件交互设计已经过实测验证。下次打算加个ESP8266搞云端监控,有人感兴趣的话评论区扣1,咱们接着肝!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐