Pages

Ping))) Parallax Ultrasonic Range Finder "Plus Source Code"

Kamis, 06 Agustus 2009
Ping))) Parallax Ultrasonic Range Finder Print E-mail
Written by Administrator
Saturday, 28 February 2009 11:37

Ping))) Parallax Ultrasonic Range Finder "Plus Source Code"

  1. Tentang Ping))) Parallax

Ultrasonik, sebutan untuk jenis suara diatas batas suara yang bisa didengar manusia. Seperti diketahui, telinga manusia hanya bisa mendengar suara dengan frekuensi 20 Hz sampai 20KHz. Lebih dari itu hanya beberapa jenis binatang yang mampu mendengarnya, seperti kelelawar dan lumba-lumba. Lumba-lumba bahkan memanfaatkan ultrasonik untuk mengindera benda-benda di laut. Prinsip ini kemudian ditiru oleh sistem pengindera kapal selam. Dengan cara mengirimkan sebuah suara dan mengitung lamanya pantulan suara tersebut maka dapat diketahui jarak kapal selam dengan benda tersebut. Mula-mula suara dibunyikan, kemudian dihitung lama waktu sampai terdengar suara pantulan. Jarak dapat dihitung dengan mengalikan kecepatan suara dengan waktu pantulan. Kemudian hasilnya dibagi 2. Misalnya lama waktu pantulan adalah 1 detik, maka jaraknya adalah (344,424m/detik x 1 detik)/2 = 172m.

Ping))) Ultrasonic Range Finder, adalah modul pengukur jarak dengan ultrasonic buatan Parallax 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.

Gambar 1. Ping))) Parallax Ultrasonic Range Finder

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 dengan kecepatan 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

Gambar 2. Pulsa Ping))) Parallax Ultrasonic Range Finder

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 (meruncing).

  1. Contoh Aplikasi Pengukur Jarak

Pada aplikasi ini mikrokontroler akan membaca lebar pulsa dari Ping))), dihitung kemudian

ditampilkan ke LCD. Pastikan !!! : pin Signal (SIG) terhubung ke PINB.0 Tanpa resistor pullup.

Gambar 3. Rangkaian Aplikasi Ping))) Parallax

Berikut adalah langkah percobaannya :

  • Buka Aplikasi CodeVisionAVR C Compiler
  • Klik File -> New muncul seperti gambar di bawah ini

  • Pilih project OK

  • Klik Yes
  • Lakukan Settingan Seperti pada gambar, “Gunakan Generate,Save and Exit

NB: Untuk Chip dan Clock Sesuaikan Dengan Yang Anda Gunakan

Simpan sesuai nama yang anda inginkan

Example : Ping.c (untuk file source C)

Ping.prj (untuk file project)

Ping.cwp (untuk file Code Wizard Project)

  • Klik Project >> Configure >> C Compiler, pada pilihan (s)printf Feature pilih float, width, precision. Seperti pada gambar dibawah ini.

  • Kemudian Tuliskan Tambahan Program Seperti Di bawah ini:

/*****************************************************

This program was produced by the

CodeWizardAVR V1.24.4 Standard

Automatic Program Generator

© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

e-mail: office@hpinfotech.comThis e-mail address is being protected from spambots. You need JavaScript enabled to view it

Project : Ping))) Parallax Ultrasonic Range Finder

Version : v1.0.0

Date : 28/02/2009

Author : Didox MPX 2

Company : Mechanical MPX 2

Comments : Tutor AVR

Chip type : ATmega8535

Program type : Application

Clock frequency : 4,000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 128

*****************************************************/

#include
#include delay.h>
#include

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x1B ;PORTA

#endasm

#include

// Declare your global variables here

#define SigOut PORTB.0

#define SigIn PINB.0

#define DirSig DDRB.0

unsigned int counter;

float distance;

unsigned char Baris1[16];

unsigned char Baris2[16];

void main(void)

{

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// LCD module initialization
lcd_init(16);

While (1) {
// Place your code here
counter=0;
//Initial value
DirSig=1;
//Set as output
SigOut=1;
delay_us(5);
SigOut=0;
DirSig=0;
//Set as input
SigOut=1;
//Pullup activated
while (SigIn==0)
{}
while (SigIn==1)
{counter++;}
// V=344.424m/s
distance=(counter*0.034442);
//Untuk clock 4,0000 Mhz
//distance=(counter*0.034442)/2; //Untuk clock 11,0592 Mhz
sprintf(Baris1,
"Counter=%5d uS",counter); //%5d ->area 5 kolom LCD
sprintf(Baris2,"Jarak: %3.2f cm",distance); //%3,2f->2angk_decimal
lcd_gotoxy(0,0);lcd_puts(Baris1);
lcd_gotoxy(0,1);lcd_puts(Baris2);

delay_ms(200);
lcd_clear();
};

}

  • Foto Hasil Pengujian dengan menampilkan ketelitian 2 desimal

Foto 1

Foto 2

Foto 3

Seperti tampak pada gambar, pengukuran jarak pada LCD menampilkan angka sesuai dengan pergeseran objek pada penggaris, dan mempunyai ketelitian tinggi dan bisa membaca data dibawah millimeter

Foto 1 menampilkan 10,50 cm = 105 mm

Foto 2 menampilkan 7,30 cm = 73 mm

Foto 3 menampilkan 7,27 cm = 72,7 mm (data antara 1 mm dapat terbaca)

Download File Lengkap Format PDF
Download Source Code Format ZIP

2 komentar:

Anonim mengatakan...

hey kawand..thx infonya ya
kalo mau pake dua ping codingnya gimana yah?
thx b4

Anonim mengatakan...

hey kawand..thx infonya ya
kalo mau pake dua ping codingnya gimana yah?
thx b4