forked from mubarakabaz/fuzzy-hydroponic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAgriIoT.ino
133 lines (106 loc) · 3.37 KB
/
AgriIoT.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "Deklarasi.h"
// memanggil file fungsi fuzzy yang telah dideklarasikan
// -- kelas yang memetakan nilai member fuzzy
#include "FuzzyMainObj.h"
fuzzy_main_obj();
// -- memanggil kelass yang dibutuhkan untuk fungsi fuzzy
#include "FuzzySetInit.h"
#include "FuzzyRuleInit.h"
#include "ProsesFuzzifikasi.h"
#include "ProsesDefuzzifikasi.h"
#include "cekAkurasiPH.h"
#include "cekAkurasiTDS.h"
// -- memanggil kelas setup
#include "SetupSensor.h"
#include "SetupRelay.h"
#include "SetupWiFi.h"
void setup() {
Serial.begin(115200); // Komunikasi Serial untuk Debugging
setupSensor(); // inisialisasi sensor
setupRelay(); // inisialisasi relay
// Setting LCD jika pertama kali dihidupkan
lcd.begin();
lcd.setCursor(0,0);
lcd.print("Selamat Datang");
lcd.setCursor(0,1);
lcd.print("Di Sistem Cerdas");
lcd.setCursor(0,2);
lcd.print("Connecting...");
// inisialisasi WiFi (Set SSID & Password WiFi)
// Setting lcd jika berhasil terhubung ke WiFi
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Berhasil");
lcd.setCursor(0,2);
lcd.print("Terhubung!");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Selamat Datang");
lcd.setCursor(0,1);
lcd.print("mubarakabaz.my.id");
delay(1000);
lcd.clear();
// Memulai proses Fuzzifikasi
// panggil kelas FuzzySetInit & FuzzyRuleInit
fuzzySetInit();
fuzzyRuleInit();
// EEPROM | Menampilkan data yang ditampung
phSetA = EEPROM.read(201);
phSetB = EEPROM.read(202);
tdsSetA = EEPROM.read(203);
tdsSetB = EEPROM.read(204);
tdsSetA = tdsSetA * 10;
tdsSetB = tdsSetB * 10;
}
void loop() {
// Pembacaan sensor Suhu
DS18B20.requestTemperatures();
temperature = DS18B20.getTempByIndex(0);
// Pembacaan sensor pH
int ph = analogRead(PH_PIN);
float voltage = 5 / 1024.0 * ph;
// kalibrasi sensor ph (menggunakan regresi linear)
// -5.4 -> nilai minimum pembacaan sensor
phValue = (-5.400 * voltage) + 18.14;
// Pembacaan sensor TDS
gravityTds.setAdcRange(1024);
gravityTds.setTemperature(temperature);
gravityTds.update();
tdsValue = gravityTds.getTdsValue();
// Logika pompa
if(phValue <= phSetA)
// Print Debugging untuk mengecek nilai input
// setiap 5 detik
if(millis() - waktuMulai > 5000U){
waktuMulai = millis();
// proses fuzzifikasi
prosesFuzzy();
// cek nilai fuzzifikasi
cekAkurasiPh();
cekAkurasiTds();
// proses Defuzzifikasi
prosesDefuzzy();
Serial.println("=====+ copy & paste nilai ke matlab (ph | tds) +=====");
Serial.print(phValue); Serial.print(" "); Serial.print("tdsValue");
Serial.println(" ");
// tampilkan di LCD
lcd.setCursor(0, 0);
lcd.print("PH: "); lcd.print(phValue, 1); lcd.print(" ");
lcd.setCursor(8, 0);
lcd.print("TDS: "); lcd.print(tdsValue, 1); lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Suhu: "); lcd.print(temperature, 1); lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print(phSetA, 1); lcd.print("<>"); lcd.print(phSetB, 1);
lcd.setCursor(0, 2);
// ingat untuk mengubah nilai PU, PD, NA, AB
lcd.print("PU "); lcd.print(spu); lcd.print(" "); lcd.print("PD "); lcd.print(spd); lcd.print(" ");
lcd.setCursor(11, 2);
lcd.print(tdsSetA,1); lcd.print("<>"); lcd.print(tdsSetB,1);
lcd.setCursor(0, 3);
lcd.print("NA "); lcd.print(sna); lcd.print("AB "); lcd.print(sab);
lcd.setCursor(18, 3);
lcd.print("AAM");
}
}