Translate

Monitor PH Turbidity NTU TDS Suhu IOT Notif TELEGRAM

Monitor PH Turbidity NTU TDS Suhu IOT Notif TELEGRAM


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur PH ,TDS ,NTU ,Turbidity ,Suhu dan notif IOT telegram untuk lebih jelasnya berikut adalah koding dan foto alatnya.

 
1. Foto Alat




2. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
#include <OneWire.h>
#include <DallasTemperature.h>

LiquidCrystal_I2C lcd(0x27,20,4);
#define TdsSensorPin A2
#define ONE_WIRE_BUS 7  
const int pHMeterPin = A0;
const int sensorTurbi = A1;
float volt;
float ntu;
float TempC;

int phx;
int suhux;
int ntux;
int tdsx;

#define VREF 5.0      // analog reference voltage(Volt) of the ADC
#define SCOUNT  30           // sum of sample point
int analogBuffer[SCOUNT];    // store the analog value in the array, read from ADC
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0,copyIndex = 0;
float averageVoltage = 0,tdsValue = 0,temperature = 25;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600); // Start serial communication at 9600 baud rate
  lcd.begin();  
  lcd.clear();
  lcd.noCursor();  
  pinMode(TdsSensorPin,INPUT);
  Wire.begin();  
  sensors.begin();
}

void loop() {
  int sensorValue = analogRead(pHMeterPin); // Read the analog value from sensor
  float voltage = sensorValue * (5.0 / 1023.0); // Convert to voltage
  float pH = (voltage * 3.5) + 0.5; // Convert voltage to pH value (example equation)

  volt = 0;
    for(int i=0; i<800; i++)
    {
        volt += ((float)analogRead(sensorTurbi)/1023)*5;
    }
    volt = volt/800;
    volt = round_to_dp(volt,2);
    if(volt < 2.5){
      ntu = 3000;
    }else{
      ntu = -1120.4*square(volt)+5742.3*volt-4353.8; 
    }

//==========================================
static unsigned long analogSampleTimepoint = millis();
   if(millis()-analogSampleTimepoint > 40U)     //every 40 milliseconds,read the analog value from the ADC
   {
     analogSampleTimepoint = millis();
     analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);    //read the analog value and store into the buffer
     analogBufferIndex++;
     if(analogBufferIndex == SCOUNT) 
         analogBufferIndex = 0;
   }   
   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; // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      float compensationCoefficient=1.0+0.02*(temperature-25.0);    //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
      float compensationVolatge=averageVoltage/compensationCoefficient;  //temperature compensation
      tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value
      //Serial.print("voltage:");
      //Serial.print(averageVoltage,2);
      //Serial.print("V   ");
      //Serial.print("TDS Value:");
      //Serial.print(tdsValue,0);
      //Serial.println("ppm");
      
     lcd.setCursor(0,2);
     lcd.print("TDS: ");
     lcd.print(tdsValue,0);
     lcd.print(" ppm  ");
   }

  sensors.requestTemperatures();
  TempC = sensors.getTempCByIndex(0); // Celcius
  
  lcd.setCursor(0,0);
  lcd.print("pH: ");
  lcd.print(pH,1);
  lcd.print("  ");
   
  lcd.setCursor(0,1);
  lcd.print("NTU: ");
  lcd.print(ntu,0);
  lcd.print("  ");

  lcd.setCursor(0,3);
  lcd.print("Suhu: ");
  lcd.print(TempC,0);
  lcd.print(" C  ");

 phx = pH;
 ntux = ntu;
 tdsx = tdsValue;
 suhux = TempC;

  Serial.print("*");
  Serial.print(phx);
  Serial.print(",");
  Serial.print(ntux);
  Serial.print(",");
  Serial.print(tdsx);
  Serial.print(",");
  Serial.print(suhux);
  Serial.println("#");

  delay(1000); // Wait for a second before reading again
}

float round_to_dp( float in_value, int decimal_place )
{
  float multiplier = powf( 10.0f, decimal_place );
  in_value = roundf( in_value * multiplier ) / multiplier;
  return in_value;
}


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;
}



3. Program ESP8266

#include <SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

#define BOTtoken "8599512345:AAHWGXsuTQp5IRhkjhhgyrdrdSFDdtrdtdgh" //token bot telegram
#define idChat "1123456777" //idbot

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

int temp;
int x = 5;
int y;

int value1;
int value2;
int value3;
int value4;

int ph;
int tds;
int ntu;
int suhu;

int datain1;
int datain2;
int datain3;
int datain4;

String dataIn;
String dt[10];
int i;
boolean parsing = false;

char ssid[] = "hotspothpku";
char pass[] = "1234567890";


void setup(){  
  
  client.setInsecure();
  Serial.begin(9600);
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  delay(5000);
}

void loop() {
        
while(Serial.available()>0) {
//   dataIn="";
    char inChar = (char)Serial.read();
    dataIn += inChar;
    if (inChar == '\n') {
    parsing = true;
  }
}

if(parsing){
    parsingData();

    bot.sendChatAction(idChat, "Sedang mengetik...");
    
    String hasil = " PH : "; hasil += int(ph);
    hasil += " NTU : "; hasil += int(ntu);
    hasil += " TDS : "; hasil += int(tds);
    hasil += " SUHU : "; hasil += int(suhu);
    bot.sendMessage(idChat, hasil, "");
    Serial.print("Mengirim data sensor ke telegram");
    
  delay(200);

}
 
delay(1000);
}

void parsingData(){
int j=0;

//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");

//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]="";       //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}

 datain1 = dt[0].toInt();
 datain2 = dt[1].toInt();
 datain3 = dt[2].toInt();
 datain4 = dt[3].toInt();

 Serial.print(datain1);Serial.print("||"); Serial.print(datain2);Serial.print("||"); Serial.print(datain3);Serial.print("||"); Serial.println(datain4);
 
 ph = datain1;
 ntu = datain2;
 tds = datain3;
 suhu = datain4;
 
 
 

4. VIDEO HASILNYA




No comments:

Post a Comment