經過硬件接駁,以及理解海水水族箱裡的鹽度知識後,今期餘下程式設計的部分。大家不要以為此部分很艱難,因為傳感器的基礎程式已有,大家只要稍作修改就可使用。
我們會先到傳感器的官方網站下載程式碼,然後啟動 Arduino 加以編譯就可使用。
Step 1
網址:https://www.vernier.com/engineering/arduino
Step 2
首先下載傳感器適用的 Sketch 程式碼,也就是 Arduino 的程式。再利用 Arduino IDE 開發環境修改。因每種傳感器的「Intercept」(攔截)及「Slope」(斜率)的值皆不一樣,需根據傳感器規格中列明的值作出修改。
把繼電器連接到 Arduino UNO 的數位腳是 12(D12),於程式的設置(setup)中把數位腳 12 定為輸出模式。
接著到程式運作,主要不斷地呼叫的部份(loop),當中分為兩部分:
① Sketch 中已編好 Arduino UNO 底板會從傳感器,傳來的原始數據換算成正確讀數(鹽度);設定「SensorReading」變量回傳所測試出的鹽度。
② 「freshwaterpump()」是我們自行編寫的一個程式碼模組,亦是這程式主要運行的部分之一。
我們利用了「if⋯else」的編程概念,去決定水泵的開關。如果(if)鹽度感測器測出的數值附合預設條件,程式便指示水泵開動;但在所有其他情況下(else),程式均會示水泵停止。
① 設定的條件是當鹽度讀數大於或等於 36ppt 時,程式指示水泵開動。程式會指示 Arduino Uno 的數位腳 12(D12)輸出高電壓(HIGH),如此會令繼電器把水泵的電源接通,水泵就會開動。
② 當淡水加進水族箱後,需要一定時間才能與海水完全混合,所以我們於加入一定分量的淡水後,必須讓海水的鹽度有足夠的時間穩定下來,然後才作第二次的量度及操作。我們會利用「delay」這個延時指令去處理這情境,然後用「digitalWrite(12,HIGH);」、「delay(10000);」和
「digitalWrite(12,LOW);」三組指令,讓水泵開動加入淡水 10,000 毫秒(即 10 秒)後停止。
③ 接著我們利用「delay(30000);」指令,提供 30,000 毫秒(即 30 秒)的時間,讓淡水與海水有充份時間完全混合,才開始下一次的量度及操作。(註:水泵開動和等待下一次量度的時間,需因應水族箱內水體的大小作調節。)