# Hack Your Skills! to be Professional Mechatronics
Arduino : Eksplorasi Cara Kerja Joystick
Ketika bersih-bersih kolong tempat tidur, eh ada joystick rusak. Tiba-tiba terpikir untuk mengetahui bagaimana cara kerja joystick tersebut. Apalagi joystick ini transparan sehingga komponen di dalamnya tampak dari luar, ada motor, dan beberapa komponen yang yang kelihatan menarik lainnya. Dalam artikel ini, kita akan sedikit mempelajari cara kerja joystick dan bagaimana alat tersebut bisa digunakan untuk mengontrol untuk bergerak maju - mundur dan bergerak ke kanan dan ke kiri. Biar lebih asyik, kita akan mengetahui seperti apa alat dan data yang keluar dari alat tersebut dengan bantuan arduino.
Hasil akhir dari percobaan ini akan tampak seperti gambar. Karena joystick ini sudah rusak, maka kita akan membongkarnya dan mengambil alat yang digunakan untuk mengontrol gerak objek dalam video game. Dengan demikian, untuk mempermudah percobaan butuh beberapa kabel jumper dan black housing female. Selain rangkaian tersebut, kita juga akan membuat program sederhana yang berfungsi untuk mengirimkan data dari alat tersebut ke komputer melalui koneksi serial.
![]() |
| Arduino dan Joystick |
Dalam joystick utuh tersebut ada dua buah PCB. PCB dengan ukuran kecil yang berisi dua buah joystick, sedangkan PCB yang besar berisi keypad dan IC untuk mengontrol LED, dua buah motor, dan komunikasi data ke komputer atau PS. Sebenarnya joystick itu bisa kita fungsikan untuk berbagai macam aplikasi, akan tetapi yang umum kita temui adalah untuk mengontrol mobil-mobilan, pesat mainan, atau bahkan robot.
![]() |
| Gambar Joystick dibongkar |
Skema Rangkaian Joystick
Untuk sementara kita akan berfokus untuk bermain dengan komponen utama joystick. Pada stick yang saya punya, komponen ini terdiri dari dua buah trimmer (variabel resistor) dan sebuah toggle swtich. Gambar di bawah ini merupakan dua buah joystick yang sudah saya pisahkan dari casenya dan kabel penghubungnya saya potong. Warna biru muda adalah variabel resistor yang yang bisa diubah-ubah dengan tuas putih yang ada di atas.
![]() |
| Masing-masing Joystick terdiri dari 2 buah trimmer dan 1 toggle switch |
Kedua joystick tersebut masing-masing memiliki trimmer dengan resistansi yang sama, yaitu 10K ohm (di bodinya tertulis B103) dan terhubung secara paralel. PCB yang kecil punya 8 jalur yang dihubungkan ke PCB besar dengan jalur-jalur yang diberi nama dengan RP1, RP2, RP3, RP4, K12, K11, VDD, dan GND. RP1 sampai RP4 merupakan output dari trimmer dari kedua joystick, masing-masing joystick memiliki 2 trimmer, satu untuk gerakan vertikal (atau maju-mundur) dan satu lagi untuk gerakan horisontal (atau kanan-kiri). K12 dan K11 sebagai jalur output untuk penekanan joystick (toggle switch), dan sisanya untuk setrum (+ dan -). Gambar di bawah ini menunjukkan nama-nama pin yang tertera pada PCB besar.
![]() |
| Nama-nama pin out PCB Joystick |
Berikut ini adalah jalur rangkaian joystick yang saya dapatkan setelah mempelajarinya skema yang tertera pada PCB.
![]() |
| Skema PCB Joystick twin |
Program Sketch dengan Arduino
Logika untuk program ini yaitu : Pin A0 dan A1 digunakan untuk membaca voltase pada kedua trimmer yang berfungsi untuk pergerakan maju-mundur dan kanan-kiri. Dengan demikian, hasil yang didapatkan mirip dengan titik koordinat, yaitu koordinat X dan koordinat Y. Atau dalam program saya tulis sebagai V dan H (Vertikal dan Horisontal) yang mengacu pada trimmer yang bergerak ke arah kanan-kiri atau maju mundur.
Jika ada perubahan pada pembacaan dengan analogrRead(), maka akan dikirimkan ke komputer melalui komunikasi serial. Berikut ini adalah program lengkap untuk percobaan dengan joystick bekas tersebut.
/*
* Menampilkan informasi posisi joystick
* coder : elangsakti
*
*/
const int pV = A0;
const int pH = A1;
void setup() {
Serial.begin(9600);
pinMode(pV, INPUT);
pinMode(pH, INPUT);
}
long dataV, dataH;
long lastV, lastH;
void loop() {
dataV = analogRead(pV);
dataH = analogRead(pH);
if(dataV != lastV || dataH != lastH){
Serial.print("V:");
Serial.print(dataV);
Serial.print(", H:");
Serial.print(dataH);
Serial.println();
lastV = dataV;
lastH = dataH;
}
}
Hasil & Sekilas Pembahasan tentang Joystick
Jika mengacu pada konsep analog pada Arduino, maka kemungkinan data yang dikirimkan oleh Arduino berkisar dari 0 hingga 1023 untuk masing-masing trimmer, baik yang vertikal maupun yang horisontal. Pada kondisi normal, posisi trimmer ada di tengah karena tuas joystick tidak dibengkokkan ke samping. Dengan demikian, seharusnya data yang dikirim komputer pada joystick normal adalah 511/512 (dari 1023 / 2). Berikut adalah data dari kedua joystick setelah percobaan:
Posisi | Kiri | Kanan -----------+----------+--------- Vertikal | 508/509 | 498/499 Horisontal | 507/508 | 497/498
Nilai tersebut tidak stabil, misal joystick kiri untuk trimmer vertikal kadang nilainya 508 kadang 509, jadi berubah-ubah. Perubahan tersebut bisa jadi karena suplay tegangan yang tidak stabil atau mungkin ada masalah di hardware joysticknya. Kemudian perbedaan antara joystick yang kanan dan yang kiri cukup jauh. Hal tersebut bisa disebabkan akurasi dari resistansi trimmernya. Masing-msaing trimmer nilainya 10K (dan pasti tidak pas 10K bukan?). Kekurangakurasian alat juga berpengaruh pada performance dan kestabilan data dari joystick tersebut. Untuk kasus kita ini, maklum lah, sebab joystick bekas dan harganya pun tidak terlalu mahal. Hehe.
Nilai trimmer horisontal akan berubah 0 jika tuas joystick direbahkan full ke kiri dan menjadi 1023 jika direbahkan full ke kanan. Sedangkan untuk trimmer vertikal akan mengirimkan data 0 jika direbahkan full ke depan (atas) dan mengirimkan data 1023 jika direbahkan ke belakang (bawah). Berdasarkan karakteristik tersebut, jika posisi tuas joystik ada di pojok kanan-atas (kanan-depan), maka data yang dikirimkan adalah 0 semua. Kedua informasi ini membentuk seperti koordinat yang bisa digunakan untuk mengontrol sesuatu.
Saya masih mempelajari bagaimana menentukan titik tersebut. Tapi yang pasti, nanti akan dibutuhkan sebuah fungsi untuk menentukan posisi untuk merepresentasikan koordinat tersebut sehingga bisa digunakan untuk mengontrol sesuatu. Fungsi apa yang akan kita gunakan? Hal itu kita bahas pada tulisan lain di website ini. Selamat berkarya!
Written by ElangSakti
Arduino : Eksplorasi Cara Kerja Joystick
Bahasan: Ketika bersih-bersih kolong tempat tidur, eh ada joystick rusak. Tiba-tiba terpikir untuk mengetahui bagaimana cara kerja joystick terseb...
Published at Rabu, 29 Juli 2015, Updated at Rabu, 29 Juli 2015
Reviewed by dr. on
Rating: 4.7
Arduino : Eksplorasi Cara Kerja Joystick
Bahasan: Ketika bersih-bersih kolong tempat tidur, eh ada joystick rusak. Tiba-tiba terpikir untuk mengetahui bagaimana cara kerja joystick terseb...
Published at Rabu, 29 Juli 2015, Updated at Rabu, 29 Juli 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Pada step pertama, hitung jalur asal dengan jalur yang mungkin untuk dilewati. Jalur yang mungkin hanya Bandung (270km) dan Cirebon (327km). Urutkan jarak tersebut berdasarkan yang terpendek. jarak yang terpendek akan dipilih untuk menghitung jarak selanjutnya, sedangkan jarak terpendek kedua akan dijadikan treshold atau patokan untuk dihitung apabila hasil dari jalur yang dibuka dari jarak terpendek lebih besar daripada jarak jalur kedua tersebut. Pada step awal, jarak minimal adalah Jakarta-Bandung, dan yang menjadi treshold adalah jarak Jakarta-Cirebon.
Step kedua yang dibuka adalah jalur Jakarta-Bandung. Kemungkinan yang bisa dilewati adalah jalur Jakarta-Bandung-Cirebon (390km) dan Jakarta-Bandung-Yogyakarta (643). Selanjutnya jarak-jarak tersebut dibandingkan dan dipilih jalur terpendek. Jalur yang terpendek adalah Jakarta-Cirebon dan jalur terpendek kedua adalah Jakarta-Bandung-Cirebon. Sehingga jalur yang akan dibuka selanjutnya adalah jalur Jakarta-Cirebon dan yang menjadi treshold adalah jalur Jakarta-Bandung-Cirebon. Begitu seterusnya hingga didapatkan jarak terpendek untuk menghubungkan semua kota.
Dalam proses pencarian, peta tersebut ‘dibaca’ dengan fungsi possible() untuk mengetahui kemungkinan jalur yang akan dilalui dari suatu kota. Fungsi possible() tampak pada Source Code Fungsi possible() , inputnya adalah id kota, dan ouputnya adalah daftar kota yang mungkin dilalui. Pada kode tersebut dilalukan perulangan pada peta dan mencari jalur yang mungkin untuk kota dengan id yang cocok.
PHP : Penyelesaian Traveling Salesman Problem (TSP) Menggunakan Algoritma Recursive Best First Search (RBFS)
Tulisan ini adalah salah satu tugas Kecerdasan Komputasional.
ABSTRAK
Travelling Salesman Problem (TSP) merupakan sebuah permasalahan optimasi yang dapat diterapkan pada berbagai kegiatan seperti routing. Masalah optimasi TSP terkenal dan telah menjadi standar untuk mencoba algoritma yang komputational. Pokok permasalahan dari TSP adalah seorang salesman harus mengunjungi sejumlah kota yang diketahui jaraknya satu dengan yang lainnya. Semua kota yang ada harus dikunjungi oleh salesman tersebut dan kota tersebut hanya boleh dikunjungi tepat satu kali. Permasalahannya adalah bagaimana salesman tersebut dapat mengatur rute perjalanannya sehingga jarak yang ditempuhnya merupakan rute yang optimum yaitu jarak minimum terbaik. Dalam makalah ini penyelesaian kasus TSP diselesaikan dengan algoritma Recursive Best First Search (RBFS).
A. LATAR BELAKANG MASALAH
Travelling Salesman Problem (TSP) merupakan permasalahan pedagang keliling dalam mencari lintasan terpendek dari semua kota yang dikunjunginya. Dengan syarat kota tersebut hanya boleh dikunjungi satu kali. Banyak permasalahan yang dapat direpresentasikan dalam bentuk Travelling Salesman Problem. Persoalan ini sendiri menggunakan representasi graf untuk memodelkan persolan yang diwakili sehingga lebih memudahkan penyelesaiannya. Diantaranya permasalahan yang dapat direpresentasikan dengan TSP ialah masalah transportasi, efisiensi pengiriman surat atau barang, perancangan pemasangan pipa saluran, proses pembuatan PCB (Printed Circuit Board) dan lain–lain.
Ada beberapa algoritma dan metode yang bisa menyelesaikan TSP ini, antara lain: algoritma Brute Force dengan complete Enumeration, algoritma Branch and Bound, Greedy Heuristik. Dalam Algoritma Bruto Force, hal yang dilakukan ialah dengan cara mengenumerasi seluruh kemungkinan rute yang akan ditempuh. Setelah itu, akan dibandingkan dari seluruh kemungkinan rute yang telah dienumerasi tersebut, rute mana yang memiliki lintasan/bobot yang paling minimum. Namun, jumlah enumerasi dari algoritma ini ialah (n-1)! Yang akan memerlukan waktu yang sangat lama untuk mendapatkan panjang lintasan paling minimum jika n bernilai sangat besar. Seperti Algoritma Brute Force yang mengenumerasi satu per satu kemungkinan jalur yang akan ditempuh, Algoritma Branch and bound ternyata tidak memiliki kompleksitas waktu yang lebih baik dimana algoritma ini juga memilki kompleksitas waktu (n-1)! Dan sangat membutuhkan waktu yang sangat lama untuk mendapatkan panjang lintasan paling minimum jika n bernilai sangat besar.
Sedangkan pada greedy heuristik, pemilihan lintasan akan dimulai pada lintasan yang memilki nilai paling minimum, algoritma ini akan memilih kota selanjutnya yang belum dikunjungi yang mempunyai bobot paling minimum/kota terdekat sampai swmua kota tersebut dikunjungi dan kemudian kembali ke kota awal, tetapi hasil yang didapat bisa sangat jauh dari hasil optimal, semakin banyak kota yang dikunjungi semakin besar pula perbedaan yang dicapai.
Algoritma Heuristik merupakan salah satu algoritma alternatif yang dapat digunakan sebab prosesnya cepat dan memberikan hasil yang diinginkan. Algoritma Heuristik adalah algoritma yang mencari solusi terbaik untuk kasus yang merupakan bagian atau irisan dari permasalahan total dengan harapan dapat menghasilkan solusi optimal untuk keseluruhan kasus melalui proses tambahan, yaitu mencari bobot minimum dengan menggunakan Recursive Best First Search (RBFS) sehingga menghasilkan routing dari graf yang memiliki nilai optimal. Permasalahan pada makalah ini bisa dilihat pada Gambar 1, yaitu mencari jarak terpendek terbaik yang bisa ditempuh oleh sales dan setiap kota hanya boleh dikunjungi satu kali.
B. RECURSIVE BEST-FIRST SEARCH (RBFS)
Recursive Best-First Search merupakan algoritma pencarian terbimbing yang mirip dengan algoritma standar Best First Search yang bersifat linear. Desain algoritmanya juga mirip dengan Depth-First Search walaupun dengan model yang sangat berbeda.
Cara kerja RBFS yaitu tetap memperhatikan jalur teratas, kalau misalkan pada tree, maka tree paling atas. Apabila ada jalur yang tidak sesuai, maka jalur teratas akan langsung mengubahnya. Pada saat operasi, setiap operasi yang akan dipilih adalah jalur yang terpendek, dan setiap ada jalur baru, maka jalur teratas akan diurutkan berdasarkan nilai cost yang terkecil.
Hal tersebut akan dilakukan hingga titik akhir adalah jalur yang dituju dan cost yang ditemukan pada jalur terakhir ini lebih kecil dari jalur-jalur yang sudah dilewati sebelumnya. Berikut ini adalah presudocode algoritma untuk RBFS.
C. PEMODELAN
Gambar 2. merupakan representasi bentuk pohon dari peta jalur antar kota yang akan dicari solusinya. Garis putus-putus menunjukkan bahwa jalur yang bisa menjadi solusi adalah jalur yang melewati seluruh kota dan tepat satu kali untuk masing-masing kota. Sedangkan jarak antar kota berdasarkan jalur yang ada pata peta dapat dilihat pada tabel 1.
Berdasarkan pohon pada Gambar 2, maka proses pencarian RBFS akan dilakukan dengan cara membandingkan setiap simpul yang dilewati dan dicari simpul yang memiliki cost atau jarak yang paling kecil sesuai dengan algoritma pada RBFS. Proses perhitungan untuk menemukan jalur terpendek dengan metode RBFS akan dijelaskan secara singkat seperti pada Tabel 2.
Pada step pertama, hitung jalur asal dengan jalur yang mungkin untuk dilewati. Jalur yang mungkin hanya Bandung (270km) dan Cirebon (327km). Urutkan jarak tersebut berdasarkan yang terpendek. jarak yang terpendek akan dipilih untuk menghitung jarak selanjutnya, sedangkan jarak terpendek kedua akan dijadikan treshold atau patokan untuk dihitung apabila hasil dari jalur yang dibuka dari jarak terpendek lebih besar daripada jarak jalur kedua tersebut. Pada step awal, jarak minimal adalah Jakarta-Bandung, dan yang menjadi treshold adalah jarak Jakarta-Cirebon.
Step kedua yang dibuka adalah jalur Jakarta-Bandung. Kemungkinan yang bisa dilewati adalah jalur Jakarta-Bandung-Cirebon (390km) dan Jakarta-Bandung-Yogyakarta (643). Selanjutnya jarak-jarak tersebut dibandingkan dan dipilih jalur terpendek. Jalur yang terpendek adalah Jakarta-Cirebon dan jalur terpendek kedua adalah Jakarta-Bandung-Cirebon. Sehingga jalur yang akan dibuka selanjutnya adalah jalur Jakarta-Cirebon dan yang menjadi treshold adalah jalur Jakarta-Bandung-Cirebon. Begitu seterusnya hingga didapatkan jarak terpendek untuk menghubungkan semua kota.
Tabel 2. Step-step pencarian algoritma RBFS
D. IMPLEMENTASI METODE
Model komputasi algoritma untuk menyelesaikan kasus TSP dengan RBFS yaitu dibuat dengan bahasa pemrograman PHP . Hal yang pertama dilakukan adalah pemetaan kota dan jarak antar kota. Peta dibuat dalam bentuk array objek dimana untuk masing-masing kota berisi ID kota, Nama kota, jalur yang mungkin dilalui sekaligus jarak antara kota denga jalur tersebut. Pada source code representasi peta dalam bahsa pemrograman menunjukkan kota Jakarta dan kota Bandung. Kota jakarta memiliki id ‘jkt’ dan jalur yang mungkin dilalui adalah Jakarta-Bandung (bdg) dengan jarak 270 km dan Jakarta-Cirebon (crb) dengan jarak 327 km. Sedangkan kota Bandung, jalur yang mungkin dilewati adalah Bandung-Cirebon (crb) dengan jarak 120 km dan Bandung-Yogyakarta (ygy) dengan jarak 373 km.
Representasi peta dalam bahasa pemrograman
$peta = array(
'jkt' => (object)array(
'id' => 'jkt',
'name' => 'Jakarta',
'path' => array(
'bdg' => 270,
'crb' => 327
)
),
'bdg' => (object)array(
'id' => 'bdg',
'name' => 'Bandung',
'path' => array(
'crb' => 120,
'ygy' => 373
)
),
'crb' => (object)array(
'id' => 'crb',
'name' => 'Cirebon',
'path' => array(
'smg' => 305,
'ygy' => 210
)
),
'smg' => (object)array(
'id' => 'smg',
'name' => 'Semarang',
'path' => array(
'ygy' => 109,
'srkt' => 97,
'sby' => 365
)
),
'ygy' => (object)array(
'id' => 'ygy',
'name' => 'Yogyakarta',
'path' => array(
'srkt' => 60
)
),
'srkt' => (object)array(
'id' => 'srkt',
'name' => 'Surakarta',
'path' => array(
'mlg' => 370
)
),
'sby' => (object)array(
'id' => 'sby',
'name' => 'Surabaya',
'path' => array(
'mlg' => 94
)
),
'mlg' => (object)array(
'id' => 'mlg',
'name' => 'Malang',
'path' => array()
)
);
Dalam proses pencarian, peta tersebut ‘dibaca’ dengan fungsi possible() untuk mengetahui kemungkinan jalur yang akan dilalui dari suatu kota. Fungsi possible() tampak pada Source Code Fungsi possible() , inputnya adalah id kota, dan ouputnya adalah daftar kota yang mungkin dilalui. Pada kode tersebut dilalukan perulangan pada peta dan mencari jalur yang mungkin untuk kota dengan id yang cocok.
Source Code Fungsi possible()
function possible($kota){
$ret = array();
foreach($this->peta as $next){
foreach($next->path as $key=>$target){
$tmp = array();
if($next->id == $kota){
$tmp['id'] = $key;
$tmp['len'] = $target;
array_push($ret,$tmp);
}else{
if($key == $kota){
$tmp['id'] = $next->id;
$tmp['len'] = $next->path[$kota];
array_push($ret,$tmp);
}
}
}
}
return $ret;
}
Fungsi utama untuk RBFS ada pada fungsi route(). Fungsi route() membutuhkan input kota yang sedang dibuka (di-expand / open) dan menghasilkan jalur dengan cost yang minimal dan jalur yang akan dijadikan backup / treshold. Source code Potongan fungsi route() untuk menghitung path merupakan potongan source code untuk fungsi route(). Pertama akan dicari jalur yang mungkin dilewati dengan pemanggilan fungsi possible(). Setelah itu daftar jalur yang akan dilewati akan dihitung satu-persatu dengan perulangan. Masing-masing jalur akan dihitung besar cost dari jalur awal yaitu pada variabel $tmp[lenmin].
Potongan fungsi route() untuk menghitung path
function route($start){
$next = $this->possible($start['id']);
$lastone = true;
foreach($next as $nxt){
$chkpath = $start['path'].'-'.$nxt['id'];
$chkp = explode('-',$chkpath);
if(!strpos('x'.$start['path'],$nxt['id']) || ($chkp[0]==$nxt['id'] && sizeof($chkp)==sizeof($this->peta)+1)){
$tmp = $nxt;
if($start['path']==''){
$tmp['lenmin'] = $nxt['len'];
$tmp['path'] = $start['id'].'-'.$tmp['id'];
}else{
$tmp['lenmin'] = $start['lenmin'] + $nxt['len'];
$tmp['path'] = $start['path'].'-'.$tmp['id'];
}
array_push($this->routing, $tmp);
$lastone = false;
}
}
usort($this->routing,function($a,$b){ return $a['lenmin'] - $b['lenmin']; });
$open = $this->routing[0];
$back = $this->routing[1];
if($open['path']){
$tmp = array();
$tmp['path'] = $this->KOTA($open['path']);
$tmp['cost'] = $open['lenmin'];
array_push($this->result, $tmp);
}
if($open['path']!=''){
unset($this->routing[0]);
$this->route($open);
}
}
Setelah masing-masing cost dihitung, maka semua kemungkinan jalur yang ada akan diurutkan berdasarkan cost yang terkecil dengan fungsi usort(). Seletah diurutkan, makan jalur dengan cost terkecil akan dibuka (variabel $open) dan jalur terkecil kedua akan dijadikan treshold untuk perbandingan (variabel $back). Selanjutnya pembukaan jalur baru dilakukan pada bagian $this->route($open).
Gambar 7. adalah hasil eksekusi program ketika dijalankan. Jika memilih jalur awal adalah Jakarta, maka sistem membutuhkan 107 kali perulangan dengan jalur terbaik Jakarta-Cirebon-Semarang-Surabaya-Malang-Surakarta-Yogyakarta-Bandung-Jakarta dengan jarak yang ditempuh 2164 km atau sebaliknya. Step-step pencarian jalur yang lengkap bisa dilihat pada tabel 3.
Tabel 3. Step-step pencarian jalur terpendek dengan kota awal Jakarta
Step Rute Cost 1 Jakarta-Bandung 270 2 Jakarta-Cirebon 327 3 Jakarta-Bandung-Cirebon 390 4 Jakarta-Cirebon-Bandung 447 5 Jakarta-Cirebon-Yogyakarta 537 6 Jakarta-Cirebon-Yogyakarta-Surakarta 597 7 Jakarta-Bandung-Cirebon-Yogyakarta 600 8 Jakarta-Cirebon-Semarang 632 9 Jakarta-Bandung-Yogyakarta 643 10 Jakarta-Cirebon-Yogyakarta-Semarang 646 11 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta 660 12 Jakarta-Cirebon-Yogyakarta-Surakarta-Semarang 694 13 Jakarta-Bandung-Cirebon-Semarang 695 14 Jakarta-Bandung-Yogyakarta-Surakarta 703 15 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang 709 16 Jakarta-Cirebon-Semarang-Surakarta 729 17 Jakarta-Cirebon-Semarang-Yogyakarta 741 18 Jakarta-Cirebon-Yogyakarta-Semarang-Surakarta 743 19 Jakarta-Bandung-Yogyakarta-Semarang 752 20 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta-Semarang 757 21 Jakarta-Cirebon-Semarang-Surakarta-Yogyakarta 789 22 Jakarta-Bandung-Cirebon-Semarang-Surakarta 792 23 Jakarta-Bandung-Yogyakarta-Surakarta-Semarang 800 24 Jakarta-Cirebon-Semarang-Yogyakarta-Surakarta 801 25 Jakarta-Bandung-Cirebon-Semarang-Yogyakarta 804 26 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang-Surakarta 806 27 Jakarta-Cirebon-Bandung-Yogyakarta 820 28 Jakarta-Bandung-Yogyakarta-Semarang-Surakarta 849 29 Jakarta-Bandung-Cirebon-Semarang-Surakarta-Yogyakarta 852 30 Jakarta-Bandung-Yogyakarta-Cirebon 853 31 Jakarta-Bandung-Cirebon-Semarang-Yogyakarta-Surakarta 864 32 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta 880 33 Jakarta-Cirebon-Yogyakarta-Bandung 910 34 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang 929 35 Jakarta-Cirebon-Yogyakarta-Surakarta-Malang 967 36 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta-Semarang 977 37 Jakarta-Cirebon-Semarang-Surabaya 997 38 Jakarta-Cirebon-Yogyakarta-Semarang-Surabaya 1011 39 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang-Surakarta 1026 40 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta-Malang 1030 41 Jakarta-Bandung-Yogyakarta-Semarang-Cirebon 1057 42 Jakarta-Cirebon-Yogyakarta-Surakarta-Semarang-Surabaya 1059 43 Jakarta-Bandung-Cirebon-Semarang-Surabaya 1060 44 Jakarta-Cirebon-Yogyakarta-Surakarta-Malang-Surabaya 1061 45 Jakarta-Bandung-Yogyakarta-Surakarta-Malang 1073 46 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang-Surabaya 1074 47 Jakarta-Cirebon-Semarang-Surabaya-Malang 1091 48 Jakarta-Cirebon-Semarang-Surakarta-Malang 1099 49 Jakarta-Cirebon-Yogyakarta-Semarang-Surabaya-Malang 1105 50 Jakarta-Bandung-Yogyakarta-Surakarta-Semarang-Cirebon 1105 51 Jakarta-Cirebon-Yogyakarta-Semarang-Surakarta-Malang 1113 52 Jakarta-Cirebon-Semarang-Yogyakarta-Bandung 1114 53 Jakarta-Bandung-Yogyakarta-Semarang-Surabaya 1117 54 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta-Semarang-Surabaya 1122 55 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta-Malang-Surabaya 1124 56 Jakarta-Cirebon-Yogyakarta-Surakarta-Semarang-Surabaya-Malang 1153 57 Jakarta-Bandung-Cirebon-Semarang-Surabaya-Malang 1154 58 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang 1158 59 Jakarta-Cirebon-Semarang-Surakarta-Yogyakarta-Bandung 1162 60 Jakarta-Bandung-Cirebon-Semarang-Surakarta-Malang 1162 61 Jakarta-Bandung-Yogyakarta-Surakarta-Semarang-Surabaya 1165 62 Jakarta-Bandung-Yogyakarta-Surakarta-Malang-Surabaya 1167 63 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang-Surabaya-Malang 1168 64 Jakarta-Cirebon-Semarang-Yogyakarta-Surakarta-Malang 1171 65 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang-Surakarta-Malang 1176 66 Jakarta-Cirebon-Semarang-Surakarta-Malang-Surabaya 1193 67 Jakarta-Cirebon-Yogyakarta-Semarang-Surakarta-Malang-Surabaya 1207 68 Jakarta-Bandung-Yogyakarta-Semarang-Surabaya-Malang 1211 69 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta-Semarang-Surabaya-Malang 1216 70 Jakarta-Bandung-Yogyakarta-Semarang-Surakarta-Malang 1219 71 Jakarta-Bandung-Cirebon-Semarang-Yogyakarta-Surakarta-Malang 1234 72 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta-Malang 1250 73 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang-Surakarta 1255 74 Jakarta-Bandung-Cirebon-Semarang-Surakarta-Malang-Surabaya 1256 75 Jakarta-Bandung-Yogyakarta-Surakarta-Semarang-Surabaya-Malang 1259 76 Jakarta-Cirebon-Semarang-Yogyakarta-Surakarta-Malang-Surabaya 1265 77 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang-Surakarta-Malang-Surabaya 1270 78 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang-Surabaya 1294 79 Jakarta-Bandung-Yogyakarta-Semarang-Surakarta-Malang-Surabaya 1313 80 Jakarta-Bandung-Cirebon-Semarang-Yogyakarta-Surakarta-Malang-Surabaya 1328 81 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta-Semarang-Surabaya 1342 82 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta-Malang-Surabaya 1344 83 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang-Surabaya-Malang 1388 84 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang-Surakarta-Malang 1396 85 Jakarta-Cirebon-Yogyakarta-Surakarta-Malang-Surabaya-Semarang 1426 86 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta-Semarang-Surabaya-Malang 1436 87 Jakarta-Cirebon-Semarang-Surabaya-Malang-Surakarta 1461 88 Jakarta-Cirebon-Yogyakarta-Semarang-Surabaya-Malang-Surakarta 1475 89 Jakarta-Bandung-Cirebon-Yogyakarta-Surakarta-Malang-Surabaya-Semarang 1489 90 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang-Surakarta-Malang-Surabaya 1490 91 Jakarta-Cirebon-Semarang-Surabaya-Malang-Surakarta-Yogyakarta 1521 92 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang-Surabaya 1523 93 Jakarta-Bandung-Cirebon-Semarang-Surabaya-Malang-Surakarta 1524 94 Jakarta-Bandung-Yogyakarta-Surakarta-Malang-Surabaya-Semarang 1532 95 Jakarta-Bandung-Cirebon-Yogyakarta-Semarang-Surabaya-Malang-Surakarta 1538 96 Jakarta-Bandung-Yogyakarta-Semarang-Surabaya-Malang-Surakarta 1581 97 Jakarta-Bandung-Cirebon-Semarang-Surabaya-Malang-Surakarta-Yogyakarta 1584 98 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang-Surabaya-Malang 1617 99 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang-Surakarta-Malang 1625 100 Jakarta-Cirebon-Bandung-Yogyakarta-Surakarta-Malang-Surabaya-Semarang 1709 101 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang-Surakarta-Malang-Surabaya 1719 102 Jakarta-Cirebon-Bandung-Yogyakarta-Semarang-Surabaya-Malang-Surakarta 1758 103 Jakarta-Bandung-Yogyakarta-Surakarta-Malang-Surabaya-Semarang-Cirebon 1837 104 Jakarta-Cirebon-Semarang-Surabaya-Malang-Surakarta-Yogyakarta-Bandung 1894 105 Jakarta-Bandung-Yogyakarta-Cirebon-Semarang-Surabaya-Malang-Surakarta 1987 106 Jakarta-Bandung-Yogyakarta-Surakarta-Malang-Surabaya-Semarang-Cirebon-Jakarta 2164 107 Jakarta-Cirebon-Semarang-Surabaya-Malang-Surakarta-Yogyakarta-Bandung-Jakarta 2164
E. KESIMPULAN
Penggunaan RBFS dalam mencari rute terpendek terbaik untuk kasus ini dengan kota asala Jakarta adalah jalur :
Jakarta – Cirebon – Semarang – Surabaya – Malang – Surakarta – Yogyakarta – Bandung - Jakarta
atau jalur sebaliknya dengan pangjang rute adalah 2164 km. Sampel aplikasi bisa diakses di alamat http://lab.elangsakti.com/tsp/ .
F. REFERENSI
Pearl, J. Heuristics: Intelligent Search Strategies for Computer Problem Solving. Addison-Wesley, 1984. p. 48.
Russell, S. J., Norvig, P, Artificial Intelligence: A Modern Approach, 2003.
Source Code lengkap Class RBFS:
<?php
class TSP{
var $peta = array();
var $routing = array();
var $result = array();
function start( $kota ){
$start = array('id'=>$kota, 'path'=>'');
$this->route($start);
return $this->result;
}
function setPeta($peta){
$this->peta = $peta;
}
function possible($kota){
$ret = array();
foreach($this->peta as $next){
foreach($next->path as $key=>$target){
$tmp = array();
if($next->id == $kota){
$tmp['id'] = $key;
$tmp['len'] = $target;
array_push($ret,$tmp);
}else{
if($key == $kota){
$tmp['id'] = $next->id;
$tmp['len'] = $next->path[$kota];
array_push($ret,$tmp);
}
}
}
}
return $ret;
}
function route($start){
$next = $this->possible($start['id']);
$lastone = true;
foreach($next as $nxt){
$chkpath = $start['path'].'-'.$nxt['id'];
$chkp = explode('-',$chkpath);
if(!strpos('x'.$start['path'],$nxt['id']) || ($chkp[0]==$nxt['id'] && sizeof($chkp)==sizeof($this->peta)+1)){
$tmp = $nxt;
if($start['path']==''){
$tmp['lenmin'] = $nxt['len'];
$tmp['path'] = $start['id'].'-'.$tmp['id'];
}else{
$tmp['lenmin'] = $start['lenmin'] + $nxt['len'];
$tmp['path'] = $start['path'].'-'.$tmp['id'];
}
array_push($this->routing, $tmp);
$lastone = false;
}
}
usort($this->routing,function($a,$b){ return $a['lenmin'] - $b['lenmin']; });
$open = $this->routing[0];
$back = $this->routing[1];
if($open['path']){
$tmp = array();
$tmp['path'] = $this->KOTA($open['path']);
$tmp['cost'] = $open['lenmin'];
array_push($this->result, $tmp);
}
if($open['path']!=''){
unset($this->routing[0]);
$this->route($open);
}
}
function KOTA( $path ){
foreach($this->peta as $kota){
$path = str_replace($kota->id,$kota->name,$path);
}
return $path;
}
}
?>
Written by ElangSakti
PHP : Penyelesaian Traveling Salesman Problem (TSP) Menggunakan Algoritma Recursive Best First Search (RBFS)
Bahasan: Tulisan ini adalah salah satu tugas Kecerdasan Komputasional. ABSTRAK Travelling Salesman Problem (TSP) merupakan sebuah permasala...
Published at Sabtu, 18 Juli 2015, Updated at Sabtu, 18 Juli 2015
Reviewed by dr. on
Rating: 4.7
PHP : Penyelesaian Traveling Salesman Problem (TSP) Menggunakan Algoritma Recursive Best First Search (RBFS)
Bahasan: Tulisan ini adalah salah satu tugas Kecerdasan Komputasional. ABSTRAK Travelling Salesman Problem (TSP) merupakan sebuah permasala...
Published at Sabtu, 18 Juli 2015, Updated at Sabtu, 18 Juli 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Ide Penelitian : Membangun Adaptive HTTP Firewall dengan Hidden Markov Model dan Artificial Immune System
ElangSakti
Artificial Immune System
,
Hidden Markov Model
,
HTTP Firewall
,
Informatika
Tidak ada komentar
Tulisan ini sebagai salah satu tugas dari mata kuliah Teknologi Komunikasi dan Informasi.
Abstrak - Perkembangan HTTP firewall sudah sampai pada bagaimana sistem bisa mengenali serangan berdasarkan pola yang sudah ditentukan. Akan tetapi umumnya masih bersifat pasif tanpa bisa mempelajari pola-pola baru dalam serangan. Adaptive HTTP firewall berbasis Hidden Markov Model (HMM) dan Artificial Immune Sytem merupakan (AIS) merupakan firewall untuk protokol HTTP (web) yang mampu memetakan pola-pola serangan (dengan HMM) dan mengadopsi sistem kerja imun manusia sehingga mampu secara aktif mempelajari, megenali, dan menyesuaikan diri dengan pola-pola serangan yang baru.
Kata Kunci: adaptive http firewall, artificial immune system, hidden markov model
I. PENDAHULUAN
Seiring dengan cepatnya perkembangan internet, banyak keperluan manusia yang bisa dilakukan secara virtual melalui aplikasi yang berbasis website seperti internet banking, toko online, penerimaan pegawai, penerimaan pelajar dan mahasiswa, hingga virtual learning. Oleh sebab itu, keamanan pada website merupakan hal yang sangat penting mengingat banyak sekali data-data pengguna yang harus dilindungi dari orang-orang yang tidak bertanggung jawab.
HTTP firewall merupakan salah satu proteksi yang dikhusukan untuk melindungi protokol HTTP. Mengingat perannya yang begitu penting dan banyaknya kombinasi serangan yang bisa dilakukan oleh attacker, maka HTTP firewall berbasis Hidden Markov Model dan Artificial Immune System diharapkan dapat secara aktif mengenali dan mempelajari pola-pola serangan website yang beragam dan mampu melindungi semua resource website dari serangan attacker.
II. HTTP FIREWALL
Dalam pendeteksian serangan, HTTP Firewall umumnya dibangun dengan dua model, yaitu model statis dan dinamis. Model statis yaitu HTTP Firewall berbasis pada algoritma pencocokan string seperti Algoritma Brute Force, Booyer Moore, dan Zhu Takaoka[1]. HTTP firewall yang dibangun dengan model dinamis dibangun dengan algoritma yang dapat merepresentasikan pola serangan seperti penggunaan Hidden Markov Model[2] dan Hidden Naïve Bayes[3].
Aplikasi HTTP Firewall berbasis server seperti ModeSecurity[4] mengacu pada kedua model tersebut sehingga firewall dapat mendeteksi serangan secara dinamis berdasarkan pola serangan atau pencocokan string serangan. Sedangkan aplikasi HTTP Firewall yang berbasis framewok[5] seperti NinjaFirewall[6] masih berbasis pada model statis.
Umumnya HTTP Firewall bersifat pasif, artinya firewall tersebut hanya bertugas untuk mendeteksi serangan atau mencocokan pola, lalu memberikan peringatan kepada administrator jaringan dengan cara mencatat log atau mengirimkan email. HTTP Firewall yang bersifat aktif dapat mempelajari serangan baru berdasarkan pola-pola sebelumnya dan menyimpannya ke dalam memori. Sifat aktif pada HTTP Firewall bisa juga diibaratkan dengan firewall yang didesain agar mampu memetakan pola-pola serangan, menambahkan pola dan rule pendeteksian secara mandiri, dan mampu beradaptasi dengan pola serangan yang beragam.
Penggunaan Algoritma cerdas seperti ANN, Fuzzy, Ant Colony, dan Genetika umumnya lebih banyak diteliti untuk ditanamkan pada Firewall jaringan[7][8] sebagai packet filtering[9] [10] dan penangkal serangan DoS. Pada paper ini penulis akan menerapkan salah satu algoritma cerdas yaitu Artificial Immune System (AIS) dan algoritma peramalan probabilitas Hidden Markov Model (HMM) untuk membangun HTTP Firewall yang mampu beradaptasi dengan pola-polas serangan yang berbeda.
III. HIDDEN MARKOV MODEL UNTUK PEMODELAN POLA SERANGAN
Hidden Markov Model (HMM) adalah peluasan dari rantai Markov di mana state-nya tidak dapat diamati secara langsung (tersembunyi), tetapi hanya dapat diobservasi melalui suatu himpunan pengamatan lain[11]. Kondisi “tersembunyi” tersebut dapat digunakan untuk memetakan rangkaian string URL dan parameter pada HTTP Request sebagai pola-pola tertentu[2].
Parameter-parameter pada variabel HTTP Request akan dikelompokkan ke dalam tiga jenis data, numerik (0-9), huruf alfabet (a-z,A-Z), dan alfanumerik (0-9,a-z,A-Z, dan semua simbol yang ada dalam ascii). Ketiga jenis data tersebut akan menjadi dasar dalam pembuatan pola HTTP Request. Tabel 3.1 merupakan contoh pola pada HTTP Request. Pola /web/p1=N/p2=A/p3=AN menunjukkan alamata “web”, p1 = numerik (N), p2 = alfabet (A), p3 = alfanumerik (AN). Pada baris terakhir, URI Request dianggap tidak valid karena mempunyai pola yang berbeda dengan pola yang dipetakan sebelumnya. Penentuan pola seperti dapat digunakan untuk mendeteksi anomali pada HTTP Request yang berpotensi sebagai serangan.
Tabel 3.1 Contoh pola HTTP Request
IV. ARTIFICIAL IMMUNE SYSTEM PADA HTTP FIREWALL
Artificial Immune System merupakan algoritma yang mengadopsi cara kerja sistem imun (antibody) manusia. Dalam perspektif biologis, ketika ada antigen masuk ke dalam darah baik dari dalam atau dari luar tubuh, maka B-Cell yang ada pada sumsum tulang belakang akan memproduksi antibodi untuk menentralisir antigen. Awalnya antibodi akan mencoba untuk mengikat antigen, setelah itu atibodi yang bisa mengikat antigen akan menggandakan diri lalu melakukan seleksi dan mutasi. Antibodi yang tidak bisa mengikat antigen akan dihilangkan sedangkan yang bisa mengikat antigen akan diperbanyak.
Proses seleksi dan mutasi merupakan proses pengenalan dan penyesuaian diri antibodi terhadap antigen. Keluaran proses seleksi dan mutasi adalah antibodi yang memiliki memori (memory cell) tentang antigen yang sudah dipelajari. Apabila ada antigen baru dengan pola yang sama, maka antibodi yang sudah memiliki memori akan langsung menetralisir antigen tersebut. Namun jika ada antigen baru dengan pola yang berbeda, maka B-Cell akan kembali memproduksi antibodi, melakukan proses seleksi dan mutasi hingga antibody dapat menetralisir antigen yang baru tersebut. Ilustrasi proses antibodi mengikat antigen dapat dilihat pada Gambar 4.1.
![]() |
| Gambar 4.1 Ilustrasi proses antibodi mengikat antigen |
Dalam HTTP Firewall, berikut pemetaan komponen pada Artificial Immune System (AIS) terhadap komponen-komponen pada HTTP Firewall.
Tabel 4.1 Pemetaan AIS dalam HTTP Firewall
V. DESAIN SISTEM
A. Pendeteksian Serangan
Komunikasi data dalam protokol HTTP yaitu dengan mengirimkan HTTP Request dan meneriman HTTP Response. Serangan pada protokol ini yaitu dengan menginjeksikan data atau dengan memodifikasi parameter yang ada pada HTTP Request. Injeksi kode berupa potongan script atau kode yang dianggap merusak data umumnya juga dilakukan pada parameter pada URI.
![]() |
| Gambar 5.1 Alur pendeteksian serangan |
Gambar 5.1 merupakan alur pendeteksian serangan pada HTTP Request. Untuk mendeteksi serangan pada protokol HTTP, maka yang diperiksa adalah setiap HTTP Request yang dikirimkan oleh user. Dalam hal ini HTTP Request akan diparsing sesuai dengan parameter HTTP Request atau parameter pada URI. Selanjutnya data hasil parsing akan diperiksa berdasarkan pola yang sudah ada. Apabila HTTP Request memiliki pola yang sesuai dengan serangan, maka HTTP Request dapat di-drop atau dimodifikasi dengan salah satu pola yang.
B. Pengenalan Pola
HTTP Request dibagi menjadi dua bagian, valid dan tidak valid. Proses validasi dilakukan dengan perhitungan algoritma viterbi pada HMM. HTTP Request Dikatakan valid apabila cocok dengan pola data yang bukan serangan. Sedangkan dikatakan tidak valid apabila HTTP Request cocok dengan pola serangan. Apabila HTTP Request tidak cocok dengan kedua pola tersebut, maka HTTP Request untuk sementara akan dimasukkan ke dalam kelompok abu-abu. Selanjutnya HTTP Firewall akan melakukan pembelajaran terhadap pola tersebut dan memberikan pesan warning kepada administrator jaringan untuk ditindak lanjuti. Diagram pengenalan pola HTTP Request dijelaskan pada Gambar 5.2.
![]() |
| Gambar 5.2 Diagram pengenalan pola |
C. Proses Pembelajaran
Proses pembelajaran dilakukan apabila firewall menemukan pola yang tidak cocok dengan pola HTTP Request yang valid dan pola HTTP Request yang tidak valid. Pada Gambar 5.3, proses learning akan diawali dengan pembangkitan pola HTTP Request berdasarkan pola yang sudah ada secara acak. Untuk mendapatkan kecocokan antara pola dan HTTP Request maka pola akan melewati proses penggandaan dan mutasi. Proses mutasi berdasarkan tingkat error antara pola yang valid dengan pola yang tidak valid. Proses pembelajaran akan terus dilakukan hingga diperoleh pola yang paling mirip dengan HTTP Request yang dipelajari. Hasil dari pembelajaran ini adalah pola baru HTTP Request yang akan dikategorikan valid atau tidak valid.
![]() |
| Gambar 5.3 Proses pembelajaran dengan AIS |
D. Model Adaptif
Model adaptif pada HTTP Firewall ini adalah proses pendefinisian rule baru secara mandiri apabila ada pola baru pada HTTP Request. Pola baru tersebut meliputi pola serangan dan pola bukan serangan. Model Adaptif HTTP Firewall pada Gambar 5.4 diawali dengan parsing data HTTP Request kemudian perhitungan dengan algoritma Viterbi yang merupakan bagian dari Hidden Markov Model. Perhitungan dengan Viterbi akan dicocokkan dengan pola yang sudah ada dalam database.
Apabila tidak ada pola yang sesuai, maka sistem akan mempelajari pola Request dengan AIS dan akan menyimpan polabaru hasil pembelajarannya pada database. Apabila ada pola yang cocok, maka sistem akan mengeksekusi sesuai action yang telah didefinisikan oleh administrator.
![]() |
| Gambar 5.4 Model Adaptif HTTP Firewall |
VI. KESIMPULAN
Penggunaan web dalam berbagai keperluan menjadikan aspek sekuritas menjadi hal yang sangat penting. Untuk meningkatkan keamaan transaksi data maka dibutuhkan firewall yang khusus dibangun untuk protokol web yang mampu mendeteksi berbagai pola serangan yang sangat beragam dan harus mampu beradaptasi secara mandiri. Penggunaan algoritma Hidden Markov Model untuk mendeteksi serangan web berdasarkan pola serangan yang dikombinasikan dengan algoritma Artificial Immune System yang mampu mempelajari pola baru dapat menjadikan HTTP Firewall bersifat adaptif. Makalah ini masih membahas Adaptive HTTP Firewall secara konseptual dan diharapkan bisa dikembangkan ke ranah implementasi.
REFERENSI
1. Santoso, Hari. “Validasi HTTP Request dengan Algoritma Zhu-Takaoka”. Malang: 2010.
2. Mohammad Geraily dan Majid Vafaei Jahan, “Fuzzy Detection of Malicious Attacks on Web Applications based on Hidden Markov Model Ensemble”, IEEE Third International Conference on Intelligent Systems Modelling and Simulation, 2012.
3. Jia Wu, Shirui Pan, Xingquan Zhu, Zhihua Cai,Peng Zhang, Chengqi Zhang. “Self-adaptive attribute weighting for Naive Bayes classification”, Expert Systems with Applications Vol.42 p. 1487–1502. Elsevier, 2015.
4. ModSecurity: Open Source Web Application Firewall, https://www.modsecurity.org/
5. Igino Corona, Davide Ariu dan Giorgio Giacinto, HMM-Web: a framework for the detection of attacks against Web applications, Communications. ICC '09. IEEE International Conference, 2009.
6. NinjaFirewall : Web Application Firewall for PHP, http://ninjafirewall.com
7. Sindhu, S.S.S et all. A Neuro-genetic ensemble Short Term Forecasting Framework for Anomaly Intrusion Prediction, Advanced Computing and Communications, IEEE, 2006.
8. Borders, K. Falk, Laura ; Prakash, A. OpenFire: Using deception to reduce network attacks, Security and Privacy in Communications Networks and the Workshops, IEEE, 2007.
9. Reumann, J. Jamjoom, H. Kang Shin, Adaptive packet filters, Global Telecommunications Conference, IEEE, 2001.
10. N.K. Sreelaja, G.A. Vijayalakshmi Pai1, Ant Colony Optimization based approach for efficient packet filtering in firewall, Applied Soft Computing, Vol. 10, Issue 4, Pages 1222–1236, Elsevier, 2010.
11. Firdaniza, Nurul Gusriani dan Akmal, Hidden Markov Model, Trend Penelitian dan Pembelajaran Matematika di Era ICT, 2006
Written by ElangSakti
Ide Penelitian : Membangun Adaptive HTTP Firewall dengan Hidden Markov Model dan Artificial Immune System
Bahasan: Tulisan ini sebagai salah satu tugas dari mata kuliah Teknologi Komunikasi dan Informasi. Abstrak - Perkembangan HTTP firewall sud...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
Ide Penelitian : Membangun Adaptive HTTP Firewall dengan Hidden Markov Model dan Artificial Immune System
Bahasan: Tulisan ini sebagai salah satu tugas dari mata kuliah Teknologi Komunikasi dan Informasi. Abstrak - Perkembangan HTTP firewall sud...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
WSN Nodes adalah perangkat sensor dengan biaya rendah, sehingga perangkat tersebut dapat digunakan dalam jumlah yang besar. Node beroperasi pada daya rendah sehingga perangkat dapat dioperasikan dengan baterai, atau bahkan menggunakan energi harvesting. Sebuah node pada WSN adalah embed sistem yang biasanya memiliki fungsi tunggal seperti mengukur suhu, tekanan, atau menyalakan lampu atau motor.
Energi harvesting adalah teknologi baru yang memanfaatkan energi dari luar, misalnya tenaga surya, energi panas, energi angin, radiasi elektromagnetik, dan energi kinetik. Energi yang ditangkap dan disimpan untuk konsumsi daya yang kecil yaitu wireless berdaya rendah seperti node pada WSN.
Protokol untuk Wireless Sensor Network
Beberapa protokol yang masih dalam penelitian sebagai baseline dari implementasi Wireless Sensor Network yaitu WiFi, IEEE 802.15.4, dan 6LoWPAN. WiFi memiliki potensi yang bagus sebagai jaringan dasar dari Wireless Sensor Network, hanya saja konsumsi daya untuk perangkan WiFi terlalu rakus terhadap energi sehingga penggunaan WiFi tidak cocok untuk sensor yang hanya bisa diaktifkan dengan bateria atau ketika sensor akan dipasang di tempat yang minim jaringan listriks.
Selain WiFi, IEEE 802.15.4 merupakan alternatif yang bisa digunakan untuk jaringan pada Wireless Sensor Network. IEEE 802.15.4 adalah standar komunikasi radio yang dirilis pada tahun 2003. Hasil koordinasi dari radio komersial menjadikan standar ini sebagai dasar dari perangkat dengan low-power sistem. Standar IEEE ini kemudian dikembangkan lagi pada tahun 2006 dan tahun 2011 menjadi 802.15.4e dan 802.15.4g. Konsumsi daya standar pada versi baru diturunkan 50% dari standar sebelumnya.
Alternatif yang terakhir adalah 6LoWPAN. 6LoWPAN merupakan singkatan dari IPv6 over Low Power Wireless Personal Area Network. Perangkat yang memanfaatkan energi harvesting harus melakukan setiap task secepat mungkin karena daya yang mereka miliki begitu rendah. Ketentuan ini akan berpengaruh pada protokol yang akan digunakan. Konsep 6LoWPAN sudah diadopsi oleh ARM (Sensinonde) dan Cisco (ArchRock). 6LoWPAN menyediakan mekanisme untuk mengenkapsulasi dan kompresi terhadap header sehingga memungkinkan data bisa dikirim dengan cepat. Tabel 1 adalah tabel spesifikasi dari ketiga teknologi yang bisa dipakai dalam Wireless Sensor Network.
Dalam aplikasinya, UDP sering digunakan dalam protokol komunikasi yang ringan untuk menghemat sumber daya memori dan prosesor. Beberapa protokol lapisan aplikasi membutuhkan penggunaan protokol yang ringan yang dapat melakukan fungsi-fungsi spesifik dengan saling bertukar pesan. Contoh dari protokol yang ringan adalah fungsi query nama dalam protokol lapisan aplikasi Domain Name System. Akan tetapi selain untuk protokol yang ringan, UDP umumnya juga digunakan untuk streaming audio dan video. Media streaming seperti Windows Media file audio (.WMA), Real Player (.RM), dan beberapa aplikasi lainnnya menggunakan UDP.
Header Protokol UDP
Header UDP diwujudkan sebagai sebuah header dengan 4 buah field memiliki ukuran yang tetap. Keempat field tersebut adalah source port, destination port, length, dan checksum. Source port terdiri dari 16 bit (2 byte) yang digunakan untuk mengidentifikasikan sumber protokol lapisan aplikasi yang mengirimkan pesan UDP yang bersangkutan. Penggunaan field ini adalah opsional, dan jika tidak digunakan, akan diset ke angka 0.
Header yang kedua adalah destination port, terdiri dari 16 bit (2 byte) yang digunakan untuk mengidentifikasikan tujuan protokol lapisan aplikasi yang menjadi tujuan pesan UDP yang bersangkutan. Dengan menggunakan kombinasi antara alamat IP dengan nilai dari field ini untuk membuat sebuah alamat yang signifikan untuk mengidentifikasikan proses yang berjalan dalam sebuah host tertentu yang dituju oleh pesan UDP yang bersangkutan.
Header yang ketiga adalah length, terdiri dari 16 bit (2 byte) yang d igunakan untuk mengindikasikan panjang pesan UDP (pesan UDP ditambah dengan header UDP) dalam satuan byte. Ukuran paling kecil adalah 8 byte (ukuran header UDP, ketika tidak ada isi pesan UDP), dan ukuran paling besar adalah 65515 bytes (65535 [216] -20 [ukuran header protokol IP]).
Kemudian header yang terakhir adalah Checksum, terdiri dari 16 bit (2 byte) berisi informasi pengecekan integritas dari pesan UDP yang dikirimkan (header UDP dan pesan UDP). Penggunaan field ini adalah opsional. Jika tidak digunakan, field ini akan bernilai 0. Keempat header tersebut bisa dilihat pada Gambar 2.
XMPP server dan client berkomunikasi melalui pengiriman Message Stanza, yaitu XML code yang fleksibel (sesuai spesifikasi) yang diencoded menggunakan Base64 sebelum dikirimkan. Message stanza ini sering disebut dengan packet, yang bisa berupa Message, Presence dan IQ. Berikut adalah stanza implementasi XMPP untuk mengalamatkan node pada Wireless Sensor Network. Kode XML berikut adalah kode data yang dikirim dengan XMPP dari node. Kode yang pertama menunjukkan node bertipe temperature (sensor suhu) dengan informasi “threshold > 40”. Informasi tersebut memberitahukan kepada sistem bahwa alarm akan dihidupkan karena temperaturnya terlalu tinggi.
Ide Penelitian : Implementasi XMPP Berbasis UDP pada Realtime IP-Based Wireless Sensor Network
ElangSakti
Elektronika
,
Informatika
,
Internet of Things
,
Wireless Sensor Network
,
XMPP
1 komentar
Tulisan ini adalah salah satu artikel ilmiah sebagai tugas akhir dari matakuliah Jaringan dan Arsitektur Telekomunikasi yang diikuti penulis. :)
Abstrak
Sejalan dengan perkembangan teknologi internet, Wireless Sensor Network terintegrasi dalam konsep Internet of Things (IoT) atau disebut dengan istilah IP-based Wireless Sensor Network. Untuk sensor node yang mengirimkan data secara realtime, maka dibutuhkan protokol yang ringan dengan konsumsi daya yang rendah. Dalam hal ini, penulis memilih XMPP berbasis UDP sebagai protokol yang bisa digunakan komunikasi end-to-end dalam jaringan internet dengan daya minimal. Kesimpulan dari tulisan ini yaitu: secara konsep XMPP berbasis UDP dapat digunakan untuk mengirimkan data realtime dari sensor network dengan konsumsi daya minimal karena XMPP memiliki format yang sederhana dan metode kompresi XML pada XMPP menjadikan data yang dikirim kecil. Sedangkan pengiriman dengan UDP memungkinkan data dikirim lebih cepat karena tanpa mekanisme handshaking sehingga konsumsi daya juga bisa dikurangi.
Kata Kunci : XMPP, UDP, Wireless Sensor Network, Internet of Things
Kata Kunci : XMPP, UDP, Wireless Sensor Network, Internet of Things
1. Pendahuluan
Perkembangan internet sebagai media komunikasi membuat manusia seakan mempunyai dua alam kehidupan: kehidupan di dunia nyata dan kehidupan di dunia maya. Integrasi antara dunia nyata dan dunia maya tersebut mulai terealisasi dengan adanya konsep Internet of Things dan Web of Things [2]. Internet of Things dan Web of Things berusaha agar semua informasi yang ada di dunia nyata bisa dikendalikan melalui internet dengan menghubungkan peralatan yang berfungsi sebagai sensor yang mampu memindai kondisi tertentu dari lingkungan.
Untuk menghubungkan sensor agar terkoneksi dengan jaringan internet, maka dibutuhkan mekanisme (protokol) yang cocok untuk karakteristik dan kebutuhan sensing. REST melalui HTTP [5][8] dan XMPP [5][7] merupakan dua mekanisme yang populer dalam membangun Internet of Things. Penggunaan protokol XMPP lebih ringan daripada REST dalam komunikasi IoT [8]. Selain itu, penggunaan XMPP juga lebih fleksibel apabila infrastruktur dilengkapi dengan XMPP Bot, sehingga setiap sensor network dapat dipakai untuk keperluan lain tanpa perlu memprogram ulang.
Sensor Network yang bersifat realtime dalam mengirimkan data seperti audio dan video streaming, maka salah satu yang harus diperhatikan adalah tipe koneksi yang digunakan untuk pengiriman data. Protokol XMPP memungkinkan untuk dibangun dengan TCP maupun UDP. Dalam masalah streaming data dan efisiensi daya, UDP lebih unggul daripada TCP [3][4]. Oleh sebab itu, penggunaan protokol XMPP akan cocok apabila menggunakan model koneksi UDP untuk mentransfer data secara realtime.
Untuk menghubungkan sensor agar terkoneksi dengan jaringan internet, maka dibutuhkan mekanisme (protokol) yang cocok untuk karakteristik dan kebutuhan sensing. REST melalui HTTP [5][8] dan XMPP [5][7] merupakan dua mekanisme yang populer dalam membangun Internet of Things. Penggunaan protokol XMPP lebih ringan daripada REST dalam komunikasi IoT [8]. Selain itu, penggunaan XMPP juga lebih fleksibel apabila infrastruktur dilengkapi dengan XMPP Bot, sehingga setiap sensor network dapat dipakai untuk keperluan lain tanpa perlu memprogram ulang.
Sensor Network yang bersifat realtime dalam mengirimkan data seperti audio dan video streaming, maka salah satu yang harus diperhatikan adalah tipe koneksi yang digunakan untuk pengiriman data. Protokol XMPP memungkinkan untuk dibangun dengan TCP maupun UDP. Dalam masalah streaming data dan efisiensi daya, UDP lebih unggul daripada TCP [3][4]. Oleh sebab itu, penggunaan protokol XMPP akan cocok apabila menggunakan model koneksi UDP untuk mentransfer data secara realtime.
2. IP-Based Wireless Sensor Network
Wireless Sensor Network adalah sebuah jaringan yang tersusun atas berbagai sensor node yang memiliki kemampuan penginderaan, komunikasi secara nirkabel dan juga komputasi. Sebuah sensor node memiliki dua komponen, yaitu mote dan sensor. Sensor selalu melekat pada mote. Mote bertanggung jawab untuk penyimpanan, komputasi dan komunikasi, sedangkan sensor bertanggung jawab untuk penginderaan fenomena fisik seperti suhu, cahaya, suara, getaran, dan lain sebagainya.
Sejalan dengan perkembangan teknologi internet, Wireless Sensor Network kemudian terintegrasi dalam konsep Internet of Things (IoT), biasa juga disebut IP-based Wireless Sensor Network. Dalam konsep ini, setiap sensor memiliki identitas ataua alamat yang unik sehingga mampu secara dinamis bergabung dalam suatu jaringan, berkolaborasi dan bekerjasama secara efisien. Gambar 1 menunjukkan ilustrasi dari Wireless Sensor Network dengan sensor node yang terhubung ke jaringan internet melalui sebuah gateway.
Sejalan dengan perkembangan teknologi internet, Wireless Sensor Network kemudian terintegrasi dalam konsep Internet of Things (IoT), biasa juga disebut IP-based Wireless Sensor Network. Dalam konsep ini, setiap sensor memiliki identitas ataua alamat yang unik sehingga mampu secara dinamis bergabung dalam suatu jaringan, berkolaborasi dan bekerjasama secara efisien. Gambar 1 menunjukkan ilustrasi dari Wireless Sensor Network dengan sensor node yang terhubung ke jaringan internet melalui sebuah gateway.
![]() |
| Gambar 1. Wireless Sensor Network yang terkoneksi ke internet |
Energi harvesting adalah teknologi baru yang memanfaatkan energi dari luar, misalnya tenaga surya, energi panas, energi angin, radiasi elektromagnetik, dan energi kinetik. Energi yang ditangkap dan disimpan untuk konsumsi daya yang kecil yaitu wireless berdaya rendah seperti node pada WSN.
Protokol untuk Wireless Sensor Network
Beberapa protokol yang masih dalam penelitian sebagai baseline dari implementasi Wireless Sensor Network yaitu WiFi, IEEE 802.15.4, dan 6LoWPAN. WiFi memiliki potensi yang bagus sebagai jaringan dasar dari Wireless Sensor Network, hanya saja konsumsi daya untuk perangkan WiFi terlalu rakus terhadap energi sehingga penggunaan WiFi tidak cocok untuk sensor yang hanya bisa diaktifkan dengan bateria atau ketika sensor akan dipasang di tempat yang minim jaringan listriks.
Selain WiFi, IEEE 802.15.4 merupakan alternatif yang bisa digunakan untuk jaringan pada Wireless Sensor Network. IEEE 802.15.4 adalah standar komunikasi radio yang dirilis pada tahun 2003. Hasil koordinasi dari radio komersial menjadikan standar ini sebagai dasar dari perangkat dengan low-power sistem. Standar IEEE ini kemudian dikembangkan lagi pada tahun 2006 dan tahun 2011 menjadi 802.15.4e dan 802.15.4g. Konsumsi daya standar pada versi baru diturunkan 50% dari standar sebelumnya.
Alternatif yang terakhir adalah 6LoWPAN. 6LoWPAN merupakan singkatan dari IPv6 over Low Power Wireless Personal Area Network. Perangkat yang memanfaatkan energi harvesting harus melakukan setiap task secepat mungkin karena daya yang mereka miliki begitu rendah. Ketentuan ini akan berpengaruh pada protokol yang akan digunakan. Konsep 6LoWPAN sudah diadopsi oleh ARM (Sensinonde) dan Cisco (ArchRock). 6LoWPAN menyediakan mekanisme untuk mengenkapsulasi dan kompresi terhadap header sehingga memungkinkan data bisa dikirim dengan cepat. Tabel 1 adalah tabel spesifikasi dari ketiga teknologi yang bisa dipakai dalam Wireless Sensor Network.
Tabel 1. Teknologi standar untuk Wireless Sensor Networks
3. Protokol UDP
UDP, singkatan dari User Datagram Protocol, adalah salah satu protokol lapisan transpor TCP/IP yang mendukung komunikasi yang tidak andal (unreliable), tanpa koneksi (connectionless) antara host-host dalam jaringan yang menggunakan TCP/IP. Protokol ini didefinisikan dalam RFC 768. UDP bersifat connectionless dan unreliable, artinya UDP pesan-pesan UDP akan dikirim tanpa melakukan proses handshaking dan data yang dikirimkan tanpa memiliki nomor urut sehingga tidak ada mekanisme untuk mendeteksi kehilangan data pada UDP.Dalam aplikasinya, UDP sering digunakan dalam protokol komunikasi yang ringan untuk menghemat sumber daya memori dan prosesor. Beberapa protokol lapisan aplikasi membutuhkan penggunaan protokol yang ringan yang dapat melakukan fungsi-fungsi spesifik dengan saling bertukar pesan. Contoh dari protokol yang ringan adalah fungsi query nama dalam protokol lapisan aplikasi Domain Name System. Akan tetapi selain untuk protokol yang ringan, UDP umumnya juga digunakan untuk streaming audio dan video. Media streaming seperti Windows Media file audio (.WMA), Real Player (.RM), dan beberapa aplikasi lainnnya menggunakan UDP.
Header Protokol UDP
Header UDP diwujudkan sebagai sebuah header dengan 4 buah field memiliki ukuran yang tetap. Keempat field tersebut adalah source port, destination port, length, dan checksum. Source port terdiri dari 16 bit (2 byte) yang digunakan untuk mengidentifikasikan sumber protokol lapisan aplikasi yang mengirimkan pesan UDP yang bersangkutan. Penggunaan field ini adalah opsional, dan jika tidak digunakan, akan diset ke angka 0.
Header yang kedua adalah destination port, terdiri dari 16 bit (2 byte) yang digunakan untuk mengidentifikasikan tujuan protokol lapisan aplikasi yang menjadi tujuan pesan UDP yang bersangkutan. Dengan menggunakan kombinasi antara alamat IP dengan nilai dari field ini untuk membuat sebuah alamat yang signifikan untuk mengidentifikasikan proses yang berjalan dalam sebuah host tertentu yang dituju oleh pesan UDP yang bersangkutan.
Header yang ketiga adalah length, terdiri dari 16 bit (2 byte) yang d igunakan untuk mengindikasikan panjang pesan UDP (pesan UDP ditambah dengan header UDP) dalam satuan byte. Ukuran paling kecil adalah 8 byte (ukuran header UDP, ketika tidak ada isi pesan UDP), dan ukuran paling besar adalah 65515 bytes (65535 [216] -20 [ukuran header protokol IP]).
Kemudian header yang terakhir adalah Checksum, terdiri dari 16 bit (2 byte) berisi informasi pengecekan integritas dari pesan UDP yang dikirimkan (header UDP dan pesan UDP). Penggunaan field ini adalah opsional. Jika tidak digunakan, field ini akan bernilai 0. Keempat header tersebut bisa dilihat pada Gambar 2.
![]() |
| Gambar 2. Header Protokol UDP |
4. Protokol XMPP
Extensible Messaging and Presence Protocol (XMPP) adalah sebuah standard komunikasi real-time berbasis text, suara maupun video dengan teknologi open XML. Di awal sekali orang lebih mengenal Jabber, karena XMPP merupakan produk Jabber pada tahun 1999, kemudian diformulasikan oleh XMPP Standard Foundation menjadi standard pada tahun 2004 (XMPP 1.0). XMPP bisa digunakan dalam hal-hal berikut: instant messaging, presence, multi-party chat, voice and video calls, collaboration, lightweight middleware, content syndication, dan generalized routing of XML data. Kelebihan yang dimiliki XMPP antara lain:- Open standard, sehingga tidak diperlukan royalti kalau ingin mengimplementasikan spesifikasi ini, dan juga tidak ada ketergantungan terhadap salah satu vendor.
- Decentralization, tidak diperlukan adanya master server pusat untuk menjalankannya. Setiap insititusi bisa menjalankan XMPP servernya dia sendiri.
- Security, sangat jelas bahwa dalam spesifikasi XMPP sudah disertakan spesifikasi untuk keamanannannya, dimana untuk proses Authentifikasi digunakan SASL (Simple Authentifikasi Secure Layer) dan enkripsinya digunakan TSL (Transport Layer Security). Tambahannya, server XMPP juga bisa memiliki digital certificate.
XMPP server dan client berkomunikasi melalui pengiriman Message Stanza, yaitu XML code yang fleksibel (sesuai spesifikasi) yang diencoded menggunakan Base64 sebelum dikirimkan. Message stanza ini sering disebut dengan packet, yang bisa berupa Message, Presence dan IQ. Berikut adalah stanza implementasi XMPP untuk mengalamatkan node pada Wireless Sensor Network. Kode XML berikut adalah kode data yang dikirim dengan XMPP dari node. Kode yang pertama menunjukkan node bertipe temperature (sensor suhu) dengan informasi “threshold > 40”. Informasi tersebut memberitahukan kepada sistem bahwa alarm akan dihidupkan karena temperaturnya terlalu tinggi.
<sensor type=‘temperature’> <filter id=‘threshold’ operator=‘>’ value=‘40’/> <event id=‘alarm’ description=‘temperature is too high.’/> </sensor>
5. Kesimpulan
Berdasarkan uraian yang telah dibahas, maka protokol XMPP dapat digunakan untuk komunikasi data end-to-end pada Wireless Sensor Network dan bisa dimanfaatkan untuk pengiriman realtime data. Kehandalan dari protokol XMPP akan lebih baik apabila protokol transpot yang digunakan adalah protokol UDP karena protokol UDP dapat mengirim data dengan konsumsi daya yang rendah.6. Referensi
[1] Bokyung Wang and Suresh Singh, "Computational energy cost of TCP", 09/16/2000-09/30/2003, 2004, "IEEE INFOCOM, Hong Kong".
[2] Dominique Guinard, Vlad Trifa, Friedemann Mattern, Erik Wilde, "From the Internet of Things to the Web of Things: Resource-oriented Architecture and Best Practices", Architecting the Internet of Things, 2011, Springer.
[3] F. Bertocchi, A. Giovanardi, G. Mazzini, M. Zorzi, "UDP and TCP Performance Investigation in Energy Efficient Ad Hoc Networks", "Personal, Indoor and Mobile Radio Communications", PIMRC 2004, 15th IEEE International Symposium on (Volume:3).
[4] Giannoulis, S., Antonopoulos, C., Topalis, E., Athanasopoulos, A., Prayati, A. and Koubias, S., "TCP vs. UDP Performance Evaluation for CBR Traffic On Wireless Multihop Networks," Simulation, Vol. 14, pp. 43, 2009.
[5] Kirsche M, Klauck R. "Unify to bridge gaps: bringing XMPP into the Internet of Things", In: Proceedings of 2012 IEEE International Conference on Pervasive Computing and Communications Workshops (PERCOM Workshops). Piscataway: IEEE, 2012. 455-458.
[6] Luis M. L. Oliveira, Joel J. P. C. Rodrigues, André G. F. Elias, Bruno B. Zarpelão, "Ubiquitous monitoring solution for Wireless Sensor Networks with push notifications and end-to-end connectivity", Mobile Information Systems - Internet of Things archive Volume 10 Issue 1, January 2014.
[7] Pin Nie, Jukka Nurminen, "Integrate WSN to the Web of Things by Using XMPP", Sensor Systems and Software. Third International ICST Conference, S-Cube 2012, Lisbon, Portugal.
[8] R. Roman, J. Lopez and C. Alcaraz, "Do Wireless Sensor Networks Need to be Completely Integrated into the Internet?", Future Internet of People, Things and Services (IoPTS) eco-Systems, Brussels. 2nd December 2009.
Untuk yang Versi PDF, download di SINI.
Untuk yang Versi PDF, download di SINI.
Written by ElangSakti
Ide Penelitian : Implementasi XMPP Berbasis UDP pada Realtime IP-Based Wireless Sensor Network
Bahasan: Tulisan ini adalah salah satu artikel ilmiah sebagai tugas akhir dari matakuliah Jaringan dan Arsitektur Telekomunikasi yang diikuti penul...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
Ide Penelitian : Implementasi XMPP Berbasis UDP pada Realtime IP-Based Wireless Sensor Network
Bahasan: Tulisan ini adalah salah satu artikel ilmiah sebagai tugas akhir dari matakuliah Jaringan dan Arsitektur Telekomunikasi yang diikuti penul...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Alhamdulilllah akhirnya selesai juga penulisan ebook tentang Arduino, buku elektronik yang berjudul "Panduan Praktis Belajar Arduino untuk Pemula" dalam bentuk PDF dan berbahasa Indonesia. Buku arduino ini adalah ebook yang pertama saya tulis, jadi tentu masih banyak kekurangan dan saya masih perlu belajar baik cara menulisnya maupun tentang teori Arduino-nya. Demi kemajuan bersama, ebook ini boleh digandakan sebagai panduan mengajar untuk siswa SMP, SMA, SMK, dan sederajat atau tingkat Kampus/Universitas dengan syarat tidak mengubah identitas penulis dan hal-hal yang melanggar hak cipta.
Buku ini berisi teori tentang arduino, tutorial merangkai dan skemanya, serta program yang bisa langsung dicoba oleh pembaca. Sebagai pengenalan, penulis menggunakan Arduino Uno sebagai bahan materi, akan tetapi pembaca bisa menggunakan Arduino jenis lainnya. Sebagai gambaran, daftar isi dari ebook ini yaitu:
Bagian 1. Pengenalan Arduino 1
1.1 Apa itu Mikrokontroller? 1
1.2 Instalasi Arduino IDE 3
1.2.1 Instalasi di Windows 4
1.2.2 Instalasi pada Mac 6
1.3 Arduino IDE 7
1.4 Rangkaian LED Pertama 8
1.6 Program Pertama Anda 10
1.6.1 Update Rangkaian Anda 10
1.6.2 Program untuk LED Berkedip 11
1.5 Menambah Keterangan pada Sketch 13
Bagian 2. Animasi LED 17
2.1 Perintah IF dan IF - ELSE 17
2.1.1 Perintah IF 17
2.1.2 Perintah IF - ELSE 20
2.2 Perulangan dengan WHILE 22
2.3 Kondisi True dan False 23
2.4 Kombinasi True dan False 24
2.5 Perulangan dengan FOR 26
2.6 Update Rangkaian LED 28
2.7 Pengenalan Array 32
Bagian 3. Input 37
3.1 Pushbutton 37
3.1.1 Satu Tombol dan Satu LED 38
3.1.2 Mengontrol Tingkat Kecerahan LED 42
3.2 Potensiomenter 47
3.2.1 Rangkaian 49
3.2.2 Program 50
3.2.3 Menghilangkan Delay 52
Bagian 4. Sound 57
4.1 Rangkaian 58
4.2 Membuat Nada 59
4.3 Musik 60
4.4 Membuat Fungsi 62
Bagian 5. Termometer Digital 69
5.1 Serial Monitor 69
5.1.1 Tracking timeDelay 72
5.2 Mengukur Suhu dengan LM 35 74
5.2.1 Rangkaian 75
5.2.2 Program 76
5.3 Memasang LCD 79
5.3.1 Rangkaian Dasar LCD 1602 81
5.3.2 Program Dasar LCD 82
5.4 Sensor Suhu dengan LCD 84
5.4.1 Rangkaian 84
5.4.2 Program 84
Bagian 6. Sensor Cahaya 87
6.1 Cara Kerja LDR 87
6.2 Rangkaian Dasar LDR 89
6.3 Program Sensor Cahaya 91
Bagian 7. Sensor Ultrasonik 93
Berdasarkan statistik di Academia.edu per 24 Juni 2017, ebook ini telah dibaca 38,966 kali. Namun karena academia mengharuskan registrasi untuk bisa mendownloadnya, maka kami ingin mempermudah dengan mengirimkan link download ebook ini langsung ke email Anda.
Monster Arduino versi selanjutnya:
Belajar pemrograman Arduino tingkat lanjut dengan ➜ Monster Arduino 2, atau belajar tentang SMS Controller (pengontrolan dengan sms) dan Internet of Things dengan ➜ Monster Arduino 3.
Mumpung ebook ini dibagikan GRATIS,
Jika tidak ada pemberitahuan bahwa email sudah dikirim, silakan download dari project.elangsakti.com/ebook-monster-arduino-1/. Terima kasih.
Ebook Gratis - Belajar Arduino Untuk Pemula V1

