My Story.

Modul 4- Automatisasi Pendeteksi PH Air Limbah Buangan Industri


Modul 4 Praktikum Mikroprosessor & Mikrokontroller

Project DEMO : Alat deteksi PH Limbah Buangan Industri




MODUL 4

PROJECT DEMO



A. praktikan dapat menerapkan sebuah sistem menggunakan mikrokontroller.
B. praktikan dapat mengkombinasikan berbagai macam output, akumulator, display, dan berbagai media output lainnya menjadi sebuah alat.

C. praktikan dapat merancang suatu sistem menjadi sebuah alat.

Tujuan alat:
A. Merancang alat yang dapat mendeteksi PH limbah.
B. Membuat sistem pengolahan air limbah dengan valve.


Komponen yang digunakan untuk instalasi alat ini diuraikan sebagai berikut :

a. Sensor PH (SKU SEN0161)

Sensor PH ini memiliki tingkat keakurasian data 0,1 dengan respons waktu kurang dari satu menit. Sensor ini terdiri dari LED sebagai power indicator, konektor BNC, dan interface sensor PH 2.0. Penggunaan sensor ini dilakukan dengan cara menghubungkan probe sensor dengan Arduino dalam kit modul menggunakan kabel analog ke IO expansion shield atau digunakan jumper.


b. Sensor Suhu (DS18B20)
Sensor DS18B20 merupakan sensor yang digunakan untuk suhu air (waterproof sensor). Sensor ini dapat mengukur temperatur mulai dari -55°C sampai 125°C. Memiliki tingkat akurasi hingga 0,5°C pada rentang -10 hingga +85°C.

c. LCD 16 X 2 :
d. 12 MM Solenoid valve 1/2

「12mm solenoid valve」の画像検索結果"

e. Arduino Mega 2560

Arduino Mega 2560 digunakan karena memiliki flash memory yang lebih besar dari kontroller lainnya bernilai 256kb yang digunakan sebagai memori penyimpanan data low volatile pada Arduino.
Board ini memiliki pin I/O sejumlah 54 buah digital I/O pin (15 pin diantaranya adalah PWM), 16 pin analog input, 4 pin UART (serial port hardware). Arduino Mega 2560 memiliki 16 pin sebagai analog input, yang masing-masing menyediakan resolusi 10 bit

f. ESP8266


「esp8266」の画像検索結果"
g. Kabel Jumper


Hasil gambar untuk kabel jumper
h. Breadboard

「breadboard」の画像検索結果"

a. Sensor PH (SKU SEN0161)

Ujung elektroda kaca memiliki ketebalan 0,1 mm berbentuk silinder (bulat). Didalamnya terdapat larutan HCl (0,1 mol/dm3) setelah larutan AgCl. Inti sensor pH terdapat pada permukaan kaca yang memungkinkan untuk membandingkan ion positif didalam kaca dengan larutan terukur [2]. Kaca tersusun atas molekul silicon dioksida dengan sejumlah ikatan logam alkali. Pada saat kaca terekspos air, ikatan

SiO akan menerima elektron dan membentuk membran tipis HSi𝑂+ sesuai dengan reaksi:
SiOH3O+   HSiO+ + H2O                               (2.2)

Pertukaran ion hydronium antara permukaan kaca dengan larutan diluar kaca menjadikan hal ini sebagai tolak ukur dalam pengukuran jumlah ion 𝐻3𝑂+ didalam larutan. Kesetimbangan pertukaran ion yang terjadi akan menghasilkan beda potensial diantara keduanya, sebagai berikut:
Edinding kaca/larutan  = | RT/2,303F loga(H3O+) |                (2.3)

R adalah kostanta molar gas (8,314 J/mol K), T untuk suhu (Kelvin), F adalah konstanta faraday 96.485 C/mol, dan 2.303 merupakan konversi algoritma alami. Pada temperature 25°C nilainya mendekati 59,16 mV [2]. Nilai tegangan yang didapatkan akan dikonversikan menjadi besaran nilai pH. Data konversi nilai tegangan menuju nilai pH dapat dilihat pada tabel 2.3.




Gambar 2.2 Karakteristik kurva perubahan pH[2].
Sensor pH yang digunakan pada penelitian ini adalah sensor pH meter SKU SEN0161 seperti terlihat pada Gambar 2.3. Sensor pH digunakan untuk mendeteksi derajat keasaman dari limbah yang dianalisa. Sensor pH ini memiliki tingkat keakurasian data 0,1 dengan respons waktu kurang dari satu menit. Sensor ini terdiri dari LED sebagai power indicator, konektor BNC, dan interface sensor PH 2.0. Penggunaan sensor ini dilakukan dengan cara menghubungkan probe sensor dengan Arduino dalam kit modul menggunakan kabel analog ke IO expansion shield atau digunakan jumper.


