步驟1:組件
NodeMCU
AH180霍爾效應(yīng)傳感器
磁鐵
傾卸桶(見下文)
一些連接線
面包板(我們已使用Adafruit Perma-Proto面包板)
外殼和電纜密封套
4 x AA電池座和電池
步驟2:建造一個傾倒桶
傾倒桶是用于測量降雨量的相當普遍的工具。這是一個簡單的設(shè)備,由一個將水引導(dǎo)到水桶中的漏斗組成。桶裝滿后,它會提示您啟動開關(guān),傾倒水,并開始在另一側(cè)裝滿桶。 -有關(guān)更多信息,請參見Wikipedia
對于您自己的雨量計,最簡單的選擇是購買一個。像這樣或類似的東西將適用于我們的設(shè)置。如果您要購買一個,則無需擔心霍爾效應(yīng)傳感器或磁鐵。如果您正在尋找一些更農(nóng)業(yè)的產(chǎn)品,則可以從本地硬件商店中挑選零件,然后一起購買。從這些人那里檢查設(shè)計
在我們的案例中,我們已經(jīng)3D打印了一個。我們基于BulldogLowell撰寫的這篇文章。我們已對其進行了少許修改以適合我們的傳感器和磁體。
每次在存儲桶中都可以在我們的Github存儲庫中找到STL文件
校準
提示,開關(guān)記錄一個計數(shù),我們可以將其轉(zhuǎn)換為降雨的高度。降雨的高度可以通過收集的雨水量與收集面積之比來確定:
降雨高度(cm)=收集水量(mL)/收集面積(cm2)
對于我們的收集器,我們的收集區(qū)域為5.5厘米x 3.5厘米(19.25平方厘米),每個鏟斗尖端的收集量為2.5毫升。
安裝
安裝單元時的幾點注意事項
確保每個提示的降雨高度為0.1298cm或1.298mm。裝置完全處于水平狀態(tài)-否則,鏟斗不會為每個吸頭收集相同的體積-并且結(jié)果將不準確
將其安裝在離地面至少一米的地方。這是為了減少任何東西意外倒入的可能性(例如灰塵)。
確保沒有超出規(guī)格的范圍。看起來似乎很明顯,但重要的是在它的幾英尺內(nèi)沒有任何樹枝或樹葉,以確保沒有任何東西可以干擾雨水。 (記住,樹枝會隨著時間而增長。)
步驟3:接線
設(shè)備的基本接線圖。您可以在此說明的最后看到最終版本,以及如何將其連接到小費桶。
不一定需要LED和按鈕,但對于發(fā)布手冊很有用
步驟4:源代碼
對于雨量計,我們將每隔30分鐘發(fā)布一次數(shù)據(jù),以備就緒。 io服務(wù)。我們將使用readiness.io庫來管理wifi和服務(wù)連接。我們還在一個單獨的.h文件中拆分了所有配置變量。
在RainGauge.ino代碼中,我們有三個執(zhí)行關(guān)鍵功能的中斷
Rain中斷-檢測鏟斗何時傾斜,并將其添加到收集的雨高
計時器中斷-定期(我們已經(jīng)使用了30分鐘)獲取雨高并將其發(fā)送到readiness.io服務(wù)器,然后重置高度。
按鈕中斷-手動執(zhí)行與計時器相同的功能(我們主要用于測試是可選的)
您可以下載完整的源代碼此處
《圖id =“ rich-embed-files” class =“ ible-files”》
config.h
const 字符串CHANNEL_ID = ” XXXXXXXXXXXXXX “ ; // Readiness.io頻道ID
const 字符串SENSOR_ID = ” XXXXXXXXXXXXXXX “ ; //您的AgriWebb或組成的傳感器ID
const 字符串主題= ” rain-gauge “ ; //傳感器的類型或您發(fā)送的數(shù)據(jù)的名稱
const 字符串VERSION = ” 1 “ ;
const 字符串格式= “ ” ;
const char * WIFI_SSID = ” XXXXXXX “ ; //您的WiFi SSID/名稱
const char * WIFI_PASS = ” XXXXXXX “ 跨度》 ; //您的WiFi密碼
const uint16_t UPDATE_RATE = 120 ; //發(fā)送數(shù)據(jù)之間的等待時間(以秒為單位)
const uint8_t TIMEZONE_OFFSET = 10 ; //傳感器所在的時區(qū)(例如GMT為10)
const double BUCKETTIP_HEIGHT = 0.1298 ; //不要忘記為您自己的小費桶進行更改。
//單個鏟斗尖端收集的雨水高度(以毫米為單位)
//由單個桶尖中的集水量(mL
//除以收集區(qū)域
查看GitHub托管于?的rawconfig.h
rainGauge.ino
# include 《 readiness_io。 ?》
# include 《 Ticker.h 》
# include ” config.h “
const int LED_PIN = 0 ; //連接LED的引腳(D3)
const int INTERRUPT_PIN = 14 ; //該引腳連接測試按鈕(D5)
揮發(fā) double RAIN_HEIGHT = 0 ; //變量,用于存儲rain_height
易失性字節(jié)中斷= 0 ;
readiness_io 客戶端(CHANNEL_ID,TOPIC,SENSOR_ID,VERSION,F(xiàn)ORMAT);
股票行情計時器;
/* 中斷c安裝雨量計 */
無效 rainInterrupt (){
RAIN_HEIGHT + = BUCKETTIP_HEIGHT; //取當前的雨高度并添加水桶的數(shù)量
序列號。打印( ” 當前雨水收集高度(mm): “ );
串行。 println (RAIN_HEIGHT);
}
void handleInterrupt (){
中斷++;
}
/* 中斷計時器,用于將數(shù)據(jù)發(fā)送到Readiness.io服務(wù)器 */
void writeToServer (){
interrupt ++;
}
void 設(shè)置(){
pinMode (LED_PIN,輸出);
pinMode (BUILTIN_LED,輸出);
digitalWrite (BUILTIN_LED,高); //內(nèi)部LED處于低電平時會亮起-因此我們必須將其關(guān)閉/
串行。開始( 115200 );
串行。 setTimeout ( 2000 );
同時 (!Serial){} //等待序列初始化。
序列號。 println ( ” 設(shè)備已啟動“ );
序列號。打印( “ 連接到“ );
串行。 println (WIFI_SSID);
客戶端。 wifiConnection (WIFI_SSID,WIFI_PASS);
pinMode (INTERRUPT_PIN,INPUT_PULLUP); //設(shè)置簧片/霍爾效應(yīng)的中斷引腳
attachInterrupt ( digitalPinToInterrupt (INTERRUPT_PIN),rainInterrupt,RISING); //附加中斷。
計時器。附加(UPDATE_RATE,writeToServer);
客戶端。 testConnection ();
}
void loop (){
如果(中斷》 0 ){
客戶端。 publishData (RAIN_HEIGHT);
RAIN_HEIGHT = 0 ;
interrupt = 0 ;
digitalWrite (LED_PIN,高);
delay ( 250 );
digitalWrite (LED_PIN,LOW);
}
}
查看GitHub托管的?托管的rawrainGauge.ino
步驟5:成品
這是最終的雨量計。 nodeMCU放在外殼中,傾卸桶的電線通過電纜密封套進入,以確保其防水性并可以安全地安裝在外部。我們的電線是應(yīng)該的,但您可以根據(jù)需要制作它們。
您還可以看到自卸斗的內(nèi)部。傳感器固定在墻壁上,而磁鐵則固定在翻斗的擺臂上,因此每次裝滿并翻倒時都會記錄讀數(shù)。組裝翻斗的最困難的部分是正確放置傳感器和磁鐵。只需足夠接近即可讀取讀數(shù),而無需工具即可始終保持打開狀態(tài)。
-
NODEMCU
+關(guān)注
關(guān)注
13文章
289瀏覽量
21389
發(fā)布評論請先 登錄
相關(guān)推薦
評論