使用Arduino Uno的感測器偵測土壤濕度和光線,土壤濕度不足時自動澆水,光線不足時開燈照明。並設有液晶螢幕可以觀察溫度和濕度。
硬體設備:
Arduino uno 開發版
DHT11溫溼度模組
通用型彩色
Sensor shield v5.0
感應器擴充板
WS2812 RGB12燈環模組
光線模組
沉水馬達
LCD 1602
液晶模組(I2C介面)
繼電器
土壤濕度模組
2.54mm杜邦雙母頭彩色40P 1P排線 線長20cm
程式碼:
#include <Adafruit_NeoPixel.h> //1
#ifdef __AVR__ //2
#include <avr/power.h> //3
#endif //4
#define PIN 13 //WS2812 RGB12燈環模組腳位連結時請將pin插到板子的13 //5
#define NUMPIXELS 12 //設定燈珠數量 //6
#include "DHT.h" //7
#define DHTPIN 9 //溫溼度模組腳位連結時請將pin插到板子的9 //8
#define DHTTYPE DHT11 //9
DHT dht(DHTPIN, DHTTYPE); //10
#include <FastIO.h> //11
#include <I2CIO.h> //12
#include <LCD.h> //13
#include <LiquidCrystal.h> //14
#include <LiquidCrystal_I2C.h> //15
#include <LiquidCrystal_I2C_ByVac.h> //16
#include <LiquidCrystal_SI2C.h> //17
#include <LiquidCrystal_SR.h> //18
#include <LiquidCrystal_SR1W.h> //19
#include <LiquidCrystal_SR2W.h> //20
#include <LiquidCrystal_SR3W.h> //21
#include <SI2CIO.h> //22
#include <Wire.h> //23
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //24
#define DELAYVAL 500 //25
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);//設定I2C位址//26
void setup() //27
{ //28
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) //29
clock_prescale_set(clock_div_1); //30
#endif //31
pixels.begin(); //32
Serial.begin(9600); //33
pinMode(3, OUTPUT); //將腳位3設為輸出模式 //34
dht.begin(); //35
lcd.begin(16, 2); //設定LCD顯示行數 //36
lcd.setBacklight(255); //37
lcd.clear(); //38
} //39
void loop() //40
{ //41
Serial.print(analogRead(A3)); //42
Serial.print(" "); //42-44是讓土壤濕度及亮度顯示於電腦 //43
Serial.println(analogRead(A0)); //44
if(analogRead(A0)<550) //45
digitalWrite(3,HIGH); //46
if (analogRead(A0)>550)//這邊是判斷土壤濕度和光線若低於設定值就自動開燈和澆水 //47
digitalWrite(3,LOW); //48
if (analogRead(A3)<200) //49
for(int i=0; i<12; i++) { //50
pixels.setPixelColor(i, pixels.Color(0, 0, 255)); //51
pixels.show(); //52
} //53
pixels.show(); //54
if (analogRead(A3)>200) //55
pixels.clear(); //56
delay(500); //57
float h = dht.readHumidity(); //取得濕度 //58
float t = dht.readTemperature(); //取得溫度C //59
Serial.print("Humidity: "); //60
Serial.print(h); //61
Serial.print(" %\t"); //62
Serial.print("Temperature:"); //63
Serial.print(t); //64
Serial.println(" *C "); //65
lcd.clear(); //66
lcd.setCursor(0, 0); //設定游標位置 (字,行) //67
lcd.print("RH :"); //Relative Humidity 相對濕度簡寫 //68
lcd.setCursor(7, 0); //69
lcd.print(h); //70
lcd.setCursor(14, 0); //71
lcd.print("%"); //72
lcd.setCursor(0, 1); //設定游標位置 (字,行) //73
lcd.print("Temp:"); //74
lcd.setCursor(7, 1); //75
lcd.print(t); //76
lcd.setCursor(13, 1); //77
lcd.print((char)223); //用特殊字元顯示符號的"度" //78
lcd.setCursor(14, 1); //79
lcd.print("C"); //80
} //81
組裝及實際應用照片