基于Arduino的雾培马铃薯种薯温湿度自动控制系统设计与实现

Arduino雾培温湿度控制
于 2026-05-31 12:52:50 修改
·本内容遵循CC 4.0 BY-SA版权协议

1. 项目概述与核心价值

搞农业自动化,尤其是像雾培这种对温湿度要求极高的无土栽培技术,最头疼的就是环境控制。传统的人工观察、手动调节不仅费时费力,而且精度差,一不小心就会影响种薯的发芽率和生长质量。我最近用Arduino Uno R3为核心,搭配几个基础传感器,折腾出了一套专门用于马铃薯种薯雾培生产的温湿度控制系统。这套系统的核心思路很简单:用光敏电阻感知昼夜变化,用电位器模拟温度传感器,然后让Arduino根据这些环境数据,自动控制营养液的雾化周期,并在温度异常时通过LED灯给出直观的警报。

你可能觉得,用光敏电阻和电位器是不是太“基础”了?市面上不是有DHT22、DS18B20这些成熟的数字温湿度传感器吗?没错,但对于很多农业项目,尤其是教学、原型验证或者预算有限的场景,成本、可靠性和快速上手才是关键。光敏电阻和电位器成本极低,物理原理直观,非常适合用来理解传感器数据采集、模拟信号处理以及自动控制逻辑的底层原理。这个项目不仅仅是一个功能实现,更是一个完整的、从传感器原理到控制逻辑,再到代码实现的“麻雀虽小,五脏俱全”的案例。无论你是农业技术爱好者、物联网初学者,还是想给学生找一个综合性实践课题的老师,这套方案都能提供一个清晰、可复现的路径。

2. 系统整体设计与核心思路拆解

2.1 为什么选择雾培马铃薯种薯?

马铃薯种薯生产是马铃薯产业的关键一环,传统土培方式易受土传病害、连作障碍影响,且占地大、周期长。雾培技术将植物根系悬空,通过周期性喷施营养液雾滴来提供水分和养分,具有节水节肥、根系氧气充足、病害风险低、单位面积产量高等显著优势。然而,雾培的成功极度依赖两个环境因子:营养液温度雾化间隔

  • 营养液温度:直接影响根系活性和养分吸收。温度过低(如<22°C),根系代谢缓慢;温度过高(如>28°C),不仅溶解氧降低,还可能滋生有害微生物。理想的根系环境温度通常在24-26°C之间。
  • 雾化间隔:这与光照(昼夜节律)强相关。白天,植株光合作用旺盛,蒸腾作用强,需水需肥多,需要更频繁的雾化(如喷20秒,停30秒)以保证根系不干燥。夜晚,植株生理活动减弱,雾化间隔应大幅拉长(如喷15分钟,停2小时),以防止根系过湿导致缺氧和烂根。

因此,一个自动化的控制系统,必须能感知昼夜以调整雾化节奏,并监控温度以维持最佳根系环境。

2.2 传感器选型与“模拟”策略的考量

本项目没有使用集成化的数字传感器,而是采用了更基础的元件,这背后有教学和成本的双重考量:

  1. 光敏电阻作为昼夜传感器

    • 原理:其电阻值随光照强度增强而减小。在Arduino中,我们将其连接成一个分压电路,读取模拟引脚上的电压值,即可反推光照强度。
    • 优势:成本极低,电路简单,非常适合用于区分“亮”(白天)和“暗”(夜晚)这种二值或分级状态,而非精确的勒克斯值测量。
    • 实现:通过实验标定一个光照阈值(例如对应模拟值512,即2.5V)。读数高于此阈值判为“白天”,反之为“夜晚”。
  2. 电位器模拟温度传感器

    • 为什么用电位器模拟? 在真实部署中,我们会使用DS18B20(单总线)或LM35(模拟输出)这类温度传感器。但在项目原型阶段,尤其是在Tinkercad这类仿真软件中,使用一个可手动调节的电位器来模拟温度变化,是一个极其高效的教学和调试手段。
    • 工作原理:将电位器两端接5V和GND,中间抽头接Arduino模拟输入引脚。旋转电位器,中间抽头的电压就在0-5V之间线性变化。我们可以建立一个人为的映射关系:例如,规定0V对应15°C,5V对应35°C。这样,通过map()函数和简单计算,就能将读取的模拟值(0-1023)转换为一个模拟的温度值(15-35°C)。这完美模拟了真实温度传感器输出电压与温度成比例的特性。
    • 核心价值:这种方法让开发者可以专注于控制逻辑的编写与测试,无需等待真实环境温度变化,快速验证温度报警区间(绿灯、黄灯、红灯)的代码是否正确。