Gambar. Elektroda kaca dan elektroda referensi.
Proses perendaman elektroda kecil Ag/AgCl dengan larutan HCl (elektrolit) terjadi pada bagian elektroda referensi. Pada ujung elektroda referensi terdapat liquid junction berupa bahan keramik sebagai tempat pertukaran ion elektrolit dengan larutan terukur yang akan menciptakan aliran listrik untuk mengukur nilai derajat keasaman yang dicobakan [2].


Pengaruh Perubahan Temperatur [10].

Penggunaan sensor temperature sangat diperlukan pada rangkaian pH meter yang dipengaruhi oleh temperatur larutan. Temperatur ini sangat berpengaruh terhadap pH larutan yang didalamnya terdapat kesetimbangan H+ dan OH- dari asam dan basa lemah atau kesetimbangan ion terlarut [2]. Kesetimbangan yang terdapat dalam larutan tersebut sangat tergantung kepada sifat zat padat terlarutnya tersebut. Berikut diagram modul sensor pH pada Gambar 2.6.



Diagram pH meter 


Elektroda diperkuat dengan amplifier mV sebelum dikirim ke A/D converter, sinyal dari A/D converter kemudian akan dikirim ke mikroprosesor untuk dilakukan perhitungan.

b. Sensor Suhu (DS18B20)

Bentuk  fisik  dari  DS18B20  dapat terlihat pada Gambar 2.8, komponen ini mempunyai  tiga  kaki  yang  terdiri  dari  GND untuk ground,  DQ  untuk  data  masukan  atau data  keluaran,  dan  VDD untuk  daya device. Salah  satu  keunggulan  lain  yaitu device  ini tidak memerlukan daya dari luar, daya dapat diambil  langsung  oleh device  ini  dari  kaki DQ  atau  kaki  untuk  data,  istilah  lainnya yaitu parasit power. Sensor DS18B20 merupakan sensor yang digunakan untuk suhu air (waterproof sensor). Sensor ini dapat mengukur temperatur mulai dari -55°C sampai 125°C. Memiliki tingkat akurasi hingga 0,5°C pada rentang -10 hingga +85°C [9]. Karakteristik nilainya secara detail dijabarkan melalui Tabel 1.

Tabel 1. Karakteristik Sensor Suhu DS18B20 [10].

Parameter
Symbol
Condition
Min
Tipe
Max
Unit
T
Thermometer
error
    -10°C To +85°C


   ±½
°C
     -55°C To +125°C
±2
   Input logic high
      Local Power Parasite Power
     2.2
     3.0

     5.5
V
    Input logic low

  -0.3

    +0.8
V
Sink current
= 0.4 V
   -4.0


mA
   Standby Current


     750
    1000
nA
    Active Current


    1
    1.5
mA
   DQ-Input Load Current


    5

µA



Sensor suhu DS18B20 memiliki tingkat error yang diwakilkan dari grafik berikut :

                                                           (DataSheet Sensor DS18B20)
c. LCD 16X2

LCD (Liquid Crystal Display) adalah suatu jenis media tampil yang menggunakan kristal cair sebagai penampil utama. LCD sudah digunakan diberbagai bidang misalnya alal–alat elektronik seperti televisi, kalkulator, atau pun layar komputer. Pada postingan aplikasi LCD yang dugunakan ialah LCD dot matrik dengan jumlah karakter 2 x 16. LCD sangat berfungsi sebagai penampil yang nantinya akan digunakan untuk menampilkan status kerja alat.

Fitur LCD 16 x 2

Adapun fitur yang disajikan dalam LCD ini adalah :

a. Terdiri dari 16 karakter dan 2 baris.

b. Mempunyai 192 karakter tersimpan.

c. Terdapat karakter generator terprogram.

d. Dapat dialamati dengan mode 4-bit dan 8-bit.

e. Dilengkapi dengan back light.

Cara Kerja LCD 16X2 Secara umum adalah:
Pada aplikasi umumnya RW diberi logika rendah “0”. Bus data terdiri dari 4-bit atau 8-bit. Jika jalur data 4-bit maka yang digunakan ialah DB4 sampai dengan DB7. Sebagaimana terlihat pada table diskripsi, interface LCD merupakan sebuah parallel bus, dimana hal ini sangat memudahkan dan sangat cepat dalam pembacaan dan penulisan data dari atau ke LCD. Kode ASCII yang ditampilkan sepanjang 8-bit dikirim ke LCD secara 4-bit atau 8 bit pada satu waktu. Jika mode 4-bit yang digunakan, maka 2 nibble data dikirim untuk membuat sepenuhnya 8-bit (pertama dikirim 4-bit MSB lalu 4-bit LSB dengan pulsa clock EN setiap nibblenya). Jalur kontrol EN digunakan untuk memberitahu LCD bahwa mikrokontroller mengirimkan data ke LCD. Untuk mengirim data ke LCD program harus menset EN ke kondisi high “1” dan kemudian menset dua jalur kontrol lainnya (RS dan R/W) atau juga mengirimkan data ke jalur data bus.

