Kamis, 19 Mei 2011

Cara Memakai Sensor Ultrasonik Ping dengan mikrokontroler ATmega8535

Ping))) Ultrasonic Range Finder, adalah modul pengukur jarak dengan ultrasonic buatan Paralax Inc. yang didesain khusus untuk teknologi robotika. Dengan ukurannya yang cukup kecil (2,1cm x 4,5cm), sensor seharga 300 ribu rupiah ini dapat mengukur jarak antara 3 cm sampai 300 cm. Keluaran dari Ping))) berupa pulsa yang lebarnya merepresentasikan jarak. Lebar pulsanya bervariasi dari 115 uS sampai 18,5 mS. 


Pada dasanya, Ping))) terdiri dari sebuah chip pembangkit sinyal 40KHz, sebuah speaker ultrasonik dan sebuah mikropon ultrasonik. Speaker  ultrasonik mengubah sinyal 40 KHz menjadi suara sementara mikropon ultrasonik berfungsi untuk mendeteksi pantulan suaranya. Pada modul Ping))) terdapat 3 pin yang
digunakan untuk jalur power supply (+5V), ground dan signal. Pin signal dapat langsung dihubungkan dengan mikrokontroler tanpa tambahan komponen apapun.  Ping))) mendeteksi objek dengan cara mengirimkan suara ultrasonik dan kemudian “mendengarkan” pantulan suara tersebut. Ping))) hanya akan mengirimkan suara ultrasonik ketika ada pulsa trigger dari mikrokontroler (Pulsa high selama 5uS). Suara ultrasonik dengan frekuensi sebesar 40KHz akan dipancarkan selama 200uS. Suara  ini akan merambat di udara dengankecepatan 344.424m/detik (atau 1cm setiap 29.034uS), mengenai objek untuk kemudian terpantul kembali ke Ping))). Selama menunggu pantulan, Ping))) akan menghasilkan sebuah pulsa. Pulsa ini akan berhenti (low) ketika suara pantulan terdeteksi oleh Ping))). Oleh karena itulah lebar pulsa tersebut dapat merepresentasikan jarak antara Ping))) dengan objek. Selanjutnya mikrokontroler cukup mengukur lebar pulsa tersebut dan mengkonversinya dalam bentuk jarak dengan perhitungan sebagai berikut :

Jarak = (Lebar Pulsa/29.034uS)/2   (dalam cm) 
atau  
Jarak = (Lebar Pulsa x 0.034442)/2      (dalam cm) 
Karena 1/29.034 = 0.34442




Satu hal yang perlu diperhatikan adalah bahwa Ping))) tidak dapat mengukur objek yang permukaannya dapat menyerap suara, seperti busa atau sound damper lainnya. Pengukuran jarak juga akan kacau jika permukaan objek bergerigi dengan sudut tajam, seperti kertas yang dilipatlipat tempat kita meletakkan obat nyamuk bakar.  

Pada aplikasi ini mikrokontroler akan membaca lebar pulsa dari Ping))), dihitung kemudian ditampilkan ke LCD. Pastikan !!! : pin Signal (SIG) terhubung ke PINC.0 Tanpa resistor pullup.


Selanjutnya kita perlu membuat beberapa file header untuk menggunakan sensor ping ini. kita perlu membuat file delay_win.h, uson.h dan file uson.c

buat file tersebut bisa menggunaka notepad atau menggunakan avrstudio, berikut isi file tersebut.


isi file delay_win.h
#include <avr/io.h>


void delay_025ms(uint8_t s);
void delay_us(uint8_t s);


isi file uson.h


#define DDR_Uson DDRC
#define PORT_Uson PORTC
#define PIN_Uson PINC
#define Front_Uson 0


uint8_t get_distance(char side);


isi file uson.c


#include <avr/io.h>
#include "uson.h"
#include "delay_win.h"


