PERANCANGAN ALAT
Gambar 3.1 menunjukan gambaran umum alat secara rinci dan jelas.
Semua komponen terletak pada maket akrikilik yang sudah dibuat berbentuk
kotak dan dapat mengisi beberapa komponen di dalamnya. Di dalam akrilik
terdapat beberapa komponen yang terdiri dari power supply, Arduino Nano,
28
29
NodeMCU, step down 12v to 5v, modul relay dan switch. Power supply
memberikan power ke seluruh rangkaian. Power supply 12v di konversi menjadi
tegangan 5v melalui step down, kemudian tegangan tersebut di teruskan ke
seluruh komponen seperti Arduino Nano, NodeMCU, Sensor Temperatur,
Sensor Ultrasonik, dan Servo. Selain itu, power supply juga memberikan
tegangan langsung tanpa di konversi ke pompa air dc 12v.
Pada blok diagram gambar 3.2, diawali dengan blok aktivator yang memberikan
arus listrik untuk menyalakan seluruh komponen yang ada di alat. Kemudian di
bagian input terdapat sensor ultrasonik untuk membaca ketinggian air dan
sensor temperatur DS18B20 untuk membaca temperatur udara. Kemudian di
bagian proses, terdapat mikrokontroler Arduino Nano dan NodeMCU sebagai
pengolah data serta mengirim data ke MQTT dan modul relay untuk kemudian
31
diteruskan ke blok output. Di blok output terdapat Pompa Air DC 12V untuk
mensirkulasikan air di dalam hidroponik vertikal.
Selain itu Arduino Nano dan NodeMCU juga dihubungkan agar kedua
mikrokontroller tersebut dapat saling berkomunikasi satu sama lain. Hal ini
dilakukan karena Arduino Nano tidak dapat terhubung ke internet tanpa adanya
perangkat keras tambahan.
34
Pada gambar 3.6 akan dijelaskan secara detail untuk pin-pin input,
output maupun proses yang digunakan pada penjelasan di bawah ini.
Arduino Nano
NodeMCU
Step down ini digunakan agar tegangan 12v dari power supply dapat
diturunkan menjadi tegangan 5v. Tujuan melakukan hal ini, karena
komponen yang tersambung ke arduino nano dan nodemcu memiliki
tegangan kerja 5v, yang apabila diberikan tegangan 12v akan merusak
komponen tersebut.
Kapasitor
Modul Relay
manual yang berguna apabila terjadi kendala dengan sistem otomatisnya. Semua
status tersebut dikirim ke dalam broker MQTT yang kemudian disubscribe oleh
aplikasi tersebut agar status dapat terkirim ke aplikasi smartphone. Selain itu,
aplikasi tersebut memiliki sistem notifikasi untuk memberitahu apabila beberapa
kondisi terpenuhi, seperti kurangnya air, melakukan pengisian air, temperatur
terlalu tinggi/rendah dan lain sebagainya. Button di paling bawah digunakan
untuk mereset koneksi MQTT apabila dibutuhkan.
3.4 Flowchart
Gambar 3.9 Flowchart Alat Hidroponik Vertikal Menggunakan Arduino Nano dan
NodeMCU Berbasis IoT.
Program ini pada berfungsi untuk inisialisasi atau penentuan nilai awal
pada mikrokontroler yaitu pemberian nilai apakah port yang digunakan sebagai
input ataupun output dan inisialisasi jenis variable yang digunakan.
42
Program Analisa
Serial.begin(115200); Serial.begin digunakan untuk
arduinoSerial.begin(115200); mensetting kecepatan data ke
115200 bps. Sementara
arduinoSerial digunakan untuk
memulai komunikasi serial antara
kedua mikrokontroller.
Program Analisa
digitalWrite(pompaairutama, LOW); digitalWrite digunakan untuk
suhuSekarang = ambilSuhu(); menentukan sebuah variable
Serial.println(suhuSekarang); tersebut berkondisi low atau high.
delay(2000); Di kodingan disebelah,
long duration, cm; pompaairutama dikondisikan
pinMode(trigPin, OUTPUT); sebagai low, ini dikarenakan relay
digitalWrite(trigPin, LOW); yang digunakan bersifat active low,
delayMicroseconds(2); yang berarti akan aktif apabila
digitalWrite(trigPin, HIGH); keadaan relay low. Selain itu juga
delayMicroseconds(10); terdapat kodingan untuk
digitalWrite(trigPin, LOW); menyalakan sensor ultrasonik yang
pinMode(echoPin, INPUT); ditandai dengan variable trigpin dan
duration = pulseIn(echoPin, HIGH); echopin. Cm =
microsecondstocentimenters
cm = microsecondsToCentimeters(duration); digunakan untuk mengkonversikan
Serial.print(cm); microsecond menjadi satuan
Serial.print("cm"); centimeter. Serial.print digunakan
Serial.println(); untuk menampilkan data dari
delay(200); variable tersebut kedalam serial
monitor yang terdapat di arduino.
if (cm >= 10) { Disini terdapat sebuah kondisi yang
myservo.write(10); apabila pembacaan sensor
valve = 1; ultrasonik terhadap air sudah lebih
besar 10 cm, maka katup air akan
} else { terbuka dan mengisi air tersebut
myservo.write(90); serta memberikan data 1 untuk
45
Program ini pada berfungsi untuk inisialisasi atau penentuan nilai awal
pada mikrokontroler yaitu pemberian nilai apakah port yang digunakan sebagai
46
void callback(char* topic, byte* payload, Pada program ini, kita akan melakukan
unsigned int length) { sistem callback terhadap payload MQTT
Serial.print("Message arrived ["); yang kita subscribe. Payload atau isi dari
Serial.print(topic); data MQTT yang kita dapat apabila kita
Serial.print("] "); subscribe akan dikonversikan menjadi
for (int i=0;i<length;i++) { char. Serial monitor akan menampilkan
Serial.print((char)payload[i]); data yang di dapat serta topic yang kita
} subscribe.
Serial.println();
}
void reconnect() { Apabila koneksi wifi putus atau tidak
// Loop until we're reconnected dapat terkoneksi, maka harus diberikan
while (!client.connected()) { program untuk mengkoneksikan kembali
Serial.print("Attempting MQTT ke ssid yang sudah kita setting. Dengan
connection..."); adanya program tersebut, maka wifi yang
// Create a random client ID terputus akan kembalik terkoneksi apabila
String clientId = "ESP8266Client-"; koneksi tersebut memungkinkan.
clientId += String(random(0xffff), Program ini akan selalu melooping
HEX); hingga wifi kembali terhubung, dan
// Attempt to connect apabila tidak akan terus mencoba untuk
49
Program Analisa
Serial.begin(115200); Serial.begin digunakan untuk
nodeSerial.begin(115200); mensetting kecepatan data ke
setup_wifi(); 115200 bps. Sementara
client.setServer(mqtt_server, 1883); arduinoSerial digunakan untuk
client.setCallback(callback); memulai komunikasi serial antara
kedua mikrokontroller.
Setup_wifi() digunakan untuk
memulai setup wifi yang sudah
50
Program Analisa
if (!client.connected()) { Di program ini, data yang sudah
reconnect(); dikirim dari NodeMCU yang
} berupa array akan di parse dan
client.loop(); diubah ke tipe data yang kita
inginkan. Array tersebut kemudian
recvWithStartEndMarkers(); di konversikan menjadi data string
if (newData == true) { yang kemudian dimasukan ke
strcpy(tempChars, receivedChars); variable yang sudah di sediakan.
// this temporary copy is necessary to protect the Variable “buff “yang terdapat di
original data program ini digunakan untuk
// because strtok() used in parseData() replaces the menampung data yang sudah
commas with \0 konversi tersebut. Variable tersebut
parseData(); merupakan variabel sementara agar
51
void parseData() { // split the data into its parts Program dibawah ini merupakan
program untuk merubah tipe data
char * strtokIndx; // this is used by strtok() as an index yang sudah dikirim oleh Arduino
Nano. Pada saat pengiriman secara
// strtokIndx = strtok(tempChars,","); // get the first serial, data harus berupa array.
part - the string Apabila data tersebut ingin
// strcpy(messageFromPC, strtokIndx); // copy it to dimasukan ke variable maka data
messageFromPC tersebut harus bertipe string atau
integer. Oleh karena itu
strtokIndx = strtok(tempChars, ","); // this continues pengkonversian data diperlukan
where the previous call left off untuk memasukan data yang sudah
suhu = atoi(strtokIndx); // convert this part to an dikirim ke dalam variable yang kita
integer inginkan. Pada program ini, semua
strtokIndx = strtok(NULL, ","); // this continues where data yang dimasukan ke variable
the previous call left off masing-masing diubah menjadi tipe
jarak = atoi(strtokIndx); // convert this part to an integer.
integer
strtokIndx = strtok(NULL, ","); // this continues where
the previous call left off
valve = atoi(strtokIndx); // convert this part to an
integer
void showParsedData() {
Serial.print("suhuF ");
Serial.println(suhu);
Serial.print("jarak ");
Serial.println(jarak);