Kamis, 13 Agustus 2015

Aplikasi Monitoring Durasi Harian Penyinaran Cahaya Matahari untuk Menentukan Cuaca Menggunakan Sensor Luminosity Berbasis Wireless Sensor Network

DASAR TEORI


Wireless Sensor Network (WSN) atau Sensor Jaringan Nirkabel merupakan suatu jaringan nirkabel yang terdiri dari beberapa sensor (sensor node) yang diletakkan ditempat-tempat yang berbeda untuk memantau kondisi suatu plan. Beberapa penggunaan WSN adalah oto-masi industri, kontrol dan managemen energi, memantau mesin-mesin kesehatan, memantau lingkungan untuk keperluan kesehatan, memantau arus lalulintas, memantau bencana alam (pencatatan gempa), memantau polusi, memantau hewan liar, memantau parameter energi listrik dan lain-lain.
Sensor-sensor tersebut akan mendeteksi obyek dan mengirim data dengan nirkabel ke gateway lalu ke server. Sensor-sensor yang digunakan dapat bermacam-macam, tergantung dari plan yang dik-erjakan. Berikut adalah contoh penggunaan Wireless Sensor Network pada dokumentasi Libelium.
Gambar 1.1 Libelium Smart World 
  • Overview
Waspmote adalah sebuah open source wireless sensor platform yang fokus pada implementasi dari low-consumption-modes yang memungkinkan sensor node bekerja secara otomatis. Waspmote dapat bertahan selama 1-5 tahun tegantung pada penggunaannya. Waspmote dikeluarkan oleh Libelium pada November 2009.
Waspmote menjadi perangkat yang bertugas mengambil data dari lingkungan sesuai modul atau sensor yang digunakan bersamanya. Waspmote dibuat berdasarkan pada arsitektur modular. Idenya adalah untuk mengintegrasikan hanya modul-modul pada masing-masing perangkat. Modul-modul ini dapat diubah dan diperluas sesuai dengan kebutuhan. Arsitektur Waspmote didasarkan pada mikrokontroler Atmel ATMEGA 1281. Unit pengolahan ini mulai menjalankan bootloader binary, yang bertanggunag jawab untuk mengambil program yang telah dikompilasi dan library yang sebelumnya disimpan dalam memori FLASH ke dalam memori utama, sehingga program utama yang telah dibuat dapat berjalan.

 


Gambar 1.2 Komponen inti Waspmote (tampak atas) 


Gambar 1.3 Komponen inti Waspmote (tampak bawah) 

  • Waspmote Events 2.0 Board
Waspmote Events 2.0 Board adalah sebuah papan rangkaian elektronik yang memungkinkan koneksi simultan sampai dengan 8 sensor. Sensor-senor yang dipasang ke papan ini memiliki beberepa fungsi yang disesuaikan untuk events atau peristiwa-peristiwa tertentu. Misalnya pendeteksi banjir, keamanan, pengukuran intensitas cahaya, dan lain-lain.
Events 2.0 Board mempunyai soket yang digunakan untuk menghubungkan beberapa sensor yang umum pada aplikasi untuk kondisi atau kejadian tertentu, yaitu sensor cahaya (luminosity sensor), keberadaan (presence sensor), tekanan (pressure sensor), pendeteksi tingkat zait cair (liquid level sensor) dan sebagainya.

  • Luminosity Sensor (9205)
Sensor luminosity atau sering disebut Light Dependent Resistor (LDR) adalah jenis resistor yang nilai hambatan atau nilai resistansinya tergantung pada intensitas cahaya yang diterimanya. Nilai Hambatan LDR akan menurun pada saat cahaya terang dan nilai Hambatannya akan menjadi tinggi jika dalam kondisi gelap. Dengan kata lain, fungsi sensor ini adalah untuk menghantarkan arus listrik jika menerima sejumlah intensitas cahaya (kondisi terang) dan menghambat arus listrik dalam kondisi gelap. Naik turunnya nilai hambatan akan sebanding dengan jumlah cahaya yang diterimanya.
Sensor luminosity (LDR) sering digunakan atau diaplikasikan dalam rangkaian elektronika sebagai sensor pada lampu penerang jalan, lampu kamar tidur, rangkaian anti maling, shutter kamera, alarm dan lain sebagainya. [3]
Pada Libelium, sensor ini mempunyai nomor 9205. Sensor ini mempunyai resistansi 20 MΩ saat gelap dan 5-20kΩ saat terang (10lux). Sensor luminosity dapat berfungsi pada suhu yang cukup ekstrim, yaitu antara -30ºC s/d 75ºC sehingga memungkinkan untuk kondisi di luar ruangan. [4]
Pada projek akhir ini, sensor luminosity digunakan sebagai sensor penangkap nilai intensitas cahaya matahari. Nilai intensitas cahaya matahari dari sensor digunakan sebagai parameter penentuan cuaca.

Gambar 1.4 Sensor luminosity 9205 [2]
Meteor atau MeteorJS adalah sebuah open-source realtime framework untuk web berbasis javascript yang dibuat menggunakan Node.js. Meteor memungkinkan penggunanya untuk merancang atau membuat coding untuk berbagai platform seperti web, Android, iOS dengan sangat cepat. MeteorJS berintergrasi dengan MongoDB dan menggunakan Distributed Data Protocol dan pola publish-subscribe untuk secara otomatis menyebarkan perubahan data pada client secara realtime tanpa membutuhkan coding khusus untuk sinkronisasi. Pada sisi client, Meteor bergantung pada jQuery dan dapat digunakan dengan library javacript manapun. [5]

network

Gambar 1.5 Arsitektur  MeteorJS (sumber:Google)

