2013年11月27日 星期三

土壤濕度檢測片

在網路上找 土壤濕度檢測 可以找到一些模組可用,於是自己也想來 DIY 一下。

由於量測極只能找金屬材質,但某些金屬遇水又會生鏽,所以在選材要小心,以免生鏽產生誤差值。

我選擇不鏽鋼材質,但不鏽鋼無法被焊接,所以只能夾在金屬材質,再進行讀取,另外要再與電阻分壓,再拉線到 Arduino 的 IO腳上讀取 (電路與之前相同)。




[量測結果]

[程式碼]
/*    將 DHT11 測得的 溫濕度 顯示在LCD顯示器 */ 

#include <LiquidCrystal.h>    //使用LiquidCrystal Library 
#include <dht11.h>                 //使用DHT11 Library
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);  //初始設定LCD顯示器的介面 
dht11 DHT11;     //定義DHT11 物件
#define DHT11PIN A1  //定義讀取資料的 Pin腳 

void setup() {     
   lcd.begin(16, 2);  // 設定LCD有2列16欄  
} 

void loop() {  
   lcd.setCursor(0, 0); //將游標設定在第一行第一個位置(column 0, line 1)  
   int chk = DHT11.read(DHT11PIN);  //檢查DHT感測器的回應  

   switch (chk) {     
     case 0:       
       lcd.print("Humidity:");       
       lcd.print((float)DHT11.humidity, 1);       
       lcd.print("%");       
       lcd.setCursor(0, 1);       
       lcd.print("Temp:");       
       lcd.print((float)DHT11.temperature, 0); 
       lcd.write(0xDF);     
       lcd.print("C ");
      
       lcd.print( (float)Thermister(analogRead(A0)), 1);  // display Fahrenheit
       lcd.write(0xDF);     
       lcd.print("C ");
       
       break;     
     case -1:       
       lcd.print("Checksum error"); 
       break;     
     case -2:       
       lcd.print("Time out error"); 
       break;     
     default:       
       lcd.print("Unknown error"); 
       break;   
   }  
   delay(500); 
}

float pad = 9000;                       // balance/pad resistor value, set this to the measured resistance of your pad resistor

float Thermister(int RawADC) {
  float Temp; 
  long Resistance = ( ( 1000 * pad / RawADC) - pad );   
   Temp = log(Resistance);
   Temp = 1 / ( 0.001129148 + ( 0.000234125 + ( 0.0000000876741 * Temp * Temp ) ) * Temp );
   Temp -= 273.15;            // Convert Kelvin to Celcius
   Temp = ( Temp * 9.0 ) / 5.0; // + 32.0; // Convert Celcius to Fahrenheit
   Temp /= 10.0;
   Temp += 10.0; // Offset
   return Temp;
}

5 則留言:

  1. COOL

    請問大大您那個金屬片是什麼呢?何處可取得?

    回覆刪除
    回覆
    1. 材質是鉑, 朋友給的, 我也不知道要去哪邊買耶 @@"
      你只要找到不易生鏽的金屬即可

      刪除
  2. 你好
    請問也是用dht11的程式碼?
    電阻要如何接
    是幾歐姆的

    回覆刪除
  3. 我直接用土壤溼度計 YL69加上ARDUINO程式測試土壤濕度如何顯示在LCD面板上
    可以幫我解答嗎??

    回覆刪除
  4. 程式部分還要在加麼才能顯示再LCD顯示器上~建議
    int wet_levela;
    const int sensorPina= A0;
    const int LEDPina= 13;
    int wet_levelb;
    const int sensorPinb= A1;
    const int LEDPinb= 12;
    int wet_levelc;
    const int sensorPinc= A2;
    const int LEDPinc= 11;

    void setup() {
    Serial.begin(9600);
    pinMode(sensorPina, INPUT);
    pinMode(LEDPina, OUTPUT);

    pinMode(sensorPinb, INPUT);
    pinMode(LEDPinb, OUTPUT);

    pinMode(sensorPinc, INPUT);
    pinMode(LEDPinc, OUTPUT);
    }
    void loop() {
    wet_levela= analogRead(sensorPina);
    wet_levelb= analogRead(sensorPinb);
    wet_levelc= analogRead(sensorPinc);

    if (sensorPina >0){
    if(wet_levela > 750){
    digitalWrite(LEDPina, HIGH);
    }
    else{
    digitalWrite(LEDPina, LOW);
    }
    }

    if (sensorPinb >0){
    if(wet_levelb > 750){
    digitalWrite(LEDPinb, HIGH);
    }
    else{
    digitalWrite(LEDPinb, LOW);
    }
    }

    if (sensorPinc >0){
    if(wet_levelc > 750){
    digitalWrite(LEDPinc, HIGH);
    }
    else{
    digitalWrite(LEDPinc, LOW);
    }
    }

    Serial.println(wet_levela);
    Serial.println(wet_levelb);
    Serial.println(wet_levelc);
    delay(2000);

    }

    回覆刪除