“种菜吧!少年”——智能自主室内温室模拟器
什么你也喜欢种菜我说的不是这些游戏里谁还没有几百亩地了卷起衣袖就是干干不完根本干不完。然而现实生活中, 当我们大多数人面对一株小小植物时:众所周知……穷养不行就不养……不是……就富养那就给他们造个温室吧。硬件工具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自动检测怎么选传感器三档方案对比从入门到全参数都有覆盖。