農業與溫室應用 使用 ESP32+ BH1750FVI 數位光照感測器 計算光積值
步驟與項目
農業與溫室應用 使用 ESP32+ BH1750FVI 數位光照感測器 計算光積值
光積值是指光照強度在一段時間内的累加值,它是一個用於農業灌溉管理的重要參數。在農業生產中,光積值的計算是為了確定植物需要的灌溉水量,從而實現水資源的有效利用。光積值的設定值通常基於當地的日照強度、作物的生長階段以及灌溉條件等因素進行調整。例如,在中午日照強度為10萬lux的情況下,如果每分鐘進行一次光照強度的採樣,並設定灌溉間隔為30分鐘,那麼光積值的設定值就應該設為300萬lux。
當光積值超過設定值時,就會觸發灌溉系統進行灌溉。這樣設定的好處是,可以讓介質籃耕植床下的灌溉滴漏量降到最低,同時保持灌溉給水量與作物的蒸發散量達到平衡,以實現更有效的灌溉管理。灌溉的時間一般在1到2分鐘之間,這是因為使用2英吋口徑離心式泵的灌溉系統在這個時間範圍內可以提供足夠的灌溉水量,同時避免過度灌溉造成的浪費。
總之,通過光積值的計算和設定,可以實現農業灌溉的自動化和精準化管理,從而提高農產品的產量和品質,同時減少水資源的浪費。因此,在現代農業生產中,對於光積值計算和設定的準確性和可靠性要求越來越高。
使用 BH1750 光照度傳感器搭配 ESP8266/ESP32 等 Wi-Fi 模組,並使用 MQTT 通訊協定將光積值傳送至 MQTT 伺服器上,可以實現遠端監測光照強度、計算光積值等功能。具體而言,程式會在每分鐘讀取一次 BH1750 的數值,進行光積值的計算與判斷,當光積值超過設定值時,通過 MQTT 將灌溉控制命令傳送至伺服器,觸發灌溉系統開啟一小段時間,從而實現智慧農業的自動化灌溉功能。
以下為簡單的範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#include <WiFi.h> #include <PubSubClient.h> #include <Wire.h> #include <BH1750.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "your_MQTT_SERVER"; const int mqtt_port = 1883; const char* mqtt_username = "your_MQTT_USERNAME"; const char* mqtt_password = "your_MQTT_PASSWORD"; const char* mqtt_topic_light = "your_MQTT_TOPIC_LIGHT"; const char* mqtt_topic_integral = "your_MQTT_TOPIC_INTEGRAL"; WiFiClient espClient; PubSubClient client(espClient); BH1750 lightMeter(0x23); unsigned long last_light_sent = 0; unsigned long last_integral_sent = 0; unsigned long last_reading_time = 0; unsigned long integral_value = 0; void setup() { Serial.begin(9600); while (!Serial); Serial.println("Starting..."); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); Wire.begin(); lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); unsigned long now = millis(); if (now - last_reading_time >= 60000) { float light_value = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(light_value); Serial.println(" lx"); client.publish(mqtt_topic_light, String(light_value).c_str()); last_reading_time = now; } if (now - last_integral_sent >= 1800000) { Serial.print("Integral value: "); Serial.print(integral_value); Serial.println(" lx*min"); client.publish(mqtt_topic_integral, String(integral_value).c_str()); integral_value = 0; last_integral_sent = now; } if (now - last_light_sent >= 30000) { float light_value = lightMeter.readLightLevel(); unsigned long elapsed_time = (now - last_light_sent) / 1000; unsigned long light_integral = (unsigned long) (light_value * elapsed_time / 60); integral_value += light_integral; last_light_sent = now; } } void reconnect() { while (!client.connected()) { Serial.println("Connecting to MQTT..."); if (client.connect("arduino", mqtt_username, mqtt_password)) { Serial.println("MQTT connected"); } else { Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } |
將光積值透過 MQTT 傳送至遠端伺服器上有以下幾個好處:
- 遠端監測:使用者可以透過連網裝置(如手機、電腦等)查看光積值的即時數據、歷史趨勢,並進行遠端監測與控制。
- 資料儲存:光積值數據可以被儲存在遠端伺服器上,不會因為裝置故障或是記憶體限制而遺失。這樣可以提高資料的可靠性,並且能夠進行更進一步的數據分析。
- 數據分享:透過 MQTT 傳送光積值可以使多個使用者共享數據,比如農場管理員可以透過 MQTT 分享光積值數據給農民,幫助農民了解植物的生長狀況。
- 自動化控制:透過 MQTT 傳送光積值可以觸發自動化控制系統,如灌溉系統、降溫系統等。當光積值達到一定程度時,系統會自動啟動相應的控制命令,實現自動化控制功能,節省人力成本。
深度知識導覽
-
-
- ESPHOME 零組件周邊, ESPRESSIF (ESP) 開發板
AC供電 ESP32 單路繼電器開發板 二次開發專用
原始價格:NT$465。NT$410目前價格:NT$410。 (未稅)產品速覽
發佈留言
很抱歉,必須登入網站才能發佈留言。