// PIN I/O int pinPH = 0; int PinLM35 = 1; int PinPing = 7; int PinPWM = 9; int PinValve = 13; int PinMotor = 12; int PinMotor1PH = 5; int PinMotor2PH = 6; // Deklarasi Variabel sensor PH float phSense = 0; float refvoltage = 3.5; boolean jampagi = false; //Deklarasi sensor temperature float temperature; int sensorSuhu = 0; // the sensor value int sensorMin = 1023; // minimum sensor value int sensorMax = 0; // maximum sensor value int kalibrasiTemp = 70; // Deklarasi Sensor PING const int hmax = 5; //5 cm const int tinggisensor = 150; const int batasketinggian = 70; int ketinggian; int buttonState = 11; void setup() { Serial.begin(9600); // Setup Sensor temperature & PWM while (millis() < 5000) { sensorSuhu = analogRead(PinLM35); sensorSuhu = sensorSuhu; if (sensorSuhu > sensorMax) { sensorMax = sensorSuhu; } if (sensorSuhu < sensorMin) { sensorMin = sensorSuhu; } // Akhir Setup Sensor temperature & PWM } } void loop(){ buttonState = digitalRead(11); if (buttonState == HIGH) { jampagi = true; Serial.println("Pagi Jam 8 "); } else { jampagi = false; Serial.println("Bukan Pagi "); } //Baca PH float nilaisensorph; nilaisensorph = bacaph(); Serial.print("PH: "); Serial.println(nilaisensorph); if (nilaisensorph < 6) { digitalWrite(PinMotor1PH, HIGH); //Nyalakan Motor1 Serial.println("Nyalakan Motor1-PH"); } if (nilaisensorph >= 7) { digitalWrite(PinMotor1PH, LOW); //Nyalakan Motor1 Serial.println("Matikan Motor1-PH"); } if (nilaisensorph > 8) { digitalWrite(PinMotor2PH, HIGH); //Nyalakan Motor2 Serial.println("Nyalakan Motor2-PH"); } if (nilaisensorph <= 7) { digitalWrite(PinMotor2PH, LOW); //Nyalakan Motor2 Serial.println("Matikan Motor2-PH"); } //Baca temperature float nilaitemperature; nilaitemperature = BacatemperaturePWM(); //Baca Ketinggian Air Asusmsi ketinggian sensor ke permukaan 100 cm int jarak; jarak = bacajarak(); Serial.print("Ketinggian: "); Serial.println(jarak); //delay (500); //Cek Jarak jika kurang dari batas ketinggian if (jarak < batasketinggian) { digitalWrite(PinMotor, HIGH); //Nyalakan Motor Serial.println("Nyalakan Motor"); } //Akhir Cek Jarak jika kurang dari batas ketinggian //If Jarak if (jarak > 100) { digitalWrite(PinMotor, LOW); //Matikan Motor Serial.println("Matikan Motor"); } //Cek Jam if (jampagi == true) { // Jika Jam 8 digitalWrite(PinValve,HIGH); //Buka Valve Serial.println("Buka Valve"); } if (jarak < batasketinggian) { digitalWrite(PinValve, LOW); //Tutup Valve Serial.println("Tutup Valve"); // jampagi == false; } // Akhir Cek Jam Serial.println("============================================"); delay(1000); } float bacaph() { float result; int samples = 20; int aRead = 0; for (int i = 0; i < samples ; i++) { aRead += analogRead(pinPH); } float voltage = 5.0 * aRead/ (1023 * samples); // assuming 5V reference phSense = 14 - voltage/0.25; result = phSense; return result; } int bacajarak(){ int result; long duration, cm; pinMode(PinPing, OUTPUT); digitalWrite(PinPing, LOW); delayMicroseconds(2); digitalWrite(PinPing, HIGH); delayMicroseconds(5); digitalWrite(PinPing, LOW); pinMode(PinPing, INPUT); duration = pulseIn(PinPing, HIGH); cm = mmtocm(duration); ketinggian = tinggisensor - cm; result = ketinggian; } long mmtocm(long microseconds) { return microseconds / 29 / 2; } float BacatemperaturePWM(){ float temperature; temperature = analogRead(PinLM35); //read the value from the sensor temperature = (5.0 * temperature * 100.0)/1024.0; //convert the analog data to temperature in Celcius sensorSuhu = analogRead(PinLM35); sensorSuhu = map(sensorSuhu, sensorMin, kalibrasiTemp, 0, 255); sensorSuhu = constrain(sensorSuhu, 0, 255); analogWrite(PinPWM, sensorSuhu); Serial.print("Suhu: " ); Serial.println(temperature); Serial.print("PWM: " ); Serial.println(sensorSuhu); return temperature; } //MOTOR ke-1: Jika jam 08:00 maka nyalakan Motor1 untuk membuang air tambak sebanyak sampai ketinggian air mencapai 70 cm (Asumsi ketinggian max air 100 cm) // Motor ke-1 akan mati secara otomatis jika ketinggian air mencapai 70 cm //MOTOR ke-2: Jika ketinggian air <70 untuk mengisi tambak dengan air baru // Motor ke-2 akan mati ketika air mencapai ketinggian 100 cm