Untitled
unknown
plain_text
2 years ago
6.3 kB
19
Indexable
#include <SoftwareSerial.h>
#include <WiFiEsp.h>
#ifndef HAVE_HWSERIAL1
#endif
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SimpleTimer.h>
#include "DTH_Turbidity.h"
#define TURBIDITY_SENSOR_PIN A1
#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Inisialisasi pin data untuk sensor DS18B20
const int oneWireBusPin = 4; // Sesuaikan dengan pin yang digunakan pada Arduino Anda
Servo servo1; // Servo untuk ph_act < 7
Servo servo2; // Servo untuk ph_act > 7
const int relayPin1 = 11; // Sesuaikan dengan pin yang akan digunakan untuk mengendalikan relay 1
const int relayPin2 = 12; // Sesuaikan dengan pin yang akan digunakan untuk mengendalikan relay 2
// Inisialisasi objek OneWire dan DallasTemperature
OneWire oneWire(oneWireBusPin);
DallasTemperature sensors(&oneWire);
// Inisialisasi objek servo
const int servoPin1 = 9; // Assuming you are using pin 9 for servo1
const int servoPin2 = 10; // Assuming you are using pin 10 for servo2
DTH_Turbidity turbSensor(TURBIDITY_SENSOR_PIN);
float kekeruhan = 0;
float volt = 0;
SimpleTimer timer;
float calibration_value = 21.34 - 0.7;
int phval = 0;
unsigned long int avgval;
int buffer_arr[10], temp;
int ph_act;
char* SSID = "IphoneXR";
char* PASS = "pppppppp";
String serverIP = "172.20.10.3";
SoftwareSerial wifiSerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
sensors.begin();
servo1.attach(servoPin1);
servo2.attach(servoPin2);
servo1.write(20);
servo2.write(0);
servo1.detach();
servo2.detach();
setWifi(SSID, PASS);
servo1.attach(servoPin1);
servo2.attach(servoPin2);
delay(1000);
}
void loop() {
for (int i = 0; i < 10; i++) {
buffer_arr[i] = analogRead(A0);
delay(30);
}
for (int i = 0; i < 9; i++) {
for (int j = i + 1; j < 10; j++) {
if (buffer_arr[i] > buffer_arr[j]) {
temp = buffer_arr[i];
buffer_arr[i] = buffer_arr[j];
buffer_arr[j] = temp;
}
}
}
avgval = 0;
for (int i = 2; i < 8; i++)
avgval += buffer_arr[i];
float volt = (float)avgval * 5.0 / 1024/6;
ph_act = (-5.70 * volt + calibration_value) * -1;
Serial.println("pH Val: ");
Serial.print(ph_act);
if (ph_act >= 0 && ph_act < 6) {
// Jika pH kurang dari 6, buka servo selama 1 detik
servo1.write(40);
delay(1000); // Buka servo selama 1 detik
servo1.write(20); // Tutup servo setelah 1 detik
delay(1000); // Tunggu 1 detik sebelum melakukan pembacaan pH berikutnya
Serial.println("servo1 bergerak");
}
else if (ph_act > 7 && ph_act <= 14) {
// Jika pH lebih dari 7.5
servo2.write(20);
delay(1000); // Buka servo selama 1 detik
servo2.write(0); // Tutup servo setelah 1 detik
delay(7200000); // Tunggu 1 detik sebelum melakukan pembacaan pH berikutnya
Serial.println("servo2 bergerak");
}
else {
// Jika kondisi lainnya, kembali ke posisi awal
servo1.write(20);
servo2.write(0);
delay(7200000); // Tunggu satu detik
Serial.println("servo mati");
}
kekeruhan = turbSensor.readTurbidity()/1000;
Serial.print("Kekeruhan : ");
Serial.println(kekeruhan);
volt = turbSensor.getVoltage();
// Serial.print("Turbidity voltage: ");
// Serial.println(volt);
delay(1000);
sensors.requestTemperatures(); // Minta sensor untuk membaca suhu
// Baca suhu dalam Celsius dan Fahrenheit
float suhu = sensors.getTempCByIndex(0);
float fahrenheit = sensors.toFahrenheit(suhu);
Serial.print("Suhu Celsius: ");
Serial.print(suhu);
Serial.print("°C | Suhu Fahrenheit: ");
Serial.print(fahrenheit);
Serial.println("°F");
if (suhu < 25) {
digitalWrite(relayPin1, HIGH); // Relay 1 nyala
digitalWrite(relayPin2, LOW); // Pastikan relay 2 mati
Serial.println("pemanas relay 1 nyala");
} else if (suhu > 28) {
digitalWrite(relayPin1, LOW); // Pastikan relay 1 mati
digitalWrite(relayPin2, HIGH); // Relay 2 nyala
Serial.println("pendingin relay 2 nyala");
} else {
digitalWrite(relayPin1, LOW); // Pastikan relay 1 mati
digitalWrite(relayPin2, LOW); // Pastikan relay 2 mati
Serial.println("semua mati");
}
delay(1000);
sendData(ph_act,kekeruhan,suhu);
delay(3000);
}
void setWifi(char* kriot_ssid, char* kriot_pass) {
wifiSerial.begin(9600);
WiFi.init(&wifiSerial);
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("[WIFI]: WiFi module not present");
while (true)
;
}
while (WiFi.status() != WL_CONNECTED) {
Serial.print("[WIFI]: Connecting to ");
Serial.println(SSID);
if (WiFi.begin(SSID, PASS) != WL_CONNECTED) {
Serial.println("[WIFI]: Connection failed");
delay(1000);
}
}
Serial.println("[WIFI]: Connected");
}
void sendData(float ph_act, float kekeruhan, float suhu) {
// Detach servo sebelum mengirim data
servo1.detach();
servo2.detach();
WiFiEspClient client;
if (client.connect("iot.vwxyzar.my.id", 5051)) {
Serial.println("Connected to server. Sending data...");
// Konversi nilai ph_act ke string
String ph_actStr = String(ph_act, 2); // Menampilkan 2 angka di belakang koma
// Buat string permintaan data untuk dikirim ke server
String requestData = "ph_act=" + ph_actStr + "&kekeruhan=" + String(kekeruhan, 2) + "&suhu=" + String(suhu, 2); // Menampilkan 2 angka di belakang koma
client.println("POST /2018083/build/pages/write-data.php HTTP/1.1");
client.print("Host: iot.vwxyzar.my.id\r\n");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(requestData.length());
client.println();
client.println(requestData);
Serial.println("Data sent.");
}
else {
resetArduino();
Serial.println("Connection to server failed.");
}
// Attach kembali servo setelah mengirim data
servo1.attach(servoPin1);
servo2.attach(servoPin2);
}
void resetArduino() {
asm volatile(" jmp 0");
}Editor is loading...
Leave a Comment