“种菜吧!少年”——智能自主室内温室模拟器 什么你也喜欢种菜我说的不是这些游戏里谁还没有几百亩地了卷起衣袖就是干干不完根本干不完。然而现实生活中, 当我们大多数人面对一株小小植物时:众所周知……穷养不行就不养……不是……就富养那就给他们造个温室吧。硬件工具Arduino Nano R3 x1Arduino 4路继电器扩展板 x1超声波传感器 - HC-SR04通用x1PIR 运动传感器通用x1LED 通用x1Adafruit 标准 LCD - 16x2 蓝底白字 (12C 接口焊接在上面) x1DFRobot Gravity : 模拟电容式土壤湿度传感器-耐腐蚀 x2RobotGeek 直流液体泵-大型 x2液体阀x1水箱 x1DHT22 温度传感器 x1烙铁通用主要结构箱柜(按需添加间隔层)下图是一个宜家的便携式衣柜内外包裹着泡沫塑料隔热层。共设三层最低一层主要用于种子开始有一个加热垫另外两层是针对植物的。空气循环、加热以及温湿度测量都是通过一个ABS管道”加热器”来完成的。其中使用DHT22传感器来测量温度和湿度。湿度控制由一个小型 12V “鼠笼式”风扇完成。一块Arduino Nano兼容板作为控制单元的核心。系统配备了一个I2C接口的LCD屏用于显示所有必要的参数和状态。当有人进入区域时红外运动传感器会触发LCD屏的背光。系统中有一个RTC继电器时钟它通过一个数字引脚为整个系统提供”昼夜”参考信号。内部温度设有”夜间”和”白天”两个设定点以模拟真实环境条件。在”白天”时段灯光会持续保持开启状态约15小时。灌溉系统一个雨水雪水桶通过电磁阀和过滤器连接到双泵组。水位由超声波传感器测量。两个电容式土壤湿度传感器分别监测各自区域的湿度并独立触发水泵工作。当桶中水位降至临界点时灌溉会自动停止同时一个LED灯会显示”水位低”警告。代码//GreenHouse sketch created by Victor Onofrei. 2019 #include DHT.h #include Wire.h #include LiquidCrystal_I2C.h #include HCSR04.h #include SandTimer.h #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(0x27,20,4); HCSR04 watersens(5,6); SandTimer timersensor; SandTimer backlightimer; SandTimer pump1timer; SandTimer pump2timer; const int lowaterled4; const int venthum7; const int irsensor8; const int pump29; const int heaterpin10; const int lightpin11; const int pump112; const int timerpin13; int h0; int t0; int Soil10; //lower soil moisture sensor int Soil20; int settemp; int daytemp26; int nightemp23; int timervalue; int motiondetect; int waterlevel; void setup() { dht.begin(); lcd.init(); timersensor.start(2000); backlightimer.start(30000); pump1timer.start(10000); pump2timer.start(10000); pinMode(heaterpin, OUTPUT); pinMode(timerpin, INPUT); pinMode(lightpin, OUTPUT); pinMode(lowaterled, OUTPUT); pinMode(venthum, OUTPUT); pinMode(irsensor, INPUT); pinMode(pump1, OUTPUT); pinMode(pump2, OUTPUT); digitalWrite(pump1, HIGH); digitalWrite(pump2, HIGH); } void loop() { sensorcheck(); lowater(); settempset(); humidcontrol(); runheat(); runlights(); lcdprint(); lcdbacklight(); watering(); } //Functions void sensorcheck(){ if (timersensor.finished()){ hdht.readHumidity(); tdht.readTemperature(); timervaluedigitalRead(timerpin); Soil1analogRead(6); Soil2analogRead(7); Soil1map(Soil1,560,270,01,99); Soil2map(Soil2,545,270,01,99); motiondetectdigitalRead(irsensor); waterlevelwatersens.dist(); waterlevelmap(waterlevel,3,57,99,01); timersensor.startOver(); } } void lowater(){ if (waterlevel3){ digitalWrite(lowaterled, HIGH); } else{ digitalWrite(lowaterled, LOW); } } void watering(){ if ((waterlevel3)(Soil124)){ digitalWrite(pump1, LOW); // if (pump1timer.finished()){ // digitalWrite(pump1, HIGH); // pump1timer.startOver(); // } } else{ digitalWrite(pump1, HIGH); } if ((waterlevel3)(Soil224)){ digitalWrite(pump2, LOW); // if (pump2timer.finished()){ // digitalWrite(pump2, HIGH); // pump2timer.startOver(); // } } else { digitalWrite(pump2, HIGH); } } void settempset(){ if (timervalueHIGH){ settempdaytemp; } else{ settempnightemp; } } void lcdbacklight(){ if (motiondetect1){ lcd.backlight(); } else if ((motiondetect0)(backlightimer.finished())){ lcd.noBacklight(); backlightimer.startOver(); } } void humidcontrol(){ if(h72){ digitalWrite(venthum, HIGH); } else if (h65){ digitalWrite(venthum, LOW); } } void runheat(){ if(tsettemp){ digitalWrite(heaterpin, HIGH); } else{ digitalWrite(heaterpin, LOW); } } void runlights(){ if (timervalueLOW){ digitalWrite(lightpin, HIGH); } else{ digitalWrite(lightpin, LOW); } } void lcdprint(){ lcd.setCursor(0,0); lcd.print(T/H:); lcd.print(t); lcd.print(/); lcd.print(h); lcd.setCursor(10,0); lcd.print(WL:); lcd.print(waterlevel); lcd.print(%); lcd.setCursor(0,1); lcd.print(Z1:); lcd.print(Soil1); lcd.print(%); lcd.print( ); lcd.print(Z2:); lcd.print(Soil2); lcd.print(%); }快去救救你的植物吧。文章首发于DF创客社区与其每天人工检测pH和EC不如直接上传感器自动监测——水培pH/EC自动检测怎么选传感器三档方案对比从入门到全参数都有覆盖。