MongoDB merupakan basis data yang tidak relasional. MongoDB ini bersifat open source yang memiliki High Performance. MongoDB adalah sebuah database yang menggunakan konsep manajemen database berorientasi dokumen (document-oriented) yang dibuat menggunakan pemograman C++. Orientasi dokumen ini adalah sebuah program komputer yang dirancang untuk menyimpan, mengambil, dan mengelola data yang berorientasi dokumen.
MongoDB sudah dikembangkan oleh Iogen sejak Oktober 2007, namun baru dipublikasikan mulai Februari 2009. Performa pada MongoDB sudah mencapai 4 kali lebih cepat dibandingkan dengn MySQL serta mudah diaplikasikan juga. Karena MongoDB ini tergabung sebagai modul PHP.
Untuk pengguna RDBMS yang mungkin agak membingungkan, karena dalam MongoDB ini tidak terdapat namanya tabel akan tetapi yang digunakan hanyalah koleksi dan dokumen. Koleksi ini dianggap sebagai sebuah directory (folder) sedangkan dokumen sendiri dianggap sebagai file (berkas) dalam directory (folder) tersebut. Perbandingan pada RDBMS seperti MySQL, pada koleksi diibaratkan dengan tabel, sedangkan dokumen diibaratkan dengan baris dalam tabel tersebut. Baris pada MongoDB ini tidak sama dengan yang ada pada RDBMS, dokumen pada MongoDB dapat memiliki beda atribut dengan dokumen  yang lainnya walaupun ada pada satu koleksi.

Data model MongoDB disebut BSON dengan struktur yang mirip dengan JSON. Strukturnya cukup mudah untuk dibaca. Dengan konsep key-value pada MongoDB, setiap dokumen akan otomatis memiliki indeks id yang unik. Sehingga dapat membantu mempercepat proses pencarian data secara global.
Gambar 1.6 Perbandingan istilah pada SQL dan MongoDB

Kelebihan MongoDB
1.        MongoDB merupakan sistem basis data yang menggunakan konsep key-value, yaitu setiap dokumen dalam MongoDB pasti memiliki key. Saat membuat dokumen tanpa menggunakan sebuah primary key, secara otomatis MongoDB akan memberikan sebuah key. Key-value ini berperan penting karena membuat sistem basis data pada MongoDB semakin lebih cepat dibandingkan dengan non key-value seperti RDBMS.
2.        MongoDB mendukung replikasi. Repiklasi ini dapat membuat pemilik sistem yang memiliki trafik membaca tinggi akan sangat terbantu ketika sistemnya menggunakannya.
3.        MongoDB juga mendukung Sharding. Sharding digunakan ketika memiliki website yang sudah sangat besar jumlah penggunaannya, datanya dapat mencapai jutaan giga byte. Dengan penggunakan sharding ini akan dikerjakan dengan membaris-baris data dengan per regional.
4.        MongoDB mendukung modul pemograman MapReduce. Yaitu sebuah konsep yang sangat fenomenal yang pernah dikeluarkan oleh Google dan saat ini banyak diimplementasikan seperti pada Apache Hadoop. MapReduce membantu ketika melakukan operasi agregasi. Dimana semua entry datangnya dari collection dan outputnya akan menjadi collection juga. Pada MySQL biasanya menggunakan query Group By.
5.        MongoDB mendukung bahasa pemograman C, C++, C#, Erlang, Haskell, Java, JavaScript, .NET (C#F#, PowerShell), Lips, PHP, Python, Ruby, dan Scala.
6.        Cross-platform. MongoDB akan dapat digunakan di Windows, Linux, OS X, dan Solarus.
7.        Proses CRUD (create, read, update, dan delete) terasa ringan.
8.        GridFS. GridFS ini digunakan untuk menyimpan data yang sangat besar.

Kekurangan MongoDB
1.        MongoDB harus diinstall disebuah server.
2.        MongoDB belum support dibanyak hosting.
3.        Tidak cocok untuk aplikasi proses transaksi.
  



Dalam pembuatan suatu sistem harus dilakukan perencanaan dan perancangan sistem yang sesuai dengan tujuan serta permasalahan yang dihadapi. Bab ini akan membahas secara rinci mengenai perencanaan dan pembuatan sistem yang akan dibuat.
Pada proyek akhir yang saya kerjakan yaitu mengenai pengimplementasian wireless sensor network untuk penentuan cuaca dengan menggunakan sensor luminosity. Berikut adalah gambaran umum desain proyek akhir saya.


Gambar 2.1 Gambaran umum

Events sensor node merupakan suatu perangkat yang tersusun atas Luminosity Sensor, Waspmote Events 2.0 board, dan Waspmote Starter Kit. Rancangan sensor inilah yang diletakkan pada lokasi di luar ruangan di mana sinar matahari akan ditangkap oleh sensor. Data dari sensor yang merupakan nilai intensitas cahaya matahari akan dikirim ke komputer server secara wireless. Kemudian akan ada sebuah gateway yang menghubungkannya dengan komputer server. Gateway ini bertugas sebagai jalur perpindahan data dari lingkungan untuk dapat diterima oleh komputer. Komputer server bertugas menerima data-data tersebut dan siap diproses oleh aplikasi monitoring secara realtime lalu disebarkan ke semua client yang sedang terhubung atau mengakses aplikasi. Selain itu, data yang telah didapatkan akan digunakan untuk melakukan perhitungan yang bertujuan untuk mendapatkan kondisi cuaca Hasil dari perhitungan tersebut adalah bilangan yang merupakan nilai intensitas cahaya dalam satuan Lux, lokasi di mana data tersebut diambil, waktu data diambil, serta kondisi cuaca pada saat pengambilan data dilakukan.
Untuk masalah konfigurasi pada board sensor, Waspmote memiliki aplikasi sendiri yang berfungsi sebagai IDE yang disebut dengan Waspmote IDE. Aplikasi ini digunakan untuk menulis source code dan mengunggahnya ke board dari waspmote. Aplikasi ini juga dapat digunakan untuk mengamati output serial monitor dan untuk debugging. IDE ini memuat Waspmote API (API adalah satu set dari semua library dari waspmote yang digunakan untuk proses compile program). Waspmote IDE dapat diunduh dari halaman resmi dari libelium di internet secara gratis. Waspmote IDE tersedia untuk sistem operasi Windows, OSX dan Linux.
Berikut ini adalah tampilan awal aplikasi Waspmote IDE pada Windows 8. Halaman tengah merupakan halaman yang berisi coding yang akan diunggah ke sensor board.

Gambar 1. 2 Tampilan Waspmote IDE pada Windows 8

Sebelum mengkonfigurasi sensor pada Waspmote IDE, terlebih dahulu harus menginstal aplikasi X-CTU yang dapat kita unduh secara gratis di internet. Aplikasi ini berfungsi untuk melihat nomor CH Channel dan ID PAN ID gateway yang akan kita gunakan. Penentuan nomor CH Channel dan ID PAN ID gateway ini digunakan dalam konfigurasi pada program yang akan kita unggah di sensor board.
Berikut adalah tampilan halaman awal aplikasi X-CTU yang akan digunakan untuk melihat nomor CH Channel dan ID PAN ID gateway. Tampak bahwa belum ada device yang tampil. Kita harus menambahkan terlebih dahulu device (X-BEE gateway) yang akan kita gunakan untuk melihat nomor CH Channel dan ID PAN ID gateway.

