Thursday 26 February 2015

ARDUINO :: Cara menggunakan Arduino GUI di Board lain, selain ARDUINO Board


Untuk kepentingan pembahasan dalam artikel ini anggap saja sistem Arduino terdiri dari dua sub sistem utama. Yang pertama adalah Arduino IDE, yaitu software yang beroperasi di komputer. Menurut situs http://www.arduino.cc perangkat lunak ini mereka sebut sebagai Arduino Software.
The open-source Arduino environment makes it easy to write code and upload it to the i/o board. It runs on Windows, Mac OS X, and Linux. The environment is written in Java and based on Processing, avr-gcc, and other open source software.


Tugas dari “Arduino Software” adalah menghasilkan sebuah file berformat hex yang akan di-download pada papan arduino atau papan sistem mikrokontroler lainnya. Ini mirip dengan Microsoft Visual Studio, Eclipse IDE, atau Netbeans. Lebih mirip lagi adalah IDE semacam Code::Blocks, CodeLite atau Anjuta yang mempermudah untuk menghasilkan file program. Bedanya kesemua IDE tersebut menghasilkan program dari kode bahasa C (dengan GNU GCC) sedangkan Arduino Software (Arduino IDE) menghasilkan file hex dari baris kode yang dinamakan sketch.
sketch is the name that Arduino uses for a program. It’s the unit of code that is uploaded to and run on an Arduino board.

Sub sistem yang kedua adalah hardware (perangkat keras) yaitu papan Arduino (Arduino Boards). Sampai saat tulisan ini dibuat yang paling umum dijual adalah varian baru yaitu Arduino Uno dan Arduino Mega 2560. Kesemua papan arduino itu memiliki perangkat lunak yang dinamakanbootloader.
When you upload a sketch, you’re using the Arduino bootloader, a small program that has been loaded on to the microcontroller on your board. It allows you to upload code without using any additional hardware. The bootloader is active for a few seconds when the board resets; then it starts whichever sketch was most recently uploaded to the microcontroller. The bootloader will blink the on-board (pin 13) LED when it starts (i.e. when the board resets).
Pada umumnya sketch yang dibuat di Arduino Software di-compile dengan perintah verify / Compile (Ctrl+R) lalu hasilnya di-download ke papan Arduino seperti Arduino Uno atau Arduino Mega 2560. Program hasil kompilasi itu lalau dijalankan oleh bootloader.

Tetapi ternyata hasil kompilasi dari Arduino Software dapat dipergunakan dan dijalankan tidak hanya pada papan arduino (Arduino Boards) atau turunannya yang kompatibel. Program hasil kompilasi itu dapat dijalankan di sistem mikrokontroller Atmel AVR yang sesuai bahkan tanpa menggunakan bootloader. Selain memperluas pilihan varian IC microcontroller AVR yang bisa dipergunakan hal ini juga berarti semakin besar program yang bisa kita muat di flash memori IC itu.
If you want to use the full program space (flash) of the chip or avoid the bootloader delay, you can burn your sketches using an external programmer. [sumber]

If you have an external programmer (e.g. an AVR-ISP, STK500, or parallel programmer), you can burn sketches to the Arduino board without using the bootloader. This allows you to use the full program space (flash) of the chip on the Arduino board. So with anATmega168, you’ll get 16 KB instead of 14 (on an ATmega8 you’ll get 8 KB instead of 7). It also avoids the bootloader delay when you power or reset your board. [sumber]

Kemudahan untuk mempergunakan berbagai macam varian microcontroller dalam tulisan ini mengikuti karya dari Mark Sproul. Beliau telah berbuat amal [ :-) ] dengan melakukan pengujian dan kemudian mempublikasikan secara luas uji cobanya untuk mempergunakan Arduino IDE untuk memprogram berbagai uC IC AVR. Daftar hasil uji cobanya dapat dilihat di http://www.avr-developers.com/cputable.html. Untuk dapat memprogram berbagai IC AVR tanpa papan arduino kita perlu melakukan download file-file konfigurasi yang telah dimodifikasi oleh Mark Sproul.
Sep 29, 2010 Updated to version 0020 core
Based on Version 0020 core files
Download this file (arduino-extras.zipuncompress it and add it in the hardware folder.    
On the Mac, this is /Applications/Arduino.app/Contents/Resources/Java/hardware 
This file contains ALL of the defintions that are included in the “arduino” folder as well. So your BOARDS menu will have duplicates.
This will give you access to just about EVERY ATmega that I can find that has been made into a comerically avaialable board.
NOTE: Not all cpus support bootloaders.

File arduino-extras.zip berisi tiga direktori: bootloaderscores dan firmwares dan dua file:boards.txt dan programmers.txt. Kesemuanya di-copy-kan ke direktori hardware arduino, misalnya:/home/sunu/arduino-0022/hardware/arduino/ atau misalnya direktori arduino utak-atik saya/home/sunu/arduino-0022hknix/hardware/arduino/. Kesemua direktori dan file yang baru itu akan menimpa yang lama, aman, kecuali anda telah melakukan modifikasi pada fileyang lama yang sayang kalau hilang :-).

