2024-12-17 10:31:12 [显示全部楼层]
11750浏览
查看: 11750|回复: 0

[项目] “种菜吧!少年”——智能自主室内温室模拟器

[复制链接]
什么!你也喜欢种菜?我说的不是这些:

“种菜吧!少年”——智能自主室内温室模拟器图1

游戏里谁还没有几百亩地了?卷起衣袖就是干,干不完,根本干不完。

然而现实生活中, 当我们大多数人面对一株小小植物时:

“种菜吧!少年”——智能自主室内温室模拟器图2
养不活,根本养不活!
众所周知……

“种菜吧!少年”——智能自主室内温室模拟器图3

穷养不行就不养……

不是……

就富养!

那就给他们造个温室吧。
硬件&工具
  • Arduino Nano R3   x1
  • Arduino 4路继电器扩展板 x1
  • 超声波传感器 - HC-SR04(通用)x1
  • PIR 运动传感器(通用)x1
  • LED (通用)x1
  • Adafruit 标准 LCD - 16x2 蓝底白字  (12C 接口焊接在上面)  x1
  • DFRobot Gravity : 模拟电容式土壤湿度传感器- 耐腐蚀   x2
  • RobotGeek 直流液体泵 - 大型  x2
  • 液体阀x1
  • 水箱 x1
  • DHT22 温度传感器 x1
  • 烙铁(通用)

主要结构:箱柜(按需添加间隔层)

下图是一个宜家的便携式衣柜,内外包裹着泡沫塑料隔热层。共设三层,最低一层主要用于种子开始:有一个加热垫,另外两层是针对植物的。

“种菜吧!少年”——智能自主室内温室模拟器图4

“种菜吧!少年”——智能自主室内温室模拟器图5

“种菜吧!少年”——智能自主室内温室模拟器图6

“种菜吧!少年”——智能自主室内温室模拟器图7

空气循环、加热以及温湿度测量都是通过一个ABS管道”加热器”来完成的。其中,使用DHT22传感器来测量温度和湿度。

“种菜吧!少年”——智能自主室内温室模拟器图8
“加热器”和一个额外的加热元件


湿度控制由一个小型 12V “鼠笼式”风扇完成。

“种菜吧!少年”——智能自主室内温室模拟器图9

“种菜吧!少年”——智能自主室内温室模拟器图10
当被板触发时,它会将新鲜空气泵入温室内


一块Arduino Nano(兼容板)作为控制单元的核心。系统配备了一个I2C接口的LCD屏,用于显示所有必要的参数和状态。当有人进入区域时,红外运动传感器会触发LCD屏的背光。

“种菜吧!少年”——智能自主室内温室模拟器图11
LCD 显示:区域 1(Z1)和区域 2(Z2)的温度(Temperature)、湿度(Humidity)、水(Water level)和土壤湿度(Soil moisture)


系统中有一个RTC继电器时钟,它通过一个数字引脚为整个系统提供”昼夜”参考信号。内部温度设有”夜间”和”白天”两个设定点,以模拟真实环境条件。在”白天”时段,灯光会持续保持开启状态约15小时。

“种菜吧!少年”——智能自主室内温室模拟器图12

灌溉系统
一个雨水(雪水)桶通过电磁阀和过滤器连接到双泵组。水位由超声波传感器测量。两个电容式土壤湿度传感器分别监测各自区域的湿度,并独立触发水泵工作。当桶中水位降至临界点时,灌溉会自动停止,同时一个LED灯会显示”水位低”警告。

“种菜吧!少年”——智能自主室内温室模拟器图13
一个双泵浇水块
“种菜吧!少年”——智能自主室内温室模拟器图14
土壤湿度传感器和灌溉喷头
“种菜吧!少年”——智能自主室内温室模拟器图15
水位超声波传感器


