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