Monitoring PH dan Turbidity via Wireless HC-12 LCD TFT ILI9341 Arduino
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa memonitoring ph dan turbidity secara realtime dengan sistem wireless. alat ini menggunakan indikator berupa lampu ac 220 volt yang berwarna. interface yang dipakai juga menggunakan lcd tft ili9341. untuk lebih jelasnya berikut adalah koding dan komponennya.
1. Komponen
2. Program Transmitter
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <SoftwareSerial.h>
SoftwareSerial mySerial (2, 3);
float pHValue;
int tds;
int adctds;
int adcPH;
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
}
void loop() {
adcPH = analogRead(A0); //menggunakan pin A0 untuk membaca output sensor pH
pHValue = (adcPH - 1093.4) / -30.897;
adctds = analogRead(A1);
tds = map(adctds, 900, 1, 0, 100);
mySerial.print("*");
mySerial.print(pHValue * 100);
mySerial.print(",");
mySerial.print(tds);
mySerial.println("#");
//Serial.print(pHValue);
//Serial.print(" ");
//Serial.println(tds);
delay(100);
}
3. Program Receiver
#include <Arduino.h>
#include <math.h>
#include <Wire.h>
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <SoftwareSerial.h>
#define TFT_CS 10
#define TFT_DC 8
//#define TFT_LED 5v
#define TFT_RST 9
#define TFT_MOSI 11
#define TFT_CLK 13
#define TFT_MISO 12
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
SoftwareSerial mySerial (2, 3);
int value1;
int value2;
float ph = 0;
int tds = 0;
int datain1;
int datain2;
int ssrmerahph = 4;
int ssrhijauph = A1;
int ssrkuningph = A2;
int ssrtdsmerah = 7;
int ssrtdshijau = A0;
String dataIn;
String dt[10];
int i;
boolean parsing=false;
void setup(){
pinMode(ssrmerahph,OUTPUT);
pinMode(ssrhijauph,OUTPUT);
pinMode(ssrkuningph,OUTPUT);
pinMode(ssrtdsmerah,OUTPUT);
pinMode(ssrtdshijau,OUTPUT);
digitalWrite(ssrmerahph,HIGH);
digitalWrite(ssrhijauph,HIGH);
digitalWrite(ssrkuningph,HIGH);
digitalWrite(ssrtdsmerah,HIGH);
digitalWrite(ssrtdshijau,HIGH);
tft.begin();
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(5);
tft.setRotation(3);
dataIn="";
// Serial.begin(9600);
mySerial.begin(9600);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
}
void loop(){
delay(200);
tft.setCursor(10, 10);
tft.setTextColor(ILI9341_YELLOW,ILI9341_BLACK);
tft.print("PH: ");
tft.print(ph);
tft.print(" ");
tft.setCursor(10, 70);
tft.setTextColor(ILI9341_GREEN,ILI9341_BLACK);
tft.print("TDS: ");
tft.print(tds);
tft.print(" ");
if(ph > 8){
digitalWrite(ssrmerahph,LOW);
digitalWrite(ssrhijauph,HIGH);
digitalWrite(ssrkuningph,HIGH);
}
if(ph < 6){
digitalWrite(ssrmerahph,HIGH);
digitalWrite(ssrhijauph,HIGH);
digitalWrite(ssrkuningph,LOW);
}
if((ph >= 6)&&(ph <= 8)){
digitalWrite(ssrmerahph,HIGH);
digitalWrite(ssrhijauph,LOW);
digitalWrite(ssrkuningph,HIGH);
}
if(tds < 5){
digitalWrite(ssrtdsmerah,HIGH);
digitalWrite(ssrtdshijau,LOW);
}
if(tds >= 5){
digitalWrite(ssrtdsmerah,LOW);
digitalWrite(ssrtdshijau,HIGH);
}
//secara wireless
if(mySerial.available()>0) {
char inChar = (char)mySerial.read();
dataIn += inChar;
if (inChar == '\n') {
parsing = true;
}
}
if(parsing){
parsingData();
ph = datain1/100.0;
tds = datain2;
parsing=false;
dataIn="";
}
}
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();
}
4. VIDEO HASILNYA