2.3 执行机构与控制逻辑

  • 雾化控制:使用一个直流电机(在仿真中)或一个继电器模块(在实际中)来控制雾化泵或电磁阀。控制信号来自Arduino的数字输出引脚。
    • 白天模式(光照值 > 阈值):执行“工作20秒,停止30秒”的短周期循环,满足高蒸腾需求。
    • 夜晚模式(光照值 <= 阈值):执行“工作15分钟,停止2小时”的长周期循环,降低根系环境湿度。
  • 温度状态指示:使用三色LED(红、黄、绿)提供直观的视觉反馈。
    • 绿灯:温度处于理想区间(24-26°C)。一切正常。
    • 黄灯:温度处于可接受但非理想的临界区间(22-24°C 或 26-28°C)。提示需要注意。
    • 红灯闪烁:温度处于危险区间(<22°C 或 >28°C)。需要立即人工干预。

这套逻辑清晰、响应直观的设计,构成了整个系统的“大脑”和“反应机制”。

3. 硬件电路搭建与核心细节解析

3.1 所需元件清单详解

除了Arduino Uno R3主板,你还需要以下元件。这里我会解释每个元件的作用,而不仅仅是列出清单:

  1. 面包板:用于免焊接搭建和测试电路原型。
  2. 电位器(10kΩ):用作温度模拟器。选择10kΩ是通用值,阻抗适中,对Arduino模拟输入友好。
  3. 光敏电阻(GL5528等):用于检测光照。通常需要搭配一个10kΩ的固定电阻组成分压电路。
  4. LED:三个,红、黄、绿各一。每个LED必须串联一个限流电阻(220Ω 或 330Ω),防止电流过大烧毁LED或Arduino引脚。
  5. 电阻
    • 3个220Ω电阻:用于LED限流。
    • 1个10kΩ电阻:与光敏电阻组成分压电路。
  6. 直流电机(仿真中)或继电器模块(实际中):代表雾化执行机构。注意:Arduino数字引脚不能直接驱动大功率电机或水泵! 实际使用时,务必通过继电器模块或电机驱动模块(如L298N)来控制。
  7. 杜邦线:若干,用于连接。
  8. 万用表(可选但推荐):用于调试时测量电压和电阻,确保电路连接正确。

3.2 电路连接图与分步解析

下图是系统的电路连接示意图,你可以根据此图在面包板或Tinkercad中搭建。

TEXT
[此处应为清晰的电路连接图,但由于文本限制,我将用文字详细描述连接方式]

连接步骤详解:

  1. 电源与地线

    • 将面包板的正极电源轨连接到Arduino的 5V 引脚。
    • 将面包板的**负极电源轨(地线)**连接到Arduino的 GND 引脚。确保整个电路共地。
  2. 电位器(模拟温度传感器)连接

    • 电位器有三个引脚。将两侧的引脚分别连接至面包板的 5VGND
    • 将中间的抽头引脚连接至Arduino的模拟输入引脚 A0。这样,旋转电位器,A0的电压就在0-5V间变化。
  3. 光敏电阻(光照传感器)连接

    • 这是一个分压电路。将光敏电阻的一端接 5V
    • 将光敏电阻的另一端,与一个 10kΩ固定电阻的一端相连,这个连接点再接到Arduino的模拟输入引脚 A1
    • 固定电阻的另一端接 GND
    • 原理:光照越强,光敏电阻值越小,A1点电压越接近5V;光照越弱,光敏电阻值越大,A1点电压越接近0V
  4. LED状态指示灯连接

    • 红色LED:长脚(正极)通过一个220Ω电阻连接到Arduino数字引脚 D9。短脚(负极)接GND
    • 黄色LED:长脚通过220Ω电阻连接到 D10。短脚接GND
    • 绿色LED:长脚通过220Ω电阻连接到 D11。短脚接GND
  5. 雾化电机(继电器)控制连接

    • (仿真/测试):将一个小型直流电机的正极接5V,负极接一个NPN三极管(如2N2222)的集电极。三极管发射极接GND,基极通过一个1kΩ电阻连接到Arduino数字引脚 D6。二极管(1N4007)反向并联在电机两端(阴极接5V,阳极接三极管集电极)以消除反电动势。
    • (实际应用 - 强烈推荐):使用一个继电器模块。将模块的VCC接Arduino 5VGNDGNDIN信号引脚接Arduino D6。将雾化泵的电源线串联到继电器的常开触点(NO)和公共端(COM)上。这样D6输出高电平时,继电器吸合,雾化泵工作。