Gambar 2. 3 Tampilan aplikasi X-CTU pada Windows 8

Langkah berikutnya setelah mendapatkan nomor CH Channel dan ID PAN ID gateway, kita harus mengatur rumus pada library pada program Libelium. Hal ini dilakukan karena rumus awal untuk sensor luminosity adalah rumus untuk mendapatkan tegangan (V0).

Untuk mengubah rumus pada library program, kita harus masuk pada folder “waspmote-pro-ide-v04-windows\waspmote-pro-ide-v04-windows\libraries\SensorAgr_v20”. Lalu cari dan buka file bernama WaspSensorAgr_v20.cpp.

Gambar 2. 4 Gambar di mana file Waspmote_v20.cpp berada

Pada file Waspmote_v20.cpp cari baris dengan nama SENS_AGR_LDR. Pada baris ini berisi rumus awal yang ada atau tertanam dalam sensor luminosity. Rumus ini hanya mengambil nilai tegangan (V0) saja dari sinar matahari.


Gambar 2. 5 Gambar baris SENS_AGR_LDR berada

Gambar 2. 6 Rumus awal sensor

Saya menambahkan rumus untuk mencari nilai intensitas cahaya matahari. Rumus ini hanya cocok untuk menghitung nilai intensitas cahaya di luar ruangan. Jika di dalam ruangan, maka rumus yang digunakan berbeda. Tergantung jenis sumber cahaya, ukuran ruangan, dan jaram antara sumber cahaya dan sensor.


Gambar 2. 7 Rumus mencari nilai intensitas cahaya matahari
Keterangan:

Lux      = nilai intensitas cahaya dalam satuan Lux
V0        = nilai tegangan awal yang didapat dari sensor
2500    = variabel tetap/konstanta
500      = variabel tetap/konstanta
3.3       = nilai tahanan pada board sensor dalam satuan KΩ (kilo Ohm)

            Berikut adalah coding pada sensor setelah pengubahan rumus


Gambar 2. 8 Rumus baru untuk menghitung nilai intensitas cahaya matahari

Keterangan:

aux      = nilai intensitas cahaya (Lux)
V0        = nilai tegangan awal yang didapat dari sensor
      ((aux2*3.3) / 1023)
2500    = variabel tetap/konstanta
500      = variabel tetap/konstanta
3.3       = nilai tahanan pada board sensor dalam satuan KΩ (kilo Ohm)

Setelah menambahkan rumus baru ke dalam library program pada sensor, selanjutnya adalah melakukan pengunggahan kode pada sensor dengan Waspmote IDE. Kode untuk sensor ini terbagi menjadi 3 bagian, berikut adalah bagian-bagian tersebut beserta penjelasannya:
1.      Bagian inisialisasi semua komponen dan variabel yang dibutuhkan.
1. #include //gateway
2. #include
3. #include //board sensor
4.  
5. // PAN (Personal Area Network) Identifier
6. uint8_t  PANID[2]={0x33, 0x32}; //ID PAN ID (ada pada X-CTU)
7.  
8. // Destination MAC address
9. char* MAC_ADDRESS="0013A2004071E4E3"; //mac address gateway (ada pada X-BEE gateway)
10.     
11.    // Sleep time [dd:hh:mm:ss]
12.    //char* sleepTime = "00:00:01:00";     
13.     
14.    //Pointer to an XBee packet structure
15.    packetXBee* packet;
16.     
17.    //sensor variables
18.    float luminosity = 0.0; //variabel untuk nilai intensitas cahaya matahari yang akan ditampilkan
 Kode 3.1 Potongan kode inisialisasi sensor

Pada potongan kode tersebut, dapat dilihat pada baris 1-3 digunakan untuk memanggil library-library yang dibutuhkan. Lalu untuk baris 6 digunakan untuk inisialisasi PAN ID dan baris nomor 9 digunakan untuk inisialisasi MAC ADDRESS yang akan digunakan untuk komunikasi dengan gateway yang terhubung dengan komputer server. Pada baris ke 15 digunakan untuk mendeklarasikan variabel yang akan digunakan untuk pengiriman paket. Kode pada baris ke 18 digunakan untuk mendeklarasikan variabel yang digunakan sebagai tempat dari nilai yang akan diambil oleh sensor.

2.      Bagian setup yaitu digunakan untuk mengaktifkan semua komponen.
1. void setup()
2. {
3.  // Serial.begin(9600);
4.  // init
5.  USB.ON();
6.  USB.println(F("Data"));
7.  
8.  //init agr board
9.  SensorAgrv20.ON(); // board sensor
10.       
11.      // init XBee
12.      xbee802.ON();
13.      /////////////////////////////
14.      /////////////////////////////
15.      // 1. set channel
16.      /////////////////////////////
17.      xbee802.setChannel(0xC);       //ch channel (ada pada X-CTU)
18.      // check at commmand execution flag
19.        if( xbee802.error_AT == 0 )
20.        {
21.          USB.println(F("Channel set OK"));
22.        }
23.        else
24.        {
25.          USB.println(F("Error setting channel"));
26.        }
27.        /////////////////////////////////////
28.        // 2. set PANID
29.        /////////////////////////////////////
30.        xbee802.setPAN(PANID);
31.       
32.        // check the AT commmand execution flag
33.        if( xbee802.error_AT == 0 )
34.        {
35.          USB.println(F("PANID set OK"));
36.        }
37.        else
38.        {
39.          USB.println(F("Error setting PANID")); 
40.        }
41.      }
Kode 3.2 Potongan kode pada fungsi setup

Kode pada bagian setup ini pada dasarnya digunakan untuk mengaktifkan komponen pada board. Seperti yang dapat dilihat pada baris 5-12, kode tersebut digunakan untuk mengkatifkan USB, Events 2.0 Board, dan gateway Xbee 802. Selain untuk mengaktifkan komponen, pada bagian ini juga terdapat bagian yang digunakan untuk setting variabel yang harus dilakukan sebelum memulai koneksi antara titik sensor dengan gateway pada komputer.

