Sensor jarak dapat
menggunakan sensor ultasonic, sensor ultrasonic cara kerjanya sama seperti
kelalawar saat mengetahui halangan di depannya. Sensor ultrasonic bekerja
dengan memancarkan gelombang ultrasonic berupa pulse melalui TX(transifer) dari
sensor dan akan terpantul kembali gelomnbang ultrasonic dan di tangkap oleh
RX(resiver) sensordari sensor. Sensor ultrasonic mempunyai jara 2cm hingga
300cm.
/*****************************************************
Project :
Version :
Date
: 4/2/2008
Chip
type : ATmega8535
Program
type : Application
Clock
frequency : 4.000000 MHz
Memory
model : Small
External SRAM
size : 0
Data Stack
size : 128
*****************************************************/
#include
<mega8535.h>
// Alphanumeric LCD
Module functions
#asm
.equ __lcd_port=0x1B
;PORTA
#endasm
#include
<lcd.h>
#include
<stdio.h>
#include
<delay.h>
//deklarasi PIN I/O
PING
#define PULSE PORTB.0
#define ECHO
PINB.0
#define ARAH
DDRB.0
#define OUT 1
#define INP 0
unsigned int
ultrasonic()
{
unsigned int
count=0;
//deklarasi variabel local count: penghitung lebar ECHO
unsigned int
jarak;
//dekarasi jarak: hasil pembagian lebar ECHO dengan suatu konstanta
ARAH=OUT;
//mengatur PIN I/O sebagai output
PULSE=1;
//memberikan tanda ke PING untuk memancarkan ultrasonic burst
delay_us(5);
//waktu tunggu sebelum pengukuran min. 2us biasanya 5us
PULSE=0;
//menberikan sinyal low ke PING
ARAH=INP;
//arah PIN I/O diatur sebagai input
PULSE=1;
//mengatur PIN I/O sebagai pill-up
while (ECHO==0)
{};
//menunggu sinyal ECHO high
while (ECHO==1)
{
count++;
//menghitung lebar sinyal ECHO high
}
jarak=(unsigned
int)(((float)count)/25); // nilai pembagi dikalibrasi sampai sesuai dengan
satuan yang diinginkan
return(jarak);
//mengembalikan jarak ke fungsi ultrasonic dengan tipe data unsigned int
}
// Declare your
global variables here
void main(void)
{
// Declare your local
variables here
unsigned char
kata[16];//variabel lokal untuk menyusun karakter dengan lebar array 16 dan
mengirim ke LCD
// 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=0×00;
DDRA=0×00;
// 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=0×00;
DDRB=0×00;
// 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=0×00;
DDRC=0×00;
// 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=0×00;
DDRD=0×00;
// Timer/Counter 0
initialization
// Clock source:
System Clock
// Clock value: Timer
0 Stopped
// Mode: Normal
top=FFh
// OC0 output:
Disconnected
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;
// 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
// Timer 1 Overflow
Interrupt: Off
// Input Capture
Interrupt: Off
// Compare A Match
Interrupt: Off
// Compare B Match
Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer/Counter 2
initialization
// Clock source:
System Clock
// Clock value: Timer
2 Stopped
// Mode: Normal
top=FFh
// OC2 output:
Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;
// External
Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;
//
Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×00;
// Analog Comparator
initialization
// Analog Comparator:
Off
// Analog Comparator
Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;
// LCD module
initialization
lcd_init(16);
while (1)
{
sprintf(kata, “J=%3d
cm”, ultrasonic()); //menyusun karakter ke dalam satu baris dengan menggunakan
fungsi sprintf
lcd_clear();
//membersihkan layar LCD
lcd_gotoxy(0,0);
//menempatkan kursor pada koordinat 0,0 LCD
lcd_puts(kata);
//mengirim data ke LCD
delay_ms(300);
//delay memberi waktu sebelum lcd_clear();
}
}
Sumber :
http://wangready.wordpress.com/2011/04/04/ping-sensor-jarak-ultrasonik/