Ada dua cara konfigurasi untuk melakukan pemrograman tanpa papan arduino. Yang pertama melakukan konfigurasi pada file preferences.txt untuk mengubah secara otomatis setting pada semua pengaturan papan. Cara yang kedua adalah dengan melakukan konfigurasi pada fileboards.txt, ini jika kita hendak melakukan setting yang berbeda untuk tiap papan.

Untuk file preferences dapat ditemukan di sistem sebagai berikut:
* /Users/<USERNAME>/Library/Arduino/preferences.txt (Mac)
* c:\Documents and Settings\<USERNAME>\Application Data\Arduino\preferences.txt (Windows)
* ~/.arduino/preferences.txt (Linux)
Perlu diperhatikan bahwa direktori ~/.arduino/ adalah direktori tersembunyi pada sistem GNU/Linux anda. Jika menggunakan file explorer Nautilus untuk menampilkan semua direktori tersembunyi dapat menggunakan Ctrl+h.

Modifikasi pada file preferences.txt dilakukan dengan melakukan pengubahan pada baris konfigurasi yang tercantum
upload.using=bootloader
menjadi salah satu nama programmer yang telah dicantumkan dalam fileprogrammer.txt.
Change: upload.using from bootloader to the identifier of one of the programmers in hardware/programmers.txt (e.g. avrispmkii).
Misalnya saya menggunakan dua programmer, yaitu USBasp dan USBtinyISP yang saya cantumkan di dalam file programmer.txt.
usbasp.name=USBaspusbasp.protocol=USBasp
usbtinyisp.name=USBtinyISP
usbtinyisp.protocol=usbtiny

Maka saya bisa mengubah baris yang tertulis sebagai upload.using=bootloader dalampreferences.txt menjadi upload.using=USBasp atau upload.using=USBtinyISP.

Saya sendiri lebih menyenangi cara yang kedua yaitu melakukan konfigurasi pada file boards.txt. Menurut saya cara ini lebih fleksibel, bahkan saya menjadi bisa untuk memiliki lebih dari satu konfigurasi untuk satu papan / boards / sistem. Misalnya saya memiliki dua konfigurasi untuk sistem/papan ATmega8, satu untuk internal clock 1 MHz dan satu lagi untuk  internal clock  8 Mhz.

File boards.txt pada sistem OS MS Windows dapat ditemukan di sub folder instalasinya misalnyaD:\arduino-0022\hardware\arduino\boards.txt. Pada sistem GNU/Linux dapat ditemukan di tempat instalasinya misalnya di /home/sunu/arduino-0022hknix/hardware/arduino/boards.txt.

Baris konfigurasi yang perlu diubah atau ditambahkan (jika belum ada) adalah baris yang tertulis sebagai: 
xxx.upload.using=nama_programmer
xxx.upload.protocol=nama_programmer

Misalnya:
    USBtinyISP-ATtiny2313.upload.using=usbtiny
    USBtinyISP-ATtiny2313.upload.protocol=usbtiny
atau
    arduino_attiny2313.upload.using=usbasp
    arduino_attiny2313.upload.protocol=usbasp

Berikut ini adalah konfigurasi yang saya buat untuk keperluan sistem saya, dapat dimodifikasi sesuai keperluan:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
##############################################################
 
USBtinyISP-ATtiny2313.name=USBtinyISP ATtiny2313 8 MHZ internal
 
USBtinyISP-ATtiny2313.upload.using=usbtiny
USBtinyISP-ATtiny2313.upload.protocol=usbtiny
USBtinyISP-ATtiny2313.upload.maximum_size=2048
USBtinyISP-ATtiny2313.upload.speed=19200
 
USBtinyISP-ATtiny2313.bootloader.low_fuses=0x64
USBtinyISP-ATtiny2313.bootloader.high_fuses=0xdf
USBtinyISP-ATtiny2313.bootloader.path=attiny45
USBtinyISP-ATtiny2313.bootloader.file=ATmegaBOOT.hex
USBtinyISP-ATtiny2313.bootloader.unlock_bits=0x3F
USBtinyISP-ATtiny2313.bootloader.lock_bits=0x0F
 