3.      Bagian yang berisi kode yang akan diulangi dalam jarak waktu tertentu yang digunakan untuk mengambil nilai
1. variabel oleh sensor.
2. void loop()
3. {
4.   USB.println(F("Measuring sensors..."));
5.  
6.   // Part 1: Sensor reading
7.   // Turn on the sensor and wait for stabilization and response time
8.   SensorAgrv20.setSensorMode(SENS_ON, SENS_AGR_LDR);
9.   delay(10000);
10.      
11.      // Read the Luminosity from the sensor
12.      luminosity = SensorAgrv20.readValue(SENS_AGR_LDR);
13.      
14.      // Turn off the sensor
15.      SensorAgrv20.setSensorMode(SENS_OFF, SENS_AGR_LDR);
16.      
17.      
18.      RTC.getTime();
19.      ////////////
20.      
21.      
22.      ///////////////////////////////
23.      // 1. Create ASCII frame
24.      ///////////////////////////////
25.     
26.      // create new frame
27.      frame.createFrame(ASCII, "Data Luminosity"); 
28.      
29.      // add frame fields
30.      frame.addSensor(SENSOR_LUM, luminosity);
31.      frame.addSensor(SENSOR_BAT, PWR.getBatteryLevel());
32.      frame.addSensor(SENSOR_STR, "\n");
33.      frame.showFrame();
34.      
35.      ///////////////////////////////
36.      // 2. Send packet
37.      ///////////////////////////////
38.     
39.      // set parameters to packet:
40.      packet=(packetXBee*) calloc(1,sizeof(packetXBee)); // Memory allocation
41.      packet->mode=UNICAST; // Choose transmission mode: UNICAST or BROADCAST
42.      
43.      // set destination XBee parameters to packet
44.      xbee802.setDestinationParams( packet, MAC_ADDRESS, frame.buffer, frame.length, MAC_TYPE);  
45.      
46.      // send XBee packet
47.      xbee802.sendXBee(packet);
48.      
49.      // check TX flag
50.      if( xbee802.error_TX == 0 )
51.      {
52.        USB.println(F("ok"));
53.      }
54.      else
55.      {
56.        USB.println(F("error"));
57.      }
58.        
59.      // free variables
60.      free(packet);
61.      packet=NULL;
62.     
63.      // wait for  seconds
64.      delay(10000);
65.    }
Kode 3.3 Potongan kode pada fungsi loop

Bagian terakhir yang ada pada kode untuk sensor adalah fungsi loop. Fungsi loop ini adalah fungsi yang akan dijalankan berkali-kali oleh sensor. Fungsi ini berisi perintah-perintah yang memang dibutuhkan lebih dari sekali, seperti pembacaan dan pengiriman data. Perintah yang pertama kali dilakukan oleh fungsi ini  adalah mengkatifkan sensor luminosity yang merupakan sensor untuk mengambil data nilai intensitas cahaya dari lingkungan lalu menunggu sampai sensor benar-benar siap dengan perintah delay. Setelah itu sensor melakukan pembacaan nilai intensitas cahaya dari lingkungan dan memasukkannya pada variabel yang telah disiapkan pada bagian pertama sebelumnya, yang ada pada baris 12. Setelah itu sensor dimatikan dengan menggunakan perintah pada baris nomor 15. Setelah mendapatkan data yang diinginkan maka perintah selanjutnya yang dijalankan oleh board adalah membuat frame, yaitu satu tempat menampung semua variabel yang akan dikirim. Setelah frame dibuat dengan perintah baris nomor 27, maka selanjutnya adalah melakukan perintah baris ke 30 dan 31 yang bertujuan untuk memasukkan data-data yang diinginkan ke dalam frame seperti data nilai intensitas cahaya, dan sisa daya pada baterai. Setelah semua data dimasukkan dalam frame, maka yang selanjutnya dilakukan adalah melakukan konfigurasi akhir pada paket seperti memberikan MAC ADDRESS tujuan dan mengirimkannya. Setelah paket dikirim, maka akan dilakukan pengecekan dengan perintah baris 47-53 apakah paket diterima oleh tujuan. Setelah itu yang dilakukan oleh board adalah mengosongkan isi paket yang telah dikirimkan. Dan setelah semuanya selesai, maka perintah yang terakhir dilakukan adalah delay yang berfungsi untuk memberikan jeda pengiriman paket.
Beriku ini adalah flowchart cara kerja program yang diunggah pada sensor.


Gambar 2. 9 Flowchart alur program yang diunggah pada sensor
Setelah membuat kode dan mengunggahnya pada sensor node, maka yang dilakukan selanjutnya adalah melakukan uji coba terhadap sensor menggunakan serial monitor yang ada pada Waspmote IDE.

Gambar 2. 10 Hasil sensor pada serial monitor
Gambar 2.10 menunjukkan hasil pada serial monitor yang didapatkan. Pada gambar terlihat banyak baris yang merupakan frame yang berisi data-data yang dkirimkan dari sensor ke gateway pada komputer.
Pada bagian ini akan dijelaskan hal-hal yang perlu dilakukan untuk menyediakan tempat bagi aplikasi. Akan dijelaskan mulai proses pemasangan Meteor.JS, konfigurasi database sampai pembuatan antar-muka untuk aplikasi.

Hal pertama yang dilakukan dalam pembuatan aplikasi ini adalah melakukan pemasangan Meteor.JS yang akan digunakan sebagai framework aplikasi ke dalam komputer server. Pada proyek akhir ini menggunakan komputer dengan sistem operasi Xubuntu 64 bit sebagai server. Berikut adalah langkah-langkah pemasangan MeteorJS pada Xubuntu:
1.      Install meteor, jalankan perintah
curl https://install.meteor.com | sh

Pada Xubuntu, paket “curl” belum terinstall. Sehingga untuk dapat melakukan perintah di atas, terlebih dahulu menginstall paket curl dengan perintah berikut.
#apt-get install curl

2.      Membuat project baru. Masuk ke direktori dimana project ingin dibuat.
meteor create [nama project]

