bangnaga icon

Pengendalian Kadar PH Suhu dan Level Air Tambak

bangnaga | PRO | 06/23/25 06:40:46 AM UTC (Edited) | 0 ⭐ | 333 👁️ | Never ⏰ | []
C |

4.77 KB

|

None

|

0 👍

/

0 👎

// 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

Comments