USBtinyISP-ATtiny2313.build.mcu=attiny2313
USBtinyISP-ATtiny2313.build.f_cpu=8000000L
USBtinyISP-ATtiny2313.build.core=arduino
 
##############################################################
 
arduino_attiny2313.name=USBasp ATtiny2313 8 MHZ internal
 
arduino_attiny2313.upload.using=usbasp
arduino_attiny2313.upload.protocol=usbasp
arduino_attiny2313.upload.maximum_size=2048
arduino_attiny2313.upload.speed=19200
 
arduino_attiny2313.bootloader.low_fuses=0x64
arduino_attiny2313.bootloader.high_fuses=0xdf
arduino_attiny2313.bootloader.path=attiny45
arduino_attiny2313.bootloader.file=ATmegaBOOT.hex
arduino_attiny2313.bootloader.unlock_bits=0x3F
arduino_attiny2313.bootloader.lock_bits=0x0F
 
arduino_attiny2313.build.mcu=attiny2313
arduino_attiny2313.build.f_cpu=8000000L
arduino_attiny2313.build.core=arduino
 
##############################################################
 
atmega8usbasp1mhz.name=ATmega8 tanpa bootloader 1 MHz (USBasp)
 
atmega8usbasp1mhz.upload.using=usbasp
atmega8usbasp1mhz.upload.protocol=usbasp
atmega8usbasp1mhz.upload.maximum_size=8192
atmega8usbasp1mhz.upload.speed=19200
 
atmega8usbasp1mhz.build.mcu=atmega8
atmega8usbasp1mhz.build.f_cpu=1000000L
atmega8usbasp1mhz.build.core=arduino
 
##############################################################
 
atmega8usbasp8mhz.name=ATmega8 tanpa bootloader 8 MHz (USBasp)
 
atmega8usbasp8mhz.upload.using=usbasp
atmega8usbasp8mhz.upload.protocol=usbasp
atmega8usbasp8mhz.upload.maximum_size=8192
atmega8usbasp8mhz.upload.speed=19200
 
#catatan -U lfuse:w:0xE4
#catatan -U hfuse:w:0xD9
 
atmega8usbasp8mhz.build.mcu=atmega8
atmega8usbasp8mhz.build.f_cpu=8000000L
atmega8usbasp8mhz.build.core=arduino
 
##############################################################
 
atmega8.name=Arduino NG or older w/ ATmega8
 
atmega8.upload.protocol=stk500
atmega8.upload.maximum_size=7168
atmega8.upload.speed=19200
 
atmega8.bootloader.low_fuses=0xdf
atmega8.bootloader.high_fuses=0xca
atmega8.bootloader.path=atmega8
atmega8.bootloader.file=ATmegaBOOT.hex
atmega8.bootloader.unlock_bits=0x3F
atmega8.bootloader.lock_bits=0x0F
 
atmega8.build.mcu=atmega8
atmega8.build.f_cpu=16000000L
atmega8.build.core=arduino
 
##############################################################
 
atmega16_1Mhz_dalam.name=Atmega16 1 MHz internal
 
atmega16_1Mhz_dalam.upload.using=usbasp
atmega16_1Mhz_dalam.upload.protocol=usbasp
atmega16_1Mhz_dalam.upload.maximum_size=16384
atmega16_1Mhz_dalam.upload.speed=57600
 
#catatan -U lfuse:w:0xE1
#catatan -U hfuse:w:0x99
 
atmega16_1Mhz_dalam.build.mcu=atmega16
atmega16_1Mhz_dalam.build.f_cpu=1000000L
atmega16_1Mhz_dalam.build.core=arduino
 
##############################################################
 
arduino_atmega16.name=Arduino-Atmega16
 
arduino_atmega16.upload.protocol=stk500v2
arduino_atmega16.upload.maximum_size=14336
arduino_atmega16.upload.speed=57600
 
arduino_atmega16.bootloader.low_fuses=0xE4
arduino_atmega16.bootloader.high_fuses=0x98
arduino_atmega16.bootloader.extended_fuses=0xFF
arduino_atmega16.bootloader.path=atmega
arduino_atmega16.bootloader.file=ATmegaBOOT_168_atmega16.hex
arduino_atmega16.bootloader.unlock_bits=0x3F
arduino_atmega16.bootloader.lock_bits=0x0F
 
arduino_atmega16.build.mcu=atmega16
arduino_atmega16.build.f_cpu=8000000L
arduino_atmega16.build.core=arduino
 