Di sini saya membuat projek MeteorJS dengan nama “luminosatu”. Setelah pembuatan projek selesai, masuk direktori “luminosatu”. Di dalam direktori terdapat 3 file, yaitu luminosatu.js yang berfungsi sebagai tempat untuk mengambil data dari sensor dan juga melakukan penghitungan data intensitas cahaya untuk diolah. Sehingga mendapatkan hasil berupa kondisi cuaca. File luminosatu.html dan luminosatu.css merupakan file yang digunakan untuk mengatur halaman web yang nantinya akan menampilkan hasil akhir.

3.      Menjalankan aplikasi Meteor dengan perintah meteor

4.   Membuka aplikasi pada browser dengan alamat sebagai berikut: http://localhost:3000
Setelah berhasil memasang MeteorJS, hal yang dilakukan selanjutnya adalah pemasangan beberapa paket yang akan digunakan yang bertujuan untuk memaksimalkan performa dari aplikasi ini. Perintah tersebut dijalankan pada direktori dari projek. Pemasangan paket Meteor JS dengan menggunakan perintah:
  Meteor add [nama paket]

Berikut adalah daftar serta penjelasan mengenai paket yang dipasangkan:

1.        Paket “donaldaverill:serialport”.
Paket serialport ini digunakan oleh pihak server agar dapat mengakses ataupun mengambil informasi yang ada pada serial port pada server. Hal ini dilakukan karena sensor mengirimkan data tentang keadaan lingkungan kepada server melalui serial port.

2.        Paket “arunoda:streams
Paket streams ini digunakan oleh pihak server dan client. Paket ini digunakan untuk melakukan komunikasi secara realtime antara server dan client. Pada saat server menerima data dari sensor melalui serial port, server akan langsung mengolah data tersebut dan memasukkan informasi-informasi dari data tersebut ke dalam sebuah array yang selanjutnya akan dimasukkan pada sebuah stream. Stream inilah yang akan diakses oleh client. Jadi apabila ada perubahan pada stream maka client akan mengambil data baru dari stream tersebut dan menampilkannya saat itu juga.

3.        Paket “mizzao:bootstrap-3
Paket bootstrap-3 ini merupakan paket yang berisi framework css dari twitter bootstrap yang dibuat khusus untuk MeteorJS. Paket ini digunakan untuk membuat tampilan pada sisi client agar dapat menggunakan framework css twitter bootsrap.

4.        Paket “fongandrew:find-and-modify
Paket find-and-modify ini adalah paket yang digunakan untuk pengolahan data pada database. Paket ini digunakan untuk memudahkan proses pembaruan data pada database.

5.        Paket “maazalik:highcharts
Paket highcharts adalah paket yang digunakan pada sisi client. Paket ini akan digunakan untuk membuat grafik yang intrraktif mengenai intensitas cahaya serta waktu.

6.        Paket “aldeed:tabular
Paket tabular merupakan paket yang digunakan untuk membuat datatable pada aplikasi MeteorJS. Pada aplikasi ini, tabular digunakan untuk membuat tabel yang berisikan data-data mengenai data tanggal, waktu, nilai intensitas cahaya matahari, kondisi cuaca dan lokasi pengambilan data yang telah disimpan sebelumnya. Paket ini memungkinkan untuk melakukan pengurutan data pada setiap kategori dan dapat digunakan untuk melakukan pencarian terhadap suatu data.


7.        Paket “sdk android
Paket SDK Android merupakan paket yang berisi tools yang akan digunakan untuk membuat aplikasi Android dari proyek yang sedang kita kerjakan di MeteorJS. Perintah untuk menginstall paket ini adalah

Jika sudah menginstall paket SDK tersebut, ketik perintah berikut.
meteor add-platform android

Setelah platform Android terpasang, coba jalankan virtual Android dengan mengetik perintah berikut.
meteor run android
Perintah ini akan menampilkan aplikasi dalam emulator Android
Tampilan pada virtual Android

Paket-paket tersebut merupakan paket yang digunakan dalam aplikasi ini. Untuk melakukan pemasangan sebuah paket pada MeteorJS, digunakan sebuah perintah khusus dari MeteorJS.
Selanjutnya, masuk ke projek yang telah dibuat dan buka file Javascript luminosatu.js. Lalu tambahkan kode berupa range kondisi sebagai berikut.

Waktu
Range Lux
Kondisi
5.30 – 6.30
> 3000
Cerah
1000 – 300
Cerah Berawan
< 1000
Mendung
6.30 – 16.30
> 10000
Cerah
3000 – 10000
Cerah Berawan
< 3000
Mendung
16.30 – 17.30
> 3000
Cerah
1000 – 300
Cerah Berawan
< 1000
Mendung
Tabel 2.1 Range kondisi cuaca berdasarkan nilai intensitas cahaya (lux)

Range di atas didapatkan dari beberapa kali percobaan dengan cara pengambilan sample secara langsung, manipulasi kondisi lingkungan serta membandingkan dengan penelitian yang terkait [8].

Pada proyek akhir ini, database yang digunakan adalah MongoDB. MongoDB tidak memerlukan pemasangan sendiri, karena secara otomatis terpasang saat melakukan pemasangan MeteorJS. MongoDB merupakan database yang berbasis dokumen. Sintaks pada database ini berbeda dengan sintaks SQL biasanya. Dengan menggunakan database ini, pengguna tidak perlu membuat database terlebih dahulu karena akan dibuat pada saat aplikasi dijalankan.



Pada proyek ini hanya diperlukan satu buah collection yang harus dibuat secara manual, collection itu berguna untuk membuat nomor urut agar data dapat ditampilkan dengan baik dan urut pada saat diperlukan pada bagian antar-muka. Sedangkan collection yang lain akan dibuat oleh aplikasi saat dibutuhkan.
Berikut adalah langkah-langkah yang harus di lakukan untuk mempersiapkan database aplikasi proyek akhir ini:
1.      Masuk ke direktori project menggunakan terminal, dan jalankan aplikasinya dengan menggunakan perintah
Meteor

2.      Membuka tab baru pada terminal, masuk ke dalam MongoDB menggunakan perintah
meteor mongo



2.3.3      TAMPILAN ANTAR-MUKA
Hal yang paling penting dari sebuah aplikasi web maupun aplikasi-aplikasi pada platform lainnya adalah tampilan antar-muka. Tampilan antar-muka merupakan hal yang dapat dilihat oleh pengguna. Kenyamanan pengguna ditentukan dengan bagaimana bentuk maupun tata-letak dari fitur-fitur yang ada pada aplikasi yang mereka gunakan.
Pada proyek ini, kami membuat sebuah aplikasi dengan tampilan antar-muka menggunakan tema single-page. Jadi, pada aplikasi web ini haanya menggunakan satu buah halaman. Pada satu halaman tersbut sudah terdapat semua fitur yang ada pada aplikasi ini. Berikut adalah desain layout dari aplikasi proyek akhir ini:

