<!-- .slide: data-background="https://i.imgur.com/gJLfldF.jpg" data-background-color="#111111" data-background-opacity="0.2" --> ###### tags: `iot-greenhouse` `lab` 返回[物聯網自動化溫室監控系統](/s/PJIS24sFR76axKI0xOrnjQ) ## <span style="color:#F9BF45;">控制幫浦與電磁閥</span> ###### [點我開啟簡報模式](/@BEExANT-ta/B1hkyb9ut#) ###### <kbd>ESC</kbd> 鍵進入總覽模式 ###### <kbd>&#8592;</kbd> <kbd>&#8593;</kbd> <kbd>&#8595;</kbd> <kbd>&#8594;</kbd> 切換頁面 --- ## 目標 **使用幫浦端網頁,熟悉如何使用手動及程式控制幫浦與電磁閥進行灑水、管線壓力轉換,設定指定時間開啟/關閉幫浦。** --- ## 設計原理 - ==開啟電磁閥的同時啟動幫浦==,預設當 ==5 ~ 8== 號開啟時馬達為==半速==、 ==9 ~ 12== 號為==全速==。 - 以==手動及程式==控制方式將每一個==電磁閥輪流啟動/關閉==。 - 在==程式編輯區塊==中先==測試轉換程式與結果==,再將程式設定至圖表中顯示結果,與[溫室感測器設定](/s/6m3A90ogQwK4LpYYSxrxEQ)方式相同。 - 設定開始執行與結束的日期與時間,使裝置在指定時間中自動執行,日期時間格式為==mm/dd/yy hr:min:sec==(24小時制)。 ---- :::info :globe_with_meridians: 參考資源 - [電磁閥 - 維基百科](https://zh.wikipedia.org/wiki/%E7%94%B5%E7%A3%81%E9%98%80) - [幫浦 - 維基百科](https://zh.wikipedia.org/wiki/%E6%B3%B5) - [壓力感測器 - 維基百科](https://zh.wikipedia.org/wiki/%E5%8E%8B%E5%8A%9B%E4%BC%A0%E6%84%9F%E5%99%A8) - [JavaScript Date 時間和日期](https://www.fooish.com/javascript/date/) - [UNIX時間](https://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4) ::: --- ## 範例程式碼 新增程式檔並命名 ==控制幫浦與電磁閥==,將以下程式碼複製貼上程式編輯區執行。 ```javascript= let pump_P_output = Math.round((Math.abs(DATA.pump_P_raw - 105) / 89)*100)/100; console.log(pump_P_output); let date = new Date(Date.now()); let start = new Date("12/27/2021 17:24:00"); let end = new Date("12/27/2021 17:25:00"); let step = 5 * 1000; if(date.getTime() >= start.getTime() && date.getTime() < end.getTime()) { console.log("已達啟動時間,開始各站灑水。"); valveOn.set(5); delay(step); valveOff.set(5); delay(1000); valveOn.set(6); delay(step); valveOff.set(6); delay(1000); valveOn.set(7); delay(step); valveOff.set(7); delay(1000); valveOn.set(8); delay(step); valveOff.set(8); delay(1000); } if(date.getTime() >= end.getTime()) { console.log("已達結束時間,停止排程。"); } ``` --- ## 程式解說 逐行講解程式意義。 ---- ```javascript= let pump_P_output = Math.round((Math.abs(DATA.pump_P_raw - 105) / 89)*100)/100; console.log(pump_P_output); ``` - 將==壓力感測==原始資料轉換為壓力值,顯示在訊息欄位中。 ---- ```javascript= let date = new Date(Date.now()); let start = new Date("12/27/2021 17:24:00"); let end = new Date("12/27/2021 17:25:00"); let step = 5 * 1000; ``` - 定義date為當前時間。 - 定義start為啟動控制的時間。 - 定義end為結束控制的時間。 - 定義step為每站噴灑的時間,單位為毫秒。 ---- ```javascript= if(date.getTime() >= start.getTime() && date.getTime() < end.getTime()) { console.log("已達啟動時間,開始各站灑水。"); valveOn.set(5); delay(step); valveOff.set(5); delay(1000); valveOn.set(6); delay(step); valveOff.set(6); delay(1000); valveOn.set(7); delay(step); valveOff.set(7); delay(1000); valveOn.set(8); delay(step); valveOff.set(8); delay(1000); } ``` - 利用 ==Date.getTime()== 這個方法將==時間轉換為UNIX時間==,UNIX時間表示UTC 1970年1月1日0時0分0秒起算的秒數,從這個秒數去判斷是否已達啟動時間,且需小於結束時間。 ---- ```javascript= if(date.getTime() >= end.getTime()) { console.log("已達結束時間,停止排程。"); } ``` - 當前時間大於結束時間時,結束排程的執行。 --- ## 參數修改 為方便實作,以下會將範例程式中可修改的參數標示出來,進行實作時只需修改對應參數,並觀察結果即可。 :::warning :zap: 詳細內建JS參數參考 - [內建Js參數及功能總覽](/s/1TmPhQPFRyKsDRf5d3xyzg) ::: ---- :::success **let start = new Date("==mm==/==dd==/==yy== ==hr==:==min==:==sec=="); let end = new Date("==mm==/==dd==/==yy== ==hr==:==min==:==sec==");** ::: - mm: 月,dd: 日,yy: 西元年,hr: 時,min: 分,sec: 秒 ---- :::success **let step = ==x==** ::: - x為每站噴灑的間隔時間,單位為毫秒。 --- ## 範例影片 {%youtube 3ipARjjq9sk %} <a class="btn btn-warning" style="width:100%;color:#333333;" href="/s/nSWrH8KxTpualN8Ws8kkwA" role="button"> 裝置互聯設定與遠程控制 **&#8680;** </a> <a class="btn btn-primary" style="width:100%;" href="/s/6m3A90ogQwK4LpYYSxrxEQ" role="button"> **&#8678;** 感測器數值轉換與校正 </a>
{"metaMigratedAt":"2023-06-16T15:03:47.813Z","metaMigratedFrom":"YAML","title":"控制幫浦與電磁閥","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"transitionSpeed\":\"fast\",\"theme\":\"league\"}","contributors":"[{\"id\":\"a1db0c29-d848-4070-be84-9191a2398ca8\",\"add\":5841,\"del\":2018}]"}
    1275 views
   Owned this note