重要提示:实际驱动水泵等大电流设备时,绝对不要直接用Arduino引脚驱动!必须使用继电器或固态继电器进行电气隔离,并使用独立的电源为水泵供电。Arduino仅提供控制信号。

3.3 硬件搭建的注意事项与避坑指南

  • LED极性别接反:长脚为正,短脚为负。接反了不会亮,但通常不会损坏。
  • 限流电阻必不可少:每个LED都必须串联电阻,直接连接5V会瞬间烧毁。
  • 光敏电阻分压电路:确保10kΩ固定电阻和光敏电阻的连接顺序正确,否则模拟读数逻辑会相反。
  • 电源功率:如果使用多个执行机构,考虑为Arduino使用独立的9V-12V直流电源适配器,而非USB供电,以保证稳定性。
  • 布线整洁:使用不同颜色的杜邦线区分电源(红)、地线(黑)、信号线(黄、绿等),便于后期检查和调试。

4. Arduino程序代码深度解析与实现

程序是系统的大脑。我们将代码分解为几个逻辑部分,并逐行解释。

4.1 全局变量与引脚定义

这是程序的“配置清单”,所有重要的参数和引脚映射都在这里定义。

CPP
// 模拟输入引脚定义
const int potPin = A0; // 电位器(模拟温度)连接至A0
const int ldrPin = A1; // 光敏电阻连接至A1
 
// 数字输出引脚定义 - LED
const int redLedPin = 9;
const int yellowLedPin = 10;
const int greenLedPin = 11;
 
// 数字输出引脚定义 - 雾化电机/继电器控制
const int foggerPin = 6;
 
// 系统参数定义
const int dayThreshold = 500; // 光照阈值,高于此值为白天,低于为夜晚。需根据实际环境校准。
// 温度映射参数(模拟电位器电压到温度)
const float tempMinVoltage = 0.0; // 对应最低温度时的电压(V)
const float tempMaxVoltage = 5.0; // 对应最高温度时的电压(V)
const int tempMinCelsius = 15; // 电位器最小电压对应的温度(°C)
const int tempMaxCelsius = 35; // 电位器最大电压对应的温度(°C)
 
// 雾化周期参数(单位:毫秒 ms)
const unsigned long dayFogOnTime = 20000; // 白天雾化开启时间:20秒
const unsigned long dayFogOffTime = 30000; // 白天雾化关闭时间:30秒
const unsigned long nightFogOnTime = 900000; // 夜晚雾化开启时间:15分钟 (15*60*1000)
const unsigned long nightFogOffTime = 7200000; // 夜晚雾化关闭时间:2小时 (2*60*60*1000)
// 注意:仿真时为快速演示,可减小这些值,例如改为2000和3000毫秒。

关键点解析

  • const关键字用于定义常量,防止程序运行时意外修改。
  • dayThreshold是核心参数,需要在实际硬件安装后,通过串口监视器观察白天和夜晚的ldrPin读数来校准确定。
  • 雾化周期时间使用unsigned long类型,因为毫秒数可能很大(2小时=7,200,000 ms),int类型可能溢出。

4.2 setup()函数:一次性初始化

setup()函数在设备上电或复位后只运行一次。

CPP
void setup() {
// 初始化串口通信,波特率9600,用于调试和输出数据
Serial.begin(9600);
 
// 将LED和雾化器控制引脚设置为输出模式
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(foggerPin, OUTPUT);
 
// 初始状态:关闭所有LED和雾化器
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(foggerPin, LOW);
 
Serial.println("系统启动完成,开始监测...");
}

关键点解析

  • Serial.begin(9600)对于调试至关重要。你可以打开Arduino IDE的“串口监视器”,查看程序打印的温度和光照值,这是校准和排查问题的第一工具。
  • 所有控制外部设备的引脚(OUTPUT)必须在setup()中明确模式,而读取数据的引脚(INPUT)对于模拟引脚可以省略,但显式声明是好习惯。

4.3 loop()函数:温度监控逻辑

loop()函数内的代码会循环执行。我们先处理温度读取与LED指示。