##############################################################
 
atmega32_no_boot_1MHz.name=ATmega32 1 MHz internal
 
atmega32_no_boot_1MHz.upload.using=usbasp
atmega32_no_boot_1MHz.upload.protocol=usbasp
atmega32_no_boot_1MHz.upload.maximum_size=32768
atmega32_no_boot_1MHz.upload.speed=57600
 
#catatan -U lfuse:w:0xE1
#catatan -U hfuse:w:0x99
 
atmega32_no_boot_1MHz.build.mcu=atmega32
atmega32_no_boot_1MHz.build.f_cpu=1000000L
atmega32_no_boot_1MHz.build.core=arduino
 
##############################################################
 
atmega32_no_boot_8MHz.name=ATmega32 8 MHz internal
 
atmega32_no_boot_8MHz.upload.using=usbasp
atmega32_no_boot_8MHz.upload.protocol=usbasp
atmega32_no_boot_8MHz.upload.maximum_size=28672
atmega32_no_boot_8MHz.upload.speed=57600
 
#catatan -U lfuse:w:0xE4
#catatan -U hfuse:w:0x99
 
atmega32_no_boot_8MHz.build.mcu=atmega32
atmega32_no_boot_8MHz.build.f_cpu=8000000L
atmega32_no_boot_8MHz.build.core=arduino
 
##############################################################
arduino_penguino_avr.name=Arduino-Penguino AVR
 
arduino_penguino_avr.upload.protocol=stk500v2
arduino_penguino_avr.upload.maximum_size=28672
arduino_penguino_avr.upload.speed=57600
 
arduino_penguino_avr.bootloader.low_fuses=0xFF
arduino_penguino_avr.bootloader.high_fuses=0xDA
arduino_penguino_avr.bootloader.extended_fuses=0x05
arduino_penguino_avr.bootloader.path=atmega
arduino_penguino_avr.bootloader.file=stk500boot_v2_penguino.hex
arduino_penguino_avr.bootloader.unlock_bits=0x3F
arduino_penguino_avr.bootloader.lock_bits=0x0F
 
arduino_penguino_avr.build.mcu=atmega32
arduino_penguino_avr.build.f_cpu=16000000L
arduino_penguino_avr.build.core=arduino
 
##############################################################
 
uno.name=Arduino Uno
uno.upload.protocol=stk500
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
 
##############################################################
 
mega2560.name=Arduino Mega 2560
 
mega2560.upload.protocol=stk500v2
mega2560.upload.maximum_size=258048
mega2560.upload.speed=115200
 
mega2560.bootloader.low_fuses=0xFF
mega2560.bootloader.high_fuses=0xD8
mega2560.bootloader.extended_fuses=0xFD
mega2560.bootloader.path=stk500v2
mega2560.bootloader.file=stk500boot_v2_mega2560.hex
mega2560.bootloader.unlock_bits=0x3F
mega2560.bootloader.lock_bits=0x0F
 
mega2560.build.mcu=atmega2560
mega2560.build.f_cpu=16000000L
mega2560.build.core=arduino
 
##############################################################
arduino_atmega8515.name=Arduino-ATmega8515
 
arduino_atmega8515.upload.using=usbtinyisp
arduino_atmega8515.upload.protocol=stk500
arduino_atmega8515.upload.maximum_size=8192
arduino_atmega8515.upload.speed=19200
 
arduino_atmega8515.bootloader.low_fuses=0xdf
arduino_atmega8515.bootloader.high_fuses=0xca
arduino_atmega8515.bootloader.path=atmega
arduino_atmega8515.bootloader.file=ATmegaBOOT.hex
arduino_atmega8515.bootloader.unlock_bits=0x3F
arduino_atmega8515.bootloader.lock_bits=0x0F
 
arduino_atmega8515.build.mcu=atmega8515
arduino_atmega8515.build.f_cpu=16000000L
arduino_atmega8515.build.core=arduino
 
##############################################################
arduino_atmega8535.name=Arduino-Test-Atmega8535
 
arduino_atmega8535.upload.protocol=stk500v2
arduino_atmega8535.upload.maximum_size=7168
arduino_atmega8535.upload.speed=38400
 
arduino_atmega8535.bootloader.low_fuses=0xEC
arduino_atmega8535.bootloader.high_fuses=0x18
arduino_atmega8535.bootloader.extended_fuses=0xFD
arduino_atmega8535.bootloader.path=atmega
arduino_atmega8535.bootloader.file=stk500boot_v2_notdefined.hex
arduino_atmega8535.bootloader.unlock_bits=0x3F
arduino_atmega8535.bootloader.lock_bits=0x0F
 