uint8_t get_distance(char side) // fungsi untuk mendapatkan jarak 
{
uint8_t distance = 0;


DDR_Uson |=_BV(side);
PORT_Uson|=_BV(side);
delay_us(3);
PORT_Uson &=~_BV(side);
DDR_Uson &=~_BV(side);
loop_until_bit_is_set(PIN_Uson,side); 


// ultasonik sudah mengirimkan sinyal


while(bit_is_set(PIN_Uson,side) && distance<=254)
{
distance = distance + 1;
delay_us(24);
}
if (distance >= 254)
distance = 255;
else if (distance<=8)
distance=2;
else if (distance==9)
distance=3;
else if (distance>9 && distance<=31)
distance=((distance-2)/2);
else 
distance=((distance-1)/2);


return distance;
}


load file tersebut ke dalam project di software avrstudio dan jangan lupa file untuk LCD juga disertakan
berikut screenshoot program di avrstudio untuk mencari jarak dengan sensor uson














5 komentar:

  1. mas, mau nanya kalo letak sensor ping ke mikronya jauh ga apa2???

    BalasHapus
  2. jaraknya sekitar 3 meter...

    BalasHapus
  3. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  4. Assalamualaikum,

    Saya cuba PING sensor pada board CM-700, ATMEGA2561, Clock 16MHz. AVR studio 5.1,

    Saya tidak display pada LCD, jadi saya tukar ke Roboplus terminal,

    Saya ganti ADC PC0 ke PF1

    Selepas saya build

    Error pertama, saya masukkan
    #include ke main file

    Error kedua, saya masukkan
    #ifndef F_CPU
    #define F_CPU 16000000UL // or whatever may be your frequency
    #endif

    Error ketiga, pada fail uson.c iaitu delay_us(24)& delay_us(3);
    saya ganti kedua-duanya ke delay_ms(1);

    lepas Free error, program jalan tapi output 255 sahaja. kenapa ya?


    -----------------------------------------------------------
    file name: delay_win.h (include file)

    #include
    void delay_025ms(uint8_t s);
    void delay_us(uint8_t s);
    -----------------------------------------------------------
    file name: uson.h (include file)

    #define DDR_Uson DDRF
    #define PORT_Uson PORTF
    #define PIN_Uson PINF
    #define Front_Uson 1

    uint8_t get_distance(char side);

    -------------------------------------------------------------
    file name: uson.c (include file)

    #include
    #include "uson.h"

    #ifndef F_CPU
    #define F_CPU 16000000UL // or whatever may be your frequency
    #endif

    #include "delay_win.h"
    #include


    uint8_t get_distance(char side) // fungsi untuk mendapatkan jarak
    {
    uint8_t distance = 0;


    DDR_Uson |=_BV(side);
    PORT_Uson|=_BV(side);
    _delay_ms(1);
    PORT_Uson &=~_BV(side);
    DDR_Uson &=~_BV(side);
    loop_until_bit_is_set(PIN_Uson,side);


    // ultasonik sudah mengirimkan sinyal


    while(bit_is_set(PIN_Uson,side) && distance<=254)
    {
    distance = distance + 1;
    _delay_ms(1);
    }
    if (distance >= 254)
    distance = 255;
    else if (distance<=8)
    distance=2;
    else if (distance==9)
    distance=3;
    else if (distance>9 && distance<=31)
    distance=((distance-2)/2);
    else
    distance=((distance-1)/2);


    return distance;
    }
    ---------------------------------------------------------------
    file name: PING SENSOR (main file)


    #include
    #include
    #include
    #include

    #ifndef F_CPU
    #define F_CPU 16000000UL // or whatever may be your frequency
    #endif

    #include
    #include
    #include
    #include "serial.h"


    int main(void)
    {

    serial_initialize(57600);
    sei();


    while(1)
    {

    printf( "jarak = %d",get_distance(Front_Uson)); // Print Value on USART
    _delay_ms(50);

    }
    }

    ----------------------------------------------------------------

    BalasHapus
  5. mau nanya mas..
    bisa nggak dipake buyat ngukur kedlam sungai..
    sensor uyltrasonik dari ping ttembus ke dasar sungai tidak mas ???

    BalasHapus

Silahkan isi komentar yang dapat membangun blog ini. Atas komentarnya saya ucapkan terimakasih

Related Posts Plugin for WordPress, Blogger...