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

PH-4502C pH 아두이노 센서 (LCD16X2 + RGB + DS18B20)

by 로니킴 2021. 5. 14.


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

 

 

목차

     

     

     


    PH-4502C pH 아두이노 센서 (LCD16X2 + RGB + DS18B20)

     


    PH-4502C pH 센서란?

    PH-4502C는 물의 pH를 측정하는 센서이다.

     

     

     

    PH-4502C pH 아두이노 센서

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

    arduinosensors.tistory.com

     

     


     

    PH-4502C pH 센서 하드웨어 연결

    다음과 같이 PH-4502C pH 아두이노 센서를 연결할 수 있다. 

     

     

     

     


     

    PH-4502C pH 센서 소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 PH-4502C pH 아두이노 센서 소스코드를 코딩할 수 있다. PH-4502C pH 센서 코드는 다음과 같다. 

    /*
       PH Meter + RGB Led + DS18B20
       315-DFR0300_LCD.ino
       @ author STEAMEDU123 <steamedu123@gmail.com>
    */   
    
    #include <LiquidCrystal.h>
    #include <OneWire.h>
    
    const int redPin = A3;
    const int greenPin = A4;
    const int bluePin = A5;
    
    const int PHsensorPin = A1;
    const int DS18B20_Pin = 2;
    
    
    int sensorValue = 0;
    unsigned long int avgValue;
    float b;
    int buf[10], temp;
    
    float pHVol;
    float phValue;
    
    float temperature;
    unsigned long tempSampleTime;
    unsigned int tempSampleInterval = 850;
    
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    OneWire ds(DS18B20_Pin);
    
    
    void setup() {
      Serial.begin(9600);
      initLCD();
      initRGB();
    }
    
    void loop() {
    
      PH_read();
      DS18B20_read();
      delay(500);
    }
    
    void PH_read() {
      float calibration = 6.42 - (-14.50); //change this value to calibrate
      averageAnalogRead();
    
      pHVol = ((float)avgValue * 5.0 / 1024 / 6) - 0.08;
      phValue = (-5.70 * pHVol + calibration) ;
    
      displayLCD();
    
    
    }
    
    void averageAnalogRead() {
      for (int i = 0; i < 10; i++)
      {
        buf[i] = analogRead(PHsensorPin);
        delay(30);
      }
    
      for (int i = 0; i < 9; i++)
      {
        for (int j = i + 1; j < 10; j++)
        {
          if (buf[i] > buf[j])
          {
            temp = buf[i];
            buf[i] = buf[j];
            buf[j] = temp;
          }
        }
      }
    
      avgValue = 0;
    
      for (int i = 2; i < 8; i++) {
        avgValue += buf[i];
      }
    }
    
    
    void DS18B20_read() {
      if (millis() - tempSampleTime >= tempSampleInterval) {
        tempSampleTime = millis();
        temperature = TempProcess(1);
        TempProcess(0);
      }
    }
    
    
    //----------------------- DS18B20 -------------------------------------------
    
    float TempProcess(bool ch)
    {
      //returns the temperature from one DS18B20 in DEG Celsius
      static byte data[12];
      static byte addr[8];
      static float TemperatureSum;
    
      if (!ch) {
        if ( !ds.search(addr)) {
          Serial.println("no more sensors on chain, reset search!");
          ds.reset_search();
          return 0;
        }
    
        if ( OneWire::crc8( addr, 7) != addr[7]) {
          Serial.println("CRC is not valid!");
          return 0;
        }
    
        if ( addr[0] != 0x10 && addr[0] != 0x28) {
          Serial.print("Device is not recognized!");
          return 0;
        }
    
        ds.reset();
        ds.select(addr);
        ds.write(0x44, 1);
    
      } else {
        byte present = ds.reset();
        ds.select(addr);
        ds.write(0xBE);
    
        for (int i = 0; i < 9; i++) {
          data[i] = ds.read();
        }
    
        ds.reset_search();
        byte MSB = data[1];
        byte LSB = data[0];
        float tempRead = ((MSB << 8) | LSB);
    
        TemperatureSum = tempRead / 16;
      }
    
      return TemperatureSum;
    }
    
    
    //----------------------- Display -------------------------------------------
    void initLCD() {
      lcd.begin(16, 2);
    
      lcd.setCursor(0, 0);
      lcd.print("PH probe Sensor");
      delay(1000);
      lcd.clear();
    }
    
    void displayLCD() {
      Serial.print("sensor = ");
      Serial.print(pHVol);
      Serial.print(" ");
      Serial.println(phValue);
    
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("TEMP:");
      lcd.print(temperature);
    
      lcd.setCursor(0, 1);
      lcd.print("V:");
      lcd.print(pHVol);
    
      lcd.print(" PH:");
      lcd.print(phValue);
    
      if (phValue <= 4 ) setRGBcolor(255, 0, 0);
      else if (phValue <= 7 ) setRGBcolor(0, 255, 0);
      else setRGBcolor(0, 0, 255);
    
    }
    
    
    //----------------------- Display RGB LED  -------------------------------------------
    void initRGB() {
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);
    }
    
    void setRGBcolor(int red, int green, int blue)
    {
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);
    }

     

     

     


     

    PH-4502C pH 센서 동작확인

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

     

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

    02 컴파일 확인 

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

     

    03 아두이노 우노 업로드 

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

     


    04 동작 확인

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

     

     

     

     

     

     

    [동작영상]

     

     

     

     

     

     


     

    PH-4502C pH 센서 마무리

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

     

     

     

    PH-4502C pH 아두이노 센서 (LCD16X2 키패드실드)

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

    arduinosensors.tistory.com

     

     

     

     


    모두의 아두이노 환경 센서

    [모두의 아두이노 환경 센서] 책은 예스24, 인터넷 교보문고, 알라딘, 영풍문고, 반디앤루니스 등에서 구입할 수 있다. 이 책에서는 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

     



    댓글