Untitled

 avatar
user_3902222
plain_text
2 years ago
4.2 kB
2
Indexable
// DHT
#include <DHT.h>      
#define DHTPIN  26           // DHT11 terhubung pada pin data IO26
#define DHTTYPE DHT11
DHT dht11(DHTPIN, DHTTYPE);
float humidity;
float temperature;
// Mosfet
#define mosfet 17//mosfet ke pompa
// Soil
#define SensorPin 36 //sensor kelembapan tanah terhubung IO36
int tanah = 0; 
//Ph
const int ph = 35;
int phValue = 0;        //ADC value from sensor
float phoutputValue = 0.0;
//Lampu
int lamp = 16;

unsigned long waktuterakhir1 = 0;

#include <Fuzzy.h>
Fuzzy *fuzzy = new Fuzzy();
//Fuzzyset Input Suhu
FuzzySet *dingin = new FuzzySet(1, 1, 20, 25);
FuzzySet *normal_suhu = new FuzzySet(20, 25, 25, 30);
FuzzySet *panas = new FuzzySet(25, 30, 60, 60);

//Fuzzyset Input Kelembapan udara
FuzzySet *basahudara = new FuzzySet(1, 1, 60, 70);
FuzzySet *normaludara = new FuzzySet(60, 70, 70, 80);
FuzzySet *keringudara = new FuzzySet(70, 80, 100, 100);

//Fuzzyset Input kelembapan tanah
FuzzySet *basahtanah = new FuzzySet(1, 1, 60, 70);
FuzzySet *normaltanah = new FuzzySet(60, 70, 70, 80);
FuzzySet *keringtanah = new FuzzySet(70, 80, 100, 100);

//Fuzzyset Output Lampu output berupa waktu hidup lampu
FuzzySet *st = new FuzzySet(1, 1, 3, 4);
FuzzySet *t = new FuzzySet(3, 4, 4, 5);
FuzzySet *n_lampu = new FuzzySet(4, 5, 5, 6);
FuzzySet *r = new FuzzySet(5, 6, 6, 7);
FuzzySet *sr = new FuzzySet(6, 7, 10, 10);

//Fuzzyset Output Pompa output berupa waktu hidup pompa
FuzzySet *sc = new FuzzySet(1, 1, 3, 4);
FuzzySet *c = new FuzzySet(3, 4, 4, 5);
FuzzySet *n_pompa = new FuzzySet(4, 5, 5, 6);
FuzzySet *l = new FuzzySet(5, 6, 6, 7);
FuzzySet *sl = new FuzzySet(6, 7, 10, 10);


//Panggil Tab Lain
#include "3_fuzzyrule.h"
#include "2_fuzzyset.h"


void setup(){
  Serial.begin(115200);
  dht11.begin();
  
   pinMode(mosfet, OUTPUT);
    pinMode(lamp, OUTPUT);
    pinMode(ph, OUTPUT);

    fuzzyset();
    fuzzyrule();
}

void loop(){
  temperature = dht11.readTemperature();
  humidity = dht11.readHumidity();
  tanah =  analogRead(SensorPin);
  int outputtanah = map(tanah, 4095,0,0,100);
  
  phValue = analogRead(ph);
  float outputph = map(phValue,0,4096,0,1024);
  phoutputValue= (-0.0100*outputph)+8.9001;
  Serial.print("sensor Ph ADC= ");
  Serial.println(outputph);
  Serial.print("output Ph= ");
  Serial.println(phoutputValue);

  Serial.print("Temperature ");
  Serial.print(temperature); Serial.println(" *C");
  Serial.print("Humidity    ");
  Serial.print(humidity); Serial.println(" *%");
  Serial.print("Soil    ");
  Serial.print(outputtanah); Serial.println(" *%");
  Serial.println("");

  Serial.print(temperature); Serial.print(" ");
  Serial.print(humidity); Serial.print(" ");
  Serial.print(outputtanah); Serial.println(" ");

  fuzzy->setInput(1, temperature);
  fuzzy->setInput(2, humidity);
  fuzzy->setInput(3, outputtanah);
  fuzzy->fuzzify();
  int pompa = fuzzy->defuzzify(1);
  int lampu = fuzzy->defuzzify(2);

  Serial.println("Result: ");
  Serial.print("         Pompa: ");
  Serial.println(pompa);
  Serial.print("         Lampu: ");
  Serial.println(lampu);
  Serial.println("");
  Serial.println("");

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  unsigned long waktupump = pompa * 1000;

      if (waktupump > 0){
      
    //Maka Nyalakan Pompa Selama waktupump
    if (millis()- waktuterakhir1 > waktupump){
      waktuterakhir1 = millis();
      kondisipump =! kondisipump;
      digitalWrite(mosfet, kondisipump);
    }
    }

        //Jika Waktu Pump Sama Dengan 0
    else if  (waktupump == 0){
      digitalWrite(mosfet, LOW);
    }
  unsigned long waktulampu = lampu * 1000;
    if (waktulampu > 0){
      
    //Maka Nyalakan lampu Selama waktulampu
    if (millis()- waktuterakhir1 > waktulampu){
      waktuterakhir1 = millis();
      kondisilampu =! kondisipump;
      digitalWrite(lamp, kondisilampu);
    }
    }

        //Jika Waktu lampu Sama Dengan 0
    else if  (waktulampu == 0){
      digitalWrite(lamp, LOW);
    }

  delay(1000);
}
Editor is loading...