Alhamdulilllah akhirnya selesai juga penulisan ebook tentang Arduino, buku elektronik yang berjudul "Panduan Praktis Belajar Arduino untuk Pemula" dalam bentuk PDF dan berbahasa Indonesia. Buku arduino ini adalah ebook yang pertama saya tulis, jadi tentu masih banyak kekurangan dan saya masih perlu belajar baik cara menulisnya maupun tentang teori Arduino-nya. Demi kemajuan bersama, ebook ini boleh digandakan sebagai panduan mengajar untuk siswa SMP, SMA, SMK, dan sederajat atau tingkat Kampus/Universitas dengan syarat tidak mengubah identitas penulis dan hal-hal yang melanggar hak cipta.
Buku ini berisi teori tentang arduino, tutorial merangkai dan skemanya, serta program yang bisa langsung dicoba oleh pembaca. Sebagai pengenalan, penulis menggunakan Arduino Uno sebagai bahan materi, akan tetapi pembaca bisa menggunakan Arduino jenis lainnya. Sebagai gambaran, daftar isi dari ebook ini yaitu:
Bagian 1. Pengenalan Arduino 1
1.1 Apa itu Mikrokontroller? 1
1.2 Instalasi Arduino IDE 3
1.2.1 Instalasi di Windows 4
1.2.2 Instalasi pada Mac 6
1.3 Arduino IDE 7
1.4 Rangkaian LED Pertama 8
1.6 Program Pertama Anda 10
1.6.1 Update Rangkaian Anda 10
1.6.2 Program untuk LED Berkedip 11
1.5 Menambah Keterangan pada Sketch 13
Bagian 2. Animasi LED 17
2.1 Perintah IF dan IF - ELSE 17
2.1.1 Perintah IF 17
2.1.2 Perintah IF - ELSE 20
2.2 Perulangan dengan WHILE 22
2.3 Kondisi True dan False 23
2.4 Kombinasi True dan False 24
2.5 Perulangan dengan FOR 26
2.6 Update Rangkaian LED 28
2.7 Pengenalan Array 32
Bagian 3. Input 37
3.1 Pushbutton 37
3.1.1 Satu Tombol dan Satu LED 38
3.1.2 Mengontrol Tingkat Kecerahan LED 42
3.2 Potensiomenter 47
3.2.1 Rangkaian 49
3.2.2 Program 50
3.2.3 Menghilangkan Delay 52
Bagian 4. Sound 57
4.1 Rangkaian 58
4.2 Membuat Nada 59
4.3 Musik 60
4.4 Membuat Fungsi 62
Bagian 5. Termometer Digital 69
5.1 Serial Monitor 69
5.1.1 Tracking timeDelay 72
5.2 Mengukur Suhu dengan LM 35 74
5.2.1 Rangkaian 75
5.2.2 Program 76
5.3 Memasang LCD 79
5.3.1 Rangkaian Dasar LCD 1602 81
5.3.2 Program Dasar LCD 82
5.4 Sensor Suhu dengan LCD 84
5.4.1 Rangkaian 84
5.4.2 Program 84
Bagian 6. Sensor Cahaya 87
6.1 Cara Kerja LDR 87
6.2 Rangkaian Dasar LDR 89
6.3 Program Sensor Cahaya 91
Bagian 7. Sensor Ultrasonik 93
7.1 Sekilas tentang Sensor Ultrasonik 93
7.2 Cara Kerja Sensor Ultrasonik 94
7.3 Rangkaian Sensor Jarak dengan HC-SR04 96
7.4 Program Sensor Jarak 97
Penutup 99Berdasarkan statistik di Academia.edu per 24 Juni 2017, ebook ini telah dibaca 38,966 kali. Namun karena academia mengharuskan registrasi untuk bisa mendownloadnya, maka kami ingin mempermudah dengan mengirimkan link download ebook ini langsung ke email Anda.
Monster Arduino versi selanjutnya:
Belajar pemrograman Arduino tingkat lanjut dengan ➜ Monster Arduino 2, atau belajar tentang SMS Controller (pengontrolan dengan sms) dan Internet of Things dengan ➜ Monster Arduino 3.
Mumpung ebook ini dibagikan GRATIS,
Kami akan mengirim link download ebook ini melalui email Anda.
Jika tidak ada pemberitahuan bahwa email sudah dikirim, silakan download dari project.elangsakti.com/ebook-monster-arduino-1/. Terima kasih.
Written by ElangSakti
Ebook Gratis - Belajar Arduino Untuk Pemula V1
Bahasan: Alhamdulilllah akhirnya selesai juga penulisan ebook tentang Arduino, buku elektronik yang berjudul " Panduan Praktis Belajar Ardui...
Published at Kamis, 16 Juli 2015, Updated at Kamis, 16 Juli 2015
Reviewed by dr. on
Rating: 4.7
Ebook Gratis - Belajar Arduino Untuk Pemula V1
Bahasan: Alhamdulilllah akhirnya selesai juga penulisan ebook tentang Arduino, buku elektronik yang berjudul " Panduan Praktis Belajar Ardui...
Published at Kamis, 16 Juli 2015, Updated at Kamis, 16 Juli 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Salah satu implementasi dari timer digital adalah untuk membuat lampu otomatis. Sebelumnya kita telah membuat lampu otomatis dengan LDR [1], pembuatannya gampang, murah, dan peralatannya pun simpel. Akan tetapi, beberapa kendala yang sering dialami ketika menggunakan LDR sebagai lampu otomatis yaitu tergantung cahaya, jika siang hari cuaca mendung, maka jika tidak pas settingan LDR-nya, maka lampu akan menyala. Jika malam hari ada lampu sorot yang kuat mengenai LDR, maka lampu akan mati.
Baca juga : Timer Switch Relay Digital untuk Pompa Grease
Dari kedua opsi tersebut, saya lebih memilih opsi yang kedua karena opsi yang pertama saya belum pernah buat, HAHA. Bukan begitu, sebelumnya kita sudah pernah membuat project bagaimana mendrive relay 12 volt dengan 3 volt dengan transistor [5]. Jadi, kita akan menggunakan rangkaian tersebut untuk lampu otomatis ini.
Berdasarkan requirement di atas, maka kita butuh:
- Timer, menggunakan RTC DS1302
- LCD, menggunaan LCD 8x2 model CFAH0802A (builtin dalam trainer kit)
- Relay, menggunakan relay 12 volt + Transistor C9013 + resistor 10k ohm
- LED + resistor 1k ohm
- Power supply 5 volt dan 12 volt (built in dalam trainer kit)
- Beberapa kabel jumper
Membuat Timer Digital untuk Lampu Otomatis
Salah satu implementasi dari timer digital adalah untuk membuat lampu otomatis. Sebelumnya kita telah membuat lampu otomatis dengan LDR [1], pembuatannya gampang, murah, dan peralatannya pun simpel. Akan tetapi, beberapa kendala yang sering dialami ketika menggunakan LDR sebagai lampu otomatis yaitu tergantung cahaya, jika siang hari cuaca mendung, maka jika tidak pas settingan LDR-nya, maka lampu akan menyala. Jika malam hari ada lampu sorot yang kuat mengenai LDR, maka lampu akan mati.
Baca juga : Timer Switch Relay Digital untuk Pompa Grease
Selain menggunakan LDR, kita bisa menggunakan timer digital untuk menghidup-matikan lampu sesuai waktu yang sudah ditentukan. Misal, jam 5 pagi - jam 6 sore lampu mati, lalu jam 6 sore - 5 pagi lampu mati.
Ini adalah cara yang agak kompleks untuk membuat lampu rumah otomatis. Cara dan alat yang sederhana adalah dengan >> Fitting Lampu Otomatis. Alat ini sederhana, gampang, dan siap pakai.
Ini adalah cara yang agak kompleks untuk membuat lampu rumah otomatis. Cara dan alat yang sederhana adalah dengan >> Fitting Lampu Otomatis. Alat ini sederhana, gampang, dan siap pakai.
Alasan tidak Menggunakan Arduino Uno
Ada banyak cara dan banyak IC yang bisa kita program untuk membuat timer digital. Misalnya, sebelumnya kita sudah membahas tentang timer digital dengan arduino uno [2] dan timer digital denga mikrokontroller ATMega16A [3]. Dari kedua percobaan tersebut, tentu membuat program dengan arduino jauh lebih mudah. Akan tetapi karena sesuatu yang saya kerjakan dengan Arduino Uno tersebut, jadi terpaksa harus buat dengan ATMega16A yang tentu sedikit lebih susah. :D
ATMega16A dulu saya beli ketika pertama kali belajar tentang mikrokontroller. Waktu itu saya membeli trainer board, namanya DT-COMBO AVR-51 STARTER KIT. Fungsi trainer board tersebut tentu untuk pemula yang ingin belajar memprogram mikrokontroller. Dalam trainer board tersebut sudah disediakan socket untuk IC 20 pin dan 40 pin, 8 buah led, 8 buah switch, 1 buah LCD 8x2, dan project board kecil. Yah, cukuplah untuk pemula. :)
Akhirnya, daripada menggunakan Arduino, mending pake trainer board itu, toh sudah setahunan tidak terpakai. :)
Requirement dan Peralatan Sistem Timer Digital untuk Lampu Otomatis
Sistem ini bisa menentukan waktu secara tepat. Oleh sebab itu, mau tidak mau kita harus menggunakan modul timer yang terus-menerus nyala sepanjang waktu. Kita bisa saja membuat perulangan untuk menentukan clock waktu, tapi jika sistem tersebut mati, maka waktunya akan kacau balau. Untuk menentukan waktu, kita akan menggunakan modul RTC DS1302. Kita akan memanfaatkan project yang pernah kita lakukan sebelumnya [3].
Waktu ditampilkan ke layar LCD. Pada trainer board sudah ada LCD 8x2 dan sebelumnya kita juga sudah bermain-main dengan LCD ini [4]. Karena LCD ini terdiri dari 2 baris dan 8 kolom, maka baris pertama kita tampilkan informasi tanggal dan baris kedua untuk menampilkan informasi jam. Karena hanya ada 8 karakter, maka format tanggal yang akan kita gunakan adalah DD/MM/YY dan format waktu adalah HH:MM:SS. Detik pada LCD juga akan berubah setiap detik tentunya. :)
Bisa mengontrol lampu. Untuk pengontrol lampu, yang kita butuhkan adalah Relay. Kebetulan sekali relay yang saya punya saat ini hanya relay 12 volt, sehingga agar bisa mendrive relay tersebut kita butuh tambahan komponen. Tambahan komponen yang mungkin ada 2 cara :
- Membuat boost converter dari 5 volt ke 7.5 - 12 volt (relay ini ternyata bisa aktif sejak 7.2 volt)
- Tambahan voltase 12 volt dan membuat sakelar digital dengan transistor NPN untuk mengaktifkan relay
Dari kedua opsi tersebut, saya lebih memilih opsi yang kedua karena opsi yang pertama saya belum pernah buat, HAHA. Bukan begitu, sebelumnya kita sudah pernah membuat project bagaimana mendrive relay 12 volt dengan 3 volt dengan transistor [5]. Jadi, kita akan menggunakan rangkaian tersebut untuk lampu otomatis ini.
Indikator bahwa sistem berjalan dengan baik. Sebenarnya indikator ini bisa dilihat dari tampilan LCD. Tapi begini, saya belum benar-benar memahami cara kerja LCD ini sebab referensi tentang LCD ini masih minim. Ada masalah ketika menggunakan LCD dengan clock yang tinggi, misal 11.0592, maka tampilan LCD kacau. Tampilan LCD normal ketika clock yang saya pakai 1MHz.
Nah, karena waktunya mepet dan sistem ini harus segera diuiji, maka kita akan menggunakan clock 1MHz untuk lampu otomatis nanti. Sehingga untuk memastikan sistem berjalan dengan normal, maka kita akan membuat indikator dengan LED. LED akan menyala bergantian sesuai dengan detak detik. Dengan LED, kita bisa melihat dari jauh dan mencocokkannya dengan detak jam, jika detaknya seirama, berarti sistem normal dan berjalan dengan baik.
Nah, karena waktunya mepet dan sistem ini harus segera diuiji, maka kita akan menggunakan clock 1MHz untuk lampu otomatis nanti. Sehingga untuk memastikan sistem berjalan dengan normal, maka kita akan membuat indikator dengan LED. LED akan menyala bergantian sesuai dengan detak detik. Dengan LED, kita bisa melihat dari jauh dan mencocokkannya dengan detak jam, jika detaknya seirama, berarti sistem normal dan berjalan dengan baik.
Berdasarkan requirement di atas, maka kita butuh:
- Timer, menggunakan RTC DS1302
- LCD, menggunaan LCD 8x2 model CFAH0802A (builtin dalam trainer kit)
- Relay, menggunakan relay 12 volt + Transistor C9013 + resistor 10k ohm
- LED + resistor 1k ohm
- Power supply 5 volt dan 12 volt (built in dalam trainer kit)
- Beberapa kabel jumper
Rangkaian Lampu Otomatis
![]() |
| Rangkaian Timer digital dengan ATMega16A untuk lampu otomatis (klik - perbesar) |
Pada dasarnyanya, rangkain ini tidak hanya bisa untuk membuat lampu otomatis. Rangkain ini juga bisa digunakan untuk penyiram tanaman otomatis, pemberikan makan ayam otomatsi, pemberian makan ikan otomatis, dan beberapa rutinitas harian yang sudah tertentu jamnya. Rangkaian ini juga bisa dikembangkan untuk mendrive relay sesuai dengan tanggal dan waktu.
Program Timer Lampu Otomatis
Dalam membuat timer berarti kita akan bemain dengan jam. Berbeda dengan bahasa pemrograman yang biasa dijalankan untuk komputer seperti PC, laptop, dan smartphone. Tanggal dan waktu pada pemrograman aplikasi biasanya cukup dengan:
if( NOW > time_awal && NOW < time_akhir )
Tapi untuk pemrograman yang kita lakukan ini tidak mengenal perintah tersebut. Jadi mau tidak mau harus mencari cara agar bisa menentukan apakah waktu sekarang harus menghidupkan relay atau tidak. Nah, cara yang saya gunakan adalah menggabungkan jam dan menjadi satu nilai. Jika sekarang jam 10.30 maka akan dikonversi menjadi 1030, jika sekarang jam 9.45 maka akan dikonversi menjadi 945. Oleh sebab itu, kita akan menggunakan format jam 00-23, kalau menggunakan AM/PM, kita akan kesulitan.
Untuk mendapatkan nilai tersebut, maka jam akan dikalikan 100, kemudian ditambah dengan menit. Setidaknya konversi untuk setiap jam akan seperti ini:
0000 => jam 12:00 malam 0145 => jam 1:45 pagi 0412 => jam 4:12 subuh 0523 => jam 5:23 pagi 1245 => jam 12:45 siang 1532 => jam 3:32 sore 1745 => jam 5:45 sore dst..
Waktu lampu yang saya pilih untuk dihidupkan adalah antara jam 5.30 sore hingga 5.30 pagi, atau kalau dikonversi akan menjadi 1730 - 530. Sehingga logika yang mungkin kita pakai adalah:
if(NOW > 1730 && NOW < 530) lampu ON; atau if(NOW > 530 && NOW < 1730) lampu OFF;
Itu sekilas tentang dasar teori bagaimana menentukan relay mati atau hidup. Berikut ini adalah full source code untuk sistem ini.
/*
* Timer dengan ATMega16A-PU untuk Lampu Otomatis
* Clock Internal 1MHz
* Timer dengan RTC DS1302
* LED sebagai indikator detik
* LCD 8x2 model CFAH0802A untuk menampilkan tanggal dan waktu
* Transistor NPN 1903 untuk mendrive Relay 12 volt
* Relay 12 volt untuk mengontrol lampu
* Board yang dipakai adalah DT-COMBO AVR-51 Starter Kit
*
* coder : haripinter
*/
#include <mega16a.h>
// RTC pada PORT A pin 3, 5, 7
#asm
.equ __ds1302_port=0x1b
.equ __ds1302_io=5
.equ __ds1302_sclk=3
.equ __ds1302_rst=7
#endasm
#include <ds1302.h>
#include <stdio.h>
#include <delay.h>
// RELAY pada PORTB pin 0
#define DDR_RELAY DDRB.0
#define RELAY PORTB.0
// LCD CFAH0802A pada PORTD
#define LCD_PORT PORTD
#define LCD_PIN PIND
#define LCD_DDR DDRD
// Kontrol LCD pada PORTC pin 1, 6, dan 7
#define CMD_DDR DDRC
#define CMD_PORT PORTC
#define CMD_RS PORTC.1
#define CMD_RW PORTC.7
#define CMD_EN PORTC.6
// LED Indikator pada PORTC pin 0
#define LED PORTC.0
// fungsi untuk LCD
void LCD_init(void);
void LCD_cmd(unsigned char cmd);
void LCD_char(unsigned char data);
void LCD_string(unsigned char data[]);
void LCD_ready(void);
void LCD_linecol(unsigned char line,unsigned char col);
unsigned char LCD_busy(void);
unsigned char hour, min, sec, day, month, year;
int last_detik = 0;
int jam_menit = 0;
char *elang = "elang";
char *sakti = "sakti";
void main(void){
// LCD dan RELAY sebagai output
CMD_DDR = 0xFF;
DDR_RELAY = 1;
// inisialisasi rtc, aktifkan dioda charger
rtc_init(1,1,3);
// inisialisasi LCD
LCD_init();
while(1){
// Ambil jam-menit-detik dari RTC
rtc_get_time(&hour, &min, &sec);
// jika detik berubah, set tampilan LCD dan atur kedipan LED
if(last_detik != sec){
// konversi jam dan menit menjadi nilai integer
jam_menit = hour*100 + min;
// ambil tanggal dan tampilkan ke LCD
rtc_get_date(&day, &month, &year);
LCD_linecol(1,2);
if(LED == 1){
sprintf(elang," %04d",jam_menit);
}else{
sprintf(elang,"%02d/%02d/%02d",day,month,year);
}
LCD_string(elang);
LCD_linecol(2,0);
sprintf(sakti,"%02d:%02d:%02d",hour,min,sec);
LCD_string(sakti);
if(LED == 0){
LED = 1;
}else{
LED = 0;
}
last_detik = sec;
}
// lampu off antara 05.30 - 17.30
// > 530 && < 1730 ---> relay ON
// settingan relay NC (normally close)
// agar kalau ada problem di uC, lampu terus nyala
if(jam_menit > 530 && jam_menit < 1730){
RELAY = 1;
}else{
RELAY = 0;
}
}
}
void LCD_init(void){
delay_ms(50);
LCD_cmd(0b00111000); //0b0011NF00 f-set
delay_ms(1);
LCD_cmd(0b00111000); //0b0011NF00 f-set
delay_ms(1);
LCD_cmd(0b00001111); //0b00001DCB on
LCD_ready();
delay_ms(1);
LCD_cmd(0b00000001); //0b00000001 clear
LCD_ready();
delay_ms(1);
LCD_cmd(0b00000110); //0b000001DS entrymode
LCD_ready();
delay_ms(1);
}
void LCD_cmd(unsigned char cmd){
LCD_DDR = 0xFF;
CMD_RS = 0;
CMD_RW = 0;
CMD_EN = 1;
LCD_PORT = cmd;
CMD_EN = 0;
}
void LCD_linecol(unsigned char line,unsigned char col){
unsigned char tmp;
switch(line){
case 1:
tmp = 0x00 + col;
break;
case 2:
tmp = 0xC0 + col;
break;
}
LCD_cmd(tmp);
}
void LCD_string(unsigned char data[]){
int loop = 0;
while(data[loop]!='\0'){
LCD_char(data[loop]);
LCD_ready();
loop++;
}
}
void LCD_char(unsigned char data){
LCD_DDR = 0xFF;
CMD_RS = 1;
CMD_RW = 0;
CMD_EN = 1;
LCD_PORT = data;
CMD_EN = 0;
}
void LCD_ready(void){
while ((LCD_busy() & 0x80) == 0x80);
}
unsigned char LCD_busy(void){
unsigned char tmp;
CMD_DDR = 0xFF;
CMD_RS = 0;
CMD_RW = 1;
CMD_EN = 1;
tmp = LCD_PIN;
CMD_EN = 0;
return tmp;
}
Sedikit penjelasan tambahan untuk script di atas, untuk menentukan PORT yang digunakan untuk RTC yaitu konfigurasi pada baris berikut :
// RTC pada PORT A pin 3, 5, 7 #asm .equ __ds1302_port=0x1b .equ __ds1302_io=5 .equ __ds1302_sclk=3 .equ __ds1302_rst=7 #endasm
Pemilihan port 0x1B berarti adalah PORTA. Jika Anda ingin mengganti PORT-nya, maka Anda harus menggantinya. Penentuan nilai tersebut tergantung pada referensi kaki ATMega16A, yaitu pada file mega16a.h pada folder inc di folder instalasi CVAVR. Jika ingin mengganti dengan port yang lain, Anda berikut informasi nilai untuk PORTA-D:
- PORTA => 0x1B - PORTB => 0x18 - PORTC => 0x15 - PORTD => 0x12
Sedangkan untuk io, sclk, dan rst disesuaikan dengan posisi kaki untuk port tersebut. Misal io = 5 berarti pada kaki PORTB.5 dan seterusnya.
Untuk penjelasan selanjutnya bisa Anda pelajari di source codenya, sebab di situ sudah saya jelaskan masing-masing barisnya. Jika ada yang kurang dipahami, jangan sungkan untuk bertanya. Semoga aplikasi timer digital untuk lampu otomatis ini berguna dan bisa berjalan dengan baik sampai saya balik dari mudik. ;D
Berikut ini video sekilas dari project ini, board ini memang gede dan lebar sebab memang tidak menggunakan sistem minimum, tapi menggunakan training board / trainer kit untuk belajar. Semoga bermanfaat, dan selamat menunaikan ibadah puasa dan mohon maaf lahir batin. :))
Referensi
[1] http://www.elangsakti.com/2015/06/rangkaian-sensor-cahaya-ldr-lampu-otomatis.html
[2] http://www.elangsakti.com/2015/06/rangkaian-source-code-rtc-ds1302-arduino-uno.html
[3] http://www.elangsakti.com/2015/07/membuat-timer-digital-dengan-rtc.html
[4] http://www.elangsakti.com/2014/03/c-pemrograman-lcd-8x2-CodeVision-atmega16.html
[5] http://www.elangsakti.com/2014/04/drive-mengaktifkan-relay-12v-dengan-3v-volt.html
[1] http://www.elangsakti.com/2015/06/rangkaian-sensor-cahaya-ldr-lampu-otomatis.html
[2] http://www.elangsakti.com/2015/06/rangkaian-source-code-rtc-ds1302-arduino-uno.html
[3] http://www.elangsakti.com/2015/07/membuat-timer-digital-dengan-rtc.html
[4] http://www.elangsakti.com/2014/03/c-pemrograman-lcd-8x2-CodeVision-atmega16.html
[5] http://www.elangsakti.com/2014/04/drive-mengaktifkan-relay-12v-dengan-3v-volt.html
Written by ElangSakti
Membuat Timer Digital untuk Lampu Otomatis
Bahasan: Salah satu implementasi dari timer digital adalah untuk membuat lampu otomatis . Sebelumnya kita telah membuat lampu otomatis dengan LD...
Published at Selasa, 07 Juli 2015, Updated at Selasa, 07 Juli 2015
Reviewed by dr. on
Rating: 4.7
Membuat Timer Digital untuk Lampu Otomatis
Bahasan: Salah satu implementasi dari timer digital adalah untuk membuat lampu otomatis . Sebelumnya kita telah membuat lampu otomatis dengan LD...
Published at Selasa, 07 Juli 2015, Updated at Selasa, 07 Juli 2015
Reviewed by dr. on
Rating: 4.7
Langganan:
Postingan
(
Atom
)























18 komentar :
Posting Komentar