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