Untitled
unknown
plain_text
a year ago
6.3 kB
13
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