Translate Blog

EnglishFrenchGermanSpainItalianDutchRussianPortugueseJapaneseKoreanArabicChinese Simplified

May 3, 2011

Program Hamamatsu UV Tron

Update lagi ni kali program untuk sensor api UV Tron (Hamamatsu R2868). Saya coba googling penggunaan UV Tron dan AVR,  alhamdulillah akhirnya dapet juga. Ok, tulisan kali ini saya akan sharing bagaimana menggunakan AVR (seri berapa pun dah) 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 – di jelaskan di bawah ). UV Tron ini mempunyai sudut sensitivitas seperti gambar di bawah:
uvtron angular sensitivity
Gambar 1. Sudut jangkauan UV Tron
Dengan jangkauan sudut seperti diatas, maka cukup sulit menentukan posisi sebuah lilin. Teknik yang biasa digunakan adalah menggunakan pelindung untuk mengurangi jangkauan sudut. Pelindung yang digunakan kurang lebih nampak seperti ini:

uvtron dengan pelindung
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  lilin di setiap ruangan. Umumnya pemain lama menggunakan 2 UV Tron. Satu UV Tron dengan pelindung untuk menemukan posisi  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 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.
UVTron yang terpasang di C3704
Gambar 3. UV Tron yang terpasang di C3704 (sumber: http://www.superdroidrobots.com/product_info/uvtron_files/image002.gif)
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:
Hubungan sumber tegangan C3704
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 
#include 

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORT A
#endasm
#include 

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:

1 comment:

  1. mas gimana caranya mengatur kepekaan sensor..
    maklum newbie mas n pengen mendalami dunia robotika..http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/4.gif

    ReplyDelete