Gambar Layout aplikasi pada platform web “Home”
Gambar di atas merupakan panel “Home”. Panel ini merupakan panel yang berisi fitur untuk menampilkan lokasi pengambilan data, nilai intensitas cahaya dalam satuan Lux, kondisi cuaca berdasarkan nilai intensitas cahaya serta waktu saat pengambilan data dilakukan. Pada panel “Home” ini, data yang ditampilkan merupakan data real time per satuan detik.


Gambar  Layout aplikasi pada platform web “History”

Gambar tersebut merupakan panel “History”. Panel ini merupakan panel yang berisi fitur untuk menampilkan tabel yang berisi lokasi pengambilan data, nilai intensitas cahaya dalam satuan Lux, kondisi cuaca berdasarkan nilai intensitas cahaya serta waktu saat pengambilan data dilakukan. Pada panel “History” ini, data yang ditampilkan merupakan nilai rata-rata data yang telah dihitung selama satu menit.




UJI COBA DAN ANALISA


Pada bab ini akan dibahas tentang pengimplemantasian sistem pada studi kasus sebenarnya, pengujian, dan analisa proyek untuk melihat apakah proyek yang telah dikerjakan/dibuat telah sesuai dengan yang telah direncanakan pada awal penegrjaan. Pengujian dilakukan dengan cara melakukan percobaan secara berulang-ulang. Setelah melakukan percobaan, maka selanjutnya membandingkan keadaan sebelum dan sesudah dilakukan percobaan. Dengan adanya pengujian ini maka dapat diketahui adanya kekurangan yang ada pada proyek ini. Sehingga dapat dilakukan perbaikan jika terjadi kesalahan nantinya.
Bahan dan alat yang digunakan untuk pengujian dalam proyek akhir ini dibagi menjadi 2, yaitu hardware dan sofware. Berikut adalah spesifikasi hardware dan software yang digunakan dalam pengujian proyek akhir ini:
a.    Perangkat keras (hardware)
-          Laptop Toshiba L645.
-          Waspmote Events Sensor Kit, yang berisikan:
·         Sensor Luminosity.
·         Waspmote Events 2.0 Board.
-          Waspmote Starter Kit, yang berisikan:
·         Waspmote 802.15.4 Board.
·         Waspmote Gateway 802.15.4.
·         Baterai 2300 mAh.
·         Kabel MiniUSB.
b.    Perangkat lunak
-          Windows 8 64-bit untuk pengaturan awal sensor.
-          Mozilla Firefox.
-          Sublime Text 3
-          Robomongo
-          Waspmote Pro IDE 4.
-          Linux sebagai server, dengan spesifikasi:
·         Sistem Operasi          : Xubuntu 64-bit.
·         Memory         : 2048 MB.
·         Hard Disk     : 15GB.
Pada bagian ini akan dilakukan proses pemasangan dan pengujian sensor yang dilakukan terlebih dahulu sebelum mengimplementasikannya dengan aplikasi sebenarnya. Bagian ini akan dibagi menjadi 2 bagian, yaitu yang pertama adalah bagaimana menggabungkan komponen-komponen yang dibutuhkan dalam titik sensor dan yang kedua adalah bagaimana menguji coba sensor sebelum diimplementasikan dalam aplikasi dengan menggunakan serial monitor.



3.2.1   PEMASANGAN SENSOR
Sebelum dilakukan pengujian, perlu dilakukan pemasangan komponen-komponen agar dapat digunakan dalam pengimplementasian proyek ini. Berikut adalah cara bagaimana menggabungkan komponen-komponen penyusun sensor Events titik sensor:
1.    Mempersiapkan sensor Luminosity).

Gambar 3.1 Sensor Luminosity/LDR (Light Dependent Resistor)
Gambar 3.1 merupakan penampakan sensor dari posisi atas. Terdapat 2 kaki yang akan dipasangkan pada socket pada board.
2.    Memasangkan sensor Luminosity dengan Events 2.0 Board.
Gambar 3.2 Events Board dan sensor luminosity yang telah terpasang

Seperti yang dapat dilihat pada Gambar 3.2, sensor dipasangkan pada board dengan posisi menghadap ke arah luar. Kaki-kaki dari sensor dimasukkan ke dalam socket pada board sampai tidak bisa msauk lebih dalam lagi ke dalam socket. Sensor dapat dipasang pada soket yang mempunyai 2 port.



3.    Mempersiapkan Waspmote 802.15.4 Board.
Gambar 3.3 Waspmote Board

Gambar 3.3 merupakan foto penampakan board Waspmote yang merupakan bagian utama dari sensor yang digunakan untuk mengirimkan data yang didapatkan oleh board dari sensor. Dapat dilihat pada gambar terdapat 2 lingkaran, lingkaran yang pertama berwarna merah yang merupakan modul Xbee yang digunakan untuk berkomunikasi dengan modul Xbee yang terpasang pada gateway di server. Sedangkan lingkaran yang berwarna kuning merupakan socket untuk menyambungkan baterai pada board yang digunakan sebagai sumber daya dari sensor.

4.    Memasangkan Events 2.0 Board yang telah terpasang sensor dengan Waspmote 802.15.4 Board  menjadi satu buah Events sensor node.
Gambar 3.4 Events sensor node dengan sensor luminosity yang terpasang

Gambar 3.4 merupakan titik sensor yang akan digunakan dalam pengambilan data tingkat intensitas cahaya matahari pada lingkungan. Titik sensor diatas merupakan gabungan dari 2 board, yaitu Events 2.0 Board yang telah terpasang sensor yang berfungsi untuk mengambil data dengan Waspmote 802.15.4 Board  yang berfungsi untuk mengirimkan data ke gateway yang ada pada server. Sebelum meletakkan titik sensor pada lingkungan implementasi, harus dipastikan bahwa baterai terisi dengan daya yang cukup untuk melakukan tugas pengambilan data.




5.    Memasangkan Waspmote Gateway pada laptop.

