分享給大家
1.jpg (1.43 MB, 下載次數(shù): 89)
下載附件
2019-8-12 20:23 上傳
智慧農(nóng)業(yè)就是將物聯(lián)網(wǎng)技術(shù)運用到傳統(tǒng)農(nóng)業(yè)中去,運用傳感器和軟件通過移動平臺或者電腦平臺對農(nóng)業(yè)生產(chǎn)進(jìn)行控制,使傳統(tǒng)農(nóng)業(yè)更具有“智慧”。除了精準(zhǔn)感知、控制與決策管理外,從廣泛意義上講,智慧農(nóng)業(yè)還包括農(nóng)業(yè)電子商務(wù)、食品溯源防偽、農(nóng)業(yè)休閑旅游、農(nóng)業(yè)信息服務(wù)等方面的內(nèi)容。 智慧農(nóng)業(yè)是農(nóng)業(yè)生產(chǎn)的高級階段,是集新興的互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)、云計算和物聯(lián)網(wǎng)技術(shù)為一體,依托部署在農(nóng)業(yè)生產(chǎn)現(xiàn)場的各種傳感節(jié)點(環(huán)境溫濕度、土壤水分、二氧化碳、圖像等)和無線通信網(wǎng)絡(luò)實現(xiàn)農(nóng)業(yè)生產(chǎn)環(huán)境的智能感知、智能預(yù)警、智能決策、智能分析、專家在線指導(dǎo),為農(nóng)業(yè)生產(chǎn)提供精準(zhǔn)化種植、可視化管理、智能化決策。 本次實驗以大棚監(jiān)測控制系統(tǒng)為目標(biāo),使用TPYBoardv102開發(fā)板、各種傳感器、電機(jī)等,實現(xiàn)一個智能大棚監(jiān)測控制系統(tǒng)的基礎(chǔ)模型。 系統(tǒng)主要的技術(shù)特點: - 監(jiān)控功能系統(tǒng):根據(jù)各類傳感器來獲取植物生長的環(huán)境信息,如監(jiān)測土壤水分、空氣溫度、空氣濕度、光照強度等參數(shù)(大家可根據(jù)自己的需求,增加其他參數(shù),如二氧化塘、土壤溫度等)。
- 自動控制系統(tǒng):TPYBoardv102開發(fā)板作為主控模塊,負(fù)責(zé)各個環(huán)境信息的收集與匯總,并根據(jù)以上各類信息的反饋對農(nóng)業(yè)大棚內(nèi)進(jìn)行自動灌溉、自動降溫、自動卷遮光罩等自動控制。
所需器件
實物圖:(部分主要器件)
程序設(shè)計(1)獲取溫濕度數(shù)據(jù),當(dāng)溫度高于閾值時,觸發(fā)繼電器,打開排風(fēng)扇,反之關(guān)閉; (2)獲取土壤濕度數(shù)據(jù),當(dāng)濕度低于土壤濕度檢測模塊的閾值時,土壤濕度檢測模塊的OUT引腳會輸出高電平,這時觸發(fā)繼電器,啟動水泵進(jìn)行灌溉; (3)獲取光照強度數(shù)據(jù),當(dāng)光照強度高于閾值時,觸發(fā)步進(jìn)電機(jī),卷起遮光罩,反之蓋上。 實物連接 先連接電源部分。電源部分主要涉及到降壓模塊和按鍵開關(guān)。先用萬用表,找出按鍵開關(guān)中哪兩個引腳是按下導(dǎo)通,彈起不導(dǎo)通的。這里,我們假設(shè)為引腳A和引腳B。
各類器件沒有固定,看起來有點亂。接下來,用熱熔膠把器件整齊的固定在洞洞板上。
本次我用步進(jìn)電機(jī)來模塊遮光罩的卷起和放開。為了能明顯的看到步進(jìn)電機(jī)的轉(zhuǎn)動效果,我在步進(jìn)電機(jī)上粘了一個塑料小風(fēng)扇。 還有一處地方,就是降壓模塊的OUT輸出電源要接到開發(fā)板上,用于給其供電。整體效果如下圖: 程序調(diào)試 接線完畢后,就要將最重要的程序放到開發(fā)板上。首先,通過USB數(shù)據(jù)線將開發(fā)板接入電腦,電腦上會出現(xiàn)一個類似U盤的可移動設(shè)備,名稱為【TPYBFLASH】,把程序拷貝到里面即可。 注意:操作開發(fā)板磁盤時,板載的紅色LED會亮,說明開發(fā)板正在保存操作,需等待紅燈熄滅再進(jìn)行其他操作。
演示效果 程序調(diào)試完,拔掉USB數(shù)據(jù)線。放入18650電池,按下按鍵開關(guān)即可。不同的環(huán)境下,土壤濕度和光照模塊需要調(diào)節(jié)靈敏度(轉(zhuǎn)換模塊上的藍(lán)色按鈕)。 
源程序如下:
- Dht11.py:
- import pyb
- from pyb import UART
- from pyb import Pin,delay,udelay
- import time
- class DHT11:
- def __init__(self,pin_name):
- time.sleep(1)
- self.N1 = Pin(pin_name, Pin.OUT_PP)
- self.PinName=pin_name
- pyb.delay(10)
- def read_data(self):
- self.__init__(self.PinName)
- data=[]
- j=0
- N1=self.N1
- N1.low()
- delay(20)
- N1.high()
- N1 = Pin(self.PinName, Pin.IN)
- udelay(30)
- if N1.value() != 0:
- return [0,0]
- while N1.value()==0:
- continue
- while N1.value()==1:
- continue
- while j<40:
- k=0
- while N1.value()==0:
- continue
- while N1.value()==1:
- k+=1
- if k>100:break
- if k<3:
- data.append(0)
- else:
- data.append(1)
- j=j+1
- print('Sensor is working')
- j=0
- humidity_bit=data[0:8]
- humidity_point_bit=data[8:16]
- temperature_bit=data[16:24]
- temperature_point_bit=data[24:32]
- check_bit=data[32:40]
- humidity=0
- humidity_point=0
- temperature=0
- temperature_point=0
- check=0
- for i in range(8):
- humidity+=humidity_bit[i]*2**(7-i)
- humidity_point+=humidity_point_bit[i]*2**(7-i)
- temperature+=temperature_bit[i]*2**(7-i)
- temperature_point+=temperature_point_bit[i]*2**(7-i)
- check+=check_bit[i]*2**(7-i)
- tmp=humidity+humidity_point+temperature+temperature_point
- if check==tmp:
- print('temperature is',temperature,'-wet is',humidity,'%')
- else:
- print('Error:',humidity,humidity_point,temperature,temperature_point,check)
- return [str(temperature),str(humidity)]
- # main.py
- import pyb
- from pyb import Pin
- Pin_All=[Pin(p,Pin.OUT_PP) for p in ['X1','X2','X3','X4']]
- STEPER_ROUND=512 #轉(zhuǎn)動一圈(360度)的周期
- ANGLE_PER_ROUND=STEPER_ROUND/360 #轉(zhuǎn)動1度的周期
- class SteperMotor():
- def __init__(self,pin = None,speed=2):
- if pin != None:
- self.Pins = pin
- else:
- self.Pins = Pin_All
- self.Speed = speed
- #私有方法
- def __SteperWriteData(self,data):
- count=0
- for i in data:
- self.Pins[count].value(i)
- count+=1
- def __SteperFrontTurn(self):
- speed = self.Speed
-
- self.__SteperWriteData([1,1,0,0])
- pyb.delay(speed)
- self.__SteperWriteData([0,1,1,0])
- pyb.delay(speed)
- self.__SteperWriteData([0,0,1,1])
- pyb.delay(speed)
- self.__SteperWriteData([1,0,0,1])
- pyb.delay(speed)
-
- def __SteperBackTurn(self):
- speed = self.Speed
-
- self.__SteperWriteData([1,1,0,0])
- pyb.delay(speed)
-
- self.__SteperWriteData([1,0,0,1])
- pyb.delay(speed)
- self.__SteperWriteData([0,0,1,1])
- pyb.delay(speed)
- self.__SteperWriteData([0,1,1,0])
- pyb.delay(speed)
- def __SteperStop(self):
- self.__SteperWriteData([0,0,0,0])
-
- def steperRun(self,angle):
- val=ANGLE_PER_ROUND*abs(angle)
- if(angle>0):
- for i in range(0,val):
- self.__SteperFrontTurn()
- else:
- for i in range(0,val):
- self.__SteperBackTurn()
- angle = 0
- self.__SteperStop()
- 溫濕度main:
- from pyb import Pin
- from pyb import ADC
- from stepermotor import SteperMotor
- from dht11 import DHT11
- #0:亮 1:暗
- light = Pin('X22',Pin.IN)
- #0:濕 1:干
- hum = Pin('Y11',Pin.IN)
- dht = DHT11('Y12')
- #繼電器低電平觸發(fā)
- water = Pin('X12',Pin.OUT_PP)
- fan = Pin('X11',Pin.OUT_PP)
- water.value(1)
- fan.value(1)
- #步進(jìn)電機(jī)
- Pin_All=[Pin(p,Pin.OUT_PP) for p in ['X21','X20','X19','X18']]
- #轉(zhuǎn)速(ms) 數(shù)值越大轉(zhuǎn)速越慢 最小值2ms
- sm = SteperMotor(pin = Pin_All,speed=2)
- hood = False #記錄遮光罩的狀態(tài),默認(rèn)是關(guān)閉
- def readTaHData():
- DATA = dht.read_data()#讀取溫濕度的值
- print(DATA[0],'℃')
- print(DATA[1],'%')
- #溫度大于25度,打開風(fēng)扇,進(jìn)行通風(fēng)
- if int(DATA[0]) > 21:
- fan.value(0)
- else:
- fan.value(1)
- if __name__ == '__main__':
- while True:
- readTaHData()
- h_d = hum.value()
- print('hum:',h_d)
- if h_d:
- #土壤較干,打開抽水泵進(jìn)行澆水
- water.value(0)
- else:
- #土壤較濕,關(guān)閉抽水泵停止?jié)菜?br />
- water.value(1)
- l_d = light.value()
- print('light:',l_d)
- if l_d:
- #光線較暗,啟動步進(jìn)電機(jī),關(guān)閉大棚的遮光罩
- if hood:
- sm.steperRun(-360)
- sm.steperRun(-360)
- hood = False
- else:
- #光線較亮,啟動步進(jìn)電機(jī),打開大棚的遮光罩
- if not hood:
- sm.steperRun(360)
- sm.steperRun(360)
- hood = True
復(fù)制代碼 全部資料51hei下載地址:
大棚.zip
(8.66 MB, 下載次數(shù): 74)
2019-8-12 20:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|