Saat jalur lainnya sudah siap, EN harus diset ke “0” dan tunggu beberapa saat (tergantung pada datasheet LCD), dan set EN kembali ke high “1”. Ketika jalur RS berada dalam kondisi low “0”, data yang dikirimkan ke LCD dianggap sebagai sebuah perintah atau instruksi khusus (seperti bersihkan layar, posisi kursor dll). Ketika RS dalam kondisi high atau “1”, data yang dikirimkan adalah data ASCII yang akan ditampilkan dilayar. Misal, untuk menampilkan huruf “A” pada layar maka RS harus diset ke “1”. Jalur kontrol R/W harus berada dalam kondisi low (0) saat informasi pada data bus akan dituliskan ke LCD. Apabila R/W berada dalam kondisi high “1”, maka program akan melakukan query (pembacaan) data dari LCD. Instruksi pembacaan hanya satu, yaitu Get LCD status (membaca status LCD), lainnya merupakan instruksi penulisan. Jadi hampir setiap aplikasi yang menggunakan LCD, R/W selalu diset ke “0”. Jalur data dapat terdiri 4 atau 8 jalur (tergantung mode yang dipilih pengguna), DB0, DB1, DB2, DB3, DB4, DB5, DB6 dan DB7. Mengirim data secara parallel baik 4-bit atau 8-bit merupakan 2 mode operasi primer. Untuk membuat sebuah aplikasi interface LCD, menentukan mode operasi merupakan hal yang paling penting.


Mode 8-bit sangat baik digunakan ketika kecepatan menjadi keutamaan dalam sebuah aplikasi dan setidaknya minimal tersedia 11 pin I/O (3 pin untuk kontrol, 8 pin untuk data). Sedangkan mode 4 bit minimal hanya membutuhkan 7-bit (3 pin untuk kontrol, 4 pin untuk data). Bit RS digunakan untuk memilih apakah data atau instruksi yang akan ditransfer antara mikrokontroller dan LCD. Jika bit ini di set (RS = 1), maka byte pada posisi kursor LCD saat itu dapat dibaca atau ditulis. Jika bit ini di reset (RS = 0), merupakan instruksi yang dikirim ke LCD atau status eksekusi dari instruksi terakhir yang dibaca.

Struktur Dasar LCD:
LCD atau Liquid Crystal Display pada dasarnya terdiri dari dua bagian utama yaitu bagian Backlight (Lampu Latar Belakang) dan bagian Liquid Crystal (Kristal Cair). Seperti yang disebutkan sebelumnya, LCD tidak memancarkan pencahayaan apapun, LCD hanya merefleksikan dan mentransmisikan cahaya yang melewatinya. Oleh karena itu, LCD memerlukan Backlight atau Cahaya latar belakang untuk sumber cahayanya. Cahaya Backlight tersebut pada umumnya adalah berwarna putih. Sedangkan Kristal Cair (Liquid Crystal) sendiri adalah cairan organik yang berada diantara dua lembar kaca yang memiliki permukaan transparan yang konduktif.
Bagian-bagian LCD atau Liquid Crystal Display diantaranya adalah :
  • Lapisan Terpolarisasi 1 (Polarizing Film 1)
  • Elektroda Positif (Positive Electrode)
  • Lapisan Kristal Cair (Liquid Cristal Layer)
  • Elektroda Negatif (Negative Electrode)
  • Lapisan Terpolarisasi 2 (Polarizing film 2)
  • Backlight atau Cermin (Backlight or Mirror)
Dibawah ini adalah gambar struktur dasar sebuah LCD :

Kaki-kaki yang terdapat pada LCD


d. 12 MM Solenoid valve 1/2
Tugas dari solenoid valve dalah untuk mematikan, release, dose, distribute atau mix fluids. Solenoid Valve banyak sekali jenis dan macamnya tergantung type dan penggunaannya, namun berdasarkan modelnya solenoid valve dapat dibedakan menjadi dua bagian yaitu solenoid valve single coil dan solenoid valve double coil keduanya mempunyai cara kerja yang sama.

e. Arduino Mega 2560

Board Arduino Mega 2560 adalah sebuah Board Arduino yang menggunakan ic Mikrokontroler ATmega 2560.Board ini memiliki Pin I/O yang relatif banyak, 54 digital Input / Output,15 buah di antaranya dapat di gunakan sebagai output PWM, 16 buah analog Input, 4 UART. Arduino Mega 2560 di lengkapi kristal 16. Mhz Untuk penggunaan  relatif sederhana tinggal menghubungkan power dari USB ke PC / Laptop atau melalui Jack DC pakai adaptor 7-12 V DC.
Untuk lebih jelasnya dapat di lihat dari spesifikasi Arduino Mega 2560 di bawah ini :

 SPESIFIKASI