arduino_atmega8535.build.mcu=atmega8535
arduino_atmega8535.build.f_cpu=16000000L
arduino_atmega8535.build.core=arduino
 
##############################################################
 
atmega328.name=Arduino Duemilanove or Nano w/ ATmega328
 
atmega328.upload.protocol=stk500
atmega328.upload.maximum_size=30720
atmega328.upload.speed=57600
 
atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=atmega
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F
 
atmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino
 
##############################################################
 
diecimila.name=Arduino Diecimila, Duemilanove, or Nano w/ ATmega168
 
diecimila.upload.protocol=stk500
diecimila.upload.maximum_size=14336
diecimila.upload.speed=19200
 
diecimila.bootloader.low_fuses=0xff
diecimila.bootloader.high_fuses=0xdd
diecimila.bootloader.extended_fuses=0x00
diecimila.bootloader.path=atmega
diecimila.bootloader.file=ATmegaBOOT_168_diecimila.hex
diecimila.bootloader.unlock_bits=0x3F
diecimila.bootloader.lock_bits=0x0F
 
diecimila.build.mcu=atmega168
diecimila.build.f_cpu=16000000L
diecimila.build.core=arduino
 
##############################################################

Saya melakukan modifikasi pada file boards.txt agar tampilan daftar pilihannya tidak terlalu panjang dan berisi penuh konfigurasi yang hampir tidak pernah saya pergunakan. Jika suatu hari nanti perlu ditambah atau dimodifikasi ulang toh caranya sangat gampang. 

File boards.txt maupun file programmers.txt yang berada di folder/direktori yang sama telah sayaupload di siniFile programmers.txt perlu dimodifikasi jika anda ingin membakar/download bootloader dengan papan selain turunan papan arduino. Misalnya jika ingin menggunakan programmer USBasp atau USBtinyISP.







Demikianlah, selamat mencoba. Silahkan melihat ke semua link (tautan) di tulisan di atas dan daftar referensi berikut:
Sumber: pikirsa.wordpress.com

Tuesday 24 February 2015

HARDWARE :: Kumpulan Sensor-sensor untuk keperluan untuk Robot KRCI

