Home / Mikrokontroler / AVR / Cara Memprogram Sensor Jarak Ultrasonik PING

Cara Memprogram Sensor Jarak Ultrasonik PING

Sensor Jarak Ultrasonik PING

Sensor PING merupakan salah satu sensor ultrasonik yang banyak dipakai untuk aplikasi robotika. Biasanya sensor ini digunakan sebagai sensor utama untuk navigasi menyusuri dinding (wall follower). Untuk meng-interface-kan sensor ini dengan mikrokontroler, kita hanya memerlukan 1 buah jalur data (PIN) saja. 1 PIN tersebut nantinya kita jadikan sebagai input atau output. Oke dari pada terlalu lama bercerita, kita mulai saja prakteknya 😀

Sensor Jarak Ultrasonik PING
Sensor Jarak Ultrasonik PING

 

Berikut saya jelaskan tahapan-tahapan untuk mengakses sensor PING.

1. PIN dijadikan sebagai output
2. Keluarkan pulsa pada PIN sebesar 2 microseconds – 5 microseconds
3. PIN dijadikan sebagai input + aktifkan pullup internal
4. Hitung pulsa high
5. Konversi pulsa menjadi jarak dengan rumus =>> Jarak (cm) = Pulsa (us) * 29.034 / 2

Untuk mendapatkan hasil pembacaan jarak yang presisi, kita harus memperhatikan program untuk menghitung lebar pulsa. Sebaiknya gunakan timer untuk menghitung besarnya lebar pulsa. Terkadang saya melihat di beberapa artikel atau blog yang memposting tentang pembacaan sensor ping, untuk program menghitung lebar pulsanya mereka memanfaatkan delay. Tentu saja hal itu sangat mempengaruhi hasil kepresisian dari pembacaan sensor PING, karena nilai delay tidak sama dengan nilai timer.
Berikut adalah program untuk mengakses sensor ultrasonik yang benar (menurut saya :D), Clock yang saya gunakan pada mikrokontroller adalah 16MHz. untuk menghitung besarnya pulsa, saya memanfaatkan timer 1 dengan frekuensi 2MHz (prescaler = 2). Sehingga timer akan menghitung setiap 0,5 microseconds.

Pengaturan timer pada CodeVision AVR dapat dilihat pada gambar dibawah ini.

Memprogram Sensor Jarak Ultrasonik PING
Memprogram Sensor Jarak Ultrasonik PING

Program selengkapnya dapat dilihat di bawah ini. Saya menggunakan LCD pada PORTD sebagai media penampil datanya. Satu hal lagi jangan lupa, untuk menampilkan bilangan berkoma pada LCD, pastikan setingan (s)printf feature pada bagian project configuration adalah float, width, precision.

Memprogram Sensor Jarak Ultrasonik PING
Memprogram Sensor Jarak Ultrasonik PING


[sourcecode language=”c”] #include <mega32.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#include <alcd.h>

// Definisi alamat sensor PING
#define  DDR_PING    DDRC.2
#define  PING_OUT    PORTC.2
#define  PING_IN     PINC.2

// Declare your global variables here
unsigned char baris_1[16], baris_2[16];
long timer = 0, xTimer = 0;
float pulsa, jarak;

// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
xTimer++;
}

void bacaPing() {
DDR_PING = 1;         // PING sebagai output
PING_OUT = 1;         // Memberikan pulsa high selama 2 microseconds
delay_us(2);
PING_OUT = 0;
DDR_PING = 0;         // PING sebagai input
PING_OUT = 1;         // Aktifkan pullup internal
while(PING_IN == 0);  // Tunggu pulsa high dari PING
TCNT1 = 0;            // Nolkan timer
xTimer = 0;           // Nolkan variabel xTimer
while(PING_IN == 1);  // Tunggu pulsa low dari PING
timer = TCNT1;        // Ambil data dari timer
pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;  // Menghitung pulsa yang masuk dalam satuan microseconds
jarak = pulsa / 29.034 / 2;   // Menghitung jarak dalam satuan centimeter
lcd_clear();
sprintf(baris_1, "Pulsa = %f ", pulsa);
sprintf(baris_2, "Jarak = %f ", jarak);
lcd_gotoxy(0, 0);
lcd_puts(baris_1);
lcd_gotoxy(0, 1);
lcd_puts(baris_2);
delay_us(300);
}

