2015.10.13
註: 點選即前往該專題介紹文章
本篇介紹的是 土壤溼度計 YL-69,先說明一下這個溼度計所測到的數據,只是經過換算的到大概的數值而已,真正需要有工業用的土壤濕度計校正才算真正的準,但只是測量乾土與濕土的差別,還是很明顯的。
感測器就是如下圖中,那兩隻尖尖的是插進土壤的部分
轉換成數位資訊是連接感測器的那一個模組。
| 腳位 | 說明 | 接法 |
| VCC | Voltage | +5V |
| GND | Ground | GND |
| D0 | 讀取數位訊號,範圍0-1; 此腳是利用在沒有控制器的電路上面,中間的可變電阻是在控制邊界值(可不接) |
任digital pin |
| A0 | 讀取類比訊號,範圍0-1023(感測器不同,會影響區間); 可在程式中使用 |
任Analog pin |
我的作法是,先讀取感測器所讀到的數值,讀到數值區間為 400 至 800,400是直接插入水中的情況,800是在乾燥的數值,那在空氣中的數值介於900-1000。
得到數值後,再來就是縮小到0 - 100的數值之內,利用map的指令:
| map(var,minimun,maximun,transform minimun,transform maximun) | ||
| 變數 | 中文 | 說明 |
| var | 變數 | 想要被轉換的data |
| minimun | 最小值 | 被轉換的最小值 |
| maximun | 最大值 | 被轉換的最大值 |
| transform minimun | 轉換後的最小值 | 經過轉換後的最小值 |
| transform maximun | 轉換後的最大值 | 經過轉換後的最大值 |
程式部分就用一個副程式將其包起來,方便使用:
--------------------------------------------------------------------
/*
2015.10.13 Li-Han Chang
*/
int soil = 0;
int map_soil;
int YL69_pin = A3;
void setup(){
Serial.begin(9600);
}
void loop(){
soil_loop(); //YL69
Serial.println(map_soil);
}
/*****副程式*****/
void soil_loop(){
hum = analogRead(0);
if(soil > 800){
soil=800;
}
else if (soil<250){
soil=250;
}
map_soil = map(soil,250,800,100,0);
}
--------------------------------------------------------------------
上面程式碼,我把max與min打相反是因為,我們測量的數值是由大到小變化,但是我們要的結果是當沒有濕度時顯示 0,所以反過來計算
剛才有提到當在空氣時900-1000,所以判斷式忽略800以上數值,令恆等於800;同理,當低於250,令恆等於250。
朋友在使用上,反映原本感測器的感測桿,那一片是塑膠製的,插在太硬的土上面感覺快斷掉了,所以就想辦法改造一下,其實不難,因為原本的感測桿,就是讀取兩端的訊號再經轉換得到訊號,所以只要找到適合的鐵棒,修改讀取到的數值區間即可,不過.....感測棒不同,當然區間就會有所不同,很有可能誤差會變得很大
上面也有提到,這真的要準,需要使用工業用的感測器來校正,所以這樣修改,一樣是量到「大概」。
我修改的感測棒是壞掉飲水機拆下的熱水感測棒,如圖:
然後接轉換器上面,只要將原本的拆掉,裝上新的即可,如照片中,兩隻那一端,
重新測試區間,新的區間為「380-900」,程式方面就直接修改掉,重新燒入就可以使用了。
----------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------