Pada KRCI, penggunaan sensor-sensor yang akurat adalah salah satu faktor penentu kemenangan dalam pertandingan. Berikut ini akan kami bahas mengenai sensor-sensor yang dapat digunakan pada KRCI. Pada kontes ini robot akan bergerak menjelajah ruangan untuk mencari titik api. Agar robot dapat bergerak menjelajah ruangan maka dibutuhkan sensor jarak yang memberikan informasi pada robot akan jarak terhadap dinding-dinding.
Pada kondisi awal robot biasanya diletakkan pada kondisi yag tidak menentu pada posisi awal (home) oleh karena itu terlebih dahulu robot akan menyesuaikan arahnya terhadap salah satu dinding dengan mendeteksi saat sensor jarak robot terhadap dinding.  Caranya dengan memutar robot hingga salah satu sisi sensor (dalam gambar di atas adalah sensor kanan) berhasil menemukan dinding dalam jarak tertentu. Kemudian robot akan tetap berputar hingga sensor mendeteksi jarak yang semakin mendekat. Pada saat jarak sensor semakin menjauh maka robot dinyatakan telah sejajar dengan dinding dan selanjutnya robot dapat bergerak menjelajah ruangan dengan selalu memeriksa kondisi jarak dari sisi kanan, kiri, depan, serong kiri dan serong kanan. Dengan 5 buah sensor tersebut sebetulnya sudah cukup untuk menjelajah ruangan namun akan lebih baik lagi bila digunakan 8 buah sensor yang menempati 8 arah mata angin seperti pada gambar berikut
Robot KRCI mendeteksi 8 arah mata angin
Sensor Ultrasonik
Sensor ini adalah merupakan sensor jarak yang bekerja dengan mengirimkan suara ke obyek yang diukur dan perhitungan jarak dilakukan berdasarkan waktu yang terhitung mulai gelombang ultrasonik dipancarkan hingga diterima kembali.
Devantech SRF-05
Merupakan sensor jarak ultrasonik produksi Devantech yang merupakan penyempurnaan dari versi sebelumnya SRF04. Devantech SRF05 mampu menghitung jarak hingga 4 meter (SRF04 hanya 3 meter). Dengan teknik akses yang masih sama persis dengan SRF04 yaitu dengan memberikan pulsa trigger dan informasi jarak akan dikirim dalam bentuk pulsa echo di mana lebar pulsa akan mewakili jauhnya jarak. Satu hal lagi kelebihan SRF05 adalah kemampuan tambahan untuk diakses dengan hanya menggunakan satu jalur I/O saja selain teknik lama yang menggunakan 2 jalur tetap dipertahankan.
D-Sonar
Sensor Ultrasonic D-Sonar
Merupakan sensor ultrasonik produksi Delta Electronic yang didisain dengan harga yang jauh lebih terjangkau. Sensor ini dapat diakses dengan trigger dan echo seperti pada SRF04 dan juga melalui UART. Dengan melalui UART, informasi jarak tidak hanya berupa lebar pulsa namun juga dapat diminta dalam bentuk jarak.
Sensor Jarak Inframerah
Sharp GP2D12
Sensor jarak ultrasonik memang dapat mengatasi tipuan-tipuan dalam bentuk cermin, namun sensor ini memiliki kelemahan apabila obyek yang dideteksi berupa dinding yang bergelombang di mana sinyal sonar akan dipantulkan ke arah lain sehingga jarak tidak terdeteksi. Untuk mengatasi hal ini, sensor inframerah sebagai pendukung sistem pengukuran jarak adalah alternatif yang baik. Berbeda dengan sensor ultrasonik, sensor inframerah tidak menghitung waktu pancaran sinar melainkan menghitung di bagian mana sinar inframerah yang dikembalikan diterima oleh rangkaian phototransistor. Semakin jauh jarak maka semakin ke kanan sinar inframerah yang diterima pada rangkaian phototransistor dan semakin kecil tegangan outputnya.  Hasil output ini akan diterima oleh adc terlebih dahulu sebelum diambil oleh mikrokontroler.
sudut pantul gp2y0a21
Versi terbaru dari GP2D12 saat ini adalah GP2Y0A21. Bagian LED Drive circuit akan memancarkan cahaya inframerah ke obyek dan memantulkan dalam sudut yang sama. Apabila obyek menjauh maka sinar akan diterima semakin ke kanan dan tegangan keluaran akan semakin mengecil.
Sinar diterima pada phototransistor yang ada di dalam bagian signal processing circuit dan menghasilkan tegangan analog yang dikeluarkan ke bagian output
GP2D12, GP2Y0A21 Block Diagram
Hasil output tegangan tersebut tidaklah linier melainkan membentuk kurva seperti pada gambar berikut. Sensor mulai menampilkan jarak yang valid saat berada di jarak sekitar 4 cm dan menurun hingga 80 cm.
Kurva gp2d12 atau gp2y0a21
Untuk menghitung jarak maka dapat dilakukan dengan dua cara yaitu look up table dan interpolasi. Teknik paling sederhana adalah look up table yaitu dengan menyimpan di memori jarak-jarak berdasar kondisi tegangan sesuai dengan tabel di atas.
Berikut ini adalah beberapa sensor inframerah untuk pengukur jarak yang ada.
  • GP2D12, versi lama dengan jarak maksimum 80 cm
  • GP2Y0A21, versi terbaru dari GP2D12 dengan jarak maksimum 80 cm
  • GP2Y0A02, untuk jarak maksimum 150 cm