MikrokontrolerATmega2560
Tegangan Operasianal5V
Tegangan Input (rekomendasi)                7-12V
Tegangan Input (limit)6-20V
Pin Digital I/O54 (of which 15 provide PWM output)
Pin Analog Input16
Arus DC per Pin I/O20 mA
Arus DC untuk Pin 3.3 V50 mA
Memori Flash256 KB of which 8 KB used by bootloader
SRAM8 KB
EEPROM4 KB
Clock Speed16 MHz
LED_BUILTIN13
Panjang101.52 mm
Lebar53.3 mm
Berat37 g





Pin tegangan yang tersedia pada papan Arduino adalah sebagai berikut:
  • VIN: Adalah input tegangan untuk papan Arduino ketika menggunakan sumber daya eksternal (sebagai ‘saingan’ tegangan 5 Volt dari koneksi USB atau sumber daya ter-regulator lainnya). Anda dapat memberikan tegangan melalui pin ini, atau jika memasok tegangan untuk papan melalui jack power, kita bisa mengakses/mengambil tegangan melalui pin ini.
  • 5V: Sebuah pin yang mengeluarkan tegangan ter-regulator 5 Volt, dari pin ini tegangan sudah diatur (ter-regulator) dari regulator yang tersedia (built-in) pada papan. Arduino dapat diaktifkan dengan sumber daya baik berasal dari jack power DC (7-12 Volt), konektor USB (5 Volt), atau pin VIN pada board (7-12 Volt). Memberikan tegangan melalui pin 5V atau 3,3V secara langsung tanpa melewati regulator dapat merusak papan Arduino.
  • 3V3: Sebuah pin yang menghasilkan tegangan 3,3 Volt. Tegangan ini dihasilkan oleh regulator yang terdapat pada papan (on-board). Arus maksimum yang dihasilkan adalah 50 mA.
  • GND: Pin Ground atau Massa.
  • IOREF: Pin ini pada papan Arduino berfungsi untuk memberikan referensi tegangan yang beroperasi pada microcontroller. Sebuah perisai (shield) dikonfigurasi dengan benar untuk dapat membaca pin tegangan IOREF dan memilih sumber daya yang tepat atau mengaktifkan penerjemah tegangan (voltage translator) pada output untuk bekerja pada tegangan 5 Volt atau 3,3 Volt.
INPUT DAN OUTPUT:
Masing-masing dari 54 digital pin pada Arduino Mega dapat digunakan sebagai input atau output, menggunakan fungsi pinMode() , digitalWrite() , dan digitalRead(). Arduino Mega beroperasi pada tegangan 5 volt. Setiap pin dapat memberikan atau menerima arus maksimum 40 mA dan memiliki resistor pull-up internal (yang terputus secara default) sebesar 20-50 kOhms. Selain itu, beberapa pin memiliki fungsi khusus, antara lain:
  • Serial : 0 (RX) dan 1 (TX); Serial 1 : 19 (RX) dan 18 (TX); Serial 2 : 17 (RX) dan 16 (TX); Serial 3 : 15 (RX) dan 14 (TX). Digunakan untuk menerima (RX) dan mengirimkan (TX) data serial TTL. Pins 0 dan 1 juga terhubung ke pin chip ATmega16U2 Serial USB-to-TTL.
  • Eksternal Interupsi : Pin 2 (interrupt 0), pin 3 (interrupt 1), pin 18 (interrupt 5), pin 19 (interrupt 4), pin 20 (interrupt 3), dan pin 21 (interrupt 2). Pin ini dapat dikonfigurasi untuk memicu sebuah interupsi pada nilai yang rendah, meningkat atau menurun, atau perubah nilai.
  • SPI : Pin 50 (MISO), pin 51 (MOSI), pin 52 (SCK), pin 53 (SS). Pin ini mendukung komunikasi SPI menggunakan perpustakaan SPI. Pin SPI juga terhubung dengan header ICSP, yang secara fisik kompatibel dengan Arduino Uno, Arduino Duemilanove dan Arduino Diecimila.
  • LED : Pin 13. Tersedia secara built-in pada papan Arduino ATmega2560. LED terhubung ke pin digital 13. Ketika pin diset bernilai HIGH, maka LED menyala (ON), dan ketika pin diset bernilai LOW, maka LED padam (OFF).
  • TWI : Pin 20 (SDA) dan pin 21 (SCL). Yang mendukung komunikasi TWI menggunakan perpustakaan Wire. Perhatikan bahwa pin ini tidak di lokasi yang sama dengan pin TWI pada Arduino Duemilanove atau Arduino Diecimila.
