最近在學習養海水魚,所以動了敗PH計的需求,在Y拍與沒有屋頂看了幾天後,
想說我沒有在淘寶過東西,上去一看,奶奶個熊,一樣的東西怎麼差了五百塊,
好吧,在大陸買一次看看,最後算一算,含運+跨國手續費,1K有找。
我買的這款是沒有溫度補償的,建議如果要更加精準的,可以考慮買有溫度補償的,
它會多一支防水溫度計,連接在主板上面,有興趣知道溫度對PH值影響的,可以
GOOGLE一下。
主板-用來連接PH探頭的BNC接頭,以及增益電路,並與Arduino連接的功用。
PH電極探頭(不可填充式,消耗品無誤),最左邊那個其實是保養液瓶,可以取下來
拿掉保養液瓶的樣子,如果長時間不用,要把頭沖乾淨後,放回保養液中。
主板與Arduino連接的線,紅: VCC ,黑:GND ,黃:Data (類比)
探頭不能直接使用,必須經過至少2階段校正。
把探頭接上主板
主板與Arduino連接後,會出現藍燈
拿出另外買的PH 7.0校正液(再強調一次PH與溫度有相關性,本篇暫時忽略,另篇說明)
校正液口太小,找另一個乾淨容器來裝
執行程式,記得把黃色線接在A2
/* # This sample code is used to test the pH meter V1.1. # Editor : YouYou # Date : 2014.06.23 # Ver : 1.1 # Product: analog pH meter # SKU : SEN0161 */ #define SensorPin A2 //pH meter Analog output to Arduino Analog Input 0 #define Offset 0.00 //deviation compensate #define LED 13 #define samplingInterval 20 #define printInterval 800 #define ArrayLenth 40 //times of collection int pHArray[ArrayLenth]; //Store the average value of the sensor feedback int pHArrayIndex=0; void setup(void) { pinMode(LED,OUTPUT); Serial.begin(9600); Serial.println("pH meter experiment!"); //Test the serial monitor } void loop(void) { static unsigned long samplingTime = millis(); static unsigned long printTime = millis(); static float pHValue,voltage; if(millis()-samplingTime > samplingInterval) { pHArray[pHArrayIndex++]=analogRead(SensorPin); if(pHArrayIndex==ArrayLenth)pHArrayIndex=0; voltage = avergearray(pHArray, ArrayLenth)*5.0/1024; pHValue = 3.5*voltage+Offset; samplingTime=millis(); } if(millis() - printTime > printInterval) //Every 800 milliseconds, print a numerical, convert the state of the LED indicator { Serial.print("Voltage:"); Serial.print(voltage,2); Serial.print(" pH value: "); Serial.println(pHValue,2); digitalWrite(LED,digitalRead(LED)^1); printTime=millis(); } } double avergearray(int* arr, int number){ int i; int max,min; double avg; long amount=0; if(number<=0){ Serial.println("Error number for the array to avraging!/n"); return 0; } if(number<5){ //less than 5, calculated directly statistics for(i=0;i<number;i++){ amount+=arr[i]; } avg = amount/number; return avg; }else{ if(arr[0]<arr[1]){ min = arr[0];max=arr[1]; } else{ min=arr[1];max=arr[0]; } for(i=2;i<number;i++){ if(arr[i]<min){ amount+=min; //arr<min min=arr[i]; }else { if(arr[i]>max){ amount+=max; //arr>max max=arr[i]; }else{ amount+=arr[i]; //min<=arr<=max } }//if }//for avg = (double)amount/(number-2); }//if return avg; }
插入PH7.0校正液
等待數值穩定,約需要30~60秒
穩定後,將目前的PH與與7相減,以本例來說是7.04-7.00=0.04
將0.04填入Offset ,再次將程式上傳到Arduino。
接下來拿出另一瓶PH4.0 校正液。
因為電路有增益的問題,所以需要做2點校正,我沒有買到PH10校正液,
所以只能做2個點的校正,沒辦法校正大於PH7 那邊的,但理論上結果不會有太大誤差,
我們假設電路輸出是線性的,接下來我們把探頭清洗一下,再插入PH4.01這瓶。
看一下目前的數值,差蠻多的,必須要調整一下增益。
用一個可以轉到旋鈕的東西,例如尺,來轉到它一下,
它的變化很細微,所以可能要轉不少圈。
數據開始下降
快接近了,減慢旋鈕調整速度
再往下調一點
到達指定PH值,等候一下,確認有穩定下來,此時PH探頭拿去清洗一下後,
就可以開始用了,但記得凡事PH探頭要拿來量不同液體時,一定要先清洗,不要
汙染了校正液以及保養液。每個月建議重新校正一次PH探頭。
實際運作畫面
很棒
回覆刪除如果我PH4、7、10校正液都有買了,做完了PH7和4後,PH10要怎麼做?
回覆刪除假設放入PH10校正液中,出現9.07,那是不是調螺絲,那這樣的話,PH4還會準嗎?
一般來說,有分為單點校正和二點校正,單點校正是指只校正 PH 7 跟PH 4 or PH 10 ,也就是只選擇酸的那一邊校正 ,或是鹼的那一邊校正。 如果要做二點校正,就會建議在程式中用公式去計算了,而不是單純只調螺絲。
回覆刪除更正一下,是二點校正 ph7 + ph4 or ph10 ,三點校正則是ph 7 + ph 4 + ph 10 ,單點校正則是只校正ph 7
回覆刪除感謝分享
回覆刪除