Gambar 3.5 Waspmote gateway pada laptop
Gambar 3.5 merupakan penampakan Waspmote Gateway yang terpasang pada port USB pada laptop yang digunakan sebagai server.
Setelah proses pembuatan titik sensor, hal yang dilakukan selanjutnya adalah pengunggahan kode pada titik sensor agar dapat melakukan tugas yang diinginkan, yaitu mengambil data dari lingkungan lalu mengirimkannya kepada gateway yang terpasang pada server.
Berikut adalah langkah-langkah pemberian kode pada sensor:
1.    Membuka aplikasi Waspmote IDE.

Gambar 3.6 Aplikasi Waspmote IDE

Gambar 3.6 merupakan penampakan aplikasi Waspmote IDE yang digunakan untuk melakukan proses pembuatan, compile, dan pengunggahan kode pada titik sensor.

2.      Menulis kode yang berisi perintah untuk mengambil data dari lingkungan dan perintah untuk mengirimkan data tersebut kepada gateway pada server.


Gambar 3.7  Kode yang diunggah pada titik sensor
Pada Gambar 3.7 di atas, terdapat perintah-perintah yang digunakan oleh titik sensor untuk melakukan tugas-tugasnya. Tugas yang dimiliki oleh titik sensor mulai dari mencari gateway yang akan dikirimi data, mengambil data nilai intensitas cahaya matahari, sampai mengirim data ke gateway pada server.

3.    Menghubungkan titik sensor dengan laptop menggunakan miniUSB.

Gambar 3.8 Titik sensor terhubung pada laptop
Untuk melakukan proses pengunggahan kode yang berisi perintah-perintah pada titik sensor, maka titik sensor harus dihubungkan pada laptop yang digunakan untuk menulis kode menggunakan kabel miniUSB, seperti yang dapat dilihat pada Gambar 3.8. Setelah menghubungkan titik sensor pada laptop, pastikan switch pada board (lingkaran kuning) yang ada di titik sensor dalam keadaan menyala atau switch dalam keadaan berada di kiri. Lampu led akan menyala seperti pada Gambar 3.8 apabila board sudah dalam keadaan aktif atau menyala.

4.    Melakukan proses pengunggahan kode pada titik sensor.
Gambar 3.9 Tombol untuk mengunggah kode

Setelah selesai proses penulisan kode dan menyambungkan titik sensor pada port USB laptop, hal yang dilakukan selanjutnya adalah melakukan proses pengunggahan. Proses pengunggahan dapat dilakukan dengan menekan tombol upload yang berada pada tombol ke 2 dari kiri yang ditunjukkan dengan lingkaran kuning pada Gambar 3.9.
5.    Manjalankan aplikasi Waspmote IDE melalui serial port
Gambar 3.10 Tombol untuk menampilkan data melalui serial port

Setelah selesai mengunggah kode pada sensor, selanjutnya adalah melakukan uji coba. Lepas sensor, lalu tancapkan gateway ke laptop. Pastikan baterai memiliki cukup daya dan juga switch on/off dalam keadaan ‘ON’. Setelah itu pada sebelah kanan atas sebelah kiri logo Libelium klik ikon serial seperti pada Gambar 3.10 di atas.
Pada bagian ini akan dilakukan uji coba pengambilan data intensitas cahaya matahari dari lingkungan oleh titik sensor dan menerima data oleh gateway pada server. Uji coba ini menggunakan serial monitor yang ada pada Waspmote IDE. Berikut ini adalah data yang diterima oleh gateway pada server


Gambar 3.11 Data yang diterima gateway
Gambar 3.11 merupakan screenshot dari serial monitor pada saat melakukan monitoring terhadap gateway. Terlihat pada Gambar 3.11, terdapat banyak sekali baris-baris frame yang diterima oleh gateway. Baris-baris frame tersebut merupakan data yang diterima dari titik sensor. Pada satu baris frame tersebut terdapat beberapa informasi, mulai dari titik sensor pengirim frame, nomor index frame, nilai intensitas cahaya matahari, serta sisa daya yang terdapat pada baterai.
Setelah memastikan bahwa sensor dapat bekerja dengan benar, baik dalam proses pengambilan data maupun proses pengiriman dan penerimaan data, hal yang dilakukan selannjutnya adalah melakukan uji coba pada aplikasi yang telah diintegrasikan dengan sensor. Pada tahap ini, akan dilakukan proses uji coba terhadap semua fitur yang ada pada aplikasi. Pada aplikasi ini ada 2 fitur utama, yaitu menampilkan data secara real time dan rekap data



Berikut adalah proses uji coba pengoperasian aplikasi dan uji coba fitur-fitur yang telah disebutkan sebelumnya.
1.    Menjalankan aplikasi sebagai server.

Gambar 3.127 Menjalankan aplikasi sebagai server
Hal pertama yang dilakukan untuk menjalankan aplikasi proyek akhir ini adalah dengan mengaktifkan server. Untuk mengaktifkan server menggunakan perintah command line pada aplikasi terminal pada server. Perintah yang digunakan untuk mengaktifkan server adalah meteor pada direktori dari aplikasi. Gambar 3.12 merupakan screenshot pada saat melakukan proses pengaktifan pada server.
2.    Menjalankan aplikasi sebagai client.

Gambar 3.13 Menjalankan aplikasi sebagai client
Untuk menjalankan aplikasi sebagai client, dapat dilakukan dengan menggunakan browser dan mengakses alamat ip dari server dan menambahkan port yang digunakan oleh aplikasi. Gambar 3.13 menunjukkan cara mengakses aplikasi sebagai client dengan cara mengakses localhost dari server dan menambahkan port 3000 di akhir alamat ip yang merupakan port di mana aplikasi dijalankan.



3.    Uji coba menu “Home”

\Gambar 3.14 Fitur “Home” menampilkan data real time
Gambar 3.14 merupakan screenshot aplikasi pada menu “Home”. Pada menu ini menampilkan data lokasi pengambilan data, nilai intensitas cahaya, kondisi cuaca, dan waktu pengambilan data. Data intensitas cahaya dan kondisi cuaca ditampilkan per detik. Sedangkan waktu akan otomatis ter-update per menit.
4.    Uji coba menu “History”.