相关新闻

最新新闻

C++20核心特性实战解析:从概念到模块的现代编程范式

C++20核心特性实战解析:从概念到模块的现代编程范式

1. 项目概述:为什么现在必须关注C20?如果你是一名C开发者,最近几年可能感觉有点“分裂”。一方面,C11/14/17带来的现代特性让开发体验焕然一新;另一方面,看着隔壁语言社区(比如Rust、Go&#xf…

2026/8/29 3:11:06
最短路径算法全解析:从Dijkstra到Bellman-Ford的MATLAB建模实战

最短路径算法全解析:从Dijkstra到Bellman-Ford的MATLAB建模实战

1. 从地图导航到网络路由:为什么最短路径问题无处不在我们每天都在和“最短路径”打交道,只是很多时候没有意识到。早上打开手机地图,输入公司和家的地址,App瞬间为你规划出一条耗时最短或距离最短的路线——这背后就是最短路径算…

2026/8/29 3:11:06
C盘爆满怎么办:用磁盘空间分析工具精准定位并安全清理

C盘爆满怎么办:用磁盘空间分析工具精准定位并安全清理

C盘又红了,这大概是 Windows 用户最熟悉的“日常崩溃”之一。明明没装什么大软件,系统盘可用空间却一天比一天少;用清理软件点半天,能清出来的空间也就一两个 G,过几天又弹回原样。很多人第一反应是下个“安全卫士”全…

2026/8/29 3:11:06
C盘爆红怎么清?从200G占用到系统级清理与迁移全攻略

C盘爆红怎么清?从200G占用到系统级清理与迁移全攻略

一段日常经常出现的对话是:电脑变卡,打开资源管理器一看,C 盘红了。再跑一遍清理软件,清出几个 GB,过两天又满。如果你面对的是“C 盘需要清理出 200G”这种量级,那问题就远不是删几个缓存文件那么简单了。…

2026/8/29 3:11:06
可穿戴设备健康数据本地AI分析:从导出到自动周报的完整实践

可穿戴设备健康数据本地AI分析:从导出到自动周报的完整实践

如果你关注数字化健康管理,大概率已经注意到一类被称为“Datamaxxers”的人群:他们戴着智能手表睡觉,记录每一餐热量,同步每一次心率波动,然后把 Apple Health、Garmin、华为运动健康里的数据全部导出,定期…

2026/8/29 3:11:06
STM32微秒延时函数实现:基于硬件定时器的高精度延时方案

STM32微秒延时函数实现:基于硬件定时器的高精度延时方案

1. 项目概述:为什么我们需要一个精准的微秒延时函数?在STM32的开发中,延时函数几乎是每个项目都绕不开的基础功能。无论是为了等待传感器稳定、控制通信时序、生成精确的PWM脉冲,还是实现简单的按键消抖,我们都需要让程…

2026/8/29 3:06:06