智慧溫室環境控制

#include "DHT.h"                  // 使用函式庫為 "DHT.h"

DHT dht(2, DHT11);                // 定義溫溼度感測器物件名稱為 dht,讀取資料接腳為接腳 8

#include <Wire.h>                 // 載入 Wire 函式庫

#include <BH1750_WE.h>            // 載入 BH1750 函式庫

BH1750_WE myBH1750(0x23);         // myBH1750 物件


int Relay1 = 6;                   // 繼電器 1 接腳

int Relay2 = 5;                   // 繼電器 2 接腳

int LED = 13;                     //LED 燈接腳

int conditioner = 0;              // 循環風扇

int humi = 0; 


void setup()

{

  Serial.begin(9600);             // 監控視窗鮑率

  dht.begin();                    // 溫溼度感測器開始偵測

  Wire.begin();                   // 啟動 I2C

  myBH1750.init();                // BH1750 光感模組初始化 

  pinMode( LED , OUTPUT);         //LED 燈接腳模式

  pinMode( Relay1 , OUTPUT);      // 繼電器 1 接腳模式

  pinMode( Relay2 , OUTPUT);      // 繼電器 2 接腳模式

  digitalWrite( LED , HIGH );     //LED 燈接腳初始狀態

  digitalWrite( Relay1 , HIGH );  // 繼電器 1 接腳初始狀態

  digitalWrite( Relay2 , HIGH );  // 繼電器 2 接腳初始狀態

  delay(1000); 

}


void loop()

{

  Serial.println("=== 智慧溫室控制系統 ==="); // 監控視窗輸出

  // 光感測器 

  float light = myBH1750.getLux();  // 讀取光照數值

  Serial.print(" 目前光照度 = ");     // 列印文字

  Serial.print(light);              // 列印光照數值

  Serial.print(" Lux ");            // 列印單位

  if(light < 200){                  // 判斷環境黑暗

    Serial.println("==== 燈光照明:ON"); 

    digitalWrite(LED,LOW);          // 打開 LED 燈

  }

  else {                            // 判斷環境明亮

    Serial.println("==== 燈光照明:OFF"); 

    digitalWrite(LED,HIGH);         // 關閉 LED 燈

  } 

  // 溫溼度感測器 

  float t = dht.readTemperature();  // 讀取溫度數值

  float h = dht.readHumidity();     // 讀取濕度數值

  if(t > 28){

    conditioner = 1;

  }else {

    conditioner = 0;

  }

  Serial.print(" 目前溫度 = ");

  Serial.print(t);

  Serial.print(" ℃ "); 

  if(conditioner == 1){

    Serial.println("==== 風扇:ON");

    digitalWrite(Relay1,LOW);

  }

  if(conditioner == 0){

    Serial.println("==== 風扇:OFF");

    digitalWrite(Relay1,HIGH); 

  }

  if(h >= 60) {

    humi = 0;

  }else {

    humi = 1;

  } 

  Serial.print(" 目前濕度 = ");

  Serial.print(h);

  Serial.print(" % ");

  if(humi == 1){

    Serial.println("==== 澆水系統:ON");

    digitalWrite(Relay2,LOW); 

  }

  if(humi == 0){

    Serial.println("==== 澆水系統:OFF"); 

    digitalWrite(Relay2,HIGH); 

  } 

  Serial.println(); 

  delay(10000); // 每 10 秒更新一次

}