11 0 1 MB
BAB III PERANCANGAN ALAT Bab ini membahas tentang perancangan alat Hidroponik Vertikal Otomatis Berbasis Arduino Nano dan NodeMCU yang disajikan secara detail dan blog diagram dibawah ini. 3.1
Gambaran Umum Alat
Gambar 3.1 Gambaran Kotak Komponen
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.
Gambar 3.2 Gambar Keseluruhan Alat
30
3.2
Rancangan Rangkain Alat Secara Blok Diagram Gambar 3.2 merupakan analisa rangkaian secara blok diagram. Blok
diagram tersebut dibagi menjadi tiga blok yaitu blok input, blok proses, dan blok output dan masing-masing blok mempunyai fungsi yang berbeda satu sama lainnya. Masing-masing blok tersebut diaktifkan dengan menggunakan aktivator berupa tegangan sebesar 12 volt yang kemudian di konversi dengan step down menjadi 5 volt.
Gambar 3.3 Blok Diagram
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.
3.2.1
Blok Aktivator Aktivator merupakan sumber tegangan DC yang medianya dapat
berupa baterai atau power adaptor. Penulis menggunakan sumber tegangan DC berupa power supply 12 volt 5 ampere untuk Arduino dan NodeMCU serta komponen lainnya yang tersambung ke Arduino. LED pada Arduino Uno dan NodeMCU akan menyala apabila diberikan tegangan tersebut.
3.2.2
Blok Input Pada blok input terdapat sensor ultrasonik untuk membaca ketinggian
air pada penampung air agar servo mendapat kondisi untuk mengisi air dengan membuka katup maupun menutup katup. Selain itu sensor temperatur berfungsi untuk membaca temperatur lingkungan. Sensor ultrasonik memancarkan gelombang suara yang dipancarkan melalui transmitter. Kemudian, gemlombang tersebut akan terpantul ke objek yang kemudian diterima oleh receiver. Setelah itu, jarak objek akan terbaca oleh sensor. Setelah sensor mendapatkan pantulan frekuensi, sensor ultrasonik akan merubah data tersebut dan memberikan input berupa sinyal digital. Sinyal digital tersebut dapat digunakan untuk pin pada arduino dan akan langsung terbaca setelah diolah dengan memasukan rumus konversi. Proses sensoring efektif pada sensor ini seharusnya dapat terdeteksi di bawah 3 meter sesuai spesifikasi sensor. Tapi hasil ini sangatlah tergantung dengan program serta lingkungan yang terdapat disekitar sensor tersebut.
32
3.2.3
Blok Proses Pada blok proses terdapat Arduino Nano dan NodeMCU sebagai
pengolah data dan sebagai “otak” dari seluruh komponen alat ini. Arduino Nano menentukan kapan komponen akan bekerja serta mengatur voltase masingmasing komponen dengan PWM apabila komponen tersebut mendukung. NodeMCU bekerja sebagai pengirim data ke MQTT yang kemudian data tersebut dapat dikirim ke perangkat lain untuk ditampilkan. Modul relay digunakan untuk memproses data output dari Arduino Nano agar pompa dapat menyala maupun mati.
Gambar 3.4 Skematik Arduino Nano
33
Gambar 3.5 Skematik NodeMCU
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
Gambar 3.6 Rangkaian Komunikasi Serial
3.2.4
Blok Output Output atau keluaran dari alat hidroponik vertikal ini adalah pompa dc
12v dan motor servo. Pompa dc 12v digunakan untuk mensikulasikan air ke dalam hidroponik vertikal agar tanaman dapat diberikan air dengan baik. Sumber listrik untuk pompa dc 12v menggunkan listring langsung dari power supply tanpa dikonversikan ke 5v terlebih dahulu. Motor servo digunakan untuk mengerakan katup air untuk mengisi wadah air apabila wadah tersebut memiliki jumlah air yang sedikit. Motor servo ini menggunakan listrik yang sudah dikonversikan menjadi 5v.
3.3
Rangkaian Secara Keseluruhan
Perancangan skematik menggunakan aplikasi Fritzing, perancangan lebih kepada menghubungkan pin antara sensor radar HB100, Arduino Uno, LCD dan Buzzer.
35
Gambar 3.7 Rangkaian Secara Keseluruhan
3.3.1
Penjelasan Skematik Pada gambar 3.6 akan dijelaskan secara detail untuk pin-pin input,
output maupun proses yang digunakan pada penjelasan di bawah ini. Arduino Nano Pada pin Arduino Nano terdapat beberapa komponen yang tersambung yaitu sensor ultrasonik, motor servo, sensor temperatur dan relay yang kemudian terhubung ke pompa air dc 12v. Sensor ultrasonik terhubung ke pin 7 untuk trigger dan 9 untuk echo, sensor temperatur terhubung ke pin 6,
36
motor servo ke pin 10 dan relay terhubung ke pin 2. Semua komponen tersebut terhubung ke pin digital arduino yang dialiri oleh tegangan 5v. Selain itu, arduino nano juga terhubung langsung ke NodeMCU untuk melakukan komunikasi serial agar data yang terdapat di arduino nano dapat langsung diambil dan diolah oleh NodeMCU. NodeMCU NodeMCU tidak terhubung dengan komponen manapun selain arduino nano. Ini dilakukan agar NodeMCU dapat melakukan komunikasi serial dengan Arduino Nano. Tujuan mereka terhubung adalah agar data yang terdapat di arduino nano dapat dikirim ke server MQTT melalui NodeMCU. Hal ini dilakukan karena arduino nano sendiri tidak dapat melakukan hal berbasis IoT karena kurangnya chip esp8266. Step Down 12v to 5v LM2596 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 Kapasitor yang terhubung langsung step down digunakan sebagai penambah daya. Komponen ini digunakan karena tanpa adanya kapasitor, daya yang ada tidak dapat menjalankan motor servo yang memiliki daya yang cukup besar. Modul Relay Modul relay digunakan sebagai switch untuk menyalakan pompa air. Komponen ini digunakan agar pompa air dapat diberikan kondisi 1 dan 0
37
3.3.2
Rancangan Program Aplikasi Berikut ini adalah rancangan dari aplikasi yang sudah penulis buat.
Gambar 3.8 Perancangan Aplikasi Android Pada gambar di atas, penulis merancang aplikasi seperti gambar tersebut. Aplikasi tersebut dibuat dengan menggunakan Thunkable AppInventor yang merupakan software open source pembuat aplikasi android yang disebarkan secara gratis. Aplikasi tersebut menampilkan beberapa status dari sensor yang sudah terpasang di alat hidroponik vertikal yang penulis buat, seperti temperatur, jumlah volume air, status nyala apa tidaknya pompa, dan status valve. Selain itu, terdapat juga mode manual untuk mengendalikan pompa dan valve alat secara
38
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 Berikut ini adalah gambaran alur algoritma dari Alat Hidroponik
Vertikal Berbasis Arduino Nano dan NodeMCU.
39
Gambar 3.9 Flowchart Alat Hidroponik Vertikal Menggunakan Arduino Nano dan NodeMCU Berbasis IoT.
Terdapat beberapa symbol pada gambar 3.5, yaitu terdiri dari terminator, decision, process, connector, input- output dan data. Terminator digunakan untuk permulaan (mulai) dan (akhir) suatu program, simbol decision digunakan untuk menunjukkan suatu kondisi tertentu, simbol connector digunakan untuk penyambungan dari proses ke proses lainnya dalam halaman yang sama, simbol process digunakan untuk pada terminal, dan simbol input- output untuk menentukan inputan dari suatu proses dan output merupakan hasil dari proses.
40
Flowchart pada gambar 3.9 menunjukkan bahwa langkah awal terminal menyatakan mulai, lalu dilanjutkan ke kondisi decision apakah catu daya mengalir dan alat menyala, apabila alat menyala maka berlanjut ke proses selanjutnya yaitu memberikan kondisi satu kepada pompa air dan menyalakan pembacaan sensor temperatur. Setelah itu, akan ada decision apakah koneksi MQTT berhasil. Apabila tidak, maka alat akan memunculkan “koneksi gagal terhubung” kemudian looping kembali ke awal. Apabila koneksi berhasil maka akan muncul decision berikutnya yaitu membaca apakah jarak air dengan ultrasonik diatas 10 cm. Apabila iya, maka servo akan menyala dan air akan masuk melalui klep yang sudah terbuka. Apabila tidak maka servo akan menutup dan air tidak dapat mengalir dari klep servo.
Gambar 3.10 Flowchart Program Android
41
Flowchart pada gambar 3.6 menunjukkan langkah-langkah dari program android yang sudah dibuat. Pertama, program menunjukan splash screen, yang kemudian dilanjutkan dengan memunculkan kondisi, apakah MQTT sudah terkoneksi ke dalam program android. Apabila tidak terkoneksi, maka aplikasi tidak akan berjalan dan tidak menunjukan data apapun. Apabila terkoneksi, maka data akan terlihat di label yang sudah tersedia serta gambar on-off yang terlihat dapat berubah sesuai keadaan realtimenya. Setelah itu, button yang ditunjukan untuk mengendalikan pompa dan valve secara manual juga dapat digunakan untuk merubah keadaan pompa serta klep valve. 3.5
Penjelasan Potongan Program Arduino Nano Program terdiri dari beberapa bagian yang masing – masing bagian
akan dijelaskan berdasarkan program input, proses, dan output.
3.5.1
Program Inisialisasi 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
Tabel 3.1 Program Inisialisasi Arduino Nano Program #include
Analisa Pada program yang terdapat di bagian
#include
inisialisasi ini terdapat beberapa
#include
command seperti #include yang bertujuan
#define trigPin 7
untuk menambahkan library yang akan
#define echoPin 9
kita gunakan dalam program. Selain itu,
#define ONE_WIRE_BUS 6
terdapat juga #define yang digunakan
#define pompaairutama 2
untuk menentukan tempat pin dari sebuah
#include
variable yang kita gunakan. Dikarenakan
SoftwareSerial arduinoSerial(12, 11); //
alat penulis menggunakan dua
RX, TX
mikrokontroller, maka dibutuhkan
Servo myservo;
koneksi serial antara keduanya agar dua
OneWire oneWire(ONE_WIRE_BUS);
mikrokontroler tersebut dapat
DallasTemperature
berkomunikasi. Int pos = 0 merupakan
sensorSuhu(&oneWire);
inisialisasi servo untuk berada pada posisi
float suhuSekarang;
awal yaitu 0 derajat. Sementara bool
int pos = 0;
valve = 0 digunakan untuk
bool valve = 0;
menginisialisasi data valve untuk
bool state_pompa
kemudian dikirim melalui MQTT.
3.5.2
Program Pada Void Setup Program ini terdiri dari program – program yang ada pada void Setup
yang digunakan untuk menginisialisasi variable, mode pin, menggunakan fungsi library yang telah didefinisikan.
43
Tabel 3.2 Program pada Void Setup Arduino Nano Program Serial.begin(115200);
Analisa Serial.begin digunakan untuk
arduinoSerial.begin(115200);
mensetting kecepatan data ke 115200 bps. Sementara arduinoSerial digunakan untuk memulai komunikasi serial antara kedua mikrokontroller.
myservo.attach(10);
Myservo.attach(10) digunakan
sensorSuhu.begin();
untuk menentukan pin servo yang
pinMode(pompaairutama,OUTPUT);
terdapat di pin 10. Sensorsuhu.begin digunakan untuk memulai pembacaan sensor DS18B20. Pinmode digunakan untuk menentukan mode variabel yang bisa berupa input atau output.
3.5.3
Program Void Loop Program ini terdiri dari program-program untuk cara kerja sensor.
44
Tabel 3.3 Program Void Loop Arduino Nano Program digitalWrite(pompaairutama, LOW);
Analisa 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 { myservo.write(90);
terbuka dan mengisi air tersebut serta memberikan data 1 untuk
45
valve = 0;
menandakan valve sedang terbuka.
}
Dan sebaliknya apabila sudah dibawah 10 cm, maka katup akan
String str =
menutup dengan sendirinya dan
String(''); arduinoSerial.print(str);
sudah tertutup dengan memberikan kondisi 0. “String str =” digunakan
}
untuk membuat data yang sudah
float ambilSuhu()
diambil menjadi array yang
{
kemudian akan dikirimkan ke sensorSuhu.requestTemperatures();
nodemcu dengan komunikasi serial.
float suhu = sensorSuhu.getTempCByIndex(0);
Di kodingan paling akhir terdapat
return suhu;
sebuah rumus yang digunakan
}
untuk mengkonversikan microseconds yang sudah didapat menjadi centimeter. 29 merupakan
long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2;
kecepatan gelombang suara yang terdapat di udara.
}
3.6
Penjelasan Potongan Program NodeMCU Program terdiri dari beberapa bagian yang masing – masing bagian
akan dijelaskan berdasarkan program input, proses, dan output.
3.6.1
Program Inisialisasi Program ini pada berfungsi untuk inisialisasi atau penentuan nilai awal
pada mikrokontroler yaitu pemberian nilai apakah port yang digunakan sebagai
46
input ataupun output dan inisialisasi jenis variable yang digunakan.
Tabel 3.4 Program Inisialisasi NodeMCU Program #include
Analisa Pada program yang terdapat di inisialisasi
#include
nodeMcu ini, terdapat beberapa library
#include
yang harus dimasukan seperti kodingan esp8266 untuk melakukan koneksi
// Update these with values suitable for
terhadap wifi, lalu library komunikasi
your network.
serial yang digunakan untuk melakukan komunikasi serial. Lalu ada library
const char* ssid = "Istana Kepresidenan
pubsubclient yang digunakan untuk
Hachiohji";
melakukan koneksi MQTT yang berupa
const char* password = "ahuehue8686";
subscribe maupun publish. Selain itu
const char* mqtt_server =
terdapat program yang digunakan untuk
"broker.hivemq.com";
mengkoneksikan nodeMCU ke wifi yang
const char* topic =
sudah kita gunakan. Dibawahnya terdapat
"SmartO'Ponic_From_Device";
program yang digunakan untuk
const char* subs =
mengkoneksikan nodeMCU ke server
"SmartO'Ponic_From_Smartphone";
MQTT broker yang kita inginkan. Disini penulis menggunakan
WiFiClient espClient;
broker.hivemq.com. Selain itu, terdapat
PubSubClient client(espClient);
program yang menghubungkan komunikasi serial yang berasal dari
SoftwareSerial nodeSerial(5, 4);
nodeMCU. Ini terletak di pin 5 sebagai receiver dan 4 sebagai transmitter.
// Example 5 - Receive with start- and
Setelah data diterima dari arduino nano,
end-markers combined with parsing
terdapat proses parsing yang akan
47
dimasukan ke array sementara yang const byte numChars = 32;
terdapat di program sebelah ini.
char receivedChars[numChars];
Kemudian, data yang sudah diparsing
char tempChars[numChars];
//
temporary array for use when parsing
akan dimasukan kedalam beberapa variable yang sudah kita siapkan.
// variables to hold the parsed data int jarak, suhu; bool valve; boolean newData = false;
void setup_wifi() {
Pada program yang terdapat disebelah ini,
delay(10);
koneksi wifi akan dilakukan. Pertama
// We start by connecting to a WiFi
dengan memberikan status bahwa koneksi
network
wifi sudah terhubung ke ssid yang kita
Serial.println();
inginkan. WiFi.begin digunakan untuk
Serial.print("Connecting to ");
memulai koneksi wifi dengan memasukan
Serial.println(ssid);
ssid yang digunakan dan password dari
pinMode(12, OUTPUT);
ssid tersebut. Apabila koneksi wifi belum
WiFi.begin(ssid, password);
terkoneksi ke ssid yang diinginkan, maka serial monitor akan menampilkan status
while (WiFi.status() != WL_CONNECTED) {
}
wifi dengan “......” hingga ssid berhasil dikoneksikan ke NodeMCU. Titik
delay(500);
tersebut diberikan delay sebesar 0,5 detik
Serial.print(".");
untuk setiap printnya.
48
Apabila wifi sudah terkoneksi, maka randomSeed(micros());
status di serial monitor akan diupdate dan memberikan kita status ip address yang
Serial.println("");
kita dapatkan ke nodeMCU kita yang
Serial.println("WiFi connected");
didapat dari ssid tersebut.
Serial.println("IP address: "); Serial.println(WiFi.localIP()); } 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