#include <dht11.h>//dht11庫
#include <MsTimer2.h> //定時器庫的 頭文件
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //引用I2C庫
LiquidCrystal_I2C lcd(0x3F,16,2); //設置LCD1602設備地址,這里的地址是0x3F,一般是0x20,或者0x27,具體看模塊手冊
int PIRpin=A1;//紅外傳感器引腳號
int val1 = 0; // 存儲光敏電阻值的變量
int w=0;//設定紅外初始值
int o=0;//定義手動自動開光初始值
int h=38;//設定溫度初始值
int p=0;//設定溫度升高暫存變量
int k=0;//設定溫度降低暫存變量
int photocellPin = 2; // 光敏電阻連接模擬端口【A2】
int ledPin = 7; // LED燈連接數字端口【D7】
int ss[512];
dht11 DHT11;
#define DHT11PIN 4//設定4號引腳為溫度輸入
#define DHT11PIN1 5//設定5號引腳為溫度輸入
#define turang A0//設定土壤輸入為A0口
#define turangq A4//設定土壤輸入為A0口
#define fen 8 //定義風扇引腳為8
#define shuiben 9 //定義水泵引腳為9
void setup(){
Serial.begin(9600);
Serial.println("AT+CIPMODE=1"); //WiFi連接服務器
delay(1000);
Serial.println("AT+CWJAP=\"TP-LINK_4226\",\"19960710\"");
delay(5000);
Serial.println("AT+CIPSTART=\"TCP\",\"115.29.109.104\",6555");
delay(5000);
Serial.println("AT+CIPSEND");
delay(3000);
MsTimer2::set(100, falsh); // 中斷設置函數,每100ms 進入一次中斷
lcd.init(); // 初始化LCD
lcd.backlight(); //設置LCD背景等亮
lcd.setCursor(0,0); //設置顯示指針
lcd.print("Welcome to "); //輸出字符到LCD1602上
lcd.setCursor(0,1);
lcd.print("It's my system");
delay(2000);
lcd.clear();
pinMode(PIRpin,INPUT);//紅外傳感器輸入模式
pinMode(turang,INPUT);//土壤濕度輸入模式
pinMode(fen,OUTPUT); //設定LED引腳為輸出狀態
pinMode(6,OUTPUT);//設定蜂鳴器報警為輸出
pinMode(shuiben,OUTPUT);//定義水泵為輸出模式
pinMode(ledPin,OUTPUT);//定義水泵為輸出模式
for(int i=10;i<14;i++) //步進電機
{
pinMode(i,OUTPUT); //設定步進電機輸出引腳
}
}
void loop(){
DHT11.read(DHT11PIN);//讀取空氣中的溫濕度
int n =DHT11.temperature;
int dht11temp = DHT11.temperature;
int l = DHT11.humidity;
int dht11hum = DHT11.humidity;
DHT11.read(DHT11PIN1);
int c =DHT11.temperature;//負責打印
int dht11temp1 = DHT11.temperature;
int y= DHT11.humidity;
int dht11hum1 = DHT11.humidity;
lcd.setCursor(0,0);
lcd.print("tem:");
lcd.print(dht11temp);
lcd.print("tem1:");
lcd.print(dht11temp1);
lcd.setCursor(0,1);
lcd.print("hum:");
lcd.print(dht11hum);
lcd.print("hum1:") ;
lcd.print(dht11hum1);
Serial.println("自動控制:B 手機控制:A");
Serial.print("溫度上限值:");
Serial.print(h);
Serial.println("度");
Serial.print("溫度一示數讀數:");
Serial.print(n);
Serial.println("度");
Serial.print("濕度一示數讀數:");
Serial.print(l);
Serial.println("%");
Serial.print("溫度二示數讀數:");
Serial.print(c);
Serial.println("度");
Serial.print("濕度二示數讀數:");
Serial.print(y);
Serial.println("%");
Serial.print("土壤濕度一參數:");
int m=analogRead(turang);//讀取讀數
if(m>500){
Serial.println("干旱,請澆水");
}
if(m<500){
Serial.println("濕潤");
}
int r=analogRead(A3);//讀取雨滴傳感器的讀數
Serial.print("是否下雨啦:");
if(r<500){
Serial.println("是");
}
if(r>1000){
Serial.println("否");
}
Serial.print("光照:");
if(val1>500){
Serial.println("沒有光照");
}
if(val1<200){
Serial.println("有光照");
}
int f=0;//定義串口接收數據初始值
while(Serial.available())//串口接收到數據
{
ss[f++]=Serial.read();
delay(2);
}
if(f>=0){
if(ss[0]==65){//當接收到的數據為A時,為自動控制
o=0;
}
if(ss[0]==66){//當接收到的數據為B時,為按鍵控制
o=1;
}
if(ss[0]==67){//當接收到的數據為B時,為按鍵控制
p=1-p;
if(p==1){
h=h+1;
delay(100);
return;
p=0;
}
}
if(ss[0]==68){//當接收到的數據為B時,為按鍵控制
k=1-k;
if(k==1){
h=h-1;
delay(100);
return;
k=0;
}
}
else if(ss[0]==48){
digitalWrite(fen,HIGH); //開啟LED燈
}
else if(ss[0]==49){
digitalWrite(fen,LOW); //開啟LED燈
}
else if(ss[0]==50){
digitalWrite(shuiben,HIGH); //開啟LED燈
}
else if(ss[0]==51){
digitalWrite(shuiben,LOW); //開啟LED燈
}
else if(ss[0]==52){
digitalWrite(ledPin,HIGH); //開啟LED燈
}
else if(ss[0]==53){
digitalWrite(ledPin,LOW); //開啟LED燈
}
else if(ss[0]==54){
}
else if(ss[0]==55){
}
else if(ss[0]==56){
}
else if(ss[0]==57){
}
}
if (o==1){//自動控制
MsTimer2::start(); //開始計時
if(n>h){
digitalWrite(fen,HIGH);
}
else{
digitalWrite(fen,LOW);
}
if(m>500){
digitalWrite(shuiben,HIGH); //開啟LED燈
}
else{
digitalWrite(shuiben,LOW);
}
if( r<500){
int a;
a=128;//
while(a++)
{
for(int i=13;i>9;i--)
{
digitalWrite(i,1);
delay(10);
digitalWrite(i,0);
}
if(a==512)
{
delay(1000);
return;
}
}
}
if( r>1000){
}
}
else if (o==0){//手機控制
MsTimer2::stop();
}
int w=analogRead(PIRpin);//讀取讀數
Serial.print("是否有人闖入:");
if(w>400){
Serial.println("有人闖入!!!");
}
else{
Serial.println("正常");
}
if(w>200){
for(int i=201;i<=800;i++) //用循環的方式將頻率從200HZ 增加到800HZ
{
tone(6,i); //在四號端口輸出頻率
delay(5); //該頻率維持5毫秒
}
delay(4000); //最高頻率下維持4秒鍾
for(int i=800;i>=200;i--)
{
tone(6,i);
delay(10);
}
if(int i=200){
noTone(6);
delay(1000);
}
else{
}
}
delay(2000);
}
void falsh() {
val1 = analogRead(photocellPin); // 讀取光敏電阻的值
if(val1>=112){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}
目 錄
摘要 ……………………………………………………………………………………Ⅰ
第一章 緒論……………………………………………………………………………()
1.1 引言………………………………………………………………………………()
1.2 研究背景…………………………………………………………………………()
第二章智能農業控管系統總體設計方案……………………………………………()
2.1智能農業控管系統概述…………………………………………………………()
2.1.1功能要求………………………………………………………………………()
2.2智能農業控管系統硬件設計方案…………………………………………………()
2.2.1微處理器…………………………………………………………………………()
2.2.2傳感器……………………………………………………………………………()
2.2.3微處理器…………………………………………………………………………()
2.2.4數據顯示…………………………………………………………………………()
2.3智能農業控管系統的軟件設計方案………………………………………………()
第三章 智能農業大棚控管系統的硬件設計和實現………………………………()
3.1微處理器的選擇……………………………………………………………………()
3.2 Arduino簡介………………………………………………………………………()
3.3 Arduino UNO開發原理圖…………………………………………………………()
3.4Arduino UNO主要功能介紹………………………………………………………()
第四章 智能農業大棚控管系統的軟件設計………………………………………()
4.1程序設計框架………………………………………………………………………()
4.1.1主程序流程圖……………………………………………………………………()
4.2各模塊程序設計……………………………………………………………………()
4.2.1數據采集模塊設計………………………………………………………………()
(1)DHT11模塊………………………………………………………………………()
(2)土壤濕度模塊……………………………………………………………………()
(3)光敏傳感器………………………………………………………………………()
(4)熱釋電紅外感應…………………………………………………………………()
(5)LCD1602顯示模塊程序設計……………………………………………………()
(6)手機顯示及控制模塊設計……………………………………………………()
4.3執行模塊及報警裝置設計………………………………………………………()
4.3.1執行模塊流程…………………………………………………………………()
4.3.2報警模塊流程圖…………………………………………………………………()
第五章 系統調試……………………………………………………………………()
5.1硬件調試……………………………………………………………………………()
5.2軟件調試……………………………………………………………………………()
5.3手機遠程操控調試…………………………………………………………………()
第六章 結 論…………………………………………………………………………()
參考文獻 XXXXXXXXXXXX ……………………………………………………………()
附表XXXXXXXXXXXXXXXX …………………………………………………………()
基於WiFi的智能農業大棚管控系統設計
[摘要]本課題就如何方便有效地對溫室環境進行監測和控制,如何提高農業生產信息化水平,通過對溫室環境的監控的研究現狀和發展趨勢,運用Aduino開發板,並通過其采用DHT11溫濕度傳感器模塊、Risym土壤濕度傳感器控制器模塊、HC-SR501人體紅外感應模塊、Risym光敏電阻傳感器模塊、Risym高靈敏雨滴雨水控制器模塊、A\D轉換器、LCD液晶顯示器,由水泵、排風扇、蜂鳴器、LED燈等組成的電器控制系統,在元器件方面采用繼電器模塊,並用類C語言寫出程序代碼組成整個系統,以實現智能控管。
第一章 緒論
1.1引言
物聯網是通過各種信息傳感設備及傳感器系統、射頻識別、紅外感應器、條碼與二維碼、全球定位系統、激光掃描器等和其他基於物物通信模式的短距離無線傳感器網絡,通過這一網絡可以進行信息交互、傳遞、通信,從而實現對物體的智能化識別、定位、跟蹤、監控與管理。在物聯網時代,通過在各種各樣的物體中鑲嵌一種短距離收發器,人類在信息與通信世界里將獲得一個新的溝通維度。從任何時間任何地點的人與人之間的溝通連接擴展到人與物與物與物之間的溝通連接。
1.2研究背景
作為世界上最主要的農業大國之一,使用智慧科學的管理模式就至關重要。傳統的農業依靠大量的人力,手工工具和一些相對簡單的機械設備,農民基本依靠經驗來種植,導致農業所消耗的水資源、化肥、農葯等都在飛速增長,數據相當驚人,但農業產量相對較低,依靠着落后的生產技術、勞動工具來維持簡單的生產以毫無意義。傳統農業的技術落后,使得農業產量增長過於緩慢,而又浪費大量的人力物力,從而導致生產效率沒有提升空間。綜合上述,在現代化的農業中引入物聯網技術,通過傳感器實時采集農田的環境溫濕度數據、土壤溫濕度、光照強度、二氧化碳濃度、PH值、土壤有機含量值等信息,並通過無線的方式傳輸到中央控制系統,使用戶能隨時隨地的掌握農田的實時情況,並通過電腦或者手機遠程控制設備,以實現現代農業的自動化、信息化和智能化。
第二章 智能農業控管系統總體設計方案
2.1智能農業控管系統概述
2.1.1功能要求
(1)系統能夠實現對溫室大棚內的空氣中的溫濕度、土壤中的濕度、光照強度、是否有人擅自闖入達到實時監控。
(2)當溫室大棚內某項環境指標達到預設值時系統要發出相應的反饋控制信息。
(3)溫室大棚內被監測的空氣中的溫濕度數據在LCD屏上顯示出來,用戶還能夠通過手機上顯示的實時的通俗易懂的數據以自動和手機控制兩種方法以實現對溫室內相關設備的控制。
(4)本系統硬件設計有WiFi上傳數據,能夠實現對系統的遠程管控。
技術指標
Arduino規格指標參數
工作電壓:5V
輸入電壓:接上USB時無需外部供電或外部7V~12V DC輸入
輸出電壓:5V DC輸入和3.3V DC輸出和外部電源輸入
微處理器:ATmega328
時鍾頻率:16 MHZ
檢測參數及范圍值見表
所選傳感器 |
檢測參數 |
檢測范圍 |
檢測精度 |
DHT11 |
溫度 |
0~50℃ |
±2℃ |
濕度 |
20%~90%RH |
±5%RH |
|
土壤濕度 |
濕度 |
245~1023 |
±1 |
HC-SR501 |
感應 |
5~7米 |
\ |
TSL2561 |
光照 |
0~70000勒克斯(Lx) |
±50Lx |
雨滴 |
雨滴 |
0~1023 |
\ |
2.2智能農業控管系統硬件設計方案
智能農業控管系統有一個微處理器作為主控,在該微處理器的外圍進行設備擴展如ESP-8266作為系統連接網絡的WiFi、傳感器作為檢測裝備、LCD1602作為液晶顯示屏、蜂鳴器作為報警裝置、下圖表示智能農業控管系統的硬件結構原理圖。
智能農業控管系統硬件原理圖
2.2.1微處理器
微處理器又稱MCU,它是由一片或少數幾片大規模集成電路組成,具有電路執行控制能力與算數邏輯運算功能,在微型計算機中擔當“大腦”一職。本智能農業控管系統的硬件設備就相當於一部微型計算機,其中“大腦”一職Arduino承擔。
2.2.2傳感器
傳感器(英文名稱:transducer/sensor)是一種檢測裝置,能感受到被測量的信息,並能將感受到的信息,按一定規律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。通常由感應元件和轉換元件組成。本智能農業溫室大棚用到的傳感器有DHT11溫濕度傳感器模塊、Risym土壤濕度傳感器控制器模塊、HC-SR501人體紅外感應模塊、Risym光敏電阻傳感器模塊、Risym高靈敏雨滴雨水控制器模塊作為本管控系統的監測模塊,他們分別負責溫室大棚中的空氣中的溫度、土壤的濕度、光照的強度等農作物生長必須的環境因素和大棚內是否有人闖入。
2.2.3數據顯示
數據顯示是為了更好的實現人機交互,方便用戶的用戶操作,使用戶更直觀的了解到溫室大棚內各項環境指標的實時變化。本智能農業控管系統所選的顯示模塊為LCD1602顯示屏和通過手機APP顯示,通過APP,用戶可以在任何地方任何時刻了解大棚內的實時數據並進行手機控制或選擇自動控制。
2.2.4報警裝置
為了防止不法分子進入大棚內進行破壞,本系統增加啦報警裝置,當有人進入大棚內時,蜂鳴器會拉響警報,手機上會顯示有人闖入。
2.3智能農業控管系統的軟件設計方案
智能農業控管系統的硬件電路確定以后,軟件負責整個系統的主要功能實現。由軟件來實現硬件電路的運行,其中包括數據采集、數碼顯示、環境調節、報警等。本系統的軟件設計需要有一個細致全面的過程。首先要清楚的列出智能農業監測系統中各系統部件與軟件設計的相關特點,並進行定義和說明,作為軟件設計的依據。在此基礎上畫出軟件設計的基本框架圖、主程序流程圖。再將程序流程圖中列舉的一系列操作用類C語言編寫出來,然后通過Arduino IDE編譯調試,調試完成后下載到Arduino內,至此軟件設計基本完成。
第三章 智能農業大棚控管系統的硬件設計和實現
3.1微處理器的選擇
本智能農業溫室大棚控管系統選擇的微處理器為Arduino UNO。
3.2 Arduino簡介
Arduino是一款便捷靈活、方便上手的開源電子原型平台,包含硬件(各種型號的Arduino板)和軟件(Arduino IDE)。它適用於愛好者、藝術家、設計師和對於"互動"有興趣的朋友們。
3.3 Arduino UNO開發原理圖
3.4 Arduino UNO主要功能介紹
支持USB接口協議及供電(不需外接電源)
支持ISP下載功能
14路數字輸入輸出口:工作電壓為5V,每一路能輸出和接入最大電流為40mA。
(1)串口信號RX(0號)、TX(1號):與內部ATmega8U2 USB-to-TTL芯片相連,提供TTL電壓水平的串口接收信號。
(2)外部中斷(2號和3號):觸發中斷引腳,可設成上升沿、下降沿或同時觸發。
(3)脈沖寬度調制PWM(3、5、6、9、10、11):提供6路8位PWM輸出。
(4)SPI(10(SS),11(MOS1),12(MOS0),13(SCK));SPI通信接口。
(5)LED(13號):Arduino專門用於測試LED的保留接口,輸出為高時點亮LED,輸出為低時LED熄滅。
6路模擬輸入A0到A5,每一路具有10位分辨率(即輸入有1024個不同值),默認輸入信號范圍為0~5V。
AREF:模擬輸入信號的參考電壓。
Reset:信號為低時復位單片機芯片。
直流電流:40mA (I/O端口)
直流電流:50mA (3.3V端口)
Flash內存:32KB(ATmega328其中0.5KB用於引導程序)
第四章 智能農業大棚控管系統的軟件設計
本智能農業監測系統運行過程中主要包括AD采集,數碼顯示,反饋控制,檢測報警四大模塊,其基本框架如圖所示:
4.1程序設計框架
4.1.1主程序流程圖:
程序主流程圖
主程序是一個LOOP循環,其主要流程是:系統上電首先對主控各個IO口進行配置,設置各個環境變量,並對環境變量閾值進行賦值,以及調用各個模塊的初始化函數,然后在LOOP循環中調用各個模塊的數據采集函數,LCD屏顯示函數,然后對各環境數據進行判斷,看是否觸發中斷進行調控,或者進行報警。
4.2各模塊程序設計
4.2.1數據采集模塊設計
(1)DHT11模塊
程序設計流程圖如圖所示:
(2)土壤濕度模塊
程序設計流程圖如圖所示:
(3)光敏傳感器
程序設計流程圖如圖所示:
(3)雨滴傳感器
程序設計流程圖如圖所示:
(4)熱釋電紅外感應
程序設計流程圖如圖所示:
(5)LCD1602顯示模塊程序設計
程序設計流程圖如圖所示:
(6)手機顯示及控制模塊設計
程序設計流程圖如圖所示:
4.3執行模塊及報警裝置設計
執行模塊和報警模塊主要是對LED燈、水泵、風扇、雨棚、蜂鳴器進行初始化及控制,當本控管系統監測到某項環境指標超標時,做出相關調控。報警模塊是根據是否有人進入來決定是否報警。
4.3.1執行模塊流程
4.3.2報警模塊流程圖
第五章 系統調試
根據本智能農業控管系統的方案設計要求,調試過程主要分為三大部分:硬件調試、軟件調試和手機遠程操控調試。
5.1硬件調試
將各個傳感器模塊電路按照邏輯圖連接起來,根據器件規格和極性看連接是否有誤,然后利用萬用表逐個檢測調試,看是否有短路、斷路現象。檢查過傳感器模塊后再檢測電源模塊有無短路現象,確保電源上電后輸出電壓為標准5V電壓,降壓電路能輸出3.3V電壓。
5.2軟件調試
本智能農業控管系統以Arduino為主控芯片,將各傳感器模塊接入IO口后,利用對Arduino IDE系統軟件部分進行編譯及調試。根據編譯結果,修改相關錯誤提示。
5.3手機遠程操控調試
將各個傳感器模塊電路按照邏輯圖連接起來,並將代碼下載到主控芯片中,按操作順序連接上WiFi,打開手機用戶端,檢測是否實時上傳數據,發送指令,看相關設備是否按照指令進行運作,如果否,則進行代碼修改,直到按相關指令進行操作。
第六章 結 論
本設計從選題、論證、查閱相關資料、確定設計方案到設計的實現前后共歷時近兩個月,並且基本實現了預期效果,能夠正常顯示監測環境中的溫度、濕度、光照強度、以及土壤濕度。初步完成了環境指標超過閾值自動進行調控,並且當有人進入時,蜂鳴器正常報警,並且完成啦遠程監控和管理。本設計還存在一些不足之處,首先檢測精度不能說很高,由於所選傳感器限制測量精度只能算普通水平,但對於普通的溫室大棚環境檢測已經足矣。若需要更精確的檢測數據需要更換更優良的傳感器。
介於本人水平有限,設計中難免還有其他不足之處,在此敬請大家見諒。
參考文獻:
[1] 鄭少仁,王海濤,趙志峰等.Ad hoc網絡技術【M】.北京:人民郵電出版社,2005,P1-P2
[2] 楊碩.[基於無線傳感器網絡的溫室植物生長光照強度監控系統的研究]重慶大學,2009,P13-P15
[3] 陳文智,王總輝. 嵌入式系統原理與設計. 清華大學出版社,2011
[4] 譚浩強,C程序設計【M】,於欣龍譯.北京:人民郵電出版社,2012
[5] 佟長福.AVR單片機GCC程序設計【M】. 北京:北京航空航天大學出版社,2006
附表
智能農業控管系統全部代碼:
#include <dht11.h>//dht11庫
#include <MsTimer2.h> //定時器庫的 頭文件
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //引用I2C庫
LiquidCrystal_I2C lcd(0x3F,16,2); //設置LCD1602設備地址,這里的地址是0x3F,一般是0x20,或者0x27,具體看模塊手冊
int PIRpin=A1;//紅外傳感器引腳號
int val1 = 0; // 存儲光敏電阻值的變量
int w=0;//設定紅外初始值
int o=0;//定義手動自動開光初始值
int h=38;//設定溫度初始值
int p=0;//設定溫度升高暫存變量
int k=0;//設定溫度降低暫存變量
int photocellPin = 2; // 光敏電阻連接模擬端口【A2】
int ledPin = 7; // LED燈連接數字端口【D7】
int ss[512];
dht11 DHT11;
#define DHT11PIN 4//設定4號引腳為溫度輸入
#define DHT11PIN1 5//設定5號引腳為溫度輸入
#define turang A0//設定土壤輸入為A0口
#define turangq A4//設定土壤輸入為A0口
#define fen 8 //定義風扇引腳為8
#define shuiben 9 //定義水泵引腳為9
void setup(){
Serial.begin(9600);
Serial.println("AT+CIPMODE=1"); //WiFi連接服務器
delay(1000);
Serial.println("AT+CWJAP=\"TP-LINK_4226\",\"19960710\"");
delay(5000);
Serial.println("AT+CIPSTART=\"TCP\",\"115.29.109.104\",6555");
delay(5000);
Serial.println("AT+CIPSEND");
delay(3000);
MsTimer2::set(100, falsh); // 中斷設置函數,每100ms 進入一次中斷
lcd.init(); // 初始化LCD
lcd.backlight(); //設置LCD背景等亮
lcd.setCursor(0,0); //設置顯示指針
lcd.print("Welcome to "); //輸出字符到LCD1602上
lcd.setCursor(0,1);
lcd.print("It's my system");
delay(2000);
lcd.clear();
pinMode(PIRpin,INPUT);//紅外傳感器輸入模式
pinMode(turang,INPUT);//土壤濕度輸入模式
pinMode(fen,OUTPUT); //設定LED引腳為輸出狀態
pinMode(6,OUTPUT);//設定蜂鳴器報警為輸出
pinMode(shuiben,OUTPUT);//定義水泵為輸出模式
pinMode(ledPin,OUTPUT);//定義水泵為輸出模式
for(int i=10;i<14;i++) //步進電機
{
pinMode(i,OUTPUT); //設定步進電機輸出引腳
}
}
void loop(){
DHT11.read(DHT11PIN);//讀取空氣中的溫濕度
int n =DHT11.temperature;
int dht11temp = DHT11.temperature;
int l = DHT11.humidity;
int dht11hum = DHT11.humidity;
DHT11.read(DHT11PIN1);
int c =DHT11.temperature;//負責打印
int dht11temp1 = DHT11.temperature;
int y= DHT11.humidity;
int dht11hum1 = DHT11.humidity;
lcd.setCursor(0,0);
lcd.print("tem:");
lcd.print(dht11temp);
lcd.print("tem1:");
lcd.print(dht11temp1);
lcd.setCursor(0,1);
lcd.print("hum:");
lcd.print(dht11hum);
lcd.print("hum1:") ;
lcd.print(dht11hum1);
Serial.println("自動控制:B 手機控制:A");
Serial.print("溫度上限值:");
Serial.print(h);
Serial.println("度");
Serial.print("溫度一示數讀數:");
Serial.print(n);
Serial.println("度");
Serial.print("濕度一示數讀數:");
Serial.print(l);
Serial.println("%");
Serial.print("溫度二示數讀數:");
Serial.print(c);
Serial.println("度");
Serial.print("濕度二示數讀數:");
Serial.print(y);
Serial.println("%");
Serial.print("土壤濕度一參數:");
int m=analogRead(turang);//讀取讀數
if(m>500){
Serial.println("干旱,請澆水");
}
if(m<500){
Serial.println("濕潤");
}
int r=analogRead(A3);//讀取雨滴傳感器的讀數
Serial.print("是否下雨啦:");
if(r<500){
Serial.println("是");
}
if(r>1000){
Serial.println("否");
}
Serial.print("光照:");
if(val1>500){
Serial.println("沒有光照");
}
if(val1<200){
Serial.println("有光照");
}
int f=0;//定義串口接收數據初始值
while(Serial.available())//串口接收到數據
{
ss[f++]=Serial.read();
delay(2);
}
if(f>=0){
if(ss[0]==65){//當接收到的數據為A時,為自動控制
o=0;
}
if(ss[0]==66){//當接收到的數據為B時,為按鍵控制
o=1;
}
if(ss[0]==67){//當接收到的數據為B時,為按鍵控制
p=1-p;
if(p==1){
h=h+1;
delay(100);
return;
p=0;
}
}
if(ss[0]==68){//當接收到的數據為B時,為按鍵控制
k=1-k;
if(k==1){
h=h-1;
delay(100);
return;
k=0;
}
}
else if(ss[0]==48){
digitalWrite(fen,HIGH); //開啟LED燈
}
else if(ss[0]==49){
digitalWrite(fen,LOW); //開啟LED燈
}
else if(ss[0]==50){
digitalWrite(shuiben,HIGH); //開啟LED燈
}
else if(ss[0]==51){
digitalWrite(shuiben,LOW); //開啟LED燈
}
else if(ss[0]==52){
digitalWrite(ledPin,HIGH); //開啟LED燈
}
else if(ss[0]==53){
digitalWrite(ledPin,LOW); //開啟LED燈
}
else if(ss[0]==54){
}
else if(ss[0]==55){
}
else if(ss[0]==56){
}
else if(ss[0]==57){
}
}
if (o==1){//自動控制
MsTimer2::start(); //開始計時
if(n>h){
digitalWrite(fen,HIGH);
}
else{
digitalWrite(fen,LOW);
}
if(m>500){
digitalWrite(shuiben,HIGH); //開啟LED燈
}
else{
digitalWrite(shuiben,LOW);
}
if( r<500){
int a;
a=128;//
while(a++)
{
for(int i=13;i>9;i--)
{
digitalWrite(i,1);
delay(10);
digitalWrite(i,0);
}
if(a==512)
{
delay(1000);
return;
}
}
}
if( r>1000){
}
}
else if (o==0){//手機控制
MsTimer2::stop();
}
int w=analogRead(PIRpin);//讀取讀數
Serial.print("是否有人闖入:");
if(w>400){
Serial.println("有人闖入!!!");
}
else{
Serial.println("正常");
}
if(w>200){
for(int i=201;i<=800;i++) //用循環的方式將頻率從200HZ 增加到800HZ
{
tone(6,i); //在四號端口輸出頻率
delay(5); //該頻率維持5毫秒
}
delay(4000); //最高頻率下維持4秒鍾
for(int i=800;i>=200;i--)
{
tone(6,i);
delay(10);
}
if(int i=200){
noTone(6);
delay(1000);
}
else{
}
}
delay(2000);
}
void falsh() {
val1 = analogRead(photocellPin); // 讀取光敏電阻的值
if(val1>=112){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}