Sensor Kompas
Saat robot pertama kali berada pada posisi sejajar dengan dinding maka posisi tersebut harus disimpan sebagai referensi. Posisi tersebut disimpan dalam bentuh arah terhadap mata angin sehingga dibutuhkan sensor kompas untuk hal ini.
Devantech CMPS03
Devantech CMPS03 Digital Compass
Merupakan sensor kompas keluaran Devantech dengan antarmuka I2C.
Devantech CMPS10
Devantech CMPS10 Digital Compass
Merupakan versi update dari CMPS03 yang juga dilengkapi dengan sensor akselerasi dan sensor kemiringan. Pada KRCI terdapat salah satu tingkat kesulitan berupa uneven floor. Pada bagian ini robot akan mengalami gangguan navigasi sejenak karena bisa saja sensor jarak mengarah ke atas dan tidak mendeteksi dinding. Agar robot dapat mengetahui kapan terjadinya uneven floor, maka hal ini dapat dideteksi dengan fitur tilt (kemiringan) sensor pada CMPS10.
Uneven Floor
DST Navi
Merupakan sistem navigasi robot Produksi Delta Electronic di mana sistem ini dapat dihubungkan pada 8 buah SRF05, 8 buah GP2D12 dan sebuah Devantech Compass (CMPS03 atau CMPS10)
Modul DST-Navi terhubung dengan 8 SRF05, 8 GP2Y0A21, 1 CMPS10, Modul DST-AVR dan LCD
Pada sistem ini pengguna tidak harus menentukan kapan menggunakan sensor inframerah dan kapan sensor ultrasonik saat mengukur jarak. Terdapat perintah melalui UART yang meminta sistem untuk mengukur jarah di salah satu arah mata angin. Pada saat perintah ini diproses maka sistem akan melakukan dua metode pengukuran dan setelah menentukan hasil yang valid maka sistem akan mengirimkan informasi jarak ke UART. Hal ini akan membuat source code / program yang dibuat oleh pengguna semakin simpel.
Selain informasi jarak, DST-Navi juga dapat mendeteksi posisi robot terhadap arah mata angin ataupun kemiringan  dengan bantuan Devantech Compass. Salah satu aturan KRCI adalah robot kembali ke posisi awal, untuk kasus ini DST Navi juga dapat menyimpan catatan perjalanan robot berupa arah dan kemiringan setiap periode tertentu ke dalam memori sehingga melalui port UART catatan tersebut dapat diminta.
Sensor Api
Terdapat dua jenis sensor api yang sering digunakan yaitu Hamamatsu UVTRON yang mendeteksi titik api dengan mencari sinar ultraviolet dan TPA81 yang menggunakan inframerah.
Hamamatsu UVTRON R9454
UVTRON Sensor R2868 atau R9454
Merupakan sensor api produksi Hamamatsu  dan penyempurnaan dari versi sebelumnya R2868. Sensor ini memiliki ketahanan 10x lebih besar dari R2868 yaitu ( 10.000 m/s2 ). Sensor UVTRON dapat mendeteksi titik api dari jarak 5 meter.  Sensor ini membutuhkan tegangan DC yang cukup besar, yaitu 400 VDC. Untuk mempermudah pengguna dalam memakai sensor ini maka tersedia rangkaian driver C10423 yang menjadi antarmuka UVTRON dengan mikrokontroler. C10423 akan membangkitkan tegangan 400 Volt DC dan membangkitkan pulsa level TTL sehingga dapat dihubungkan langsung ke mikrokontroler
UVTRON Driver C10423
TPA81 Thermopile Array
TPA81 Thermophile Array
Tidak sejauh UVTRON yang mampu mendeteksi api pada jarak 5 meter, sensor ini hanya mendeteksi api pada jarak 2 meter. Namun UVTRON memiliki sudut yang cukup luas dalam mendeteksi titik api sehingga posisi api masih belum dapat dipastikan. Sedangkan Thermophile Array akan mendeteksi posisi titik api berdasarkan pixel-pixel yang mendeteksi cahaya inframerah dari api. Antarmuka TPA81 adalah dalam bentuk I2C

Sumber : http://delta-electronic.com/article/2012/01/an0177-sensor-sensor-untuk-keperluan-robot-krci/

Monday 23 February 2015

HARDWARE :: Cara Membuat USB Downloader dengan CodeVision AVR

Untuk itu alat dan bahan yang akan kita butuhkan adalah sebagai berikut :

Hardware dan Komponen
  1. Modul Downloader yang sudah ada / membeli jadi dari toko
  2. Chip Atmega8
  3. Crystal 16,000000 Hz
  4. Capasitor 22pF
  5. Resistor 1kΩ
  6. Switch Button
  7. Project Board (papan simulasi)
  8. PCB Polos.

Software Aplikasi dan Driver Installer
  1. Software CodeVision AVR (harus punya) jika tidak punya download disini
  2. Kode hexa yang nantinya diflash (.bat) / untuk mengisi program ke chip Atmega8 kita
  3. Driver usbasp yang nantinya dibutuhkan laptop/PC untuk menginstal USB downloader yang kita buat tadi
Pertama-tama yang pasti kita lakukan memastikan komponen-komponen sudah ada semuanya. Untuk sebagai percobaan kita rangkaikan Atmega8 dengan crystal 16MHz, capasitor 22pF, kemudian resistor dan switch ke Project Board. Langkah ini kita lakukan untuk menflash / mengisi chip atmega8 agar di dalamnya terisi program yang berfungsi sebagai chip downloader. Untuk itu kita rangkaian seperti digambar di bawah ini :
Scematic untuk Flash Chip Atmega8

Setelah kita sudah selesai merakit rangkaian seperti gambar di atas maka selanjutnya buka software CodeVision AVR yang sudah kita instal di PC/ laptop kalian masing-masing.