Arduino Mega2560 memiliki 16 pin sebagai analog input, yang masing-masing menyediakan resolusi 10 bit (yaitu 1024 nilai yang berbeda). Secara default pin ini dapat diukur/diatur dari mulai Ground sampai dengan 5 Volt, juga memungkinkan untuk mengubah titik jangkauan tertinggi atau terendah mereka menggunakan pin AREF dan fungsi analogReference().
Ada beberapa pin lainnya yang tersedia, antara lain:
  • AREF : Referensi tegangan untuk input analog. Digunakan dengan fungsi analogReference().
  • RESET : Jalur LOW ini digunakan untuk me-reset (menghidupkan ulang) mikrokontroler. Jalur ini biasanya digunakan untuk menambahkan tombol reset pada shield yang menghalangi papan utama Arduino.
KOMUNIKASI:
Arduino Mega2560 memiliki sejumlah fasilitas untuk berkomunikasi dengan komputer, dengan Arduino lain, atau dengan mikrokontroler lainnya. Arduino ATmega328 menyediakan 4 hardware komunikasi serial UART TTL (5 Volt). Sebuah chip ATmega16U2 (ATmega8U2 pada papan Revisi 1 dan Revisi 2) yang terdapat pada papan digunakan sebagai media komunikasi serial melalui USB dan muncul sebagai COM Port Virtual (pada Device komputer) untuk berkomunikasi dengan perangkat lunak pada komputer, untuk sistem operasi Windows masih tetap memerlukan file inf, tetapi untuk sistem operasi OS X dan Linux akan mengenali papan sebagai port COM secara otomatis. Perangkat lunak Arduino termasuk didalamnya serial monitor memungkinkan data tekstual sederhana dikirim ke dan dari papan Arduino. LED RX dan TX yang tersedia pada papan akan berkedip ketika data sedang dikirim atau diterima melalui chip USB-to-serial yang terhubung melalui USB komputer (tetapi tidak untuk komunikasi serial seperti pada pin 0 dan 1).
Sebuah perpustakaan SoftwareSerial memungkinkan untuk komunikasi serial pada salah satu pin digital Mega2560. ATmega2560 juga mendukung komunikasi TWI dan SPI. Perangkat lunak Arduino termasuk perpustakaan Wire digunakan untuk menyederhanakan penggunaan bus TWI. Untuk komunikasi SPI, menggunakan perpustakaan SPI.
PEMOGRAMAN:
Arduino Mega dapat diprogram dengan software Arduino . (Mengenai pemahasan lebih rinci tentang perangkat lunak Arduino akan dibahas pada artikel terpisah). ATmega2560 pada Arduino Mega sudah tersedia preburned dengan bootloader (preburned dan bootloader apa bahasa Indonesianya?) yang memungkinkan Anda untuk meng-upload kode baru tanpa menggunakan programmer hardware eksternal. Hal ini karena komunikasi yang terjadi menggunakan protokol asli STK500. Anda juga dapat melewati (bypass) bootloader dan program mikrokontroler melalui pin header ICSP (In-Circuit Serial Programming).
Chip ATmega16U2 (atau 8U2 pada board Rev. 1 dan Rev. 2) source code firmware tersedia pada repositori Arduino. ATmega16U2/8U2 dapat dimuat dengan bootloader DFU, yang dapat diaktifkan melalui:
  • Pada papan Revisi 1 : Menghubungkan jumper solder di bagian belakang papan (dekat dengan peta Italia) dan kemudian akan me-reset 8U2.
  • Pada papan Revisi 2 : Ada resistor yang menghubungkan jalur HWB 8U2/16U2 ke ground, sehingga lebih mudah untuk dimasukkan ke dalam mode DFU.
                                                 (DataSheet Arduino Mega 2560)
f. ESP8266
ESP8266 merupakan modul wifi yang berfungsi sebagai perangkat tambahan mikrokontroler seperti Arduino agar dapat terhubung langsung dengan wifi dan membuat koneksi TCP/IP.
Modul ini membutuhkan daya sekitar 3.3v dengan memiliki tiga mode wifi yaitu Station, Access Point dan Both (Keduanya). Modul ini juga dilengkapi dengan prosesor, memori dan GPIO dimana jumlah pin bergantung dengan jenis ESP8266 yang kita gunakan. Sehingga modul ini bisa berdiri sendiri tanpa menggunakan mikrokontroler apapun karena sudah memiliki perlengkapan layaknya mikrokontroler.

Spesifikasi dari ESP-01 yaitu

  • Besar RAM 96 kB, instruction RAM 64 kB
  • 32-bit RISC CPU
  • External QSPI flash – 512 KiB to 4 MiB
  • Tegangan kerja masukan 3.3 Vdc
  • Jaringan wifi pada 802.11 b/g/n
  • Pada mode 802.11b output power-nya +19.5dBm
  • Menggunakan sistem Wi-Fi Direct (P2P), soft-AP
  • Power down leakage current of 10uA
  • Wake up and transmit packets in < 2ms
  • Integrated TCP/IP protocol stack
  • Standby power consumption of < 1.0mW (DTIM3)
  • SDIO 1.1 / 2.0, SPI, UART
  • 10-bit ADC
  • Interface : SPI, I²C
  • STBC, 11 MIMO, 21 MIMO
  • A-MPDU & A-MSDU aggregation & 0.4ms guard interval