CPP
void loop() {
// --- 第一部分:温度读取与显示 ---
int potValue = analogRead(potPin); // 读取电位器原始值 (0-1023)
float voltage = potValue * (5.0 / 1023.0); // 将原始值转换为电压 (0.0-5.0V)
// 将电压映射为模拟温度值
float temperature = map(potValue, 0, 1023, tempMinCelsius, tempMaxCelsius);
 
// 打印温度信息到串口监视器,便于调试
Serial.print("模拟温度: ");
Serial.print(temperature);
Serial.println(" °C");
 
// 根据温度范围控制LED
// 首先关闭所有LED
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
 
if (temperature >= 24.0 && temperature <= 26.0) {
// 理想温度区间:亮绿灯
digitalWrite(greenLedPin, HIGH);
Serial.println("状态:温度正常(绿灯)");
} else if ((temperature >= 22.0 && temperature < 24.0) || (temperature > 26.0 && temperature <= 28.0)) {
// 临界温度区间:亮黄灯
digitalWrite(yellowLedPin, HIGH);
Serial.println("状态:温度注意(黄灯)");
} else {
// 危险温度区间:红灯闪烁
Serial.println("状态:温度警报(红灯闪烁)");
// 闪烁逻辑:亮500ms,灭500ms
digitalWrite(redLedPin, HIGH);
delay(500);
digitalWrite(redLedPin, LOW);
delay(500);
// 注意:此处delay会影响雾化周期,实际可优化为非阻塞方式(见后文)
}

关键点解析

  • analogRead()返回0-1023的整数,对应0-5V电压。
  • map()函数是Arduino的神器,它进行线性映射。这里将0-1023映射到15-35°C。你也可以用公式temperature = (voltage - tempMinVoltage) / (tempMaxVoltage - tempMinVoltage) * (tempMaxCelsius - tempMinCelsius) + tempMinCelsius;计算,结果更精确。
  • 红灯闪烁问题:示例中使用了delay(500)来实现闪烁。但这会阻塞程序,意味着在红灯闪烁的1秒内,程序无法检测光照和进行雾化控制。这在真实系统中是不可接受的。解决方案是使用非阻塞定时,我们将在优化部分详细说明。

4.4 loop()函数:光照检测与雾化控制逻辑

接下来是光照检测和基于昼夜的雾化控制逻辑。

CPP
// --- 第二部分:光照检测与雾化控制 ---
int ldrValue = analogRead(ldrPin); // 读取光敏电阻原始值
Serial.print("光照传感器值: ");
Serial.println(ldrValue);
 
static unsigned long previousFogMillis = 0; // 记录上次雾化状态改变的时间
static bool foggerState = false; // 记录雾化器当前状态(true开/false关)
unsigned long currentMillis = millis(); // 获取当前运行时间(毫秒)
 
unsigned long fogOnTime, fogOffTime;
 
// 判断昼夜并设置对应的雾化周期
if (ldrValue > dayThreshold) {
// 白天模式
fogOnTime = dayFogOnTime;
fogOffTime = dayFogOffTime;
Serial.println("模式:白天(短周期雾化)");
} else {
// 夜晚模式
fogOnTime = nightFogOnTime;
fogOffTime = nightFogOffTime;
Serial.println("模式:夜晚(长周期雾化)");
}
 
// 非阻塞定时控制雾化器
if (foggerState == false) {
// 当前雾化器关闭,检查是否到了该开启的时间
if (currentMillis - previousFogMillis >= fogOffTime) {
foggerState = true;
digitalWrite(foggerPin, HIGH);
previousFogMillis = currentMillis;
Serial.println("动作:开启雾化");
}
} else {
// 当前雾化器开启,检查是否到了该关闭的时间
if (currentMillis - previousFogMillis >= fogOnTime) {
foggerState = false;
digitalWrite(foggerPin, LOW);
previousFogMillis = currentMillis;
Serial.println("动作:关闭雾化");
}
}
 
// 为了串口输出不过于频繁,添加一个小延迟(不影响主逻辑)
delay(1000);
}

关键点解析

  • 非阻塞定时:这是本段代码的精华。我们使用millis()函数来获取Arduino自启动以来的毫秒数,它不会像delay()那样暂停整个程序。
    • previousFogMilliscurrentMillis用于计算时间间隔。
    • foggerState记录雾化器当前是开还是关。
    • 逻辑是:如果雾化器是关的,且关闭的时间已经达到fogOffTime,就打开它,并记录下打开的时刻。反之亦然。
    • 这样,无论雾化周期是2小时还是30秒,程序都能在每次loop()循环中快速检查条件并做出反应,同时不耽误执行其他任务(如温度检测)。
  • static关键字:用于在函数多次调用间保留变量的值。previousFogMillisfoggerState需要在每次loop()后记住自己的状态,必须用static声明。
  • 串口调试:打印模式(白天/夜晚)和动作(开启/关闭雾化),让你能清晰了解系统的工作状态。

5. 系统优化、调试与问题排查实录

一个能跑起来的原型只是第一步,让它稳定、可靠、易用才是工程的关键。