Setelah kita akan membuka menu Chip Programmer. Di menu programmer kita perlu mengubah Fuse-Bit di Atmega8, fungsi Fuse-bit ini kita mengganti Clock internal dari ATMEGA8 agar bisa membentuk sebesar 1MHz. Berikut bentuk gambarnya :
Chip Programmer                                        
Kemudian jika sudah semua, langkah selanjutnya kita klik File > Load FLASH dan Load EEPROM, maka akan membuka search file. Kita cari File (.hex) dari file yang sudah kita download di atas tadi, di Folder USBasp > Bin > firmware > Pilih file usbasp.atmega8.2011-05-28.hex (ganti optional file type) untuk melihat kode .hex.
Load FLASH
Load EEPROM
Klik OPEN, ketika semua langkah sudah dilakukan dengan benar maka langkah selanjutnya kita tinggal mengisi opsional-opsional yang sudah kita buat tadi ke dalam memori ATMEGA8. Kita masuk dalam proses mendownload program atau mengisi Chip Atmega8 kita agar menjadi Downloader USB.

Kita Koneksikan rangkaian yang kita buat ke Downloder yang sudah jadi beli dari Toko atau pinjam dari teman. Setelah terkoneksi maka Klik "Program All" disamping kolom chip atmega8. Tunggu sampai program selesai di Flash atau diisikan ke chip atmega8 kita yang masih kosong tadi.
* loading
Setelah chip sudah terflash atau terisi oleh program tadi sekarang kita menggambar layout PCB untuk dijadikan USB Downloader buatan kita sendiri nanti (made in sendiri), hehe

Rangkaian yang akan kita buat sebagai berikut ini.
* atmega8, atmega44, atmega88


Gambar di bawah ini merupakan hasil jadi yang telah saya dan teman-teman buat untuk sebagai Tugas Kuliahmembuat USB Downloader Mikrokontroler. Setelah Semuanya jadi, maka kita selanjutnya mencoba koneksi USB Downloader yang sudah kita buat tadi ke PC/ Laptop kalian masing-masing.
* loading
Instal Driver untuk USBasp ke dalam PC / Laptop kita masing-masing agar USB Downloader kita bisa terdeteksi untuk memprogram atau menflash ke chip yang lainnya. Drivernya bisa didownload link di atas. Ikuti langkah-langkah sebagai berikut sampai benar-benar clear dan finish maka Downloader yang kita buat selesai mencapainya.
* loading
Akhirnya kita sudah selesai melakukan Percobaan Membuat USB Downloader dengan menggunakan fasilitas bantuan Software CodeVision AVR yang sering kita gunakan dalam membuat robot dan sejenis. Semoga info ini bermanfaat buat kalian teman-teman, mohon maaf jika ada penulisan salah kata harap dimaklumi,, hehe

HARDWARE :: Cara Kerja Sensor Api UV-Tron | Modul Flame Detector

Sensor api UV-Tron adalah sebuah sensor yang mendeteksi adanya nyala api yang memancarkan sinar ultraviolet. Pancaran cahaya ultraviolet dari sebuah nyala lilin berjarak 5 meter dapat  dideteksi oleh sensor ini. Sensor api UV-Tron biasanya digunakan pada lomba robot, seperti KRCI (kontes robot cerdas indonesia) yang berfungsi mendeteksi keberadaan lilin yang akan dipadamkan oleh sirobot. Untuk lebih mudah jika anda berniat untuk membeli sensor UV-Tron sebaiknya langsung membeli lengkap dengan drivernya alias membeli yang sudah jadi modul yang siap dipakai. Sensor UV-Tron akan mengeluarkan logika high (1) jika ia mendeteksi keberadaan api dan sebaliknya sensor UV-Tron akan mengeluarkan logika low (0) jika ia tidak mendeteksi api, anda bisa mengecek keluarannya dengan multimeter analog. Perlu diketahui, output yang dikeluarkan adalah sinyal kotak dengan frekuensi yang bergantung pada kapasitor yang digunakan pada driver. Pemilihan kapasitor driver harus disesuaikan dengan kebutuhan, jika kita ingin mendapatkan output dengan sampling yang lebih cepat maka gunakan kapasitor dengan kapasitansi yang lebih kecil (biasanya 0.01 µF), sebaliknya jika ingin sampling yang lebih lambat gunakan kapasitansi kapasitor yang lebih besar (misal 1 µF). Biasanya nilai kapasitansi 0.01 µF memiliki periode sampling 0.01s begitupun untuk 1 µF memiliki periode sampling 1s kira-kira begitu.
prinsip kerja Modul Sensor Hamamatsu UVTRON R2868

 Gambar Modul Sensor Hamamatsu UVTRON R2868