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

SEN0244 TDS 아두이노 센서 (LCD16X2 키패드실드)

by 로니킴 2021. 5. 15.


본 절은 [SEN0244 TDS] 아두이노 센서를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. 아두이노 센서의 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. 아두이노와 센서를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다. 

 

목차

     

     

     


    SEN0244 TDS 아두이노 센서 (LCD16X2 키패드실드)

     

     

     

     

     

     


    SEN0244 TDS 센서란?

    SEN0244 센서는 물의 TDS를 측정하는 센서이다.   

     

    [센서 사양]

     

    신호 송신기 보드

    • 입력 전압 : 3.3 ~ 5.5V
    • 출력 전압 : 0 ~ 2.3V
    • 작동 현재 : 3 ~ 6mA
    • TDS 측정 범위 : 0 ~ 1000ppm
    • TDS 측정 정확도 : ± 10 % FS (25 ℃)
    • 모듈 크기 : 42 * 32mm
    • 모듈 인터페이스 : PH2.0-3P
    • 전극 인터페이스 : XH2.54-2P

    TDS 프로브

    • 바늘의 수 : 2
    • 총계 길이 : 83cm
    • 연결 인터페이스 : XH2.54-2P
    • 컬러 : 블랙
    • 기타 : 방수 프로브

     

    + 더 알아보기

     

    SEN0244 TDS 아두이노 센서

    본 절은 [SEN0244 TDS] 아두이노 센서를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. 아두이노 센서의 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. 아두이

    arduinosensors.tistory.com

     

     


     

    SEN0244 TDS 하드웨어 연결

    다음과 같이 아두이노 센서를 연결할 수 있다. 

     

     

     

     

     


     

    SEN0244 TDS 소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 아두이노 센서 소스코드를 코딩할 수 있다. 

    센서 코드는 다음과 같다. 

    /*
       TDS SEN0244 Analog EC Meter
       
       @ 모두의 아두이노 환경 센서 (Arduino Sensors for Everyone)
          https://book.naver.com/bookdb/book_detail.nhn?bid=18030644
       @ author STEAMEDU123 <steamedu123@gmail.com>
    */
    
    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    #define TdsSensorPin A1
    #define VREF 5.0
    #define SCOUNT  30
    
    int analogBuffer[SCOUNT];
    int analogBufferTemp[SCOUNT];
    int analogBufferIndex = 0, copyIndex = 0;
    float averageVoltage = 0, temperature = 25;
    
    float tdsValue = 0;
    float  ecValue = 0;
    
    void setup()
    {
      Serial.begin(115200);
      initLCD();
      pinMode(TdsSensorPin, INPUT);
    }
    
    void loop()
    {
      TDS_read();
      TDS_print();
    }
    
    void TDS_read() {
      static unsigned long analogSampleTimepoint = millis();
      if (millis() - analogSampleTimepoint > 40U)
      {
        analogSampleTimepoint = millis();
        analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);
        analogBufferIndex++;
        if (analogBufferIndex == SCOUNT)
          analogBufferIndex = 0;
      }
    }
    
    void TDS_print() {
      static unsigned long printTimepoint = millis();
      if (millis() - printTimepoint > 800U)
      {
        printTimepoint = millis();
    
        for (copyIndex = 0; copyIndex < SCOUNT; copyIndex++) {
          analogBufferTemp[copyIndex] = analogBuffer[copyIndex];
        }
    
        averageVoltage = getMedianNum(analogBufferTemp, SCOUNT) * (float)VREF / 1024.0;
    
        float compensationCoefficient = 1.0 + 0.02 * (temperature - 25.0);
        float compensationVolatge = averageVoltage / compensationCoefficient;
    
        tdsValue = (133.42 * compensationVolatge * compensationVolatge * compensationVolatge - 255.86 * compensationVolatge * compensationVolatge + 857.39 * compensationVolatge) * 0.5;
        ecValue = tdsValue / 640;
        displayLCD();
      }
    }
    
    int getMedianNum(int bArray[], int iFilterLen)
    {
      int bTab[iFilterLen];
    
      for (byte i = 0; i < iFilterLen; i++) {
        bTab[i] = bArray[i];
      }
    
      int i, j, bTemp;
      for (j = 0; j < iFilterLen - 1; j++)
      {
        for (i = 0; i < iFilterLen - j - 1; i++)
        {
          if (bTab[i] > bTab[i + 1])
          {
            bTemp = bTab[i];
            bTab[i] = bTab[i + 1];
            bTab[i + 1] = bTemp;
          }
        }
      }
    
      if ((iFilterLen & 1) > 0) {
        bTemp = bTab[(iFilterLen - 1) / 2];
      } else {
        bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
      }
    
      return bTemp;
    }
    
    //----------------------- Display -------------------------------------------
    void initLCD() {
      lcd.begin(16, 2);
    
      lcd.setCursor(0, 0);
      lcd.print("TDS SEN0244");
    
      lcd.setCursor(0, 1);
      lcd.print("TDS init...");
      delay(1000);
      lcd.clear();
    }
    
    void displayLCD() {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("TDS:");
      lcd.print(tdsValue, 0);
      lcd.print("ppm");
    
      lcd.setCursor(0, 1);
      lcd.print("EC :");
      lcd.print(ecValue);
      lcd.print("ms/cm");
    
    }

     

     

     


     

    SEN0244 TDS 센서 동작확인

    하드웨어 연결, 소프트웨어 코딩이 완료되면 다음과 같이 동작 화면을 확인할 수 있다. 

     

    ------------------------------------------------------ 
    개발환경 : WINDOWS 10 
    아두이노 IDE : 1.8.13 
    ------------------------------------------------------ 
    01 연결
     - 아두이노와 PC 연결 
     - 아두이노 IDE 실행 
     - 메뉴 → 툴 → 보드:아두이노 UNO 확인 
      - 메뉴 → 스케치 → 확인/컴파일 

    02 컴파일 확인 

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

     


    03 아두이노 우노 업로드 

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


    04 동작 확인

     

    샘플 코드를 업로드 한 후 아두 이노 IDE의 시리얼 모니터를 열고 TDS 프로브를 물에 넣고 부드럽게 저어 주면 판독 값이 안정 될 때까지 기다리면 물의 TDS 값을 얻을 수 있다.

     

    다음과 같이 동작을 확인할 수 있다. 

     

     

    [주의사항]

    프로브는 섭씨 55도 이상의 물에서 사용할 수 없다. 
    프로브는 용기 가장자리에 너무 가까워서는 안된다. 그렇지 않으면 판독에 영향을 미칩니다.
    프로브의 헤드와 케이블은 방수이지만 커넥터와 신호 송신기 보드는 방수가되지 않으므로 사용에 주의해야 한다. 

     


     

     

    마무리

    아두이노와 SEN0244 TDS 센서를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다. 

     

     

     

     

     


     

    모두의 아두이노 환경 센서 책

    [모두의 아두이노 환경 센서] 책은 예스24, 인터넷 교보문고, 알라딘, 인터파크도서, 영풍문고, 반디앤루니스 , 도서11번가 등에서 구입할 수 있다. 이 책에서는 PMS7003, GP2Y1010AU0F, PPD42NS, SDS011 미세먼지 센서, DHT22 온습도 센서, MH-Z19B 이산화탄소 센서, ZE08-CH2O 포름알데히드 센서, CCS811 총휘발성유기화합물 TVOC, GDK101 방사선(감마선) 센서, MQ-131 오존(O3) 센서, MQ-7 일산화탄소, MICS-4514 이산화질소 센서, MICS-6814 암모니아 센서, DGS-SO2 아황산가스(SO2) 센서, BME280 기압 센서, GUVA-S12SD 자외선(UV) 센서, MD0550 기류 센서, QS-FS01 풍속 센서(Wind speed) 를 사용한다.  

     

    모두의 아두이노 환경 센서

    아두이노와 센서로 내 건강을 지킬 수 있다!다양한 환경 센서를 실생활 프로젝트에 응용해보자!시중에 판매되고 있는 간이측정기도 센서로 값을 측정합니다. 똑같은 센서를 아두이노에 연결하

    book.naver.com

     

     

     

     



    댓글