Ultrasonik sangat bermanfaat jika digunakan sebagai metode untuk mengukur jarak. Saat ini modul sensor ultrasonik yang banyak dijual dipasaran adalah PING))) produksi parallax, tetapi saat ini juga banyak modul2 sensor yang cara kerjanya serupa tapi tak sama dengan PING))) salah satunya HC-SR04 dan yang bikin ngiler harganya itu lho yang murah meriah, hehe. Lanjut ya, sensor ini cukup handal dan akurat dalam mengukur jarak. Jangkauan sensor ini menurut datasheet dari 3 cm ~ 3 meter (Ping) dan 2 cm ~ 4 meter (HC-SR04). nah ini bedanya, interface dari kedua sensor ini berbeda jumlah pin I/O nya, tetapi sebenarnya prinsip pendeteksian signal ultrasoniknya sama. Untuk Ping punya 3 pin yaitu, vcc,gnd dan signal, sedangkan HC-SR04 punya 4 pin yaitu vcc,trigger,echo dan gnd. Cara pembacaan data dari sensor ini yaitu dengan menghitung waktu tempuh ketika pulsa ultrasonik 40KHz ditransmisikan sampai pulsa tersebut diterima lagi. dari waktu tempuh tersebut bisa diketahui jarak yang ditempuh. Persamaan : s = vt , dimana : s=jarak, v=kec.suara diudara, t=waktu tempuh (dlm hal ini dibagi 2) kecepatan suara diudara menggunakan rumus ini: v = 331,3 + (0,606 x T) , dimana : T adalah suhu lingkungan 331,3 adalah v pada saat suhu 0°C saya menggunakan suhu 30°C untuk perhitungan v nya.
Modul HC-SR04
=> Koneksi untuk sensor PING))) Pin SIG –> PORTB.0 LCD –> PORTC => Koneksi untuk sensor HC-SR04 Pin Trigger –> PORTB.0 Pin Echo –> PORTB.1 LCD –> PORTC Dibawah ini adalah contoh sourcecode yang ditulis dalam bahasa C dengan kompiler CodeVisionAVR untuk sensor PING. Untuk source code lengkap PING))) dan HC-SR04 bisa didownload dilink dibawah ya.. Link untuk download Full Sourcecode PING))) dan HC-SR04:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/***************************************************** This program was produced by the CodeWizardAVR V2.04.4a Advanced Automatic Program Generator © Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 3/25/2009 Author : GreenBlack Company : WEIP Comments: Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 12 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> #include <stdio.h> #include <delay.h> #define pulsa PORTB.0 #define deteksi PINB.0 #define ARAH DDRB.0 #define OUT 1 #define INP 0 // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include // Declare your global variables here unsigned int count; unsigned long jarak_cm,jarak_meter,waktu_mikrosecond,waktu_second; unsigned char baris1[16]; unsigned char baris2[16]; void main(void)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
{ // 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: Timer1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00;
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 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); lcd_gotoxy(0,0); lcd_putsf(" Pengukur Jarak"); lcd_gotoxy(0,1); lcd_putsf(" Ultrasonik"); delay_ms(3000); lcd_clear(); while (1) { // Place your code here count=0; // PORTB.0 diset menjadi output pulsa ultrasonik ARAH=OUT; pulsa=1; delay_us(5); pulsa=0; // lalu PORTB.0 diubah menjadi input ARAH=INP; // with pull-up pulsa=1; while (deteksi==0) {}; while (deteksi==1)
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
{ count++; //hitung waktu tempuh } waktu_second=(count*0.000000083); /*waktu untuk 1 kali eksekusi perintah count++ ada 1/frekuensi kristal (1/12MHz) = 0.000000083 second , keterangan ini bisa dibaca di d waktu_mikrosecond=waktu_second*1000000; //hanya untuk ditampilkan di LCD jarak_meter=((waktu_second*349.48)/2); //kec. suara pada T=30Celcius adalah 349.48 m meter jarak_cm=jarak_meter*100; //jarak satuan cm sprintf(baris1,"Waktu=%5d uS ",waktu_mikrosecond); sprintf(baris2,"Jarak=%3d cm ",jarak_cm); lcd_gotoxy(0,0); lcd_puts(baris1); lcd_gotoxy(0,1); lcd_puts(baris2); delay_ms(200); lcd_clear(); }; }
Report this ad