5.1 从原型到实用的关键优化

  1. 彻底解决阻塞问题——状态机与非阻塞设计: 上面的示例中,温度报警的红灯闪烁用了delay(),这仍然是个问题。我们需要一个完全非阻塞的程序结构。可以为每个需要独立计时的任务(温度LED闪烁、雾化周期)维护独立的状态和时间戳。

    优化后的温度报警逻辑示例

    CPP
    // 在全局变量区新增
    unsigned long previousBlinkMillis = 0;
    bool redLedState = LOW;
     
    // 在loop()中替换原来的红灯闪烁部分
    if (temperature < 22.0 || temperature > 28.0) {
    // 危险温度,非阻塞闪烁
    if (currentMillis - previousBlinkMillis >= 500) { // 500ms间隔
    previousBlinkMillis = currentMillis;
    redLedState = !redLedState; // 状态翻转
    digitalWrite(redLedPin, redLedState);
    }
    // 确保黄灯和绿灯是灭的
    digitalWrite(yellowLedPin, LOW);
    digitalWrite(greenLedPin, LOW);
    Serial.println("状态:温度警报(红灯闪烁)");
    } else {
    // ... 原来的黄灯绿灯逻辑 ...
    // 如果温度恢复正常,确保红灯稳定熄灭
    digitalWrite(redLedPin, LOW);
    }

    这样,红灯闪烁不再干扰主循环。

  2. 传感器校准与滤波

    • 光照阈值校准:将硬件置于典型的“白天”环境(如种植架光照下),打开串口监视器,记录下ldrValue的稳定读数范围。再在“夜晚”环境下记录。取两个范围中间的一个值作为dayThreshold。可以多次测量取平均。
    • 温度读数滤波:模拟读数容易受到电源噪声干扰。可以使用软件滤波,如连续读取10次potValue,然后取平均值,再计算温度,能有效减少数值跳动。
      CPP
      int samples = 10;
      long sum = 0;
      for(int i=0; i<samples; i++) {
      sum += analogRead(potPin);
      delay(10); // 短暂延迟,避免读取过快
      }
      int potValue = sum / samples;
  3. 使用真实传感器替换模拟元件

    • 温度传感器:强烈建议使用DS18B20。它是数字传感器,精度高(±0.5°C),抗干扰强,单总线可挂载多个。替换后,代码中读取温度的部分将变为调用相应的库函数(如OneWireDallasTemperature)。
    • 光照传感器:如需更精确的光照度,可使用BH1750数字光照传感器,直接输出勒克斯值。
  4. 增加人机交互与设置功能

    • 添加一个按钮和一块LCD屏幕(如1602 I2C屏)。按钮用于切换显示模式(当前温度/当前光照/雾化模式),LCD实时显示数据,使系统更独立、更友好。
    • 通过按钮和LCD,可以实现在不连接电脑的情况下,现场校准光照阈值、设置温度报警上下限等功能。

5.2 常见问题排查速查表

在实际搭建和运行中,你可能会遇到以下问题:

现象 可能原因 排查步骤与解决方案
所有LED都不亮 1. Arduino未供电或程序未上传成功。
2. 电源或地线未正确连接到面包板电源轨。
3. LED或电阻连接错误、虚焊。
1. 检查USB连接,确认IDE中已选择正确板和端口,并成功上传。观察Arduino板载LED是否正常。
2. 用万用表检查面包板电源轨是否有5V电压。
3. 检查LED极性,用万用表通断档检查电路连接。
单个LED不亮 1. 该LED损坏或极性接反。
2. 对应的限流电阻开路或阻值过大。
3. 程序中对应该引脚的pinMode未设置为OUTPUT
1. 将LED正负极调换试试,或换一个新LED。
2. 检查电阻是否为220Ω或330Ω,测量其阻值。
3. 检查setup()函数中该引脚的pinMode语句。
串口监视器无输出 1. 串口波特率设置错误。
2. Serial.begin(9600)语句未执行或代码有误。
3. 选错了串口端口。
1. 确保串口监视器右下角波特率设置为9600。
2. 检查setup()函数中是否有Serial.begin(9600)
3. 在IDE的“工具”->“端口”菜单中重新选择正确的COM口。
温度/光照读数固定不变或乱跳 1. 传感器引脚接触不良。
2. 模拟引脚A0/A1被意外设置为OUTPUT模式。
3. 电源噪声干扰。
1. 重新插拔杜邦线,确保接触牢固。
2. 确保程序中没有对potPinldrPin执行pinMode(xx, OUTPUT)
3. 为Arduino使用稳定的外部电源,并在模拟输入引脚与GND之间加一个0.1uF的滤波电容。
雾化器(电机)不工作 1. 控制引脚定义错误或连接错误。
2. 未使用驱动电路(如三极管、继电器),试图直接用引脚驱动大负载。
3. 程序逻辑错误,foggerPin始终输出LOW
1. 检查foggerPin(如D6)是否正确定义并连接到驱动电路输入端。
2. 立即检查电路!确认使用了三极管或继电器模块来控制电机/水泵。
3. 在loop()中临时添加digitalWrite(foggerPin, HIGH);看电机是否持续转动,以区分是硬件问题还是软件逻辑问题。
系统行为与预期不符(如白天执行夜晚周期) 1. 光照阈值dayThreshold设置不当。
2. 光敏电阻分压电路接反。
3. 程序中的if (ldrValue > dayThreshold)判断逻辑写反。
1. 通过串口监视器观察实际的ldrValue,根据实际光照环境调整阈值。
2. 检查光敏电阻和10kΩ电阻的连接顺序。
3. 仔细核对代码逻辑。

