센서

아두이노를 이용한 토양습도 센서

greentam 2024. 12. 21. 20:36

 

안녕하세요 그린탐입니다.

 

토양습도를 측정하는 센서는 여러 종류가 있는데요, 그 중 제가 사용하는 것은 용량성(capacitive) 측정센서입니다. 이말이 무슨 말이냐면, 전극이 두 개가 있고, 두 전극 사이에 어떤 물체가 있으며, 그 물체의 유전율(dielectric constant)에 의해서 전극들사이의 전기용량(capacitance)이 결정된다는 뜻입니다.

 

그럼 전기용량은 뭐냐고 물어보시면, 쉽게 얘기해서, 어떤 물체가 담고 있을 수 있는 전자의 갯수가 많으냐 적으나입니다. 전자의 갯수가 많으면 용량이 크고, 적으면 용량이 작습니다. 그럼 이게 토양 습도와 무슨 관계냐?, 흙 속에 습기가 많으냐 적으냐에 따라서 흙 속에 저장될 수 있는 전자의 수가 달라진다는 얘기 입니다.

 

그런데 토양은 그 종류가 무척 많은데, 입자의 크기라든가 흡수성의 정도라든가 등등의 이유로 같은 양의 흙이라 하더라도 품고 있을 수 있는 수분의 양이 다릅니다. 그리고 식물이 물을 흡수하거나, 물이 화분 아래로 빠지거나, 공기 중으로 증발하면 수분의 양이 줄어드니, 그에 따라서 흙의 용량도 시간에 따라 달라집니다.

 

용량의 측정은 보통 아래의 왼쪽 그림처럼 두 개의 전극 사이에 물체를 사이에 두고 측정합니다. 그러나 PCB위에 만들어진 센서는 그렇게 전극을 수직으로 배치할 수 없으니 두 전극이 모두 같은 평면상에 존재하고, 물체가 그 위에 놓입니다.

 

 

토양의 습도를 측정하는 방법 중 또 다른 대표적인 방법으로는 저항성(resistive) 센서가 있습니다. 이 역시 두개의 전극을 이용하는데, 두 전극 사이에 일정한 전위차를 가하여, 그 때 흐르는 전류의 크기를 측정하여, 즉 저항값을 측정하여 토양 내의 수분의 정도를 측정하는 방식입니다. 수분의 많고 적음에 따라서 저항이 바뀌는 점을 이용합니다.

 

다시, 용량성 센서로 돌아와서, 제가 사용하는 센서는 아래에서 구매한 센서입니다.

https://www.amazon.com/dp/B07SYBSHGX?ref=ppx_yo2ov_dt_b_fed_asin_title

이 센서를 사용하려면 아두이노가 필요합니다. 아두이노와 연결 방법은 아래의 그림과 같습니다.

 

 

 

그리고 토양센서의 값을 읽어들이는 아두이노 코드는 아래와 같습니다.

 

// Define the analog input pin

const int sensorPin = A0;

 

// Variable to store the sensor value

int sensorValue = 0;

 

void setup() {

    // Initialize serial communication at 9600 bps

    Serial.begin(9600);

    // Set the ADC resolution to 12-bit

    analogReadResolution(12);

}

 

void loop() {

    // Read the analog value from the sensor

    sensorValue = analogRead(sensorPin);

 

    // Map the 12-bit value to a voltage (0-5V)

    float voltage = sensorValue * (5.0 / 4095.0);

 

    // Print the raw sensor value and the calculated voltage

    Serial.print("Sensor Value: "); 

    Serial.print(sensorValue);

    Serial.print("\tVoltage: ");

    Serial.println(voltage);

 

    // Wait for a short time before the next reading

    delay(500);

}

 

위의 코드에서 soil_pin에 센서값이 저장되는데, 이 때 analogReadResolution(12)를 이용해서 ADC의 측정의 정밀도를 12비트로 변경해주면 값이 0에서부터 4095까지 변화합니다. 그리고 analogRead(sensorPin)를 이용해서 센서의 값을 읽어들입니다. 0일 경우, 센서의 출력전압이 0V이며 4095일 경우 5V라는 의미입니다. 여기서 흙의 수분이 많으면 낮은 값이 나오고, 수분이 적으면 높은 값이 나오니, 만약 수분이 많을 때 높은 값이 나오게 하려면, 이 값을 4095에서 빼주면 됩니다.

 

그런 후, float voltage = sensorValue * (5.0 / 4095.0)를 이용해서 센서의 값을 전압(0 ~ 5V 사이)값으로 변경합니다. (이 것은 선택사항입니다.)

 

그런 후, 콘솔을 통해서 센서의 값을 출력합니다. -> Serial.print(sensorValue);

 

'센서' 카테고리의 다른 글

용량성 토양습도 센서 회로 동작원리  (0) 2024.12.21