Gambar 3.15 Menu “History” menampilkan data berupa tabel
Gambar 3.15 menunjukkan screenshot menu “History”. Menu ini menampilkan data tanggal-waktu pengambilan data per menit, nilai rata-rata intensitas cahaya matahari per menit, kondisi cuaca, serta lokasi pengambilan data.
Tahap implementasi dalam proyek akhir ini dilakukan pada lingkungan luar ruangan agar mendapatkan hasiul yang maksimal. Saya memilih 3 lokasi untuk sample. Yaitu rumah (Sidoarjo), kos (Tegal Mulyorejo Baru, Sukolilo) dan kampus PENS.



Berikut adalah gambar lokasi yang saya pilih untuk sampling.


Gambar 3.16 Rumah belakang
Gambar 3.16 merupakan gambar rumah bagian belakang yang saya jadikan lokasi pengambilan data nilai intensitas cahaya matahari. Gambar 3. 17 di bawah menunjukkan tampak langit saat pengambilan data.

Gambar 3.17 Tampak langit saat pengambilan sample di rumah

Gambar 3.18 Kos lantai 3
Gambar 3. 18 merupakan lokasi pengambilan data yang kedua, yaitu di kos lantai 3 di Tegal Mulyorejo Baru, Sukolilo.


Gambar 3.19 Sensor mengambil data di Lapangan Merah, PENS


Gambar 3.20 Kondisi langit di Lapangan Merah, PENS
Gambar 3.19 merupakan gambar saat sensor mengambil data di Lapangan Merah, kampus PENS. Pada Gambar 3. 20 menunjukkan gambar kondisi langit saat saya melakukan pengambilan data di Lapangan Merah, kampus PENS.
Pada bagian ini akan dijelaskan mengenai alur pengimplementasian dari proyek akhir ini. Berikut adalah alur atau tahapannya:
1.    Meletakkan sensor pada ruang terbuka.

Gambar 3.21 Sensor board di Lapangan Merah, PENS
Gambar 3.22 Sensor diletakkan di kos lantai 3, Tegal Mulyorejo Baru, Sukolio
Pada tahap implementasi, sensor diletakkan di luar ruangan seperti yang ditunjukkan pada Gambar 3.21 dan 4.22.
2.    Memasangkan gateway pada server.

Gambar 3.23 Waspmote gateway pada server
Gambar 3.23 menunjukkan gateway yang dihubungkan pada laptop yang digunanakan sebagai server yang akan menerima data dari titik sensor dan menyebarkannya ke semua client yang terhubung. Gateway harus terhubung pada port /dev/ttyUSB0 pada server agar aplikasi dapat berjalan.
3.    Menjalankan aplikasi.
Gambar 3.24 Menjalankan aplikasi pada server
Gambar 3.24 menunjukkan cara menjalankan aplikasi pada server menggunkan perintah meteor pada terminal.

Gambar 3.25 Menjalankan aplikasi pada client menggunakan browser
Saya melakukan implementasi menggunakan browser yang ada pada laptop. Aplikasi dijalankan dengan localhost dan menambahkan port tempat aplikasi dijalankan setelahnya. Gambar 3.25 merupakan tampilan pada client saat aplikasi dijalankan.
4.    Mendapatkan nilai intensitas cahaya matahari dari aplikasi dan menyimpan ke database.

Gambar 3.26 Isi database dilihat dengan aplikasi Robomongo
Setelah aplikasi dijalankan, hal yang dialakukan selanjutnya adalah mendapatkan nilai intensitas cahaya matahari. Nilai intensitas cahaya, kondisi cuaca, waktu pengambilan dan lokasi pengambilan data akan disimpan secara otomatis per menit.
Implementasi di atas dilakukan setiap hari pada waktu pagi hingga sore hari antara jam 6 pagi hingga pukul 17.30 sore hari. Jika malam hari tidak bisa melakukan pengambilan data dikarenakan tidak ada sinar matahari.
Setelah dilakukan implementasi dan melakukan beberapa kali pengambilan data nilai intensitas cahaya matahari di 3 tempat yang berbeda, yaitu rumah (Sidoarjo), kos (Tegal Mulyorejo Baru, Sukolilo) dan di Lapangan Merah, kampus PENS.
Berikut adalah hasil dari percobaan pengambilan data intensitas cahaya matahari pada 3 lokasi tersebut.


Gambar 3.27 Hasil pengambilan data di rumah


Gambar 3.28 Hasil pengambilan data di kos


Gambar 3.29 Hasil pengambilan data di kampus PENS
Berdasarkan hasil dari Gambar 3.27, 3.28 dan 3.29 dapat diambil kesimpulan bahwa cuaca rata-rata adalah cerah. Namun, untuk menguji sensor agar mendapatkan hasil berupa kondisi cuaca yang berbeda, saya melakukan manipulasi sebagai contoh apabila kondisi langit sedang mendung atau berawan dengan cara menutup sensor.


Gambar 3.30 Manipulasi sensor agar mendapatkan kondisi yang berbeda


Setelah melakukan manipulasi tersebut, berikut adalah hasil yang ditampilkan pada client.


Gambar 3.31 Kondisi cerah berawan
Pada Gambar 3.31 kondisi cerah berawan terdapat nilai yang cukup tinggi di tabel intensitas cahaya. Hal ini disebabkan kondisi cerah yang mempunyai nilai intensitas cahaya yang tinggi dan nila- nilai tingkat intensitas cahaya matahari pada saat kondisi cerah berawan yang tidak begitu rendah. Kondisi cerah berawan didapatkan dari rata-rata kondisi cerah berawan yang lebih banyak daripada kondisi cerah.


Gambar 3.32 Kondisi mendung
Pada Gambar 3.32 kondisi mendung terdapat nilai awal yang cukup tinggi di tabel intensitas cahaya. Hal ini disebabkan kondisi cerah yang mempunyai nilai intensitas cahaya yang tinggi dan nila-nilai tingkat intensitas cahaya matahari pada saat kondisi mendung yang tidak begitu rendah. Kondisi mendung didapatkan dari rata-rata kondisi mendung yang lebih banyak daripada kondisi cerah maupun kondisi cerah berawan. Pada data selanjutnya terjadi kestabilan kondisi dengan nilai rata-rata intensitas cahaya di bawah 1000 Lux.


Gambar 3.33 Tampilan pada Android


Pada Gambar 3.33 di atas tampak bagaimana pikasi ketika dijalankan pada device Android. Tampilan antar mukanya sama dengan tampilan antar muka pada web.

3 komentar: