Rabu, 28 Desember 2011

Mengakses Sensor Ultrasonik SRF04




SRF04 adalah sensor ultrasonic yang berfungsi untuk mengukur jarak suatu benda dengan prinsip memancarkan gelombang ultrasonic kemudian menangkap pantulan nya. Sensor ini dapat mengukur jarak suatu benda dengan jarak maksimal 3m dan memiliki blank area 3cm (blank area yaitu sensor tidak dapat mengukur jarak jika jarak benda < 3cm). 

Saya pernah menggunakan sensor ini ketika KRCI 2009 mewakili UGM di Divisi Senior Berkaki. Walaupun di datasheetnya sensor ini maksimal hanya dapat mengukur jarak maksimal 3m tapi saya pernah bisa mengukur jarak benda sampai 6m.

 


Sensor ini memiliki 5 pin, tetapi hanya 4 pin saja yang digunakan yaitu :

                    1.   5v supply
                    2.      Echo pulse output
                    3.      Trigger pulse input
                    4.      0v ground

Dari gambar diatas sudah jelas bahwa sensor ini membutuhkan tegangan supply 5VDC yang dihubungkan ke pin 5v Supply dan ground yang di hubungkan ke pin 0v ground. Pin echo pulse berfungsi sebagai pin output yang nantinya dihubungkan ke controller sehingga kontroler dapat membaca pulsa yang dihasilkan sensor dan pin trigger pulse adalah pin input yang nantinya dihubungkan ke kontroler untuk mendapatkan pulsa dari kontroler.


Coba perhatikan gambar diatas, Untuk memperoleh data yaitu pulsa (yang valid) dari sensor maka terlebih dahulu kita berikan sinyal pulsa ke sensor melalui pin trigger dengan Time ON selama 10 uS (bisa juga dengan frekuensi 100Khz), setelah kita berikan sinyal pulsa nantinya pin echo akan high (ini menandakan data valid), nah.. ketika pin echo high hitunglah lama nya, yaitu dengan menggunakan counter. Hasil dari counter ini lah jarak yang terukur dengan menggunakan sensor SRF04. (hasil counter adalah nilai yang mewakili jarak tetapi belum menunjukkan jarak yang sebenarnya)

Berikut ini adalah potongan / fungsi program yang saya buat dengan CodeVision AVR untuk mengakses sensor SRF04

void scan_us1(void)//fungsi scan ultrasonik
{
        loop1:
        us1=0;//us1 adalah variable counter
        PORTA.7=0;//PORTA.7 berfungsi sebagai generator pulsa ke pin trigger
        DDRA.7=0;
        delay_us(10);//delay 10uS
        PORTA.7=1;
        DDRA.7=1;
        delay_us(10);
        PORTA.7=0;
        DDRA.7=0;
        delay_us(10);
        if(PINA.6==0)goto loop1;//PINA.6 berfungsi sebagai input
        else                                     //untuk baca pulsa dari pin echo sensor
        while(PINA.6==1)             //ketika data valid yaitu echo high
        {
                us1++;//counter
                delay_us(58);//kalibrasi supaya nilai counter langsung berupa
                                     //jarak sebenarnya
                if(us1==120)break;//(pembatasan pembacaan sampai 120cm)
                                             //intruksi ini dapat dihapus atau batasnya
                                             //diganti sesuai kebutuhan
        }       
}   

Nilai delay ketika proses counter yaitu delay_us(58) berasal dari percobaan untuk memperoleh nilai us1 langsung sesuai dengan jarak yang sebenarnya.

Selamat mencoba…

8 komentar:

  1. mw tanya kk srf04 apa bisa dipasang pda atmega 16..?
    truz konfigurasinya gimana..?


    bintar.tunas@yahoo.com

    BalasHapus
    Balasan
    1. sensor ini bisa dipakai dengan atmega16, dan potongan program (fungsi) diatas bisa juga digunakan untuk atmega16 dengan syarat pakai codevision, kalau tidak pakai codevision perlu penyesuian. untuk konfigurasi bisa dilihat dari fungsi program diatas : yaitu pin echo pulse srf04 di hubungkan ke PINA.6 dan pin triger pulse srf04 dihungkan ke PINA.7 . semoga bisa membantu

      Hapus
  2. misi gan, ane punya 3 srf04 tapi jumlah port terbatas. bisa dicombine ga 3 sensor itu biar bisa irit port?

    thanks

    BalasHapus
  3. bang,

    " if(us1==120)break;//(pembatasan pembacaan sampai 120cm) "

    kalau saya pakai if(us1>=120)break; // bagimana bang?

    BalasHapus
  4. pak. nilai yang keluar di lcd kok tetep di nilai pembatas 120 ya? gak pernah naik turun meskipun didekatkan ke objek. tegangan mikro dari port cuma keluar 2 V, input malah gak ada tegangan. mungkin ada solusinya pak?

    BalasHapus
    Balasan
    1. wah iya pak. ternyata salah inialisasi port. hehe. terima kasih atas pencerahannya

      Hapus