代码
  1. //===GreenHouse sketch created by Victor Onofrei. 2019===
  2. #include <DHT.h>
  3. #include <Wire.h>
  4. #include <LiquidCrystal_I2C.h>
  5. #include <HCSR04.h>
  6. #include <SandTimer.h>
  7. #define DHTPIN 2
  8. #define DHTTYPE DHT22
  9. DHT dht(DHTPIN, DHTTYPE);
  10. LiquidCrystal_I2C lcd(0x27,20,4);
  11. HCSR04 watersens(5,6);
  12. SandTimer timersensor;
  13. SandTimer backlightimer;
  14. SandTimer pump1timer;
  15. SandTimer pump2timer;
  16. const int lowaterled=4;
  17. const int venthum=7;
  18. const int irsensor=8;
  19. const int pump2=9;
  20. const int heaterpin=10;
  21. const int lightpin=11;
  22. const int pump1=12;
  23. const int timerpin=13;
  24. int h=0;
  25. int t=0;
  26. int Soil1=0; //lower soil moisture sensor
  27. int Soil2=0;
  28. int settemp;
  29. int daytemp=26;
  30. int nightemp=23;
  31. int timervalue;
  32. int motiondetect;
  33. int waterlevel;
  34. void setup() {
  35.   dht.begin();
  36.   lcd.init();
  37.   timersensor.start(2000);
  38.   backlightimer.start(30000);
  39.   pump1timer.start(10000);
  40.   pump2timer.start(10000);
  41.   pinMode(heaterpin, OUTPUT);
  42.   pinMode(timerpin, INPUT);
  43.   pinMode(lightpin, OUTPUT);
  44.   pinMode(lowaterled, OUTPUT);
  45.   pinMode(venthum, OUTPUT);
  46.   pinMode(irsensor, INPUT);
  47.   pinMode(pump1, OUTPUT);
  48.   pinMode(pump2, OUTPUT);
  49.   digitalWrite(pump1, HIGH);
  50.   digitalWrite(pump2, HIGH);
  51. }
  52. void loop() {
  53.   sensorcheck();
  54.   lowater();
  55.   settempset();
  56.   humidcontrol();
  57.   runheat();
  58.   runlights();
  59.   lcdprint();
  60.   lcdbacklight();
  61.   watering();
  62. }
  63. //===========Functions=============
  64. void sensorcheck(){
  65.   if (timersensor.finished()){
  66.     h=dht.readHumidity();
  67.     t=dht.readTemperature();
  68.     timervalue=digitalRead(timerpin);
  69.     Soil1=analogRead(6);
  70.     Soil2=analogRead(7);
  71.     Soil1=map(Soil1,560,270,01,99);
  72.     Soil2=map(Soil2,545,270,01,99);
  73.     motiondetect=digitalRead(irsensor);
  74.     waterlevel=watersens.dist();
  75.     waterlevel=map(waterlevel,3,57,99,01);
  76.     timersensor.startOver();
  77.   }
  78. }
  79. void lowater(){
  80.   if (waterlevel<=3){
  81.     digitalWrite(lowaterled, HIGH);
  82.   }
  83.   else{
  84.     digitalWrite(lowaterled, LOW);
  85.   }
  86. }
  87. void watering(){
  88.   if ((waterlevel>=3)&&(Soil1<=24)){
  89.     digitalWrite(pump1, LOW);
  90. //    if (pump1timer.finished()){
  91. //      digitalWrite(pump1, HIGH);
  92. //      pump1timer.startOver();
  93. //    }
  94.   }
  95. else{
  96.   digitalWrite(pump1, HIGH);  
  97. }
  98.   
  99.   if ((waterlevel>=3)&&(Soil2<=24)){
  100.     digitalWrite(pump2, LOW);
  101. //    if (pump2timer.finished()){
  102. //      digitalWrite(pump2, HIGH);
  103. //      pump2timer.startOver();
  104. //    }
  105.   }
  106. else {
  107.   digitalWrite(pump2, HIGH);
  108. }
  109. }
  110. void settempset(){
  111.   if (timervalue==HIGH){
  112.   settemp=daytemp;
  113. }
  114. else{
  115.   settemp=nightemp;
  116. }
  117. }
  118. void lcdbacklight(){
  119.     if (motiondetect==1){
  120.     lcd.backlight();
  121.   }
  122. else if ((motiondetect==0)&&(backlightimer.finished())){
  123.   lcd.noBacklight();
  124.   backlightimer.startOver();
  125. }
  126. }
  127. void humidcontrol(){
  128.   if(h>=72){
  129.   digitalWrite(venthum, HIGH);
  130. }
  131. else if (h<=65){
  132.   digitalWrite(venthum, LOW);
  133. }
  134. }
  135. void runheat(){
  136.   if(t>=settemp){
  137.   digitalWrite(heaterpin, HIGH);
  138. }
  139. else{
  140.   digitalWrite(heaterpin, LOW);
  141. }
  142. }
  143. void runlights(){
  144. if (timervalue==LOW){
  145.   digitalWrite(lightpin, HIGH);
  146. }
  147. else{
  148.   digitalWrite(lightpin, LOW);
  149. }
  150. }
  151. void lcdprint(){
  152.   lcd.setCursor(0,0);
  153.   lcd.print("T/H:");
  154.   lcd.print(t);
  155.   lcd.print("/");
  156.   lcd.print(h);
  157.   lcd.setCursor(10,0);
  158.   lcd.print("WL:");
  159.   lcd.print(waterlevel);
  160.   lcd.print("%");
  161.   lcd.setCursor(0,1);
  162.   lcd.print("Z1:");
  163.   lcd.print(Soil1);
  164.   lcd.print("%");
  165.   lcd.print(" ");
  166.   lcd.print("Z2:");
  167.   lcd.print(Soil2);
  168.   lcd.print("%");
  169. }
复制代码



快去救救你的植物吧。

“种菜吧!少年”——智能自主室内温室模拟器图16

原文地址:https://www.hackster.io/vinikon/ ... king-project-946f6e

项目作者:Victor Onofrei

译文首发于:DF创客社区

转载请注明来源信息

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail