Anda di halaman 1dari 26

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 masing-
masing 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 Analisa
#include <OneWire.h> Pada program yang terdapat di bagian
#include <DallasTemperature.h> inisialisasi ini terdapat beberapa
#include <Servo.h> 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 <SoftwareSerial.h> 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 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.

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

valve = 0; menandakan valve sedang terbuka.


} Dan sebaliknya apabila sudah
dibawah 10 cm, maka katup akan
String str = menutup dengan sendirinya dan
String('<')+String(suhuSekarang)+String(',')+String(cm)+ memberikan status bahwa valve
String(',')+String(valve)+String('>'); sudah tertutup dengan memberikan
arduinoSerial.print(str); 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) { kecepatan gelombang suara yang
return microseconds / 29 / 2; 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 Analisa
#include <SoftwareSerial.h> Pada program yang terdapat di inisialisasi
#include <ESP8266WiFi.h> nodeMcu ini, terdapat beberapa library
#include <PubSubClient.h> 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]; // akan dimasukan kedalam beberapa
temporary array for use when parsing 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() != wifi dengan “......” hingga ssid berhasil
WL_CONNECTED) { 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<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

if (client.connect(clientId.c_str())) { mengkoneksikan ke ssid yang diminta


Serial.println("connected"); hingga terkoneksi. Apabila koneksi gagal,
} else { maka akan dicoba untuk dikoneksikan
Serial.print("failed, rc="); kembali dengan jeda setiap 5 detik.
Serial.print(client.state());
Serial.println(" try again in 5
seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}

3.6.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.

Tabel 3.5 Program pada Void Setup NodeMCU

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

kita masukan. Client.setServer


digunakan untuk mengkoneksikan
MQTT ke port yang kita inginkan.
Disini penulis menggunakan port
1883.

3.6.3 Program Void Loop


Program ini terdiri dari program-program untuk cara kerja sensor.

Tabel 3.6 Program Void Loop NodeMCU

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

showParsedData(); data yang sudah terkonversi


newData = false; tersebut dapat ditampung ke suatu
char buff[16]; variable tertentu untuk kemudian di
itoa(suhu, buff, 10); publish ke server MQTT melalui
client.publish("tempair", buff); internet yang sudah terhubung ke
buff[0] = (char)0; NodeMCU. Data di yang sudah di
itoa(jarak, buff, 10); parsing akan bertipe integer,
client.publish("volair", buff); sementara untuk mengirim data ke
buff[0] = (char)0; MQTT diperlukan data array.
itoa(valve, buff, 2); Perintah “itoa” yang terdapat di
client.publish("topicsad", buff); program memiliki kepanjangan
buff[0] = (char)0; yaitu integer to array. Perintah ini
itoa(pump, buff, 2); menugaskan program untuk
client.publish("topicpompa", buff); merubah tipe data integer menjadi
array untuk kemudian dikirim ke
} MQTT.
delay(1000);

void recvWithStartEndMarkers() { Program di samping ini bertugas


static boolean recvInProgress = false; untuk mengefisiensikan pembacaan
static byte ndx = 0; data yang sudah terkirim melalui
char startMarker = '<'; Arduino Nano. Program hanya akan
char endMarker = '>'; membaca data yang terdapat dari
char rc; pembacaan serial apabila data
tersebut merupakan data baru.
Apabila data tersebut merupakan
while (nodeSerial.available() > 0 && newData == data yang sama dari pembacaan
false) { sebelumnya, maka pembacaan akan
52

rc = nodeSerial.read(); dihentikan dan tidak diread oleh


if (recvInProgress == true) { program. Apabila data yang sudah
if (rc != endMarker) { dibaca memiliki perbedaan dengan
receivedChars[ndx] = rc; data sebelumnya, maka secara
ndx++; otomatis pembacaan data akan
if (ndx >= numChars) { diupdate dan merubah data yang
ndx = numChars - 1; sebelumnya sudah ada.
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
newData = true;
}
}

else if (rc == startMarker) {


recvInProgress = true;
}
53

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);

Anda mungkin juga menyukai