a. Flowchart Master



b. Flowchart Slave




Master:
#include <Wire.h> 
#include <LiquidCrystal.h>  
#define SensorPin A0            //pH meter Analog output to Arduino Analog Input 0
#define Offset -5.50            //deviation compensate
#define samplingInterval 20
#define printInterval 800
#define ArrayLenth  40    //times of collection
#define SLAVE_ADDR 9 
#define DS18B20_PIN   22
#define valve 14
#define button 23

int raw_temp;
float temp;
int val = 0;
int pHArray[ArrayLenth];   //Store the average value of the sensor feedback
int pHArrayIndex=0;


void setup(void) { 
  Wire.begin();
  Serial.begin(9600);
  Serial.println("pH meter experiment!"); 
  pinMode(button,INPUT);
  pinMode(valve,OUTPUT);



void loop(void) {
  static unsigned long samplingTime = millis();
  static unsigned long printTime = millis();
  static float pHValue,voltage;
   if(millis()-samplingTime > samplingInterval)
  {
      pHArray[pHArrayIndex++]=analogRead(SensorPin);
      if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
      voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
      pHValue = 3.5*voltage+Offset;
      samplingTime=millis();
  }
   if(millis() - printTime > printInterval)   //Every 800 milliseconds, print a numerical, convert the state of the LED indicator
  {
    Serial.print("Voltage:");
        Serial.print(voltage,2);
        Serial.print("    pH value: ");
    Serial.println(pHValue,2);
      //  digitalWrite(LED,digitalRead(LED)^1);
        printTime=millis();
  }
   if(ds18b20_read(&raw_temp)) {
    temp = (float)raw_temp / 16;     // Convert temperature raw value into degree Celsius (temp in °C = raw/16)
  }
  else {}
  delay(1000);

 if( ( 5,9> pHValue <9,1  ) ) 
  {
   // Serial.print ("Penambahan H2SO4 sukses . .  " );
    digitalWrite (valve,LOW);

  }
   
 if ((pHValue >9))
 {
  digitalWrite (valve,HIGH);
  if(5,9>pHValue<9,1){
    digitalWrite(valve,LOW);
  }  
 }

if (pHValue<5,9)
{
  digitalWrite(valve,HIGH);
  if(5,9>pHValue<9,1){
    digitalWrite(valve,LOW);
  }
}
  val = pHValue;
  Wire.beginTransmission(SLAVE_ADDR); 
  Wire.write(val); 
  Wire.endTransmission(); 
  
}
//--------------------PH-------------------------------//
double avergearray(int* arr, int number){
  int i;
  int max,min;
  double avg;
  long amount=0;
  if(number<=0){
    Serial.println("Error number for the array to avraging!/n");
    return 0;
  }
  if(number<5){   //less than 5, calculated directly statistics
    for(i=0;i<number;i++){
      amount+=arr[i];
    }
    avg = amount/number;
    return avg;
  }else{
    if(arr[0]<arr[1]){
      min = arr[0];max=arr[1];
    }
    else{
      min=arr[1];max=arr[0];
    }
    for(i=2;i<number;i++){
      if(arr[i]<min){
        amount+=min;        //arr<min
        min=arr[i];
      }else {
        if(arr[i]>max){
          amount+=max;    //arr>max
          max=arr[i];
        }else{
          amount+=arr[i]; //min<=arr<=max
        }
      }//if
    }//for
    avg = (double)amount/(number-2);
  }//if
  return avg;
}
//----------------------------------DS18B20---------------------------------------//
 bool ds18b20_start(){
  bool ret = 0;
  digitalWrite(DS18B20_PIN, LOW);     // Send reset pulse to the DS18B20 sensor
  pinMode(DS18B20_PIN, OUTPUT);
  delayMicroseconds(500);             // Wait 500 us
  pinMode(DS18B20_PIN, INPUT);
  delayMicroseconds(100);             //wait to read the DS18B20 sensor response
  if (!digitalRead(DS18B20_PIN)) {
    ret = 1;                          // DS18B20 sensor is present
    delayMicroseconds(400);           // Wait 400 us
  }
  return(ret);
}

void ds18b20_write_bit(bool value){
  digitalWrite(DS18B20_PIN, LOW);
  pinMode(DS18B20_PIN, OUTPUT);
  delayMicroseconds(2);
  digitalWrite(DS18B20_PIN, value);
  delayMicroseconds(80);
  pinMode(DS18B20_PIN, INPUT);
  delayMicroseconds(2);
}

void ds18b20_write_byte(byte value){
  byte i;
  for(i = 0; i < 8; i++)
    ds18b20_write_bit(bitRead(value, i));
}

bool ds18b20_read_bit(void) {
  bool value;
  digitalWrite(DS18B20_PIN, LOW);
  pinMode(DS18B20_PIN, OUTPUT);
  delayMicroseconds(2);
  pinMode(DS18B20_PIN, INPUT);
  delayMicroseconds(5);
  value = digitalRead(DS18B20_PIN);
  delayMicroseconds(100);
  return value;
}

byte ds18b20_read_byte(void) {
  byte i, value;
  for(i = 0; i  <8; i++)
    bitWrite(value, i, ds18b20_read_bit());
  return value;
}

bool ds18b20_read(int *raw_temp_value) {
  if (!ds18b20_start())                     // Send start pulse
    return(0);                              // Return 0 if error
  ds18b20_write_byte(0xCC);                 // Send skip ROM command
  ds18b20_write_byte(0x44);                 // Send start conversion command
  while(ds18b20_read_byte() == 0);          // Wait for conversion complete
  if (!ds18b20_start())                     // Send start pulse
    return(0);                              // Return 0 if error
  ds18b20_write_byte(0xCC);                 // Send skip ROM command
  ds18b20_write_byte(0xBE);                 // Send read command
  *raw_temp_value = ds18b20_read_byte();    // Read temperature LSB byte and store it on raw_temp_value LSB byte
  *raw_temp_value |= (unsigned int)(ds18b20_read_byte() << 8);     // Read temperature MSB byte and store it on raw_temp_value MSB byte
  return(1);                                // OK --> return 1
}



Slave:
#include <Wire.h> 
#include <LiquidCrystal.h>
#define SLAVE_ADDR 9 

float pHValue;
float temp;  
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
char txt[]=" C ";

void setup() { 
  Wire.begin(SLAVE_ADDR); 
  Wire.onReceive(receiveEvent); 
  Serial.begin(9600);
  lcd.begin(16, 2);
  txt[0] = 223;                     // Put degree symbol (°)
  lcd.setCursor(2, 0);
  lcd.print("PH experiment:");


void receiveEvent() { 
  pHValue = Wire.read(); 
  Serial.println(pHValue); 
void loop() 
    Serial.print("Ph Experiment:");
    Serial.print(pHValue);              // Print temperature value in degree Celsius
    Serial.println("°C");            // Print '°C'
    // Display temperature on LCD
 lcd.clear();
 lcd.setCursor(4, 1);
 lcd.print("PH Experiment:");
  lcd.println(Wire.read());
if( ( 5,9> pHValue <9,1  ) ) 
  {
   // Serial.print ("Penambahan H2SO4 sukses . .  " );
    lcd.setCursor(4,0);
    lcd.print("Limbah Netral");
  }
   
 if ((pHValue >9))
 {
  lcd.setCursor(4,0);
  lcd.print("Limbah Basa");
                      if(5,9>pHValue<9,1)
  {
    lcd.setCursor(4,0);
    lcd.print("Limbah Netral");
  }  
 }

if (pHValue<5,9)
{ lcd.setCursor(4,0);
  lcd.print("Limbah Asam");
                      if(5,9>pHValue<9,1){
    lcd.setCursor(4,0);
    lcd.print("Limbah Netral");
  }
}
  
  delay(100);





Rangkaian Simulasi ini menggunakan komunikasi antar dua arduino menggunakan I2C (inter Integrated circuit), penambahan arduino dilakukan sebagai pengganti dari esp8266 karena kekurangan library pada proteus.
Alat ini berjalan dengan menggunakan logic state sebagai pengganti inputan sensor PH yang dibuat. rangkaian sensor PH yang dibuat merupakan rangkaian amplifier dikarenakan nilai inputan pada probe PH yang bernilai 314mV agar  menjadi inputan 0-5V pada arduino.
Rangkaian valve: 

Rangkaian module analog sensor PH:

 
  Formulasi Rangkaian diturunkan menjadi:
Vin adalah tegangan masukan dari probe pH meter (SC3) dan Vout adalah tegangan keluaran dari Opamp subtractor (IC4, pin 8).
Karena tegangan keluaran Vout hasilnya harus positif maka:

Bila Nilai :
Maka nilai resistansi potensiometer POT2 =R14= 1KΩ. VCC adalah tegangan catudaya
untuk mikrokontroller dan seluruh rangkaian elektronika sebesar +5 Vdc. Sehingga:

Dengan penguatan probe pH sebesar:




foto alat pengolahan limbah:


valve pada botol yang berisi asam sulfat, berikut fotonya:








1.   
      
Hasil ujicoba sensor PH ini dibandingkan dengan sensor PH meter pada Laboratorium Teknik Tegangan Tinggi, Teknik Elektro, Universitas Andalas. Pengambilan data ini diambil sebanyak 100x pengambilan data sensor selama lima menit. Perbandingan pengujian data ini dilakukan dengan cara membandingkan data pada sensor PH dengan PH meter pada sampel yang sama bernilai 5,99.
Data pengujian yang didapatkan ditunjukan pada tabel dibawah:
Tabel 4.1 Pengujian data sensor PH
Waktu
Data PH
Data Sensor PH
3:29:41 PM
5,93
5,99
3:29:44 PM
5,93
5,99
3:29:47 PM
5,93
5,99
3:29:50 PM
5,93
5,99
3:29:53 PM
5,93
5,99
3:29:55 PM
5,94
5,99
3:29:58 PM
5,93
5,99
3:30:01 PM
5,96
5,99
3:30:04 PM
5,94
5,99
3:30:07 PM
5,99
5,99
3:30:09 PM
5,99
5,99
3:30:12 PM
5,99
5,99
3:30:15 PM
6,07
5,99
3:30:18 PM
6,06
5,99
3:30:21 PM
6,11
5,99
3:30:24 PM
6,14
5,99
3:30:26 PM
6,15
5,99
3:30:29 PM
6,09
5,99
3:30:32 PM
6,08
5,99
3:30:35 PM
6,07
5,99
3:30:38 PM
6,05
5,99
3:30:40 PM
6,03
5,99
3:30:43 PM
6,06
5,99
3:30:46 PM
6,05
5,99
3:30:49 PM
6,04
5,99
3:30:52 PM
6,03
5,99
3:30:54 PM
6,05
5,99
3:30:57 PM
6,04
5,99
3:31:00 PM
6,04
5,99
3:31:03 PM
6,05
5,99
3:31:06 PM
6,04
5,99
3:31:08 PM
6,04
5,99
3:31:11 PM
6,04
5,99
3:31:14 PM
6,06
5,99
3:31:17 PM
6,05
5,99
3:31:20 PM
6,07
5,99
3:31:22 PM
6,04
5,99
3:31:25 PM
6,05
5,99
3:31:28 PM
6,03
5,99
3:31:31 PM
6,05
5,99
3:31:34 PM
6,02
5,99
3:31:36 PM
6,05
5,99
3:31:39 PM
6,04
5,99
3:31:42 PM
6,05
5,99
3:31:45 PM
6,05
5,99
3:31:48 PM
6,04
5,99
3:31:51 PM
6,04
5,99
3:31:53 PM
6,03
5,99
3:31:56 PM
6,03
5,99
3:31:59 PM
6,03
5,99
3:32:02 PM
6,02
5,99
3:32:05 PM
6,03
5,99
3:32:07 PM
6,01
5,99
3:32:10 PM
6,02
5,99
3:32:13 PM
6,01
5,99
3:32:16 PM
6,01
5,99
3:32:19 PM
6,01
5,99
3:32:21 PM
6,01
5,99
3:32:24 PM
6,02
5,99
3:32:27 PM
5,99
5,99
3:32:30 PM
6,05
5,99
3:32:33 PM
6,05
5,99
3:32:35 PM
6,05
5,99
3:32:38 PM
6,04
5,99
3:32:41 PM
6,03
5,99
3:32:44 PM
6,04
5,99
3:32:47 PM
6,03
5,99
3:32:49 PM
6,03
5,99
3:32:52 PM
6,04
5,99
3:32:55 PM
6,02
5,99
3:32:58 PM
6,05
5,99
3:33:01 PM
6,06
5,99
3:33:03 PM
6,04
5,99
3:33:06 PM
6,03
5,99
3:33:09 PM
6,03
5,99
3:33:12 PM
6,03
5,99
3:33:15 PM
6
5,99
3:33:17 PM
6,01
5,99
3:33:20 PM
6
5,99
3:33:23 PM
6,06
5,99
3:33:26 PM
6,05
5,99
3:33:29 PM
6,02
5,99
3:33:32 PM
6,01
5,99
3:33:34 PM
6,01
5,99
3:33:37 PM
5,98
5,99
3:33:40 PM
5,99
5,99
3:33:43 PM
5,99
5,99
3:33:46 PM
5,99
5,99
3:33:48 PM
5,97
5,99
3:33:51 PM
5,95
5,99
3:33:54 PM
5,95
5,99
3:33:57 PM
5,94
5,99
3:34:00 PM
5,92
5,99
3:34:02 PM
5,95
5,99
3:34:05 PM
5,92
5,99
3:34:08 PM
5,91
5,99
3:34:11 PM
5,91
5,99
3:34:14 PM
5,91
5,99
3:34:16 PM
5,95
5,99



Pada pengujian sensor PH, didapatkan nilai minimum dari data yang diambil adalah 5,91 sedangkan untuk nilai maksimum yang didpatkan adalah 6,15 dengan nilai rata rata dari 100 kali percobaan adalah 6,016060606. Jika dibandingkan dengan data pada sensor yang sebenarnya dengan nilai 5,99 maka didapatkan nilai error alat 0,4350%.


Haze Haze Author

About

Popular Posts

Find Us

Contact Us

Nama

Email *

Pesan *