Hamamatsu UV Tron dan AVR
Mmhh.. saya pertama kali menggunakan UV Tron (Hamamatsu R2868) sekitar awal 2007 (kalau tidak salah). Saya coba googling penggunaan UV Tron dan AVR, tapi belum menemukan hasil yang memuaskan. Jadi dulu seharian saya mengoprek ATMega8535 dan UV Tron, alhamdulillah akhirnya bisa juga. Well, tulisan kali ini saya akan sharing bagaimana menggunakan AVR (chipnya tidak masalah) dan Hamamatsu UV Tron. Banyak robot fire fighting menggunakan sensor UV ini untuk mendeteksi nyala lilin. Nyala sebuah lilin dapat dideteksi oleh UV Tron yang masih apik hingga jarak 5 meter, bahkan bara rokok juga dapat dideteksi dari jarak lebih dari 5 meter. UV Tron ini mendeteksi ultraviolet dari penggunaan efek photoelektrik dari logam dikombinasikan dengan efek penggandaan gas. Spektral cahaya yang dijangkau adalah 185 - 260 nm, jadi cahaya terlihat tidak mempengaruhi UV Tron (Nah, bagi yang menganggap senstifitas UV Tron dipengaruhi oleh terang tidaknya ruangan sepertinya salah
Tapi untuk mengantisipasi kondisi di luar ruangan bisa menggunakan background cancel level pada board - akan saya jelaskan di bawah ). UV Tron ini mempunyai sudut sensitivitas seperti gambar di bawah:
Gambar 1. Sudut jangkauan UV Tron
Dengan jangkauan sudut seperti gambar 1, maka cukup sulit menentukan posisi absolut sebuah lilin. Teknik yang lazim dilakukan adalah menggunakan pelindung untuk mengurangi jangkauan sudut. Pelindung yang digunakan kurang lebih nampak seperti ini:
Gambar 2. UV Tron dengan pelindung (sumber: http://www.superdroidrobots.com/product_info/uvtron_files/image017.jpg)
Dalam kompetisi fire fighting robot seperti Trinity College Fire Fighting Robot Contest (atau kalau di Indonesia adalah KRCI), umumnya robot akan menjelajahi empat ruangan dan mengecek apakah ada lilin atau tidak. Jika kita menggunakan satu UV Tron yang sudah diberi pelindung tentu akan memakan waktu men-scanning posisi absolut lilin di setiap ruangan. Umumnya pemain lama menggunakan 2 UV Tron. Satu UV Tron dengan pelindung untuk menemukan posisi absolut lilin dan satu lagi UV Tron tanpa pelindung untuk mengecek ada tidaknya lilin di ruangan (Biasanya disebut UV Tron global. Jadi robot cukup berada dekat pintu dan mengecek UV Tron global untuk mengetahui apakah ada nyala lilin, dan jika ada baru gunakan UV Tron dengan pelindung untuk mengetahui posisi absolut lilin).
Sekarang saatnya menghubungkan UV Tron dengan AVR. Pastinya Anda beli UV Tron (yang seperti bola lampu) dengan board pengaturnya kan (C3704)? Hubungkan anoda UV Tron (yang kakinya lebih panjang) dengan lubang di C3704 dengan tanda A dan katoda (kaki lebih pendek) dengan lubang bertanda K.
Gambar 3. UV Tron yang terpasang di C3704 (sumber: http://www.superdroidrobots.com/product_info/uvtron_files/image002.gif)
Nah untuk input tegangan, banyak referensi yang cukup membingunkan. Menurut spesifikasi, board C3704 membutuhkan input tegangan 10 - 30V DC. Sebenarnya input tersebut tetap diregulasi oleh C3704 menjadi 5V. Kita bisa melewati regulator pada C3704 dengan memberikan langsung tegangan 5 V ke kaki output regulator C3704. Regulator pada C3704 merupakan regulator 7805 dengan tanda ICI. Ada 4 lubang (3 digunakan oleh regulator) dengan tanda O (output), G (ground), I(input) dan 0 (output). Lubang ke-4 yang bertanda “0″ tidak digunakan dan bisa digunakan sebagai input tegangan 5 V. Perhatikan gambar di bawah ini:

Gambar 4. Hubungan sumber tegangan C3704 (sumber: http://www.superdroidrobots.com/product_info/uvtron_files/image003.gif)
Jika Anda menggunakan sumber tegangan 10 - 30V DC, bisa disambungkan ke lubang dengan tanda “+” dan groundnya tetap ke lubang bertanda “-”. Oh iya, perhatikan seri boardnya! Jika C3704 maka penjelasan di atas dapat diterapkan (seri ini yang saya gunakan), jika C3704-2 maka inputnya bisa langsung 5V, jika C3704-3 inputnya antara 6 - 9V. Hubungan ke AVR adalah melalui lubang Q (lubang dengan tanda 1) dan Q bar (lubang dengan tanda 2). Lubang 1 dan 2 ini merupakan sinyal output berupa pulsa high atau low. Jika diingikan uC untuk membaca masukkan 5v, maka pin uC dihubungkan dengan lubang Q. Jika diinginkan uC untuk membaca kondisi low, maka hubungkan dengan lubang Q bar. Lebar pulsa saat mendeteksi adanya nyala lilin adalah 10ms (tanpa adanya penggunaan kapasitor pada lubang Cx - lihat datasheetnya). Di board C3704 juga terdapat setting jumper berlabel 3, 5, 7 dan 9 (atau disebut setting background cancel level). Jika merasa banyak pancaran cahaya natural bisa diset jumpernya ke 9, defaultnya adalah 3. Jadi saat UV Tron memberikan 3 sampai 9 pulsa ke board dengan interval waktu 2 detik atau kurang, rangkaian pemroses sinyal baru akan memberikan output pulsa yang selebar 10 ms itu (nah banyak pulsa dari UV Tron yang diinginkan bisa diset melalui jumper ini).
Lihat gambar 4. Katakanlah IO line (Q bar) dari C3704 saya hubungkan dengan pin INT2 AVR. Sebenarnya kalau untuk mengetes pulsa output dari C3704 bisa langsung menggunakan logic probe. Tapi saya coba iseng tes pakai AVR dan menampilkannya di LCD. Pertama-tama set waktu lama pembacaan. Lalu set INT2 dengan falling edge (karena kita menggunakan Q bar untuk membaca pulsa output saat low). Rutin INT2 hanya menaikkan variabel (yang menyatakan banyaknya pulsa yang masuk). Lalu tampilkan di LCD variabel tersebut setelah waktu pembacaan selesai. Kurang lebih kodenya seperti berikut:
#include <mega8535.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORT A
#endasm
#include <lcd.h>
int photon_c;
// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
photon_c++;
}
void scan_candle(void unsigned int time) {
photon_c = 0;
//enable int2 falling edge
GICR|=0x20;
//wait
delay_ms(time);
//disable int2
GICR&=0xdf;
}
void tampil(unsigned char dat)
{
unsigned char data;
data = dat / 100;
data+=0x30;
lcd_putchar(data);
dat%=100;
data = dat / 10;
data+=0x30;
lcd_putchar(data);
dat%=10;
data = dat + 0x30;
lcd_putchar(data);
}
void main(void)
{
int num;
GICR|=0x00;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x00;
lcd_init(16);
#asm("sei")
num = 0;
photon_c = 0;
while (1) {
num++;
scan_candle(1000);
lcd_gotoxy(0,0);
tampil(num);
lcd_putchar(0x20);
tampil(photon_c);
delay_ms(1000);
};
}
Kalau tidak mau ambil pusing, bisa saja cek apakah PIN.X pada AVR bernilai low atau high. Jika terhubung dengan Q bar dan PIN.X membaca low, maka dapat dinyatakan UV Tron mendeteksi adanya nyala lilin. Kalau dibuat sederhana, kodenya dapat diubah menjadi seperti ini:
...
#define flame PINB.0
...
unsigned char banyaknya;
while (1) {
if (flame==0) {
banyaknya++;
}
if (banyaknya>=3) {
lcd_putsf("ada lilin");
banyaknya=0;
}
}
Referensi:
Menormalkan Aktivitas Why I Love Deadline



Back to top
10 mita, 17 Jun 2008 at 9:06 am
kak, UVtron tuh apaan sih? cra kerja dya apa mancarin sinar and berubah klo sinar tsb kna cahaya lilin?? tpi kok hasilnya berupa pulsa??kak kpan maen kkampus lgi? kta2 lgi butuh pencerahan nich? yogi ma yg laen pda batu smua, gk mau ngajarin.
9 gedex, 17 Jun 2008 at 2:57 am
#dani
umumnya dipakai buat deteksi lilin klo di KRCI
8 dani, 17 Jun 2008 at 12:09 am
UV Tron paan sih..? fungsinya bwt apa???
7 gedex, 03 Jun 2008 at 2:15 pm
saat global mendapatkan lilin, udah pasti diharuskan ada lilin di ruangan itu.. makanya pastikan global itu benar2 valid. Jadi mau gak mau forever loop itu gak masalah, tinggal set aj waktu timeoutnya mau berapa detik
6 momogie, 03 Jun 2008 at 1:53 pm
ya gw ngerti, klo pake delay, saat UVtron ga dapet n waktu delay dah abiz, yaudah deh dy kira ga ada api disitu makanya melengos langsung cabut! Tp klo pake For dy akan trus scan sampe dapet, tapi klo tenyata ga ada lilin gmana?kira2 kaya gto kan?
5 gedex, 02 Jun 2008 at 7:02 pm
sebenarnya gak perlu pake delay, cukup pakai for aja..
Nah dari forever ‘for’ itu tunggu ampe 3x atau lebih kena pulsanya
agar itu benar-benar valid, kalau masalah sensitivitas jaraknya mungkin ngaruh juga dari kondom UV Tron nya itu sendiri. Tapi terkadang klo masih bagus juga kondomnya dan salah pembacaan (’kodingnya’) bs gak kena lah pulsanya saat masuk
4 momogie, 02 Jun 2008 at 6:54 pm
tapi kali ini periode pulsanya aga cepat(pendek) walau jarak lilinya jauh kin dipengaruhi sama kapasitor yg aga kecil kapasitasnya!
klo modul yg lainnya malah semakin jauh jarak lilin, semakin lama (panjang) periode pulsanya!padahal make capasitor yg sama!
klo untuk 3x or 1x baca pulsa sama aja dek coz scan untuk cari lilin pake delay, selama belum dapet lilin dia akan scan trus, nah untuk dapet 3x nilai pulsa butuh waktu yg aga lama donk!
3 gedex, 31 May 2008 at 8:22 pm
#bayu
coba aj datang k bengkel robotika gundar, disitu byk anak2 yg doyan ngoprek robot.. apalagi klo dibawain makanan dan sesajen lainnya, pasti tambah semangat ngoprek nya
#gie
iya kapasitor itu buat panjangin periode pulsanya, jadi baik jg utk kemungkinan loss timing pembacaan pulsa.. saran gw baca pulsanya jangan hanya 1x, tp 3 atau lebih utk memastikan itu benar-benar ada lilin.
2 momogie, 30 May 2008 at 9:16 pm
Dex kemarin gw coba UV tron yg Global mpunya Dhadang, max jarak ampe sekitar 4M (dari meja samping lemari sampe depan pintu WC) lumayan jauh khan?
gw pake capasitor 1micro F buat cx nya! capasitor tersebut emang ngaruh juga, terutama buat pulsanya!
1 bayu, 30 May 2008 at 9:34 am
bagus banget artikelnya, anu bro boleh nanya ngk, kira2 ada ngk punya script buat penggabungan antara sensor u vtron, basic stamp, dan sensor ultra sonic srf04, buat aplikasi robot pemadam api…
lagi pusing ngebikin ta nih, so minta tolong yah….