這篇文章來源于DevicePlus.com英語網站的翻譯稿。
今天,我們將利用ROHM傳感器評估套件打造一套智能花園系統。在此項目中,我們整合接近/環境光傳感器(ALS)和其他傳感器,實現植物培育設備的自動化操作!
有關ROHM傳感器的更多信息,請參閱我們的文章ROHM傳感器評估套件概覽!
此外,我們將使用Arduino Create對系統進行編程。
Arduino Create是一個多合一的在線平臺,可以編寫代碼、配置電路板、共享項目。該平臺于2016年8月18日正式發布。
Arduino Create 提供以下服務:
Arduino Web Editor
Arduino Web Editor 是一款在線編輯器,用戶可以編寫代碼并將程序從網頁瀏覽器上傳至任何Arduino開發板上。
將代碼寫入或導入 Arduino
上傳/分享程序
使用Arduino庫
通過云連接服務
Arduino Project Hub
Arduino Project Hub 是一個hackstar.io提供的教程平臺。該Hub擁有大量不同難度和人氣的項目。
Arduino Cloud
憑借Arduino Cloud,用戶可以通過互聯網在云中管理項目。Arduino Cloud執行亞馬遜的云計算服務,能夠為用戶提供安全的開發環境。
將Arduino直接連接到互聯網
通過MQTT在Arduino之間進行互通
采用AWS IoT和AWS Lambda
今天的電子食譜
預計完成時間:120分鐘
所需部件:
Arduino 主體 (Arduino UNO R3)
Rohm 傳感器評估套件https://www.rohm.com/web/global/sensor-shield-support
電阻 (220 歐姆) × 2
紅色 / 藍色 LED
土壤傳感器https://www.dfrobot.com/wiki/index.php/Moisture_Sensor_(SKU:SEN0114)
伺服電機 (SG90)
※ 您可以從以下站點購買羅姆傳感器評估套件!
Chip One Stop
Mouser Electronics
打造智能花園系統的第一步就是要確定需要集成的內容。我們如何使用這些傳感器打造一套有利于植物培育的設備呢?首先,我們看一下各種傳感器的功能和用法以及它們在該項目中的潛在用途。
傳感器評估套件提供8種不同的傳感器。我們應將哪些傳感器集成到植物培育系統中呢?我們來復習一下每個傳感器的功能,看看系統可以采用哪些傳感器。
圖1 傳感器評估套件包含的傳感器
加速度計: 檢測傾斜、運動、振動等。→我們可能不會用此器件來測量加速度。
氣壓傳感器:檢測大氣壓力→壓力與天氣之間的關系似乎與室內植物沒有關系
地磁傳感器:檢測方向→可以根據太陽的方向改變植物的朝向嗎(?)
接近傳感器:檢測正在接近的物體;檢測亮度→如果我們的系統只是在白天(或明亮時)而不是在黑暗中工作,那么這個器件很有用。
顏色傳感器:檢測顏色→葉子是否枯萎,等等……我們以后再研究這個功能吧……
霍爾傳感器:通過磁鐵檢測物體→我覺得這個項目可能不會使用接近開關或定位功能…
溫度傳感器:檢測溫度→我們可以用溫度數據來控制植物的澆水情況(比如溫度較高時應該多澆水,等等)。
紫外線傳感器:檢測紫外線→日光太強/太弱時可通知用戶相關情況。
根據各個傳感器的功能簡述,為了完成此項目,我們可能需要在系統中整合多個傳感器。那么我們應該集成哪些傳感器呢?
圖2 一般植物生長注意事項
如圖2所示,種植健康的植物必須滿足一定條件。一般來講,植物在通風良好、陽光充足和溫度適中的地方生長最好。當然,它們需要水。
根據這些信息,我們可以縮小傳感器的選擇范圍:
日光條件→利用紫外線傳感器和溫度傳感器檢查溫度是否過高/紫外線強度是否過大,并采取必要的措施以減少日光照射。
澆水原則→利用土壤傳感器,我們可以確定土壤中的水分含量,并根據盆的大小為植物澆水。
關于溫度→如果溫度過高或過低,我們可以檢查植物含量并觸發警報。
通風→我們可以測量室內空氣流速,如果室內風量不夠,我們可以用風扇來產生風。
現在,我們開始構造這個系統吧!
類似的設備……
說到植物培育設備……已經有人制作過大型植物培育系統。比如FarmBot。從外觀上看,FarmBot就像是一臺巨大的激光切割機或3D打印機。正如下面的視頻所示,該機器還可以幫忙播種,似乎我們通過電腦或移動應用程序就能控制播種過程。長時間在室外管理和控制這些設備會比較困難,尤其是在天氣比較惡劣的情況下。不管怎樣,這些非常酷的設備在改善可持續發展農業領域具有巨大的潛力。
FARMBOT GENESIS – https://farmbot.io/
Arduino Create × Rohm 傳感器評估套件!
接下來我們看一下如何用Arduino Create編寫程序。
圖3 Arduino Create
Arduino Create 網站
Arduino Create 入門
我們循序漸進地看一下Arduino Create如何使用。Arduino Create的迷人之處就在于您可以直接在瀏覽器中在線編寫代碼并進行共享(比如在社交媒體上)。通常,如果您要使用Arduino,您得在電腦上下載并安裝Arduino IDE,但是Arduino Create無需這個步驟。
打開瀏覽器,然后轉到Arduino Create 網站。
如果您是首次使用Arduino,那么必須創建一個用戶帳戶。請進入用戶注冊頁面以創建您的帳戶(如果您有Arduino帳戶,那么可以直接用現有帳戶登錄)。
(僅適用于初次使用的用戶)完成注冊后,您會收到一封包含一個URL的電子郵件,點擊該鏈接完成注冊。
(僅適用于初次使用的用戶)安裝“Arduino Web Editor Plugin”(或“ArduinoCreateAgent”),以便瀏覽器可以連接到Arduino主機。
打開Arduino Web Editor。
PC版和網絡版之間的主要區別是什么呢?
只要可以上網,您幾乎能在任何地方查看/編輯您的程序。
網絡版還支持多個庫,因此即使更換電腦,您也不必重新安裝原來使用的庫。
Arduino Create非常有用。唯一的缺點是:要使用Web Editor,您必須連接互聯網,否則是無法使用的。我覺得介紹的差不多了。此時,您可以簡單地在電腦上使用現有的Arduino軟件。
運行Arduino Create主屏幕和傳感器評估套件庫
首先打開Arduino Web Editor.
圖 4. Arduino Create Web Editor
您會看到編輯器在瀏覽器中打開。值得一提的是,與Arduino Software IDE相比,這些菜單更易于查看和定位。有時,在電腦上使用IDE并打開太多帶有很多程序的窗口時,它們會變得雜亂無章;但是這個編輯器的窗口整潔有序,您可以輕松地找到所需文件。
菜單欄位于編輯器的左側。
圖5 Arduino Create Web Editor – 基本功能
我們來查看一些常用功能。我們從“Blink.ino”開始(路徑:Examples →BUILT IN→01.BASICS→Blink)。使用屏幕上方中央的下拉菜單,選擇要連接的Arduino開發板和端口。然后,點擊“Verify”→“Upload”(通常在Arduino軟件中執行此操作)。
添加傳感器評估套件庫
接下來,我們將添加傳感器評估套件庫。要添加庫,您可以點擊左側菜單的“Libraries”,并單擊“ADD ZIP LIBRARY”。然后,選擇要添加的庫的zip文件完成添加。您可以從此處為每個傳感器下載傳感器評估套件庫(zip文件)。
圖6 Arduino Create Web Editor – 添加庫
傳感器評估套件已成功連接。現在,我們進行連線和編程!
整個系統的設計理念如下:
日光條件→利用紫外線傳感器和溫度傳感器檢查溫度是否過高/紫外線強度是否過大,并采取必要的措施以減少日光照射。
→ 用伺服電機遮陽!
澆水原則→利用土壤傳感器,我們可以確定土壤中的水分含量,并根據盆的大小為植物澆水。
→ 使用土壤傳感器和噴壺!
關于溫度→如果溫度過高或過低,我們可以檢測植物的環境溫度并觸發警報。
→ 用LED觸發警報!(也許將來我們可以通過網絡通知程序來實現這個功能!)
通風→我們可以測量室內空氣流速,如果室內風量不夠,我們可以用扇子來產生風。
→ 用伺服電機操作扇子扇風。
圖7 電路框圖(假設傳感器評估套件已連接到Arduino)
至于程序,在循環的前半部分獲取每個傳感器的值后,我們將根據每個傳感器的值啟動伺服電機和LED燈。由于每個傳感器的激活閾值因設備大小而異,因此您可以自己的喜好調整具體數值。
程序–植物培育設備
#include #include #include #include #include #include //*********************************************** //Set threshold //*********************************************** int moi_threshold = 500; //set the moisture threshold (moist←0~1023→dry) int upper_temp_threshold = 30; //high temperature-red LED int under_temp_threshold = 10; //low temperature-blue LED int uv_threshold = 4; //set the intensity of ultraviolet light, shade if exceeded int send_wind_sec = 30; //wind blowing interval (in seconds) //*********************************************** Servo uvServo; Servo windServo; Servo waterServo; int redLedPin = 13; int blueLedPin = 12; int moisture_pin = A0; int tempout_pin = A2; int uvout_pin = A0; int counter = 0; bool uvFlg = false; BD1020 bd1020; RPR0521RS rpr0521rs; ML8511A ml8511a; BM1383GLV bm1383; //*********************************************************** void setup() { Serial.begin(9600); while (!Serial); Wire.begin(); byte rc; rc = rpr0521rs.init(); rc = bm1383.init(); pinMode(redLedPin,OUTPUT); pinMode(blueLedPin,OUTPUT); uvServo.attach(9); windServo.attach(10); waterServo.attach(11); bd1020.init(tempout_pin); ml8511a.init(uvout_pin); } //*********************************************************** void loop() { //********************************* //Soil Sensor int moi = analogRead(moisture_pin); Serial.write("MOISTURE = "); Serial.println(moi); Serial.println(); //********************************* //Temperature sensor float temp; bd1020.get_val(&temp); Serial.print("BD1020HFV Temp="); Serial.print(temp); Serial.print(" [degrees Celsius], ADC="); Serial.println(bd1020.temp_adc); //********************************* //UV sensor float uv; ml8511a.get_val(&uv); Serial.write("ML8511A UV = "); Serial.print(uv); Serial.println(" [mW/cm2]"); Serial.println(); //********************************* //Barometric pressure sensor byte cp; float press; cp = bm1383.get_val(&press); if (cp == 0) { Serial.write("BM1383GLV (PRESS) = "); Serial.print(press); Serial.println(" [hPa]"); Serial.println(); } //********************************* //ALS/proximity sensor byte rc; unsigned short ps_val; float als_val; byte near_far; rc = rpr0521rs.get_psalsval(&ps_val, &als_val); if (rc == 0) { Serial.print(F("RPR-0521RS (Proximity) = ")); Serial.print(ps_val); Serial.print(F(" [count]")); near_far = rpr0521rs.check_near_far(ps_val); if (near_far == RPR0521RS_NEAR_VAL) { Serial.println(F(" Near")); } else { Serial.println(F(" Far")); } if (als_val != RPR0521RS_ERROR) { Serial.print(F("RPR-0521RS (Ambient Light) = ")); Serial.print(als_val); Serial.println(F(" [lx]")); Serial.println(); } } //*********************************** //depending on the sensor value each time //the water level will rise when the soil dries if(moi > moi_threshold){ Serial.println("Water Servo start."); for(int m=0;m < 10;m++){ waterServo.write(0); //move servomotor to 0 degree delay(1500); //wait 1.5 seconds waterServo.write(90); //move the servomotor to 90 degrees } } //Temperature activate if(upper_temp_threshold > temp){ digitalWrite(redLedPin, HIGH); //turn on LED delay(moi); //set the moisture to LED flashing time digitalWrite(redLedPin, LOW); //turn off LED } if(under_temp_threshold < temp){ digitalWrite(blueLedPin, HIGH); //turn on LED delay(moi); //set the moisture to LED flashing time digitalWrite(blueLedPin, LOW); //turn off LED } //shades when the sunlight is too strong if(uv < uv_threshold && !uvFlg){ waterServo.write(90); uvFlg = true; } else if(uv >= uv_threshold && uvFlg){ waterServo.write(0); uvFlg = false; } //create wind at a specific time if(counter > send_wind_sec){ Serial.println("Wind Servo start."); for(int n=0;n < 10;n++){ waterServo.write(0); delay(1000); waterServo.write(90); } counter = 0; } counter++; delay(1000); }
組裝植物培育系統!
現在,接線和編程已經完成,我們來把系統組合在一起。
圖8 迷你盆栽植物
首先,您需要一棵植物(當然)!
圖9 組裝遮陽部件
當紫外線太強時,安裝在伺服電機上的遮光板將旋轉90度,從而擋住窗戶上的陽光。
圖10 裝有伺服電機的噴壺
我們可以根據濕度水平利用伺服電機拉動噴壺進行噴水。
我們的吹風設備是一把東方折扇!
圖11 組裝完成的植物培育系統
整個系統仍有很大的改進空間。如果您想要科技感更高一些,您可以使用小型水泵、PC風扇等設備。此外,如果房間中沒有窗戶,那么可以同時利用LED與照度傳感器,在房間變暗時關閉植物的LED。
總結
在本項目中,我們組合使用傳感器評估套件中的多個傳感器來打造智能花園系統。市面上已經出現了一些很酷的植物培育設備(教程中做了簡要介紹),我相信本教程能夠為開發更先進的植物培育設備奠定堅實的基礎。
在下一個教程中,我們將更詳細地介紹Arduino Create,并嘗試使用傳感器評估套件中的加速度計。
DevicePlus 編輯團隊
設備升級版適用于所有熱愛電子和機電一體化的人。
審核編輯黃宇
-
傳感器
+關注
關注
2552文章
51237瀏覽量
754790 -
Arduino
+關注
關注
188文章
6472瀏覽量
187357
發布評論請先 登錄
相關推薦
評論