본문 바로가기
모두의 아두이노/아두이노 센서

[아두이노][센서] 스마트 가드닝을 위한 필수 센서! HD-38 토양 수분 센서로 아두이노 프로젝트 시작하기

by 로니킴 2024. 10. 28.


HD-38 Soil Humidity Hygrometer 모듈은 토양의 수분 상태를 간단하게 감지하여 디지털 방식으로 값을 표시합니다. 아두이노와 LCD 디스플레이를 통해 현재 토양 상태를 확인할 수 있어, 초보자도 쉽게 따라 할 수 있습니다.

 

목차

     

     

     


    스마트 가드닝을 위한 필수 센서! HD-38 토양 수분 센서로 아두이노 프로젝트 시작하기

     

    HD-38 Soil Humidity Hygrometer 모듈은 토양 내 수분 상태를 간단하게 측정할 수 있는 유용한 센서입니다. 두 개의 프로브로 토양의 저항을 측정하고, 이 데이터를 아두이노와 LCD를 통해 직관적인 습도 값으로 확인할 수 있어 초보자도 쉽게 따라 할 수 있는 프로젝트입니다. 이를 통해 실내 식물이나 작은 텃밭의 관리가 편리해지며, 프로젝트를 IoT 환경으로 확장하여 원격 모니터링이 가능합니다.


     

    1. HD-38 Soil Humidity Hygrometer 모듈이란?

    HD-38 토양 습도 센서는 토양 내 수분의 양을 측정하여, 도시 농업이나 실내 식물 관리 등 다양한 프로젝트에서 매우 유용한 센서입니다. 이 센서는 두 개의 프로브를 통해 토양에 전류를 흘려보내고 저항을 측정하여 수분 함량을 추정합니다. 토양에 수분이 많을수록 전류가 쉽게 흐르며 저항이 낮아지고, 반대로 토양이 건조할수록 전류 흐름이 약해져 저항이 높아지는 원리를 사용합니다. 따라서 센서는 토양의 저항 변화를 통해 수분 상태를 감지합니다.

     

    이 센서는 저렴하고 설치가 간편하여 식물 관리에 필수적입니다. 특히 연결된 LCD 화면이나 아두이노 시리얼 모니터를 통해 실시간으로 토양 습도를 시각적으로 확인할 수 있어, 물을 언제 줄지 적절히 판단하는 데 도움이 됩니다. 또한 스마트 가드닝 프로젝트의 핵심 도구로, IoT와 연결하여 원격으로 토양 상태를 모니터링할 수 있는 기능까지 확장 가능합니다.

     

     


     

     

    2. HD-38 Soil Humidity Hygrometer 모듈의 동작 원리

    HD-38 토양 습도 센서는 전류와 저항의 상관관계를 활용하여 토양의 습도를 측정합니다. 센서의 두 프로브가 토양에 삽입되면 전류가 흐르게 되며, 센서는 전류의 흐름을 방해하는 저항 값을 측정하여 습도를 계산합니다. 습도가 높을수록 전류가 쉽게 흐르기 때문에 저항이 낮아지고, 반대로 건조한 토양은 전류 흐름이 적어 저항이 높아지므로, 센서는 이를 기준으로 토양의 습도를 산출할 수 있습니다.

     

     

    구체적으로, 토양의 습도가 높을수록 물이 포함되어 전도성이 증가합니다. 전도성이 높아진 토양은 전류가 잘 흐를 수 있어, 저항 값이 낮아지게 됩니다. 반대로, 토양이 건조해질수록 물이 적어져 전도성이 감소하므로 저항 값이 높아지게 됩니다. HD-38 모듈은 이 저항 값을 기반으로 토양의 습도를 0~100의 비율로 변환하여, 토양이 건조한지 촉촉한지에 대한 정보를 아두이노 같은 마이크로컨트롤러로 전송합니다.

     

    HD-38 모듈은 3.3~12V의 전압으로 작동하며, 20mA 이하의 전류를 소비합니다. 이 모듈은 디지털 및 아날로그 출력을 제공하여, 아날로그 신호로 현재 토양 상태를 세밀하게 측정할 수 있을 뿐 아니라 특정 수분 임계값에 도달했을 때 알림을 제공할 수 있습니다. PCB 표면에는 무전해 니켈 침금(ENIG) 처리가 되어 있어, 산화 방지와 긴 수명을 보장합니다.

     

    예시:

    예를 들어, 센서가 토양에 삽입되었을 때 저항 값이 낮게(즉, 200Ω) 측정되면, 센서는 이를 "습한" 상태로 판단하고, 습도 값이 약 80%로 산출됩니다. 반면, 건조한 토양에서 저항 값이 높게(예: 800Ω) 나타나면 센서는 "건조" 상태로 간주하고, 습도 값이 약 20%로 나타납니다. 이처럼 HD-38 센서는 저항 값과 습도 값을 일대일로 맵핑하여, 정확하게 현재 토양의 수분 상태를 파악할 수 있습니다.

    이 센서는 특히 아날로그 출력(AO)을 제공하여 수분 상태를 세밀하게 측정할 수 있으며, 또한 디지털 출력(DO)를 통해 특정 수분 임계값에 도달했을 때 아두이노에서 직접 알림을 받을 수 있는 유연한 설계로 되어 있습니다. 예를 들어, 습도가 30% 미만일 경우 물이 필요한 상태임을 표시하여 물 공급 여부를 쉽게 결정할 수 있도록 합니다.

     

     

    [동작]

    HD-38 토양 수분 센서는 두 개의 금속 프로브를 통해 토양의 저항을 측정하여 수분 상태를 감지합니다. 이 센서는 토양이 습할수록 전류가 잘 흐르는 특성을 이용하며, 낮은 저항을 통해 높은 습도를 표시합니다. 모듈은 LM393 비교기 IC를 사용해 설정된 습도 임계값과 측정값을 비교합니다. 설정된 값 이하의 저항이 감지되면 Moisture Detect LED가 점등되어 물 공급 필요 여부를 시각적으로 알려줍니다.

     

    구성 요소 및 작동 메커니즘

    1. LM393 비교기 IC: 설정된 임계값과 측정값을 비교해 디지털 출력을 제공합니다.
    2. 10kΩ 가변 저항(Pot): 임계 습도 값을 조정하여 사용자 설정에 맞출 수 있습니다.
    3. Power LED (D2): 전원이 공급되고 있음을 표시합니다.
    4. Moisture Detect LED (D1): 토양이 설정된 임계 습도보다 건조할 때 점등됩니다.
    5. 아날로그 및 디지털 출력: 아날로그 출력(AO)은 정밀한 습도 변화를 실시간으로 측정하며, 디지털 출력(DO)은 설정된 임계값을 기준으로 작동해 간단한 알림을 제공합니다.

    회로도를 보면, 전압 비교기(LM393)는 센서 핀에서 측정한 저항을 기준으로 출력을 결정합니다. 이를 통해 아두이노가 토양 상태를 인식하고 필요한 조치를 할 수 있습니다.

     

     

     

     


     

     

    3. 구입하기

    HD-38 모듈을 구입할 때는 정품 여부와 배송 기간을 고려하는 것이 중요합니다. 이 모듈은 주로 국내 쇼핑몰과 알리익스프레스 같은 국제 전자 부품 쇼핑몰에서 쉽게 구할 수 있으며, 가격은 일반적으로 1,500~3,000원 사이입니다. 배송비가 추가될 수 있으며, 배송 기간은 해외 주문 시 2주에서 한 달까지 소요될 수 있습니다.


     

     

    4. 하드웨어 연결하기

     

    HD-38 토양 습도 센서를 아두이노에 연결하는 과정에서, 우리는 아두이노의 아날로그 핀 A1을 사용하여 센서로부터 습도 데이터를 받아옵니다. 이 연결은 센서의 아날로그 출력을 아두이노가 읽어 들일 수 있도록 해줍니다. 하드웨어 연결은 다음과 같습니다:

     

     

     

    • 아두이노 A1 핀HD-38 센서의 AO 핀 (아날로그 출력 핀)
    • 아두이노 5V 핀센서 VCC 핀
    • 아두이노 GND 핀센서 GND 핀

    이 구성은 센서가 토양의 습도에 따른 저항 값을 측정하여 아날로그 신호로 변환하고, 아두이노에서 이 데이터를 받아 처리할 수 있도록 설계되었습니다.


    하드웨어 연결 구성의 이유

    1. AO 핀 연결
      HD-38 센서의 아날로그 출력 핀(AO)은 토양 습도를 저항 값을 통해 측정한 뒤, 이를 0~1023 사이의 아날로그 값으로 변환하여 아두이노에 전달합니다. 아두이노의 아날로그 핀 A1은 이러한 아날로그 신호를 입력받아, 0에서 1023 사이의 값으로 토양의 습도를 확인할 수 있습니다. 예를 들어, 건조한 토양에서 센서는 높은 저항 값을 전달하여 아두이노가 낮은 습도 값으로 인식하고, 습도가 높은 경우 센서의 저항 값이 낮아져 아두이노는 이를 높은 습도로 해석합니다.
    2. 전원 연결 (5V와 GND)
      아두이노의 5V 핀GND 핀을 HD-38 센서의 VCC와 GND에 연결하여 센서에 안정적인 전원을 공급합니다. 이 연결로 센서는 아두이노로부터 전력을 공급받아 작동하며, 전류가 토양 내 프로브를 통해 흐르도록 합니다. 전원이 안정적으로 공급됨으로써 센서가 올바른 아날로그 값을 출력할 수 있게 됩니다.

    이 하드웨어 구성을 통해 HD-38 센서는 아날로그 입력(A1)을 통해 실시간으로 토양의 습도 상태를 아두이노에 전송하게 됩니다.

     

     


     

     

    5. 소프트웨어 코딩하기

     

    이제 HD-38 센서에서 읽은 토양 습도 데이터를 아두이노에 출력하고, LCD 디스플레이에 표시하는 코드를 살펴보겠습니다. 입력한 코드는 아날로그 값을 측정하여 습도 수준을 계산한 후, 현재 상태를 LCD 화면에 표시하도록 설계되어 있습니다. 아래는 코드의 동작에 대한 구체적인 설명과 아두이노와의 연결 및 업로드 과정을 포함한 단계입니다.

     

     

     

    소프트웨어 설정 및 업로드 단계

    1. 아두이노와 PC 연결
      아두이노를 컴퓨터에 연결하고, 아두이노 IDE를 실행합니다. 메뉴에서 툴 → 보드: 아두이노 UNO가 선택되어 있는지 확인하세요.
    2. 컴파일 확인
      스케치 메뉴에서 확인/컴파일(CTRL+R)을 선택하여 코드를 컴파일합니다. 오류가 있는지 확인하고, 이상이 없으면 다음 단계로 진행합니다.
    3. 아두이노 업로드
      업로드(CTRL+U)**를 선택하여 컴파일된 파일을 아두이노에 업로드합니다. 업로드가 완료되면 장치에서 센서와 LCD가 정상 작동하는지 확인할 수 있습니다.
    4. 동작 확인
      아두이노에 업로드한 코드가 실행되면서 센서는 토양의 수분 상태를 측정하고, LCD 디스플레이에 현재 습도와 물 공급 필요 여부를 표시하게 됩니다.

    코드 설명 및 동작 원리

    #include <LiquidCrystal.h>
    
    #define MIN 60  // 건조 상태를 나타내는 최소 습도 임계값
    #define MAX 65  // 물이 충분한 상태를 나타내는 최대 습도 임계값
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // LCD 핀 설정 (8, 9, 4, 5, 6, 7)
    
    int inputPin = A1;  // HD-38 센서의 아날로그 출력 핀을 A1에 연결
    int soilMoisture;   // 측정된 토양 습도 값을 저장할 변수
    int avrADC;         // 아날로그 값을 평균하여 저장하는 변수
    
    void setup() {
      initSensor();  // LCD 초기화 및 "준비" 메시지 표시
      pinMode(inputPin, INPUT);  // 센서 입력 핀 설정
    }
    
    void loop() {
      onSensor();    // 센서에서 토양 습도 값을 읽어옴
      displayLCD();  // LCD에 습도 상태와 물 공급 필요 여부를 출력
    }
    
    // LCD 초기화 함수
    void initSensor() {
      lcd.begin(16, 2);  // 16x2 LCD 초기 설정
      lcd.setCursor(0, 0);
      lcd.print("HD-38 SOIL");  // LCD에 센서 초기화 상태 표시
      lcd.setCursor(0, 1);
      lcd.print("Ready...........");
      delay(1000);
      lcd.clear();
    }
    
    // 토양 습도 값을 읽고 계산하는 함수
    void onSensor() {
      avrADC = averageAnalogRead(inputPin);  // 평균 아날로그 값 계산
      soilMoisture = map(avrADC, 0, 1023, 100, 0);  // 아날로그 값을 습도 비율로 변환
    }
    
    // 아날로그 입력 값을 평균화하는 함수
    int averageAnalogRead(int pinToRead) {
      byte count = 10;
      float value = 0;
      for (int x = 0; x < count; x++) {
        value += analogRead(pinToRead);  // 아날로그 값 반복 합산
        delay(20);
      }
      value = value / count;  // 평균 계산
      return (value);
    }
    
    // LCD에 현재 습도 상태를 표시하는 함수
    void displayLCD() {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("AVR:");
      lcd.print(avrADC);  // 측정된 아날로그 값 표시
      lcd.print("  Hu:");
      lcd.print(soilMoisture);  // 변환된 습도 값 표시
    
      lcd.setCursor(0, 1);
      if (soilMoisture > MAX) {
        lcd.print("Water Enough!!");  // 물이 충분할 때 표시
      } else if (soilMoisture < MIN) {
        lcd.print("Give me Water!!");  // 물이 필요할 때 표시
      } else {
        lcd.print("Moisture OK");  // 적정 습도 상태 표시
      }
    }

     

    코드 동작 원리 설명

    1. 초기 설정 및 LCD 초기화 (setup()와 initSensor() 함수)
      • initSensor() 함수는 LCD를 16x2 크기로 설정한 후, "HD-38 SOIL"과 "Ready" 메시지를 표시하여 준비 상태를 알립니다.
      • 이후 센서 입력 핀(A1)을 설정하여 토양 습도 데이터를 수신할 준비를 완료합니다.
    2. 습도 측정 (onSensor() 함수)
      • averageAnalogRead() 함수는 센서의 아날로그 값을 10회 측정하여 평균을 계산합니다. 이는 전압 변동으로 인한 데이터 불안정성을 줄여 정확한 값을 얻기 위함입니다.
      • 이 평균 아날로그 값은 0에서 1023 사이의 값으로 나타나며, map() 함수로 이를 습도 비율(100~0%)로 변환하여 토양의 습도를 나타냅니다. 예를 들어, 건조한 토양일수록 낮은 습도 값이 표시되고, 습한 토양일수록 높은 값이 표시됩니다.
    3. LCD 출력 및 상태 메시지 (displayLCD() 함수)
      • LCD 첫 줄에는 측정된 아날로그 값(AVR)과 습도 값(Hu)을 표시하여 사용자가 토양 상태를 즉시 확인할 수 있도록 합니다.
      • LCD 둘째 줄에는 습도에 따라 물 공급 여부가 표시됩니다. 예를 들어, 습도가 MIN 미만이면 “Give me Water!!” 메시지를 표시하여 물이 필요함을 알리고, MAX 초과 시에는 “Water Enough!!” 메시지를 띄워 물이 충분함을 알려줍니다.

     

     

    6. 동작 확인

    아두이노에 코드를 업로드하고 HD-38 센서와 LCD가 정상적으로 작동하는지 확인하기 위해 다음 절차를 따릅니다:

     

     

    1. 시리얼 모니터 및 LCD 출력 확인:
      아두이노 IDE의 시리얼 모니터를 열어 센서가 측정하는 아날로그 값과 변환된 습도 값을 확인할 수 있습니다. 시리얼 모니터에는 습도와 함께 “AVR” 및 “Hu” 값이 표시되므로, 센서가 데이터를 제대로 읽고 있는지 쉽게 확인할 수 있습니다.
    2. LCD에 표시되는 수분 상태 확인:
      센서를 토양에 삽입한 후 LCD를 통해 현재 토양 상태가 “Give me Water!!”, “Moisture OK”, 또는 “Water Enough!!” 중 하나로 표시되는지 확인합니다. 각 상태 메시지는 습도 값에 따라 달라지며, 센서가 실제로 토양의 상태를 반영하고 있는지 확인하는 데 유용합니다.
    3. 실제 반응 테스트:
      토양에 물을 추가하거나 건조시켜 센서의 반응 변화를 확인합니다. 예를 들어, 물을 추가한 후 습도가 상승하면서 “Water Enough!!” 메시지가 표시되는지, 건조 상태에서 “Give me Water!!”로 변경되는지를 통해 센서가 정상적으로 작동하는지 점검합니다.

     

     

    7. 마무리

     

    HD-38 Soil Humidity Hygrometer 모듈을 이용한 이 프로젝트는 토양 습도를 실시간으로 모니터링할 수 있어 식물의 건강한 성장을 돕는 데 유용합니다. 센서를 통해 토양의 수분 상태를 시각적으로 확인할 수 있으므로, 실내 또는 실외 식물 관리에 이상적입니다. 또한 아두이노와 연결하여 자동 물 공급 장치를 만들거나, 스마트 가드닝 시스템에 확장하여 더욱 편리하게 사용할 수 있습니다.

     

     

     

     

    반응형


    댓글