void main(void) {
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;

lcd_init(16);
lcd_clear();

#asm ("sei")

while (1) {
bacaPing();
delay_ms(500);
}
}
[/sourcecode]

 

Source code lengkapnya dapat anda download pada link berikut http://www.ziddu.com/download/16254017/ProgramPING.rar.html

SEMOGA BERMANFAAT !! 😀

About Eko Rudiawan Jamzuri

Eko Rudiawan Jamzuri
Seorang lelaki yang punya ketertarikan dengan dunia elektronika dan robot yang saat ini sedang serius belajar tentang dunia bisnis dan internet marketing. My dream to be success technopreneur

Check Also

PCB Downloader Mikrokontroler AVR USBasp

Membuat Rangkaian Downloader Mikrokontroler AVR USBasp

[cite]http://eko-rudiawan.com/rangkaian-downloader-mikrokontroler-avr/[/cite] Apa Itu Rangkaian Downloader Mikrokontroler? Downloader atau programmer dalam dunia mikrokontroler dikenal sebagai alat …

17 comments

  1. salam kenal mas, saya dari bali, politeknik juga, ajang KRCI kita baru ikut tahun lalu, semoga mas mau berbagi ilmu dengan kita, mengingat pengalaman mas di bidang robotika nasional sudah sangat baik. terima kasih

  2. Asslamuaikum
    Mas ini bisa di aplikasikan pengukur tinggi badan tidak,klo minta buatkan brpa ya harga nya??
    output nya lcd

    • bisa mas,, nanti sensor ping nya diarahkan ke bawah untuk mendeteksi jarak antara kepala dgn ping,, nanti tinggi badan bisa dihitung dengan rumus jarak ping ke lantai – jarak ping ke kepala

  3. ass..
    Mas…pnya program robot wall follower dengan mnggunakan program AVR dan perhitungan fuzzy logic..?

    terimakasih..

    bls.

  4. klw sensor pingnya langsung dhubungkan ke mikrokontroler atau ada rangkaiannya dlu mas ( misalnya pke rangkaian ADC )???? trus pebedaannya sensor ping dengan SRF05-HY apa atau sama aja mas????

  5. mas, klo perhitungann nya, microsecond menjadi milimeter gimn ya?
    kan klo dari microsecond ke cm code :
    cm=microsecondTocentimeter ( duration);
    {
    return microseconds / 29 / 2 ;
    }

    nah klo untuk microsecond ke milimeter, gmn mas…?saya bingung konversinya…

  6. gw nyoba . . tapi ga muncul perhitungannya di LCD . . tapi waktu tipe data dari pulsa dan jaraknya nya diganti jadi integer bisa . . cuma hasil pengukurannya jadi ga akurat

  7. mas sudah setting konfigurasi project nya untuk bisa menampilkan data float ke lcd ? kalau tidak di konfigurasi ya gak akan muncul bilangan berkoma di lcd

  8. mas eko bisa tolong jelasin gak maksuk line yang ini
    pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;
    saya gak ngerti sama sekali nih kenapa harus seperti itu…
    tolong ya mas….

  9. Mas Eko bisa ajarin bikin alat pendeteksi ketinggian dan volume air dengan sensor ultra sonik atau bikinkan alatnya.

  10. Saya punya sedikit masalah dengans ensor Ping yang saya gunakan. Daya yang dipakai oleh robot yang saya miliki berasal dari baterai charger, jika daya baterai mulai sedikit lemah proses pembacaan dari sensor Ping mulai error. Apakah ada cara untuk mengatasi hal itu. Tentunya selain proses penggantian baterai.

    blog saya: http://bocah-cakil.blogspot.com

    • saya juga pernah mengalami hal tersebut,, biasanya hal itu terjadi karena tegangan supply untuk ping kurang dari 4,8,, saran saya sebaiknya gunakan regulator switching dengan arus yg besar agar tegangan supplai stabil dan tidak terjadi drop tegangan

Leave a Reply

Your email address will not be published. Required fields are marked *

fifteen − 12 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.