# Hack Your Skills! to be Professional Mechatronics
Cara memunculkan balon notifikasi pada VB yaitu dengan script di bawah ini:
Aplikasi Pengingat Tunggakan Pelanggan dengan VB.net dan Excel
Aplikasi ini adalah implementasi dari Excel yang difungsikan sebagai database dengan bahasa pemrograman VB Net. Keterangan tambahan tentang mengolah Excel sebagai database bisa Anda baca pada artikel sebelumnya di >> Membuat Aplikasi Database dengan Excel & VB.Net. Aplikasi diatas saya namakan AppReminder. Aplikasi ini dipesan oleh salah satu kawan di yang bekerja pada instansi tertentu sebagai inovasi dan mempermudah pekerjaannya. Dengan demikian, akan ada beberapa istilah yang mungkin asing bagi Anda, seperti istilah Bongkar Rampung dan Janji Bayar.
AppReminder adalah aplikasi untuk menampilkean pengingat bagi petugas terkait pelanggan yang melakukan kesepakatan “Bongkar Rampung” dan “Janji Bayar” dengan tanggal yang sudah disepakati. Aplikasi ini mengacu pada data excel yang sudah ada, sekaligus bisa mengubah keterangan dan tanggal reminder yang diinginkan. Bentuk reminder berupa balon popup yang muncul di layar komputer sesuai dengan tanggal yang telah ditentukan.
Requirement
AppReminder dibangun dengan aplikasi berbasis windows, minimal berjalan pada Windows XP SP3 dan produk Windows setelahnya (Vista, Windows 7, dan Windows 8) baik yang 32 bit maupun yang 64 bit. Aplikasi ini dibangun dengan VB.NET dan membutuhkan driver OLEDB untuk menjadikan Excel sebagai databasenya. Dengan demikian aplikasi yang harus terinstall dalam komputer adalah:
- Dotnet Framework 4.0 atau yang lebih baru. Pada umumnya beberapa aplikasi Windows secara otomatis menyertakan framework ini ketika instalasi sehingga hampir semua komputer Windows terinstal DotNet Framework. Sehingga yang paling dibutuhkan adalah OLEDB.
- OLEDB adalah driver koneksi yang terdapat pada MS ACCESS. Jika tidak memungkinkan untuk menginstall MS ACCESS, maka OLEDB bisa dingantikan dengan menginstall aplikasi Access Database Engine 2010.
Beberapak Karakteristik dari Aplikasi AppReminder
- Penekanan tombol “X” pada aplikasi akan membuat aplikasi menghilang (sembunyi), tapi tidak membuat aplikasi berhenti. Jika ingin menghentikan aplikasi, maka pilih menu File > Exit. Hal ini memang disengaja untuk menghindari berhentinya aplikasi sehingga tidak ada notifikasi yang muncul.
- Tanggal reminder bisa diubah, format penulisan tanggal saat ini harus dd/mm/yyyy, Contoh : jika diisi dengan 03/12/2015, maka balon notifikasi akan muncul setiap jam pada tanggal tersebut apabila ada minimal 1 pelanggan yang BONGKAR RAMPUNG atau JANJI BAYAR.
- Pencarian secara otomatis didasarkan pada ID PELANGGAN ATAU NAMA PELANGGAN. Oleh sebab itu, petugas bisa mencari pelanggan berdasarkan ID-nya atau berdasarkan namanya.
- File excel yang muncul pada pojok kiri bawah otomatis digunakan ketika komputer baru dihidupkan. Ketika komputer atau aplikasi dimatikan, maka aplikasi akan mencatat lokasi file Excel, dan file Excel yang telah dicatat tersebut secara otomatis dipakai ketika komputer dihidupkan. Apabila file Excel tidak ditemukan, aplikasi akan meminta petugas untuk memilih file Excel yang baru.
- Akan muncul tampilan balon notifikasi di pojok kanan bawah layar komputer. Tampilan ini muncul pertama kali komputer dihidupkan. Ketika ada pelanggan yang BONGKAR RAMPUNG atau JANJI BAYAR, maka balon notifikasi ini akan muncul setiap jam hingga keterangan pada file Excel diubah.
Cara memunculkan balon notifikasi pada VB yaitu dengan script di bawah ini:
Private Sub Show_Balloon()
NotifyIcon1.BalloonTipTitle = "Hari Ini :"
NotifyIcon1.BalloonTipText = "> Bongkar Rampung (" & HARI_INI_BONGKAR & ")" & vbCrLf & "> Janji Bayar (" & HARI_INI_JANJI & ")."
NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
NotifyIcon1.Visible = True
NotifyIcon1.ShowBalloonTip(3000)
End Sub
Written by ElangSakti
Aplikasi Pengingat Tunggakan Pelanggan dengan VB.net dan Excel
Bahasan: Aplikasi ini adalah implementasi dari Excel yang difungsikan sebagai database dengan bahasa pemrograman VB Net. Keterangan tambahan ten...
Published at Selasa, 22 Desember 2015, Updated at Selasa, 22 Desember 2015
Reviewed by dr. on
Rating: 4.7
Aplikasi Pengingat Tunggakan Pelanggan dengan VB.net dan Excel
Bahasan: Aplikasi ini adalah implementasi dari Excel yang difungsikan sebagai database dengan bahasa pemrograman VB Net. Keterangan tambahan ten...
Published at Selasa, 22 Desember 2015, Updated at Selasa, 22 Desember 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Sedangkan jika ingin mengubah data di row Excel, gunakan script di bawah ini.
Perhatikan, command yang digunakan ketika ingin menampilkan data berbeda dengan ketika ingin mengubah data. Jika ada yang belum jelas, Anda boleh bertanya di kolom komentar. :)
Membuat Aplikasi Database dengan Excel & VB.Net
Aplikasi database dengan Excel? Yap, judul di atas tidak keliru. Pada dasarnya Excel adalah database, hanya saja berbeda dengan database relational dan pemrosesannya lebih manual jika tanpa program khusus. Kita harus membukanya dengan Aplikasi Microsoft Excel untuk mengolah file Excel. So, kenapa pada blog ini ada tutorial tentang Excel? :D Mari saya ceritakan sedikit.
Dua pekan yang lalu ada orang dari instansi bertaraf nasional yang minta dibuatkan aplikasi reminder yang datanya dari file Excel. Data yang ingin dia olah adalah data pelanggan yang terkait dengan keuangan. Dengan demikian, dia sudah punya format file Excel yang akan diolah dan datanya sudah lengkap. Jadi, yang dia minta kerjakan adalah mengambil tanggal dari data Excel tersebut kemudian diolah untuk dijadikan aplikasi pengingat tagihan keuangan pelanggan.
Karena tenggat waktu yang ditentukan sangat mepet, yaitu tidak sampai 2 pekan, maka coba googling tentang bahasa pemrograman tercepat untuk develop aplikasi pengolah excel. Dan hasilnya adalah : Bahasa pemrograman VB, tepatnya VB.Net, wew! Sebelumnya saya belum pernah membuat aplikasi yang serius dengan VB, ada buku VB.Net di rumah, tapi tidak pernah digunakan :) . Untuk pengolah Excel dulu sering menggunakan PHP, itu pun hanya mengekstrak isinya saja dan tanpa manipulasi. Sedangkan kali ini, file Excel harus dimanipulasi menambah beberapa keterangan untuk setiap pelanggan.
Awalnya, file Excel akan dimanipulasi dengan manual. Kalau manipulasi manuai berhasil, berarti nanti harus mencari cara agar bisa melakukan pencarian data dengan rumus-rumus yang ada di Excel. Berikut ini adalah sampel source code untuk membaca dan memanipulasi file Excel dengan VB.Net.
''// import modul excel
Imports Excel = Microsoft.Office.Interop.Excel
'' /*bagian untuk mengakses file excel
' ketika Button1 diklik, maka buka file Excel ( D:\Book1.xlsx )
' Buka excel, buka workbook, dan buka sheet yang akan diolah
' Tampilkan data pada cell 2,2 dengan popup
' lalu manipulasi cell 2,2 dengan teks "elangsakti.com"
' tutup file Excel*/
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xlApp As Excel.Application
Dim xlWorkbook As Excel.Workbook
Dim xlWorksheet As Excel.Worksheet
xlApp = New Excel.Application
xlWorkbook = xlApp.Workbooks.Open("E:Book1.xlsx")
xlWorksheet = xlWorkbook.Worksheets("sheet1")
MsgBox(xlWorksheet.Cells(2, 2).value)
xlWorksheet.Cells(2, 2) = "elangsakti.com"
xlApp.DisplayAlerts = False
If Not xlWorkbook.Saved Then
xlWorkbook.Save()
End If
xlApp.DisplayAlerts = True
xlWorkbook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkbook)
releaseObject(xlWorksheet)
End Sub
Yak, script di atas untuk mengolah dan manipulasi file Excel dengan "Manual". Pada contoh program di atas, file Excel belum diakses sebagaimana mengakses database. Apa bedanya mengolah Excel sebagai database dan tidak sebagai database? Penjelasan sederhananya :
- Jika kita mengola file dengan koneksi database, maka perintah untuk mengambil data pasti dilakukan dengan Query, contohnya "SELECT * FROM blabla..... WHERE ... ORDER BY ..". Tapi jika tidak sebagai database, maka kita secara manual menentukan cel-cel yang akan diolah.
- Jika ingin mengubah data dengan koneksi database, maka perintahnya adalah dengan "UPDATE blabla ...". Jadi, jika menggunakan koneksi database, maka perintah CRUD-nya juga menggunakan SQL.
Lalu, Bagaimana Cara Membuat Excel Sebagai Database?
Berikut ini adalah script untuk koneksi database Excel pada VB.Net. Haruskah VB.Net, sepertinya tidak :D . Untuk menampilkan data di Excel ke dalam DataGridView, silakan gunakan script di bawah ini.
Dim Excel_fileName As String = "E:Book1.xlsx"
Dim Excel_sheetName As String = "Sheet1"
Dim Excel_Connection As System.Data.OleDb.OleDbConnection
Dim Excel_Dataset As System.Data.DataSet
Dim Excel_Command As System.Data.OleDb.OleDbDataAdapter
Excel_Connection = New System.Data.OleDb.OleDbConnection _
("provider=Microsoft.ACE.OLEDB.12.0; Data Source='" _
& Excel_fileName & "'; Extended Properties=Excel 8.0;")
''// select data
Excel_Connection.Open()
Excel_Command = New System.Data.OleDb.OleDbDataAdapter("Select * from [" & Excel_sheetName & "]", Excel_Connection)
Excel_Dataset = New System.Data.DataSet
Excel_Command.Fill(Excel_Dataset)
''// tampilkan pada datagridview
DataGridView1.DataSource = Excel_Dataset.Tables(0)
Excel_Connection.Close()
Sedangkan jika ingin mengubah data di row Excel, gunakan script di bawah ini.
Dim Excel_fileName As String = "E:Book1.xlsx"
Dim Excel_sheetName As String = "Sheet1"
Dim Excel_Connection As System.Data.OleDb.OleDbConnection
Dim Excel_Command_Update As New System.Data.OleDb.OleDbCommand
Dim KOLOM_KETERANGAN As String = "Keterangan"
Dim KOLOM_ID As String = "ID"
Dim KOLOM_ID As Integer = 3
Excel_Connection = New System.Data.OleDb.OleDbConnection _
("provider=Microsoft.ACE.OLEDB.12.0; Data Source='" + Excel_fileName + "'; Extended Properties=Excel 8.0;")
Excel_Connection.Open()
Excel_Command_Update.Connection = Excel_Connection
''// update keterangan
Dim sql As String = "Update [" & Excel_sheetName & "] set [" & KOLOM_KETERANGAN & "]='" & keterangan & "' where [IDPEL]='" & idpel & "'"
Excel_Command_Update.CommandText = sql
Excel_Command_Update.ExecuteNonQuery()
Excel_Connection.Close()
Perhatikan, command yang digunakan ketika ingin menampilkan data berbeda dengan ketika ingin mengubah data. Jika ada yang belum jelas, Anda boleh bertanya di kolom komentar. :)
Written by ElangSakti
Membuat Aplikasi Database dengan Excel & VB.Net
Bahasan: Aplikasi database dengan Excel ? Yap, judul di atas tidak keliru. Pada dasarnya Excel adalah database, hanya saja berbeda dengan databa...
Published at Minggu, 20 Desember 2015, Updated at Minggu, 20 Desember 2015
Reviewed by dr. on
Rating: 4.7
Membuat Aplikasi Database dengan Excel & VB.Net
Bahasan: Aplikasi database dengan Excel ? Yap, judul di atas tidak keliru. Pada dasarnya Excel adalah database, hanya saja berbeda dengan databa...
Published at Minggu, 20 Desember 2015, Updated at Minggu, 20 Desember 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Semoga panduan singkat ini bisa dipahami. Untuk selengkapnya, silakan cek gambar-gambar di bawah ini.
Cara Install Driver Mediatek untuk SP Flash Tool Android
ElangSakti
Driver Windows
,
Elektronika
,
Flashing Smart Phone
,
Informatika
,
Lenovo A3000
8 komentar
Tulisan ini untuk menanggapi komentar (yang sekaligus permintaan) dari bro Adit, tentang cara menginstall driver Mediatek agar bisa terhubung ke SP Flash Tool. Terimakasih untuk bro Adit sudah mengingatkan :). Pada dasarnya, tulisan ini adalah tulisan pendukung untuk melengkapi tulisan sebelumnya tentang cara flashing Lenovo A3000 yang mati total. Tutorial ini lebih khusus membahas tentang instalasi driver mediatek versi 1.2 pada Windows 7, tidak menutup kemunginan bisa jadi referensi untuk instalasi driver versi lainnya atau pada sistem operasi Windows yang berbeda.
Melihat Driver pada Device Manager
Pada sistem operasi Windows, kita bisa melihat seluruh device yang terhubung ke komputer pada aplikasi Device Manager. Untuk membuka device manager, ada banyak cara. Berikut adalah 2 cara yang sering saya lakukan:
- Tekan shorcut dengan tombol Windows+R, kemudian ketik "devmgmt.msc", lalu OK. Jika bingung dengan cara ini, silakan coba cara berikutnya. (Gambar 1)
- Klik menu start, kemudian ketik "device", selanjutnya cari aplikasi dengan nama "Device Manager". (Gambar 2)
Setiap kita menguhubungkan device (misal, tablet) maka Device Manager akan menampilkan device yang terhubung sesuai dengan driver yang cocok. Jika tidak ada driver yang cocok atau ada device yang tidak memiliki driver yang sesuai, maka device tersebut akan ditandai dengan warna kuning dan sering kali disertai dengan icon tanda tanya / tanda seru. Untuk lebih memahami seperti apa device manager, silakan buka device manager, kemudian coba hubungkan flash disk atau perangkan lainnya, maka tampilan device manager akan melakukan refresh. Begitu pula ketika ada device yang dilepas, maka device manager juga akan melakukan refresh.
Driver Mediatek & Lenovo A3000
Ketika saya menghubungkan Tab A3000 ke komputer, komputer mengenalinya sebagai "Android USB Ethernet" dengan nama "Alcatel Single RNDIS ..." (Gambar 3). Darimana saya tahu? Dari Device Manager. Bagaimana caranya? Sebelum saya menghubungkan tablet ke komputer, saya lebih dahulu membuka Device Manager. Setelah Device Manager terbuka, saya perhatikan sambil menghubungkan kabel USB tablet ke komputer. Saya perhatikan driver apa yang bertambah.
Selanjutnya, saya coba cabut USB tablet dari komputer sambil memperhatikan perubahan pada Device Manager dan memastikan driver apa yang hilang. Dengan begitu, saya bisa mengetahui apakah tablet saya sudah dikenali oleh komputer atau tidak. Jadi, ketika Anda menghubungkan tablet ke komputer, bisa jadi Device Manager Anda tidak mendeteksinya sebagai "Alcatel Single RNDIS.." atau malah cocok dengan driver lainnya. Jika driver di komputer belum ada yang cocok dengan device tablet, maka akan muncul warna kuning dan kadang muncul icon tanda tanya / tanda seru (Gambar 3).
Install & Update Driver Mediatek
Untuk menginstall driver, prosesnya cukup gampang. Tapi jika Anda belum pernah melakukan instalasi driver melalui Device Manager, mungkin butuh sedikit perhatian untuk memahami langkah-langkahnya. Yang pasti, kita hanya butuh meng-update driver dari tablet yang sudah kita hubungkan ke komputer. Caranya?
- Buka Device Manager & hubungkan tablet ke komputer, dan ekstrak Driver_v1.2.zip
- Klik-kanan pada device / driver tablet, pilih Update Driver Software (Gambar 4)
- Pilih "Browse My Computer for Driver Software" (Gambar 5)
- Pilih "Let me pick from a list of driver...." (Gambar 6), jadi kita tidak perlu browse ke folder dulu, tapi cek di list driver yang sudah ada, siapa tahu sebelumnya sudah pernah nginstall. :)
- Jika tidak ada yang cocok (driver MediaTek atau MTK), maka pilih "Have Disk" (Gambar 7).
- Cari folder hasil ekstraksi dari Driver_v1.2.zip, kemudian pilih android_winusb.inf (Gambar 8). Saya menggunakan Windows 7 32 bit, driver ini berjalan dengan mulus. Jika file android_winusb.inf error, coba masuk ke dalam folder lainnya, pilih file .inf yang lain.
- Setelah file android_winusb.inf dipilih, maka akan muncul di list driver. Klik tombol next untuk melanjutkan. (Gambar 9)
- Kalau muncul peringatan dari Windows Securiry, pilih "Install this driver software anyway", lalu tunggu hingga proses instalasi selesai. (Gambar 10)
- Cek di Device Manager, jika tampilan belum berubah, refresh device manager. (Gambar 11,12)
Semoga panduan singkat ini bisa dipahami. Untuk selengkapnya, silakan cek gambar-gambar di bawah ini.
![]() |
| Gambar 1. Membuka device manager dengan Run |
![]() |
| Gambar 2. Membuka device manager pada menu start |
![]() |
| Gambar 3. Driver tidak terdeteksi |
![]() |
| Gambar 4. Driver terdeteksi sebagai Alcatel Single RNDIS |
![]() |
| Gambar 5. Update driver |
![]() |
| Gambar 6. Pilih Browse my computer... |
![]() |
| Gambar 7. Pilih Let me pick from... |
![]() |
| Gambar 8. Pilih Have Disk untuk menginstall driver manual |
![]() |
| Gambar 9. Pilih driver yang bernama android_winusb.inf |
![]() |
| Gambar 10. Klik tombol Next untuk melanjutkan |
![]() |
| Gambar 11. PIlih Install this driver sofware anyway untuk menginstall secara paksa |
![]() |
| Gambar 12. Instalasi selesai |
![]() |
| Gambar 13. Driver Mediatek sudah muncul di Device Manager |
Written by ElangSakti
Cara Install Driver Mediatek untuk SP Flash Tool Android
Bahasan: Tulisan ini untuk menanggapi komentar (yang sekaligus permintaan) dari bro Adit, tentang cara menginstall driver Mediatek agar bisa terhu...
Published at Rabu, 11 November 2015, Updated at Rabu, 11 November 2015
Reviewed by dr. on
Rating: 4.7
Cara Install Driver Mediatek untuk SP Flash Tool Android
Bahasan: Tulisan ini untuk menanggapi komentar (yang sekaligus permintaan) dari bro Adit, tentang cara menginstall driver Mediatek agar bisa terhu...
Published at Rabu, 11 November 2015, Updated at Rabu, 11 November 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Rangkaian Power Supply 12V & 5V Simetris
Keluaran rangkaian power supply 12V dan 5V lebih sering dibutuhkan daripada keluaran lainnya. Power supply 12V umum digunakan untuk peralatan elektronik rumah tangga, sedangkan power supply 5V akan sangat berguna misal untuk nge-cas HP atau penggiat mikrokontoller seperti penulis. Namun, ada kalanya kita membutuhkan power supply simetris untuk melakukan percobaan dan permainan dengan perangkat elektronik lainnya. Oleh sebab itu, berikut ini kami sharing tentang bagimana membuat rangkaian power supply simetris +12V/-12V dan +5V/-5V dalam sebuah adaptor tunggal.
Secara teknis kita akan butuh 4 buah IC stabil, diantaranya IC 7812, 7912, 7805, 7905 yang masing-masing berfungsi untuk mendapatkan output tegangan stabil di +/- 12 volt dan +/- 5 volt. Kita juga butuh 2 buah diode yang disesuaikan dengan ampere trafo yang dipakai. Butuh switch stereo, dan 2 buah elko dengan ukuran yang menyesuaikan. Untuk lebih lengkapnya, berikut adalah list untuk komponen yan dibutuhkan dan fungsinya dengan trafo 1A:
- Trafo 1 A x 1, untuk menurunkan tegangan dari 220V AC menjadi 12 AC
- Diode 1 A x 2, sebagai penyearah setengah gelombang
- Elco 10.000uf 16V x 2, sebagai perata tegangan
- IC Stabil 7812 x 1, untuk menghasilkan output +12
- IC Stabil 7912 x 1, untuk menghasilkan output -12
- IC Stabil 7805 x 1, untuk menghasilkan output +5
- IC Stabil 7905 x 1, untuk menghasilkan output -5
- Switch stereo x 1, untuk mengubah 12V ke 5V
- Switch mono x 1, untuk on/off
- Resistor 1k + led, sebagai indikator
- Jepit buaya x 3, sebagai output plus, minus, dan ground
- jack multi x 1, sebagai otput ke peralatan
- kabel output, untuk output
- kabel + colokan ke listrik PLN, sebagai sumber tegangan
- Casing adaptor + skrupnya
Rangkaian power supply di bawah ini adalah rangkaian minimal dari komponen di atas. Anda bebas memodifikasi rangkaian ini sesuai dengan kebutuhan.
Perlu diperhatikan, rangkaian di atas adalah rangkaian utama power supply 12V & 5V. Lampu indikator bisa Anda tambahkan pada output 12V atau 5V dan ground. Begitu juga dengan jack dan pengkabelan output, serta switch on/off bisa Anda berkreasi sesuai dengan kondisi masing-masing. Penampakan power supply yang kami buat bisa Anda lihat pada gambar di atas. Tampak sederhana, tapi banyak yang bisa dilakukan dengan dengan power supply tersebut karena output yang bervariasi dan lengkap dengan tegangan minus 12 dan 5 volt.
Pada gambar di atas, tiga buah jepit buaya sebagai output positif, negatif, dan ground. Sedangkan multiple-jack digunakan sebagai output standar positif dan ground.
Maksud hati ingin membuat PCB agar pembaca bisa langsung praktek :). Akan tetapi untuk sementara, rangkaian dasar itu dulu yang bisa kami bagi kepada pembaca. Semoga tulisan ini bermanfaat dan selamat berkreasi dan bermain dengan power supply 12V & 5V simetris. Minat? :D
Written by ElangSakti
Rangkaian Power Supply 12V & 5V Simetris
Bahasan: Keluaran rangkaian power supply 12V dan 5V lebih sering dibutuhkan daripada keluaran lainnya. Power supply 12V umum digunakan untuk pe...
Published at Rabu, 14 Oktober 2015, Updated at Rabu, 14 Oktober 2015
Reviewed by dr. on
Rating: 4.7
Rangkaian Power Supply 12V & 5V Simetris
Bahasan: Keluaran rangkaian power supply 12V dan 5V lebih sering dibutuhkan daripada keluaran lainnya. Power supply 12V umum digunakan untuk pe...
Published at Rabu, 14 Oktober 2015, Updated at Rabu, 14 Oktober 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Pengertian RFID dan Aplikasinya : Case RFID Reader MLF8112WA
Tahukah Anda, apa itu RFID? Perlu diperhatikan bahwa dalam tulisan ini, kami tidak membahas tentang harga RFID atau tempat-tempat yang jual RFID. Tulisan ini akan berfokus pada pengertian RFID, apa saja bagian-bagian RFID, bagaimana cara pengiriman datanya, dan bagaimana aplikasinya. Teknologi RFID adalah teknologi yang harus kita kuasai jika ingin bermain-main dengan IoT karena peranannya sangat penting.
Pengertian dan Komponen RFID
Radio Frequency Identification (RFID) adalah teknologi untuk mengidentifikasi yang berbasis nirkabel (wireless) yang memanfaatkan gelombang elektromagnet dengan frekuensi tertentu untuk mengambil data dari suatu objek. Teknologi RFID dibagi ke dalam 2 komponen utama, yaitu RFID Reader dan Tag RFID. Tag RFID adalah alat yang berisi data pengenal (ID) yang dipasang pada objek. Sedangkan RFID Reader berfungsi untuk membaca data pengenal (ID) yang ada di dalam Tag RFID. Contoh : Teknologi RFID sering kita temui di supermarket dan perpustakaan.
Ketika berbelanja di supermarket, misalnya pakaian, maka setiap pakaian akan dipasang Tag RFID. Ketika kita membeli pakaian tersebut, maka Tag RFID akan dibuka oleh kasir, jika tidak, maka ketika kita melewati pemindai pada pintu keluar, maka alarm akan berbunyi. Kenapa demikian? Karena pemindah mengidentifikasi bahwa ada pakaian yang Tag RFID-nya belum dilepas. Begitu juga ketika kita meminjam buku di perpustakaan. Setiap buku biasanya dipasang RFID di bagian belakangnya, sehingga ketika peminjaman dan pengembalian buku harus "digesek" dulu ke RFID Reader.
Selain itu, Tag RFID juga bisa diletakkan di dalam kartu elekronik, diletakkan di hewan-hewan peliharaan untuk mengidentifikasi, di peralatan rumah tangga, dll. Saat ini (2015) sedang berkembang teknologi IoT sehingga penggunaan RFID akan sangat berperan. Implementasi dari RFID dan tag-nya bisa Anda lihat pada gambar di atas.
RFID Reader MLF8112WA
Penulis mendapat kesempatan untuk ngoprek alat ini. Salah satu kawan minta bantuan untuk menyelesaikan penelitiannya tentang hybrid system dan beberapa aplikasi pendukung keputusan yang berkaitan dengan objek yang dipasang dengan RFID. Karena fokus penelitiannya adalah sistem hybridnya, maka persiapan alatnya dipercayakan ke penulis untuk menyiapkannya. Sehinga dia tidak perlu pusing-pusing mengurusi hal yang bukan bidang dan kepentingannya.
Alat ini, sangat minim referensi. Yang saya temukan hanya referensi singkat tentang spesifikasinya dan beberapa referensi yang dimuat dalam bahasa china. Alat ini memiliki 10 pin, menggunakan format Wiegand26 atau ABA dalam komunikasinya, dan beroperasi dalam frekuensi 110Khz, 125Khz, dan 140Khz sesuai dengan voltase yang diberikan. Berikut ini adalah gambar RFID Reader dan antenanya, tag RFID yang menyerupai kartu, pin tampak bawah, skema dari pin dan fungsinya. perhatikan, pada skema kaki, yang tertulis adalah NLF, bukan MLF. Tapi kedua merk ini sesuai. :D
+------+----------------+ | PIN | Wiegand 26bits | +------+----------------+ | 1 | +5V (Vcc) | | 2 | (GND) | | 3 | (Data0) | | 4 | (Data1) | | 5 | (Hold) | | 6-10 | Antena | | 7-8 | (NC) | | 9 | (NC) | +------+----------------+
Yang aneh adalah, ketika menggunakan Protokol Wiegand, ada pin yang berfungsi sebagai HOLD. Padahal dalam protokol Wiegand tidak dikenal dengan HOLD (Silakan baca tentang Protokol Wiegand 26 bit). Untung referensi yang berbahasa china memberikan informasi bahwa pin HOLD akan bernilai LOW ketika ada data yang dikirim. Apakah saya bisa berbahasa china? tidak. Saya pakai google translate :D . Jika digambarkan, maka timeline pengiriman data dalam format Wiegand alat ini adalah tampak seperti gambar berikut.
Arduino Uno sebagai Tester
Dalam implementasinya, kawan saya akan menggunakan RFID Reader ini dikombinasikan dengan AT89S51. Padahal saya belum belajar bagaimana cara menggunakannya. Hehe. Nah, untuk menguji apakah RFID Reader dan Tagnya berfungsi dengan baik, maka saya menggunakan Arduino. Saya membuat program untuk membaca data dari Tag RFID sesuai dengan format Wiegand26 dan mencobanya. Berikut adalah sketch protokol Wiegand yang disesuaikan dengan RFID Reader MLF8112WA.
/*
* RFID READER MLF8112WA dengan Prorocol Wiegand 26 bit
* coder haripinter
* http://www.elangsakti.com
*/
const int HOLD = 8;
const int DATA0 = 9;
const int DATA1 = 10;
char code_table[26];
char FCCN[6];
char i = 0;
bool valid = false;
void setup() {
pinMode(DATA0, INPUT);
pinMode(DATA1, INPUT);
pinMode(HOLD , INPUT);
Serial.begin(9600);
}
void loop() {
// jika pin hold LOW, ambil data sebanyak 26 bit
// silakan cek format protokol Wiegand 26 bit
while(digitalRead(HOLD) == LOW){
if(digitalRead(DATA0) == LOW){
code_table[i] = 1;
i++;
while(digitalRead(DATA0) == LOW);
}
if(digitalRead(DATA1) == LOW){
code_table[i] = 0;
i++;
while(digitalRead(DATA1) == LOW);
}
}
if(i >= 25){
// validasi data
valid = validasi(i);
if(valid){
getRFID();
FCCN[6] = 0x0;
Serial.println(FCCN);
}else{
Serial.println("NOT VALID!");
}
i = 0;
}
}
void getRFID(){
char tmp = 0;
char num = 0;
for(i=1; i<25; i++){
tmp <<= 1;
tmp += code_table[i];
if(i%4 == 0){
FCCN[num] = toChar(tmp);
num++;
tmp = 0;
}
}
}
// validasi data sesuai protokol Wiegand
bool validasi(int i){
char tmp = 0;
for(int n=0; n<i; n++){
tmp += code_table[i];
// bagian pertama harus genap
if(n == 12){
if(tmp % 2 == 1) return false;
tmp = 0;
}
// bagian kedua harus ganjil
if(n == 25){
if(tmp % 2 == 0) return false;
tmp = 0;
}
}
return true;
}
char toChar(char ch){
if(ch <= 9){
return ch + 48;
}else{
return ch + 55;
}
}
Script di atas masih menggunakan cara manual, sehingga jika dikombinasikan dengan sensor atau perintah delay, maka sistem menjadi tidak responsive. Untuk itu, pembacaan data RFID bisa menggunakan interrupt. Sehingga RFID Reader selalu siap membaca data dan menginterupsi mikrokontroller dari pekerjaan lainnya. Penggunaan interrupt pada RFID Reader mungkin akan saya bahas pada ebook arduino yang kedua. :D
Written by ElangSakti
Pengertian RFID dan Aplikasinya : Case RFID Reader MLF8112WA
Bahasan: Tahukah Anda, apa itu RFID? Perlu diperhatikan bahwa dalam tulisan ini, kami tidak membahas tentang harga RFID atau tempat-tempat yang...
Published at Selasa, 29 September 2015, Updated at Selasa, 29 September 2015
Reviewed by dr. on
Rating: 4.7
Pengertian RFID dan Aplikasinya : Case RFID Reader MLF8112WA
Bahasan: Tahukah Anda, apa itu RFID? Perlu diperhatikan bahwa dalam tulisan ini, kami tidak membahas tentang harga RFID atau tempat-tempat yang...
Published at Selasa, 29 September 2015, Updated at Selasa, 29 September 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Jika digambarkan dalam bentuk timeline, maka format data yang dikirim adalah sebagai berikut:
Wiegand Protocol : Format Transfer Data pada RFID Reader
Wiegand Protocol adalah protokol komunikasi yang dibuat oleh Motorola untuk komunikasi antara kartu elektronik dan alat pembacanya, seperti kartu tag RFID dan RFID reader. Format wiegand memiliki beberapa standar dalam panjang datanya, yaitu 26 bit, 30 bit, 34 bit, 36 bit, 44 bit, dll. Dalam tulisan ini, pembahasan hanya akan difokuskan pada format wiegand dengan 26 bit data.
Standar Format Data Wiegand 26 bit
Dalam pengirimannya, data dalam format Wiegand dibagi ke dalam 2 buah input / masukan. Kalau dalam pemrograman, kedua input bisa kita ibaratkan menjadi 2 variabel, yaitu DATA0 dan DATA1. Dengan demikian, alat-alat yang menggunakan Wiegand format pasti akan memiliki 2 pin untuk mengirimkan data, yaitu 1 pin untuk DATA0 dan 1 pin untuk DATA1.
Ketika mengirim data, nilai pada DATA0 dan DATA1 akan bergantian. Jika DATA0 bernilai 0 (LOW), maka data yang dikirim adalah 0. Jika DATA1 bernilai 0 (LOW), maka data yang dikirim adalah 1. Selain kondisi tersebut, berarti tidak ada data yang sedang dikirim. Perhatikan tabel berikut :
+-------+-------+------+ | DATA0 | DATA1 | ARTI | +-------+-------+------+ | 0 | 0 | - | | 0 | 1 | 0 | | 1 | 0 | 1 | | 1 | 1 | - | +-------+-------+------+
Jika digambarkan dalam bentuk timeline, maka format data yang dikirim adalah sebagai berikut:
Parity Bit pada Wiegand Protocol
Wiegand 26 bit terdiri dari 2 buah parity bit yang terletak di awal dan di akhir. Parity bit ini berfungsi sebagai validasi data di sisi penerima data dari RFID reader. Untuk melakukan validasi data, maka 26 bit data dibagi menjadi 2 kelompok yang masing-masing terdiri dari 13 bit yaitu 13 bit pertama dan 13 bit kedua.
XXXXXXXXXXXXXXXXXXXXXXXXXX (dalam bit) X XXXXXXXXXXXX XXXXXXXXXXXX X 1 010101000101 010100001101 0
13 bit pertama terdiri dari 1 parity bit di awal dan 12 data. Sedangkan 13 bit yang kedua terdiri dari 12 data dan 1 parity bit di akhir. Parity bit yang pertama disebut sebagai Even Parity (Parity Genap), sedangkan parity bit yang terakhir disebut dengan Odd Parity (Parity Ganjil).
Parity Genap akan ditambahkan ke 12 bit data yang pertama sehingga totalnya adalah genap. Misal, pada data pertama jumlah angka 1 sebanyak 5, maka agar genap, maka parity bit harus bernilai 1 (5+1 = 6), sehingga Parity Genap ini mungkin bisa kita sebut dengan Parity Bit Penggenap :). Sedangkan 13 data terakhir totalnya harus berjumlah ganjil. Karena angka 1 sudah berjumlah 5 (ganjil), maka Parity Bit yang digunakan adalah 0. Parity bit terakhir ini bisa kita sebut dengan Parity Bit Pengganjil.
Kelompok data di atas selanjutnya diterjemahkan menjadi 6 buah data Hexa. Seperti di bawah ini.
1 0101 0100 0101 0101 0000 1101 0 5 4 5 5 0 13 5 4 5 5 0 D 54550D
Dari ke 6 format tersebut, maka 2 digit pertama (54) disebut sebagai Facility Code (mungkin semacam kode dari provider), sedangkan 4 digit terakhir (550D) adalah nomer kartunya. Dengan demikian, kombinasi dari Facility Code bisa sebanyak 255 buah, sedangkan kombinasi dari nomer kartu bisa mencapai 65.535 buah kartu. Selain dalam bentuk Hexadecimal, Anda juga bisa menampilkan nomer kartu ke dalam bentuk desimal.
Written by ElangSakti
Wiegand Protocol : Format Transfer Data pada RFID Reader
Bahasan: Wiegand Protocol adalah protokol komunikasi yang dibuat oleh Motorola untuk komunikasi antara kartu elektronik dan alat pembacanya, se...
Published at Kamis, 17 September 2015, Updated at Kamis, 17 September 2015
Reviewed by dr. on
Rating: 4.7
Wiegand Protocol : Format Transfer Data pada RFID Reader
Bahasan: Wiegand Protocol adalah protokol komunikasi yang dibuat oleh Motorola untuk komunikasi antara kartu elektronik dan alat pembacanya, se...
Published at Kamis, 17 September 2015, Updated at Kamis, 17 September 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Cara Mudah Pasang Lampu Teras Otomatis
Sebenarnya tulisan ini adalah bagian dari artikel Lampu Rumah Otomatis. Pemasangan lampu teras otomatis hampir mirip dengan pemasangan Lampu Taman Otomatis. Jadi setidaknya ulasan pada artikel ini juga mengacu pada ulasan di artikel sebelumnya. Jika Anda ingin memasang lampu otomatis di teras Anda dengan mudah, entah itu teras depan atau teras belakang, Anda bisa cek alat tersebut di artikel >> Fitting Lampu Otomatis.
Manfaat dari penggunaan lampu otomatis untuk teras yaitu : Ketika Anda bepergian, Anda tidak perlu kawatir listrik mati terus atau menyala terus sehingga biaya listrik jadi membengkak. Jika Anda menggunakan lampu otomatis, maka rumah akan tampak berpenghuni karena lampu akan menyala secara otomatis ketika sore hari dan mati otomatis ketika pagi hari. Hal tersebut akan mengurangi kesempatan orang-orang yang tidak bertanggung jawab (orang jahat).
Selain manfaat untuk diri sendiri, penggunaan lampu otomatis juga meringankan pekerjaan tukang kebun, penjaga gedung atau kantor, penjaga sekolah, serta satpam yang biasanya harus buru-buru menghidupkan lampu ketika sore hari dan harus buru-buru mematikan lampu ketika pagi hari. Hal ini biasanya membuat biaya listrik membengkak ketika lampu sering lupa dimatikan seperti di sekolah, di masjid, atau di kampus.
Oleh sebab itu, penggunaan lampu teras otomatis akan sangat berguna baik fitting yang menggunakan sensor gerak atau yang menggunakan sensor cahaya. Jika Anda menggunakan fitting lampu otomatis yang menggunakan sensor gerak, maka hidup-mati lampu akan dikontrol oleh gerakan benda. Maksudnya, jika ada benda yang bergerak di sekitar lampu tersebut, maka lampu akan menyala. Tapi jika tidak ada gerakan, maka dalam durasi tertentu lampu akan otomatis padam.
![]() |
| Contoh pemasangan fitting lampu otomatis |
Tapi jika Anda menggunakan fitting yang dilengkapi dengan sensor cahaya, maka hidup-mati lampu akan ditentukan dengan intensitas cahaya di lingkungan sekitar. Artinya, jika kondisi lingkungan gelap, maka lampu akan menyala. Tapi jika kondisinya terang, maka lampu akan padam. Penggunaan fitting dengan sensor cahaya atau dengan sensor gerak bisa Anda gunakan sesuai dengan kebutuhan dan karakteristik teras Anda.
Jika untuk teras depan, lebih baik menggunakan sensor cahaya, tapi jika teras belakang, Anda juga coba menggunakan fitting dengan sensor gerak. Untuk alat fitting lampu otomatis dengan sensor cahaya, Anda bisa mendapatkannya di sini >> Fitting Lampu Otomatis.
Jika untuk teras depan, lebih baik menggunakan sensor cahaya, tapi jika teras belakang, Anda juga coba menggunakan fitting dengan sensor gerak. Untuk alat fitting lampu otomatis dengan sensor cahaya, Anda bisa mendapatkannya di sini >> Fitting Lampu Otomatis.
Written by ElangSakti
Cara Mudah Pasang Lampu Teras Otomatis
Bahasan: Sebenarnya tulisan ini adalah bagian dari artikel Lampu Rumah Otomatis . Pemasangan lampu teras otomatis hampir mirip dengan pemasanga...
Published at Minggu, 16 Agustus 2015, Updated at Minggu, 16 Agustus 2015
Reviewed by dr. on
Rating: 4.7
Cara Mudah Pasang Lampu Teras Otomatis
Bahasan: Sebenarnya tulisan ini adalah bagian dari artikel Lampu Rumah Otomatis . Pemasangan lampu teras otomatis hampir mirip dengan pemasanga...
Published at Minggu, 16 Agustus 2015, Updated at Minggu, 16 Agustus 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Lampu Taman Otomatis Praktis
Pada artikel sebelumnya kita sudah membahas tentang Lampu Rumah Otomatis, berdasarkan pembahasan tersebut lampu taman otomatis bisa menggunakan lampu dengan sensor cahaya atau lampu dengan sensor gerakan. Salah satu alat untuk membuat lampu otomatis adalah >> Fitting Lampu Otomatis.
Ketika kita menggunakan lampu dengan sensor cahaya, kita bisa menggunakan Fitting Lampu Otomatis yang dilengkapi dengan sensor cahaya. Jadi hidup-mati lampu akan tergantung pada kondisi terang atau gelap lingkungan sekitar. Oleh sebab itu, lampu akan menyala terus menerus ketika lingkungan gelap. Hal ini sangat membantu bagi Anda yang mungkin sering lupa mamatikan lampu depan, lampu belakang, atau lampu yang ada di taman.
Berbeda dengan lampu yang dilengkapi dengan sensor gerakan. Ini adalah jenis lampu atau fitting lampu otomatis yang dilengkapi dengan sensor PIR sehingga bisa mendeteksi gerakan benda di sekitarnya. Ketika ada sesuatu lewat (atau bergerak) di taman kita, maka lampu akan menyala. Tapi jika tidak ada gerakan, maka lampu akan padam. Lampu jenis ini juga sangat efektif untuk mendeteksi maling atau orang yang sedang lewat. :)
Kedua jenis fitting lampu otomatis tersebut bisa Anda gunakan sesuai kebutuhan. Misal, untuk taman yang ada di depan, Anda bisa menggunakan lampu otomatis dengan sensor cahaya karena ketika malam setidaknya rumah kita tampak terang walau sepi. Tapi untuk taman di belakang, kita bisa menggunakan lampu otomatis dengan sensor gerakan sehingga jika tidak terbiasa maka orang yang lewat akan kaget dan mengira hantu, hehe bukan begitu :D,, maksudnya ketika ada orang di belakang rumah kita, orang tersebut mungkin mengira kita tahu keberadaan orang tersebut.
![]() |
| Lampu otomatis dengan fitting sensor cahaya |
Jika Anda penasaran dan ingin memiliki fitting lampu otomatis tersebut, saya bisa bantu membelikannya untuk Anda. Silakan cek di >> Fitting Lampu Otomatis. :)
Written by ElangSakti
Lampu Taman Otomatis Praktis
Bahasan: Pada artikel sebelumnya kita sudah membahas tentang Lampu Rumah Otomatis , berdasarkan pembahasan tersebut lampu taman otomatis bisa m...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
Lampu Taman Otomatis Praktis
Bahasan: Pada artikel sebelumnya kita sudah membahas tentang Lampu Rumah Otomatis , berdasarkan pembahasan tersebut lampu taman otomatis bisa m...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Cara Pasang Lampu Rumah Otomatis
Smarthouse atau rumah cerdas terdiri dari beberapa sistem, salah satunya adanya otomatisasi dari peralatan dan perlengkapan rumah seperti lampu rumah otomatis. Lampu-lampu rumah yang dibuat otomatis baik yang dikontrol dengan komputer, smartphone, sms, atau dikontrol oleh kondisi lingkungan seperti gerakan dan intensitas cahaya. Salah satu alat sederhana, mudah penggunaannya, dan bisa digunakan untuk lampu otomatis adalah >> Fitting Lampu Otomatis.
Lampu yang dilengkapi dengan sensor gerakan akan hidup ketika ada objek yang bergerak dan akan akan mati setelah tak ada objek yang bergerak dengan durasi tertentu. Lampu ini dilengkapi dengan sensor PIR baik yang terintegrasi dengan fitting atau yang dipasang terpisah. Alat ini sangat bermanfaat untuk menghemat listrik sebab lampu hanya akan menyala ketika ada orang (ada pergerakan benda), sedangkan ketika tidak ada orang (atau orang sudah tidur), maka lampu ini akan otomatis padam.
Berbeda dengan lampu yang dilengkapi dengan sensor cahaya. Lampu jenis ini akan menyala ketika senja hingga pagi, dan lampu akan mati dari pagi hari hingga sore hari. Alat ini sangat sangat berguna karena akan meringankan pemilik rumah. Rutinitas pemilik rumah (atau penjaga rumah) untuk menghidupkan atau mematikan lampu teras, lampu taman, atau lampu belakang akan digantikan oleh alat ini. Alat ini juga membantu meringankan tugas penjaga kantor, penjaga gedung, atau penjaga sekolah.
![]() |
| Lampu dengan fitting sensor cahaya |
Lampu-lampu otomatis tersebut bisa diletakkan di taman, di lorong-lorong, di gudang, di kamar mandi, di ruang tengah, atau di kamar tidur sesuai dengan karakteristik sensor dan kebutuhannya. Ala-alat ini bisa dikontrol dengan mikrokontroller atau dipasang secara independen.
Baca juga :
1. Timer Digital untuk mengatur Pompa Grease (mesin pelumas)
2. Membuat Timer Digital dan Lampu Otomatis dengan RTC DS1302
Baca juga :
1. Timer Digital untuk mengatur Pompa Grease (mesin pelumas)
2. Membuat Timer Digital dan Lampu Otomatis dengan RTC DS1302
Jika alat ini dipasang secara independen, maka kendali lampu otomatis akan dikontrol secara penuh oleh sensor yang digunakan. Akan tetapi jika diintegrasikan dengan mikrokontroller, maka kita bisa memprogram agar lampu tidak hanya dikontrol penuh oleh sensor, melainkan bisa kita tambahkan timer. Seperti contoh, jika siang hari mendung dan kondisi agak gelap, maka lampu dengan sensor cahaya akan menghidupkan lampu karena sensor tersebut menganggap bahwa hari sudah malam (mulai gelap), padahal masih siang. Jika kita menambahkan pewaktu (timer, atau jam digital), maka kita bisa mengontrol agar lampu hanya nyala pada jam-jam tertentu atau ketika hari memang sudah benar-benar gelap.
Jika ingin membuat lampu rumah otomatis, Anda bisa mencoba alat yang gampang dan sederhana yaitu >> Fitting Lampu Otomatis.
Written by ElangSakti
Cara Pasang Lampu Rumah Otomatis
Bahasan: Smarthouse atau rumah cerdas terdiri dari beberapa sistem, salah satunya adanya otomatisasi dari peralatan dan perlengkapan rumah seper...
Published at Sabtu, 15 Agustus 2015, Updated at Sabtu, 15 Agustus 2015
Reviewed by dr. on
Rating: 4.7
Cara Pasang Lampu Rumah Otomatis
Bahasan: Smarthouse atau rumah cerdas terdiri dari beberapa sistem, salah satunya adanya otomatisasi dari peralatan dan perlengkapan rumah seper...
Published at Sabtu, 15 Agustus 2015, Updated at Sabtu, 15 Agustus 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Fitting Lampu Otomatis untuk Luar Ruangan
Fitting lampu otomatis adalah fitting lampu yang dilengkapi dengan sensor cahaya atau sensor gerakan. Pada dasarnya fitting lampu adalah alat yang menjadi dudukan lampu untuk memasang lampu listrik. Fitting ini berfungsi untuk menghubungkan antara lampu dengan sumber listrik sehingga pemilik rumah mudah ketika ingin membuka atau memasang lampu.
Tidak semua toko listrik jual fitting lampu otomatis, oleh sebab itu, penulis ingin mengenalkan bahwa saat ini teknologi alat kelistrikan sudah berkembang pesat dan kini sudah ada alat baru yang bisa meringankan beban Anda terkait dengan lampu luar rumah. Alat tersebut adalah fitting lampu dengan sensor cahaya yang akan menghidupkan lampu secara otomatis ketika malam dan mematikannya ketika sudah pagi.
Keuntungan Menggunakan Fitting Sensor Cahaya
Fitting otomatis ini bisa memberikan beberapa manfaat, diantaranya:- Tidak repot ketika bepergian. Jika Anda sering bepergian, maka Anda bisa menggunakan fitting ini di lampu teras rumah, lampu belakang, atau lampu taman sehingga ketika senja tiba, maka listrik akan otomatis menyala dan listrik akan padam ketika pagi hari.
- Rumah "aman" ketika Anda bepergian. Secara tidak langsung, menghindari para pencuri karena rumah kita dianggap ada penghuninya walaupun kita sedang keluar rumah.
- Meringankan pekerjaan menghidupkan lampu untuk penjaga kebun, penjaga kantor, penjaga sekolah, penjaga gudang, satpam, dll yang setiap sore harus menghidupkan lampu dan kalau pagi harus mematikan lampu.
Spesifikasi :
- Pemasangan mudah, tidak memerlukan proses instalasi yang rumit.
- Tidak perlu lagi mematikan saklar lampu, karena fitting akan bekerja secara otomatis berdasarkan intensitas cahaya matahari yang diterima sensor.
- Sensitivitas sensor dapat diatur sesuai kebutuhan.
- Rangkaian awet dan tahan lama karena menggunakan komponen switching elektronik.
- Panjang kabel sensor ke fitting lampu otomatis 22cm sehingga kinerja sensor tidak terganggu nyala lampu di fitting.
Sangat cocok digunakan untuk lampu rumah otomatis baik diletakkan di teras rumah (lampu teras otomatis) dan taman (lampu taman otomatis) sehingga dapat membantu menghemat listrik. Beberapa keutamaan dari alat ini yaitu:
* Automatic light sensor 220V / 50 - 60Hz
* Safety Security
* Energy Saving
* Non Flickering
* Solid State Circuit
* Reliavle Quality
Dimensi : 9,5 x 6 x 18,2cm
Maximum bisa digunakan untuk lampu 40 Watt.
Anda bisa mendapatkan Alat ini di partner kami >> Promo Bulan Ini, Indogeek.com.
* Automatic light sensor 220V / 50 - 60Hz
* Safety Security
* Energy Saving
* Non Flickering
* Solid State Circuit
* Reliavle Quality
Dimensi : 9,5 x 6 x 18,2cm
Maximum bisa digunakan untuk lampu 40 Watt.
Anda bisa mendapatkan Alat ini di partner kami >> Promo Bulan Ini, Indogeek.com.
Written by ElangSakti
Fitting Lampu Otomatis untuk Luar Ruangan
Bahasan: Fitting lampu otomatis adalah fitting lampu yang dilengkapi dengan sensor cahaya atau sensor gerakan. Pada dasarnya fitting lampu adal...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
Fitting Lampu Otomatis untuk Luar Ruangan
Bahasan: Fitting lampu otomatis adalah fitting lampu yang dilengkapi dengan sensor cahaya atau sensor gerakan. Pada dasarnya fitting lampu adal...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Tulisan ini singkat aja ya, hehe sebab hanya untuk dokumentasi singkat saja. Contoh source code ini dites pada rangkaian ATMega16A menggunakan internal clock 1MHz dengan codevision AVR, kemudian file hex diupload dengan USBASP. Rankaian dari USBASP bisa dicek pada artikel sebelumnya. Konfigurasi di Codevision AVR seperti berikut:
Sedangkan source code yang digunakan yaitu:
Contoh Source Code + Rangkaian LCD 16x2 Codevision AVR
Tulisan ini singkat aja ya, hehe sebab hanya untuk dokumentasi singkat saja. Contoh source code ini dites pada rangkaian ATMega16A menggunakan internal clock 1MHz dengan codevision AVR, kemudian file hex diupload dengan USBASP. Rankaian dari USBASP bisa dicek pada artikel sebelumnya. Konfigurasi di Codevision AVR seperti berikut:
Sedangkan source code yang digunakan yaitu:
#include <mega16a.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>
int num;
unsigned char *str = "00000";
void main(void){
lcd_init(16);
num = 1;
while(1){
lcd_gotoxy(0,0);
lcd_puts("elangsakti.com");
lcd_gotoxy(0,1);
sprintf(str,"%d",num);
lcd_puts(str);
num++;
delay_ms(1000);
}
}
Written by ElangSakti
Contoh Source Code + Rangkaian LCD 16x2 Codevision AVR
Bahasan: Tulisan ini singkat aja ya, hehe sebab hanya untuk dokumentasi singkat saja. Contoh source code ini dites pada rangkaian ATMega16A meng...
Published at Rabu, 12 Agustus 2015, Updated at Rabu, 12 Agustus 2015
Reviewed by dr. on
Rating: 4.7
Contoh Source Code + Rangkaian LCD 16x2 Codevision AVR
Bahasan: Tulisan ini singkat aja ya, hehe sebab hanya untuk dokumentasi singkat saja. Contoh source code ini dites pada rangkaian ATMega16A meng...
Published at Rabu, 12 Agustus 2015, Updated at Rabu, 12 Agustus 2015
Reviewed by dr. on
Rating: 4.7
# Hack Your Skills! to be Professional Mechatronics
Gambar di atas adalah mikrokontroller ATMega16A yang diprogram dengan programmer USBAsp. Dari rangkain di atas, saya agak memahami bagaimana mikrokontroller dan programmer bekerja, dan apa itu sebenarnya minimum sistem (sismin) untuk mikrokontroller. Pada rangkaian tersebut, mikrokontroller diprogram dengan internal clock (tanpa menggunakan XTAL), tanpa menggunakan komponen penyetabil tegangan (kapasitor), dan tanpa komponen untuk reset (push-button dan resistor pull-up). Jadi mikrokontroller tersebut hanya disambung ke VCC dan GND sebagai sumber listrik serta MISO, MOSI, SCK, RST, dan GND ke USBAsp.
Fungsi Pin MISO, MOSI, dan SCK Mikrokontroller
Gambar di atas adalah mikrokontroller ATMega16A yang diprogram dengan programmer USBAsp. Dari rangkain di atas, saya agak memahami bagaimana mikrokontroller dan programmer bekerja, dan apa itu sebenarnya minimum sistem (sismin) untuk mikrokontroller. Pada rangkaian tersebut, mikrokontroller diprogram dengan internal clock (tanpa menggunakan XTAL), tanpa menggunakan komponen penyetabil tegangan (kapasitor), dan tanpa komponen untuk reset (push-button dan resistor pull-up). Jadi mikrokontroller tersebut hanya disambung ke VCC dan GND sebagai sumber listrik serta MISO, MOSI, SCK, RST, dan GND ke USBAsp.
Pemahaman baru ini sedikit menggeser pengetahuan saya tentang sistem minimum untuk mikrokontroller. Dulu, ketika awal-awal ingin belajar mikrokontroller saya beranggapan bahwa setiap IC mikrokontroller membutuhkah sistem yang terdiri dari XTAL, beberapa resistor, kapasitor, dan beberapa komponen lainnya. Tapi saya mulai heran dengan beberapa tutorial tentang cara memprogram mikrokontroller ATTiny dengan Arduino yang hanya menggunakan kabel tanpa embel-embel sismin yang ribet. Apalagi rangkaiannya hanya menggunakan project board. Lalu, saya berpikir, apakah cara tersebut juga berlaku untuk mikrokontroller jenis lainnya?
Untuk menjawab pertanyaan tersebut, saya coba mencari sistem yang paling minimum (hehe) untuk memprogram mikrokontroller, tapi belum ketemu. Iseng-iseng buka datashit (hehe, datasheet) ATMega16A. Setelah memperhatikan antara sismin, datasheet, dan beberapa pengalaman menggunakan internal clock. Maka, ternyata penambahan XTAL hanya digunakan ketika ingin menggunakan external clock. Artinya, kita tidak perlu menggunakan XTAL dan Capasitor jika ingin menggunakan internal clock. Begitu juga untuk resistor dan push-button, ternyata dia disambungkan ke pin RESET, yang artinya : resistor berfungsi sebagai pull-up sehingga pin RESET berlogika HIGH dan ketika push-button dipencet, maka pin RESET akan diberi logika LOW sehingga mikrokontroller akan melakukan reset.
Secara teori, kita tidak perlu resistor dan push-button jiga tidak butuh tombol untuk mereset. Kita juga tidak perlu tambahan XTAL dan kapasitor jika tidak ingin menggunakan external clock dari XTAL. Jadi, kita cukup memberi tegangan positif dan GND, maka kita bisa menjalankan mikrokontroller dengan normal. Sedangkan ketika ingin memprogram pun hanya butuh menghubungkan pin MISO, MOSI, SCK, dan RST ke programmer (dalam hal ini saya menggunakan USBAsp).
Lalu Apa fungsi dari MISO, MOSI, dan SCK pada USBAsp?
Nah, itu yang akan sedikit dibahas pada posting ini :p. Sebenarnya pengetahuan ini akan berlaku untuk semua programmer (selain USBAsp). Penggunaan USBAsp karena memang saya punya yang begituan, belinya dulu ketika kepingin belajar mikrokontroller.
MISO (Master In Slave Out) & MOSI (Master Out Slave In) adalah jalur data untuk komunikasi antara master (programmer / downloader, USBAsp) dan Slave (IC mikrokontoller). Sesuai dengan namanya, MISO merupakan jalur yang digunakan download untuk menerima data, sedangkan MOSI adalah jalur downloader mengirim data ke IC mikrokontroller. Kedua jalur ini adalah jalur utama yang digunakan downloader dan mikrokontroller berkomunikasi. Untuk menghindari kesalahan dalam berkomunikasi, maka dibutuhkan sinkronisasi. Sinkronisasi tersebut dilakukan dengan memanfaatkan jalur SCK (atau ada yang disebut SCLK, Serial CLOCK). Data (MISO dan atau MOSI) akan dianggap valid hanya saat SCK dalam keadaan tinggi.
Menurut beberapa sumber, dua peralatan yang berkomunikasi ini sama-sama menggunakan Shift Register. Sehingga dalam komunikasi ini, selalu ada data yang dikirim dan diterima secara bersama-sama dalam setiap clock bit-nya. Sehingga setiap eksekusi (pengiriman data), maka data 4 byte dikirim sekaligus juga menerima 4 byte data. 4 byte data yang diterima ini sekaligus juga berarti respon dari target, seperti ATMEL AT89S5X atau AVR.
Untuk USBAsp, downloader ini memiliki 5 kabel yaitu MISO, MOSI, SCK, RST, dan GND. MISO dihubungkan ke pinMISO mikrokontroller, MOSI ke pin MOSI mikrokontroller, SCK ke pin SCK, GND ke GND, dan RST ke pin RESET. Dengan demikian, kita bisa memprogram hanya menggunakan kabel-kabel tersebut tanpa tambahan-tambahan komponen sebagaimana sismin yang banyak dijual di pasaran. Rangkain di bawah ini adalah rangkaian dasar untuk mengoperasikan IC mikrokontroller ATMega16A dengan program yang isinya membuat LED 'flip-flop'. Jadi, sebenarnya jika untuk test atau membuat prototype, kadang kita tidak perlu menggunakan sismin yang begitu lengkap. Kita cukup siapkan downloader, kabel-kabel, project board, dan sensor atau komponen sensor lainnya.
Written by ElangSakti
Fungsi Pin MISO, MOSI, dan SCK Mikrokontroller
Bahasan: Gambar di atas adalah mikrokontroller ATMega16A yang diprogram dengan programmer USBAsp. Dari rangkain di atas, saya agak memaham...
Published at Rabu, 05 Agustus 2015, Updated at Rabu, 05 Agustus 2015
Reviewed by dr. on
Rating: 4.7
Fungsi Pin MISO, MOSI, dan SCK Mikrokontroller
Bahasan: Gambar di atas adalah mikrokontroller ATMega16A yang diprogram dengan programmer USBAsp. Dari rangkain di atas, saya agak memaham...
Published at Rabu, 05 Agustus 2015, Updated at Rabu, 05 Agustus 2015
Reviewed by dr. on
Rating: 4.7
# 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
Langganan:
Postingan
(
Atom
)















































16 komentar :
Posting Komentar