Untitled

mail@pastecode.io avatar
unknown
plain_text
21 days ago
6.3 kB
7
Indexable
Never
#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");
}
Leave a Comment