Sensor jarak ultrasonik Ping))) dan HC-SR04 dengan AVR ATMega16

Posted on Updated on

ping_ultrasonic_sensor_9890101
Modul PING)))

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.

 

hcsr04
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:

donlod

/*****************************************************
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 <lcd.h>

// 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)
{
// 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;
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)
{
count++; //hitung waktu tempuh
}
waktu_second=(count*0.000000083); /*waktu untuk 1 kali eksekusi perintah count++ adalah
1/frekuensi kristal (1/12MHz) = 0.000000083 second , keterangan ini bisa dibaca di datasheet AVR*/
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/s ; jarak satuan 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();

};

}
Advertisements

14 thoughts on “Sensor jarak ultrasonik Ping))) dan HC-SR04 dengan AVR ATMega16

    prita said:
    July 16, 2009 at 2:02 pm

    mas,klo pngukuran d lakukan d outdoor yg suhu na >30C apakah sensor msh bs d gunakan n akurat??
    range suhu nya dr brp smpe brp?
    gmn kalibrasi nya terhadap variasi suhu nya???
    klo d gunakan realtime kn suhu pst brubah2,apkh ad settingan lain dr alat agar dpt menghitung jarak bila suhu nya brubah2……?
    maklum…saya kurang ilmu tp saya brminat dlm pengembangan Ultrasound ini.

      ADIHOLIX responded:
      July 18, 2009 at 2:37 pm

      tetep akurat…asal dirubah aja kecepatan suaranya melaui persamaan diatas…

      ADIHOLIX responded:
      June 21, 2010 at 8:41 pm

      bisa juga digabungkan dengan sensor suhu mas prita,,maksudnya variabel suhunya tidak ditetapkan,tapi variabel suhu dalam perhitungan nanti diambil dari nilai suhu pada sensor suhu..saya rasa itu solusi jika suhu berubah2 secara ekstrem sehingga hasil dari perhitungan tetep akurat..mungkin seperti itu menurut saya..

    kazama said:
    July 31, 2009 at 1:35 am

    mas,kalo pake avr AT90S2321 dan sensornya pake usirr sama gak?tolong ni..lagi bingung buat skripsi…

    ADIHOLIX responded:
    August 6, 2009 at 3:05 am

    yang sama apanya? klo programnya jelas gak sama…rangkaiannya juga gak sama…

    zrachmat said:
    August 29, 2009 at 5:46 am

    Hi, saya newbie pake AVR,
    kebetulan saya baru beli kit robot edukasi dari nextsys, pake atmega8353.
    Boleh dong step by step utk baca input sensor di port A dgn hyper terminal.
    tks

      ADIHOLIX responded:
      September 2, 2009 at 2:11 am

      bisa dibaca di komunikasi serial AVR..mungkin tinggal mrubah dikit2…hehe

    Muhammad said:
    August 20, 2011 at 1:20 am

    hi dear friend,
    i could not find the sensor which is used in this project. i just found a sensor SRF05 which has a separate Trigger and Output lines (there is a shared line in Prallox Madule) and it’s output is a 5v TTL.
    as i am a newbie to AVR programming, how could i modify the code to replace my sensor with Parallox?

    Thanks in advance

      ADIHOLIX responded:
      August 20, 2011 at 1:53 am

      thanks for visit..
      oh,u can find this sensor at HERE
      or if u want buy in Indonesia, u can find at Didi-Ware

      thanks

    Muhammad said:
    September 19, 2011 at 2:41 am

    hi
    could any one let me know where the LCD is connected?

    Thanks

    reza said:
    December 26, 2011 at 1:11 pm

    mas kalo ultrasonik srf 08 kasih tau dong
    caranya dan program atmega 16.
    itu kan pake i2c.
    jadi bngung banget
    tolong ya

    Hendra said:
    June 26, 2012 at 2:06 pm

    ntuk menghitung frekuensi yang diterima receiver ultrasonicnya gmn ms y??soalx sy lg bkin project doppler ultrasonic jd btuh data pergeseran frekuensi yang dibangkitkan dan diterima ultrasonicnya

    bagus said:
    January 15, 2013 at 9:42 pm

    mas kalor 2 atau lebih dari 3 ussir program avr 12c gabungannya gmn ya???

    Dayanka Vlog's said:
    November 19, 2016 at 10:50 am

    itu output dari sensor dibaca i port mana ya ? mohon info thx

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s