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

[아두이노][센서] 아두이노와 SEN0114 토양수분 센서를 사용한 스마트 토양 모니터링 프로젝트

by 로니킴 2024. 11. 5.


이 프로젝트는 아두이노와 SEN0114 토양수분 센서를 사용하여 토양의 수분 상태를 측정하고 LCD에 표시하는 방법을 단계별로 설명합니다. 초보자도 손쉽게 따라 할 수 있도록 구성된 본 프로젝트는 하드웨어 연결부터 코드 작성, 그리고 출력 확인까지 모든 과정이 포함되어 있습니다. 이제 간단한 토양 관리 프로젝트를 시작해보세요! 

 

목차

     

     

     


    [아두이노][센서] 아두이노와 SEN0114 토양수분 센서를 사용한 스마트 토양 모니터링 프로젝트

    토양수분 센서(SEN0114)를 사용하여 아두이노 시스템에 센서를 연결하고, 데이터를 수집하여 LCD에 표시하는 프로젝트는 초보자들에게 유용한 실습 기회를 제공합니다. 이 프로젝트는 아두이노의 아날로그 데이터 입력 및 LCD 출력을 통해 센서 값의 실시간 모니터링을 쉽게 구현할 수 있도록 설계되었습니다. SEN0114의 특징은 저항성 측정을 통해 간단한 방식으로 토양의 수분 함량을 평가할 수 있다는 점입니다. 이를 통해 사용자는 센서의 데이터를 해석하여 물 공급의 필요성을 판단할 수 있습니다.

     

     

     


     

     

     

    1. 토양수분 센서(SEN0114) 란?

    토양수분 센서(SEN0114)는 토양 내 수분 함량을 측정하는 저가형 센서로, 도시 정원이나 실내 화분의 물 상태를 모니터링하기에 이상적인 도구입니다. 이 센서는 토양에 삽입된 두 개의 프로브를 통해 전류를 통과시켜 토양의 저항을 측정하여 수분 수준을 판별합니다. 습기가 많은 토양은 전기가 잘 통하고(저항이 낮음), 건조한 토양은 전기가 잘 통하지 않습니다(저항이 높음). 이 원리를 이용하여 토양의 상태를 수치화해 알려줍니다.

     

     

    이 센서는 아두이노와 같은 마이크로컨트롤러에 쉽게 연결할 수 있어 스마트 가드닝 프로젝트나 자동 물주기 시스템 등에 적합합니다. 아날로그 출력 신호는 0에서 4.2V 사이의 전압으로 표현되며, 센서가 측정한 값은 다음과 같은 범위를 가집니다:

    • 0~300: 건조한 토양
    • 300~700: 적당히 습한 토양
    • 700~950: 물에 잠긴 상태

    이러한 범위는 사용자가 적절한 시점에 식물에 물을 줄지 판단할 수 있도록 돕습니다.

     


     

     

    2. 토양수분 센서(SEN0114)의 동작 원리

    토양수분 센서(SEN0114)의 동작 원리는 두 개의 프로브를 통해 전류가 흘러가는 방식을 기반으로 합니다. 이 전류의 흐름에 따라 측정되는 저항값으로 토양의 습도 상태를 측정할 수 있습니다. 센서는 토양에 삽입되어 전류를 흐르게 하고, 물이 많을수록 전류가 더 잘 흐르기 때문에 낮은 저항을 보입니다. 반대로, 건조한 토양은 전기가 잘 통하지 않아 저항이 높아집니다.

     

     

    SEN0114는 아날로그 출력 핀을 통해 데이터를 아두이노로 전송하며, 이 아날로그 데이터는 아두이노의 아날로그 핀을 통해 0~1023의 범위로 읽혀집니다. 센서에서 나온 데이터는 센서 내의 저항값을 전압으로 변환하여 아두이노에 전달합니다. 예를 들어, 건조한 토양에서는 출력값이 300 이하가 되며, 습한 상태에서는 300에서 700 사이의 값을, 물에 잠겼을 때는 700에서 950 사이의 값을 출력합니다.

    이 센서는 3.3V 또는 5V 전원으로 동작하며, 전력 소모는 약 35mA입니다. 핀 정의는 다음과 같습니다:

    • 파워(Red wire): 전원 공급 (3.3V 또는 5V)
    • GND(Black wire): 접지
    • 아날로그 출력(Blue wire): 측정값을 아두이노로 전달

    이러한 특성 덕분에 SEN0114는 식물의 상태를 모니터링하고 제어하는 프로젝트에 간편하게 사용할 수 있습니다​.

     

     

     


     

     

    3. 구입하기

     

    토양수분 센서(SEN0114)는 아두이노와 함께 프로젝트를 개발하는 데 적합하며, 다양한 온라인 전자 부품 스토어에서 구입할 수 있습니다. 가격은 일반적으로 1,000원에서 3,000원 사이이며, 배송비를 포함하면 약간의 추가 비용이 발생할 수 있습니다. 국내의 전자 부품 온라인 상점과 해외 사이트(예: 알리익스프레스)에서도 쉽게 구매할 수 있으며, 배송 기간과 판매자의 신뢰도를 고려하여 선택하는 것이 중요합니다.

     

     


     

     

    4. 하드웨어 연결하기

     

    아두이노, 16X2 LCD 쉴드, 그리고 SEN0114 토양수분 센서를 사용하여 토양의 습도 상태를 시각적으로 표시합니다. 하드웨어 연결은 아두이노의 아날로그 핀 A1과 SEN0114 센서의 SIG 핀을 연결하여 아두이노가 센서의 출력을 수신할 수 있도록 합니다.

     

     

    센서의 VCC는 아두이노의 5V 핀에 연결하여 전원을 공급하고, GND는 아두이노의 GND에 연결하여 회로의 기준 전압을 공유합니다. LCD 쉴드는 아두이노에 직접 장착되며, 코드에서 센서의 데이터를 실시간으로 표시하는 데 사용됩니다. 이를 통해 사용자는 LCD에 표시된 습도 상태("Dry Soil", "Humid Soil", "In Water")를 바로 확인할 수 있습니다. 이 연결 방식은 센서 출력이 아두이노에 전달된 후 LCD에 표시되도록 하여 사용자에게 직관적인 피드백을 제공합니다.

     

    아두이노, 16X2 LCD 쉴드, 그리고 토양수분 센서(SEN0114)로 구성됩니다. 연결 구성은 다음과 같습니다.

    1. 토양수분 센서(SEN0114):
      • SIG 핀을 아두이노의 아날로그 핀 A1에 연결합니다. 이 핀은 센서의 아날로그 출력 값을 읽어 아두이노로 전달합니다.
      • VCC 핀을 아두이노의 5V 핀에 연결하여 센서에 전원을 공급합니다.
      • GND 핀을 아두이노의 GND 핀에 연결하여 회로의 기준 전압을 공유합니다.
    2. 16X2 LCD 쉴드:
      • 이 쉴드는 아두이노에 직접 부착하여 사용하며, 디스플레이를 위한 핀 배치가 이미 설계되어 있습니다. LCD는 아두이노 보드와 자동으로 연결되므로 별도의 배선 작업이 필요하지 않습니다.
      • LCD 쉴드의 기능을 사용하여 토양수분 센서의 출력을 화면에 표시할 수 있습니다.

    연결 과정 설명:

    • SEN0114의 아날로그 출력은 센서의 측정된 토양 수분 데이터를 전달하며, 이 신호는 아두이노의 A1 핀을 통해 입력됩니다. 이 설정은 아두이노가 토양의 상태를 아날로그 값으로 인식하고, 이를 코드에서 해석하여 화면에 표시할 수 있도록 합니다.
    • LCD 쉴드는 16X2 형식으로, 간단한 프로젝트나 테스트에서 센서 출력 데이터를 시각적으로 보여주는 데 유용합니다. LCD는 아두이노와의 통합 기능 덕분에 추가적인 코드 라이브러리를 통해 쉽게 제어됩니다.

    왜 이렇게 연결하는가?:

    • SEN0114의 아날로그 출력(A1 핀 연결): 아날로그 데이터는 0~1023 사이의 값으로 아두이노에 전달되며, 이를 통해 토양의 습도를 분석할 수 있습니다. 이는 코드 내에서 analogRead() 함수를 사용해 읽어 들일 수 있습니다.
    • LCD 쉴드 사용의 이점: 측정된 값이 실시간으로 LCD에 표시됨으로써 사용자가 물리적 환경의 변화에 따라 데이터를 확인할 수 있습니다. LCD는 센서의 값이 변화함에 따라 "Dry Soil", "Humid Soil", 또는 "In Water"와 같은 상태를 알려줄 수 있습니다.

    이 연결 구성은 센서의 데이터를 실시간으로 측정하고 디스플레이에 시각화할 수 있어 가정용 식물 관리 시스템이나 소규모 농업 프로젝트에 효과적으로 활용됩니다.


     

     

    5. 소프트웨어 코딩하기

     

    센서를 제어하기 위한 소프트웨어 준비 과정은 다음과 같은 단계로 이루어집니다

     

    sen0114.ino
    0.00MB

     


    01 연결

    - 아두이노와 PC 연결

    - 아두이노 IDE 실행

    - 메뉴 → 툴 → 보드:아두이노 UNO 확인

    - 메뉴 → 스케치 → 확인/컴파일

     

    02 컴파일 확인

    스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행합니다.

     

    03 아두이노 우노 업로드

    컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 합니다.

     

    04 동작 확인

    센서의 동작을 확인할 수 있습니다.

     

    #include <LiquidCrystal.h> // LCD 제어를 위한 라이브러리 포함
    
    // LCD 핀 설정: RS, E, D4, D5, D6, D7
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    const int sensorPin = A1; // SEN0114 센서가 연결된 아날로그 핀
    int soilMoistureValue;    // 토양 수분 값을 저장할 변수
    
    void setup() {
      lcd.begin(16, 2);        // 16x2 LCD 초기화
      pinMode(sensorPin, INPUT); // 센서 핀을 입력 모드로 설정
      initializeLCD();         // LCD 초기 메시지 출력
    }
    
    void loop() {
      soilMoistureValue = readSoilMoisture(); // 토양 수분 값 읽기
      displaySoilStatus(soilMoistureValue);   // 읽은 값을 기반으로 LCD에 상태 표시
      delay(500);                             // 0.5초 대기 후 다시 측정
    }
    
    // 초기 LCD 메시지 출력 함수
    void initializeLCD() {
      lcd.setCursor(0, 0);
      lcd.print("SEN0114 READY"); // 센서 준비 상태 출력
      delay(1000);
      lcd.clear();                // 초기화 후 화면 지우기
    }
    
    // 토양 수분 값을 읽어 평균 계산하는 함수
    int readSoilMoisture() {
      int totalValue = 0;
      const byte sampleCount = 10; // 샘플 수
      
      for (int i = 0; i < sampleCount; i++) {
        totalValue += analogRead(sensorPin); // 센서 값 누적
        delay(20);                           // 각 측정 간 20ms 대기
      }
      
      return totalValue / sampleCount;       // 평균값 반환
    }
    
    // LCD에 토양 상태를 출력하는 함수
    void displaySoilStatus(int moistureValue) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Moisture: ");
      lcd.print(moistureValue); // 측정된 수분 값 출력
    
      lcd.setCursor(0, 1);
      // 토양 상태에 따른 출력
      if (moistureValue <= 300) {
        lcd.print("Dry Soil"); // 건조 상태
      } else if (moistureValue > 300 && moistureValue <= 700) {
        lcd.print("Humid Soil"); // 적당히 습한 상태
      } else {
        lcd.print("In Water"); // 물에 잠긴 상태
      }
    }

     

    코드 설명:

    • setup() 함수는 LCD를 초기화하고 센서 핀을 설정하며, initializeLCD() 함수를 통해 초기 메시지를 LCD에 출력합니다.
    • readSoilMoisture() 함수는 센서에서 여러 번 데이터를 읽어 평균을 반환하여 측정의 신뢰성을 높입니다.
    • displaySoilStatus() 함수는 측정된 값을 LCD에 출력하고, 값의 범위에 따라 토양 상태("Dry Soil", "Humid Soil", "In Water")를 표시합니다.
    • 코드의 구조는 간결하고 효율적이며, 각 함수가 명확한 역할을 수행하도록 최적화되었습니다.

    제공된 코드는 아두이노, 16X2 LCD 쉴드, 그리고 SEN0114 토양수분 센서를 제어하여 토양 상태를 실시간으로 표시하는 프로그램입니다. 코드의 동작 순서에 따라 어떻게 구성되고 동작하는지 설명하면 다음과 같습니다:

    1. 초기 설정: 코드의 시작 부분에서 LiquidCrystal 라이브러리를 포함하여 LCD 제어를 가능하게 하고, LCD와 아두이노의 핀 연결을 정의합니다. sensorPin은 SEN0114 센서의 신호를 읽어들이기 위해 A1 핀으로 설정됩니다. 이는 아두이노가 토양 수분 데이터를 수집할 수 있도록 준비합니다.
    2. setup() 함수: 이 함수는 아두이노가 초기화 시 수행하는 부분입니다. lcd.begin(16, 2)를 통해 16x2 LCD 화면을 초기화하고, pinMode(sensorPin, INPUT)를 설정하여 아날로그 입력으로 센서 데이터를 받을 준비를 합니다. 이후 initializeLCD() 함수가 호출되어 "SEN0114 READY"라는 초기 메시지를 1초간 출력해 사용자에게 시스템이 준비되었음을 알립니다.
    3. 센서 데이터 읽기: readSoilMoisture() 함수는 analogRead()를 사용해 A1 핀에서 센서 데이터를 반복적으로 읽고 평균값을 반환합니다. 10번의 측정을 통해 평균을 내어 데이터의 신뢰성을 높이며, 각 읽기 사이에 20ms의 지연 시간을 두어 안정적인 측정을 보장합니다.
    4. 데이터 해석 및 LCD 출력: displaySoilStatus() 함수는 읽어온 센서 값을 LCD에 출력하고 그에 따라 토양 상태를 "Dry Soil", "Humid Soil", 또는 "In Water"로 표시합니다. 이 과정에서 LCD의 내용을 지운 후(lcd.clear()) 값과 상태를 업데이트하며, 각 상태는 센서 값의 범위에 따라 다르게 출력됩니다.
    5. 반복 측정 및 대기: loop() 함수는 지속적으로 readSoilMoisture()를 호출해 데이터를 읽고 displaySoilStatus()를 통해 LCD에 표시합니다. 0.5초의 지연(delay(500))을 두어 시스템이 너무 빠르게 갱신되지 않도록 하며, 지속적인 데이터 갱신을 통해 사용자가 실시간으로 토양 상태를 확인할 수 있습니다.

    이 코드의 구성은 센서 데이터 수집, 데이터 분석 및 해석, 시각적 출력의 흐름으로 이어져, 간단하지만 실용적인 실시간 토양 수분 모니터링 시스템을 제공합니다. 사용자는 이를 통해 식물의 물 상태를 시각적으로 쉽게 파악할 수 있습니다.

     

     

    다음은 코드의 동작 예시입니다.

     

    예시 실행 흐름:

    1. 시작: 아두이노를 부팅하면 LCD에 "SEN0114 READY" 메시지가 나타나며 1초간 유지됩니다.
    2. 센서 데이터 읽기: SEN0114 센서에서 값을 읽어 평균값을 계산합니다. 예를 들어, 측정된 평균값이 350일 경우 analogRead()를 통해 반환됩니다.
    3. LCD 출력:
      • 측정값 350일 때, LCD는 다음과 같이 표시됩니다:
        Moisture: 350
        Humid Soil
         
      • 측정값 200일 경우:
        Moisture: 200
        Dry Soil
         
      • 측정값 750일 경우:
        Moisture: 750
        In Water
    4. 지속적인 업데이트: 0.5초 후 반복하여 새로운 센서 값을 읽고 LCD에 갱신된 값을 출력합니다.

     


     

    6. 동작 확인

    코드가 제대로 작동하는지 확인하기 위해 아두이노 보드에 업로드된 프로그램을 실행합니다. 아두이노가 PC에 연결되면 시리얼 모니터를 열어 센서가 수집한 데이터를 실시간으로 확인할 수 있습니다. LCD 쉴드에 출력되는 메시지를 통해 토양 상태가 예상한 대로 표시되는지 점검합니다. 예를 들어, 토양이 매우 건조할 때는 "Dry Soil"이 표시되고, 중간 상태일 경우 "Humid Soil", 물에 충분히 젖어 있으면 "In Water" 메시지가 나타나는지 확인합니다.

     

     

     

    센서가 읽은 아날로그 값과 LCD에 표시된 상태가 일치하지 않을 경우, 배선 연결이나 센서의 작동 상태를 다시 점검해야 합니다. 만약 값이 항상 일정하거나, 변화가 없으면 센서의 고장이나 전원 연결 문제를 의심해 볼 수 있습니다. 센서를 여러 토양 상태에서 테스트하여 값의 변화가 제대로 출력되는지 확인하는 것도 중요합니다.

     


     

     

    7. 마무리

    이 프로젝트를 통해 사용자는 토양의 습도 상태를 실시간으로 모니터링하는 시스템을 성공적으로 구현할 수 있습니다. 이를 통해 식물의 물 공급 시기를 쉽게 파악할 수 있으며, 이를 확장하여 자동 물주기 시스템을 개발할 수도 있습니다. 프로젝트의 핵심은 SEN0114 센서의 출력을 아두이노로 처리하고, 이를 LCD에 표시하여 사용자가 직관적으로 토양 상태를 확인할 수 있게 하는 것입니다.

     

    프로젝트를 마무리하면서, 초보자들이 센서와 LCD 쉴드 사용법을 익히고 아두이노를 통해 데이터를 시각화하는 경험을 쌓을 수 있습니다. 추가로, 이러한 시스템을 더욱 자동화하고 개선하기 위해 물 펌프를 추가하여 물 공급을 자동으로 할 수 있는 기능도 고려해 볼 수 있습니다. 이번 프로젝트는 기초적인 IoT 및 스마트 농업 시스템의 시작점이 될 수 있으며, 확장 가능한 플랫폼으로서 많은 가능성을 제공합니다.

     

    https://youtu.be/dnX2hwgWGTo

     

    반응형


    댓글