大数跨境
0
0

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

“种菜吧!少年”——智能自主室内温室模拟器 DF创客社区
2024-12-17
2
导读:搞起来!
【点击上方「蓝字」关注DF创客社区,一起成为技术颜控】

什么!你也喜欢种菜?我说的不是这些:

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

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

养不活,根本养不活!

众所周知……

穷养不行就不养……

不是……

就富养!

那就给他们造个温室吧。

硬件&工具

  • 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
  • 烙铁(通用)

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

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

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

“加热器”和一个额外的加热元件

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

当被板触发时,它会将新鲜空气泵入温室内

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

LCD 显示:区域 1(Z1)和区域 2(Z2)的温度(Temperature)、湿度(Humidity)、水(Water level)和土壤湿度(Soil moisture)

系统中有一个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 lowaterled=4;
const int venthum=7;
const int irsensor=8;
const int pump2=9;
const int heaterpin=10;
const int lightpin=11;
const int pump1=12;
const int timerpin=13;
int h=0;
int t=0;
int Soil1=0//lower soil moisture sensor
int Soil2=0;
int settemp;
int daytemp=26;
int nightemp=23;
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()){
    h=dht.readHumidity();
    t=dht.readTemperature();
    timervalue=digitalRead(timerpin);
    Soil1=analogRead(6);
    Soil2=analogRead(7);
    Soil1=map(Soil1,560,270,01,99);
    Soil2=map(Soil2,545,270,01,99);
    motiondetect=digitalRead(irsensor);
    waterlevel=watersens.dist();
    waterlevel=map(waterlevel,3,57,99,01);
    timersensor.startOver();
  }
}

void lowater(){
  if (waterlevel<=3){
    digitalWrite(lowaterled, HIGH);
  }
  else{
    digitalWrite(lowaterled, LOW);
  }
}

void watering(){
  if ((waterlevel>=3)&&(Soil1<=24)){
    digitalWrite(pump1, LOW);
//    if (pump1timer.finished()){
//      digitalWrite(pump1, HIGH);
//      pump1timer.startOver();
//    }
  }
else{
  digitalWrite(pump1, HIGH);  
}
  
  if ((waterlevel>=3)&&(Soil2<=24)){
    digitalWrite(pump2, LOW);
//    if (pump2timer.finished()){
//      digitalWrite(pump2, HIGH);
//      pump2timer.startOver();
//    }
  }
else {
  digitalWrite(pump2, HIGH);
}
}

void settempset(){
  if (timervalue==HIGH){
  settemp=daytemp;
}
else{
  settemp=nightemp;
}
}

void lcdbacklight(){
    if (motiondetect==1){
    lcd.backlight();
  }
else if ((motiondetect==0)&&(backlightimer.finished())){
  lcd.noBacklight();
  backlightimer.startOver();
}
}

void humidcontrol(){
  if(h>=72){
  digitalWrite(venthum, HIGH);
}
else if (h<=65){
  digitalWrite(venthum, LOW);
}
}

void runheat(){
  if(t>=settemp){
  digitalWrite(heaterpin, HIGH);
}
else{
  digitalWrite(heaterpin, LOW);
}
}

void runlights(){
if (timervalue==LOW){
  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("%");
}

快去救救你的植物吧。

原文地址:https://www.hackster.io/vinikon/autonomous-indoor-greenhouse-mature-real-working-project-946f6e

项目作者:Victor Onofrei

译文首发于:DF创客社区

转载请注明来源信息



硬件军火库

长按扫码了解详情👆


DFRobot官方品牌店 https://dfrobot.taobao.com/

DFRobot官方旗舰店 https://dfrobot.jd.com/


大家有什么想说的,欢迎在下方留言



 往期项目回顾 


FPV头部追踪摄像机系统、猫咪夜灯、用眼睛告诉你房间健康状况的智能机器人|DF创客周刊(第110期)


键盘就是电脑,树莓派500来了!


自制磷光探测器、Arduino Nano控制的小型绘图仪、星空投影灯|DF创客周刊(第109期)


树莓派CM5 评测:相同的外观,更强的性能


点击阅读👆

【声明】内容源于网络
0
0
DF创客社区
我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
内容 1282
粉丝 0
DF创客社区 我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
总阅读2.1k
粉丝0
内容1.3k