5.3 从仿真到实物的部署要点

当你从Tinkercad仿真转移到真实硬件时,还需要注意:

  • 电源隔离与驱动:重申:电机、水泵、大功率LED灯带等必须通过继电器模块控制,并使用独立电源供电。 Arduino只提供5V/40mA的小电流信号。
  • 防水与防护:农业环境潮湿。将Arduino和控制板放入防水接线盒中。传感器引出线接口处使用热缩管或防水胶密封。DS18B20温度传感器本身可防水。
  • 线缆整理:使用尼龙扎带或线槽整理线缆,避免杂乱,也便于维护。
  • 长期运行稳定性:考虑为Arduino配备不间断电源(UPS) 或备用电池,防止意外断电导致系统失控。可以增加一个实时时钟模块(RTC),记录系统运行日志或实现更复杂的时间表控制。

这个基于Arduino的雾培控制系统,从一个简单的教学原型出发,通过不断的优化和加固,完全可以成为一个稳定可靠的现场控制单元。它的价值在于提供了一个清晰、模块化的框架。你可以根据需要,轻松地替换更精确的传感器、增加更多的执行机构(如补光灯、通风扇),甚至将其接入更大的物联网平台,实现远程监控。动手做一遍,你会对自动化控制的底层逻辑有更深刻的理解。

Arduino实现DHT11自动控制L9110电机风扇
本项目介绍如何使用Arduino、DHT11温湿度传感器L9110电机驱动风扇模块,实现自动控制风扇的开闭。当温度超过31℃时,风扇启动;反之则停止。项目包括硬件准备、连线及程序编写。
物联181的马鑫
10346
基于Arduino的智能家居系统设计
本文详细介绍了利用Arduino开发板设计的智能家居系统,包括温湿度检测、时钟模块、LCD显示、继电器控制和语音识别等功能。系统能够根据环境参数自动控制灯光、空调和窗帘,并实现定时投食喂水。同时具备自动和语音控制两种模式,通过LD3320语音识别模块实现语音指令控制。
猕员桃
26211
基于arduino温湿度监测系统的设计与实现
该博客介绍了一个基于Arduino Uno的温湿度监测系统,使用DHT11传感器采集数据,LCD1602显示并配合蜂鸣器和LED灯进行超限报警。系统还通过蓝牙HC-05模块将数据传输到手机,实现实时显示。程序包括实时检测、异常报警及手机交互等功能。
数点梅花天地心
19488
基于arduino uno实现温湿度实时监测
本教程详细介绍了如何使用Arduino UNO板、DHT11传感器和OLED屏幕搭建一个温湿度监测系统。通过VSCode和特定库文件的支持,实现温湿度数据的实时采集显示。
而塞过
5460
Arduino使用DHT11温湿度传感器获取环境温湿度
本文介绍DHT11温湿度传感器的接线方法及Arduino测试程序编写过程,包括温湿度测量数据的单位转换方法。适用于初学者快速上手。
SpeculateCat
74307
Arduino实验》实验二:DHT11温湿度传感器检测当前环境温湿度
本实验介绍如何使用Arduino和DHT11传感器测量环境温湿度,并通过串口输出结果。实验涵盖器件准备、连线指导、代码详解及运行效果。
安于七安
18688
Arduino制作温湿度
本文介绍了使用Arduino主板、DHT11温湿度传感器和1602A LCD显示屏制作温湿度计的过程。在连接和编码过程中遇到屏幕显示问题,通过焊接排针解决了接触不良的故障。最终实现了温度和湿度的上行和下行显示,并提供了库文件和代码下载链接。
Mr_buffoon
14391
arduino学习系列——DHT11温湿度传感器的使用
本文介绍了如何使用arduino UNODHT11温湿度传感器进行连接和编程,详细阐述了传感器的引脚说明、数据格式、连接图、代码实现、注意事项及工作原理。通过理解时序图和使用特定库文件,成功获取并显示了温湿度信息。
自律者自由
91665
Arduino+DHT11温湿度传感器+12864oled显示温湿度
本文详细介绍了如何使用Arduino UnoDHT11传感器结合12864 OLED显示屏,实现温湿度的实时显示。通过安装U8g2lib和dht11库,连接元器件并编写程序,最终展示出清晰的温湿度读数。
HiDancer
6170
Arduino提高篇06—温湿度OLED显示
本文介绍如何使用DHT11温湿度传感器和OLED显示屏,结合Arduino Uno R3开发板,实现温湿度数据的实时采集显示。通过搭建电路,利用DHTsensorlibrary和U8g2库,成功在OLED屏幕上刷新显示温湿度信息。
TonyIOT
14086
arduino 语音音箱 :语音控制、MP3播放、报时、回复温湿度情况
本文介绍如何利用Arduino制作一款具备语音控制、MP3播放、报时和温湿度反馈功能的音箱。通过语音识别模块匹配指令,实现音乐播放、音量调节、曲目切换等功能。音箱设计涉及C/C++编程,以及对时钟、温湿度和MP3播放模块的集成应用。
weixin_30425949
8968
Arduino】基于DHT11温湿度传感器报警器
本文介绍了一种基于Arduino温湿度监测系统,当环境温度超过30℃时,系统通过无源蜂鸣器发出警报。系统使用DHT11温湿度模块实时获取数据,并通过编程实现温度阈值判断。
夏小泡泡#
11518
使用Arduino开发ESP8266应用(OneNET平台实现温湿度数据存储和LED灯控制)
本文详细介绍了如何使用Arduino IDE结合ESP8266开发板和DHT温湿度传感器,实现与OneNET物联网平台的数据交互,包括WiFi连接、温湿度数据上传、接收平台控制LED灯的指令。同时,文章指出在整合POST和GET请求时遇到的问题,提示读者需要深入理解HTTP协议。
6406
Arduino读取DHT11的温湿度显示在基于I2C的1602上
本文介绍使用Arduino UNO和DHT11传感器进行温湿度监测的项目。通过连接LCD1602显示器并利用I2C通讯,实现温湿度数据的实时显示。文中详细描述了硬件搭建过程和VS Code环境下Arduino程序的编写。
虾眠不觉晓
5989
Arduino实验——DHT11读取温湿度
本文详细介绍了DHT11数字温湿度传感器的工作原理、接口及电气参数,提供了Arduino平台上的测试代码示例,深入解析了传感器的通信机制数据处理方法。
阿基米东
17241
Arduino实现语音实时播报当前温湿度
本文介绍如何利用Arduino UNO、DHT11传感器和LU-ASR01语音识别模块,构建一个简单实用的语音播报当前温度和湿度的系统。通过Arduino读取DHT11数据,经串口通信将信息传递给LU-ASR01,从而实现语音播报,方便了解实时环境温湿度
不赦先生
7553
arduino+esp8266连接阿里云实现远程温湿度监控
本文介绍了一种基于Arduino UNO和ESP8266 WiFi模块的温湿度监控系统,该系统利用DHT11传感器采集温湿度数据,通过Arduino UNO处理后,使用ESP8266将数据发送至阿里云物联网平台,实现远程实时监测。系统通过MQTT-TCP协议确保数据传输的安全稳定。
莫扎的鱼
12457
arduino做一个有显示屏的温湿度感应装置
使用Arduino UNO和DHT11温湿度传感器,配合1602液晶显示器,创建了一个简易的温湿度监测装置。通过编程实现数据读取并在LCD上显示,延迟2秒更新一次。
shun-ripking
17495
arduino+DHT11采集温湿度(一)
本文介绍了如何使用Arduino连接DHT11传感器进行温湿度测量。首先,详细说明了DHT11的引脚连接方法,强调了错误连接可能导致数据异常。其次,展示了包含dht11库的代码实现,通过定义引脚并读取数据,将湿度和温度值打印在串口监视器上。最后,提到代码运行后每隔2秒会显示一次温湿度数据。
踏雪-寻梅
20029
基于DHT22与Arduino温湿度监控系统设计与实现
本文详细介绍基于DHT22和Arduino温湿度监控系统设计,涵盖硬件连接、Adafruit库配置、单总线通信原理及抗干扰措施。重点分析上拉电阻作用、代码非阻塞延时优化重试机制,提升系统稳定性,适用于环境监测物联网前端感知节点开发。
多行不易
819
ProjectSpudnik:一个为期一学期的项目,旨在构建气动计算机控制的马铃薯经典,以介绍物理学、电力、电路和编码。 这是针对中学生的。 我不是老师,这是我第一次尝试这样的事情
ProjectSpudnik(斯普德尼克项目)是一个极具教育价值跨学科整合深度的STEM实践教学范例,其核心目标并非单纯制造一台能发射马铃薯的“玩具炮”,而是以高度具象化、可操作、可测量、可编程的真实工程问题为锚点,系统性地引导中学生在真实情境中建构物理学、电子学、数字电路、嵌入式系统计算机科学等多领域知识体系。该项目名称巧妙致敬人类首颗人造卫星“斯普特尼克1号”(Sputnik 1),隐喻着一次面向青少年的“科学启蒙发射”——它不追求工业级精度,却极度强调认知逻辑的完整性、探究过程的规范性技术实现的渐进性。从物理学维度看,项目以压缩空气动力学为切入点,深入解构气体状态方程(PV=nRT)、绝热膨胀等熵流动、伯努利原理在气流加速中的体现、以及动能转化效率分析。学生需通过实验测量气室容积、充气压力(通常达60–120 psi)、阀门开启时间、枪管长度内径等参数,进而建立土豆质量、初速度、出膛动能之间的定量关系;同时结合空气阻力模型(如二次阻力项F_d = ½ρC_dAv²),理解为何实际射程远低于理想抛体计算值。重力轨迹模块则自然衔接高中物理的运动学分解:将发射角θ、初速v₀作为变量,推导水平位移x(t)=v₀cosθ·t竖直位移y(t)=v₀sinθ·t−½gt²联立所得的弹道方程,并引入数值方法(如欧拉法)处理含阻力项的微分方程组,为后续编程建模打下坚实基础。在电子电路层面,项目摒弃简单开关控制,转而构建基于电磁螺线管的气动阀驱动电路。学生需学习直流电机/螺线管驱动特性(电感反电动势、续流二极管选型)、NPN/PNP晶体管或MOSFET的开关工作区设计、光耦隔离保护、电源纹波抑制及瞬态电压抑制(TVS)等实用知识。电路设计涵盖从5V逻辑电平到24V高压气动执行器的电平转换功率适配,涉及PCB布局基础、焊接工艺、万用表示波器实测验证,真正实现“看得见、测得到、调得准”的硬件闭环。传感器融合是该项目的技术跃升关键。数字压力传感器(如MPX5700或BMP280)不仅提供实时气压数据,更成为连接物理世界数字世界的桥梁。学生需掌握I²C/SPI通信协议时序、寄存器配置、校准补偿算法(温度漂移修正)、ADC采样分辨率噪声滤波(移动平均、卡尔曼滤波入门)。配合MPU6050六轴姿态传感器,可实时获取发射仰角、偏航角角加速度,使轨迹预测从静态参数输入升级为动态状态感知,极大提升模型鲁棒性。编程嵌入式开发贯穿始终:Arduino平台因其开源生态、丰富库支持(Wire.h, Adafruit_Sensor.h, PID_v1.h)及直观IDE成为首选。学生从Blink入门,逐步进阶至多任务调度(millis()非阻塞架构)、串口调试协议设计、结构化数据封装(JSON轻量格式用于上位机通信)、以及基于传感器反馈的闭环控制(如压力阈值触发+角度自适应补偿)。更进一步,项目鼓励使用Python(PySerial + Matplotlib)开发上位机轨迹可视化工具,实现数据采集、拟合分析、误差溯源报告生成一体化,完成“感知—计算—决策—执行—评估”的完整工程链路。尤为珍贵的是其教育哲学:强调科学方法论的显性训练——每阶段均要求学生明确提出可证伪的问题(如“充气压力每增加10psi,射程是否线性增长?”),形成可量化假设,设计对照实验(控制变量法),记录原始数据表格,运用Excel或Google Sheets进行散点图拟合R²评估,最终反思系统误差来源(如密封性泄漏、土豆形状差异、环境温湿度影响)。这种扎根于真实工程问题的探究式学习,远超传统习题训练,切实培养批判性思维、协作沟通能力技术伦理意识(安全规范、社区责任、环保材料选择等)。ProjectSpudnik因此不仅是一门课,更是一次面向未来的科学素养奠基仪式——它让抽象公式在土豆划破长空的弧线中变得鲜活,让代码指令在气阀“咔嗒”一声的精准开合里获得生命,让每一个中学生真切体会到:自己,就是改变世界的那个初始变量。
有道理的同桌