Mengukur Jarak Menggunakan Sensor Ultra Sonic HC-SR04 Menggunakan BASCOM AVR - Full Code

Assalamualaikum Wr Wb...

Halo sobat MIKRODB, kali ini saya akan sharing mengenai Sensor Ultrasonic HC-SR04. Kebetulan sekali kemaren kita sedang membahas mengenai sensor tersebut di workshop dan sekalian dah kita share disini. 

Pertama kita perhatikan dulu bentuk fisik dari sensor nya dan konfigurasi pin nya , sbb :

 



1. 5V Supply

2. Trigger Pulse Input

3. Echo Pulse Output 

4. 0V Ground

 

 

 

 


Sensor ini memiliki Range pengukuran antara 2cm - 400cm dengan akurasi kurang lebih 3mm ( sesuai datasheet : http://www.micropik.com/PDF/HCSR04.pdf ) . Sensor ini bisa dikatan cukup bagus untuk membuat bberapa aplikasi sederhana disisi lain harga nya pun cukup murah. Setelah kita mengetahui konfigurasi pin dari sensor ini, selanjutnya adalah prinsip kerja dari sensor ini.

Berikut adalah cara kerja sensor ultrasonics:

1. Pertama kita kasih output logic high pada pin Trigger selama 10uS (10 mikro detik )

2. Selanjutnya module akan secara otomatis memancarkan rentetan 8 buah signal sebesar 40KHz pada Transmitter dan pin pada Echo akan berlogika high  

3. Selanjutnya, ketika ada objek yang menghalangi di depan sensor, maka akan terjadi pantulan signal ultrasonics tersebut dan diterima oleh Receiver sehingga pin Echo akan berlogic Low dan kita akan mendapatkan waktu ( T ) ketika pin echo  berlogic High sampai pin echo berlogic Low tersebut kita kalikan dengan kecepatan rambat suara di udara (340m/s ). Lalu hasil nya kita bagi 2, karena waktu ( T ) yang di dapat tadi adalah hasil dari pantulan / waktu bolak balik. 


Kurang lebih  cara kerjanya adalah seperti itu, jika ada kekeliruan mohon di koreksi ya gan. Oke , selanjutnya kita akan mulai membahas masalah Program, disini saya menggunakan bahasa Basic dan Bascom AVR sebagai compiler nya. Ada beberapa cara untuk masalah perhitungan nya, kita bisa menggunakan fasilitas Timer yang disediakan pada AVR atau kita bisa menggunakan teknik Increment nilai variabel secara konvensional. Namun untuk bahasan kali ini saya akan menggunakan fasilitas Timer. Pada AVR terdapat 3 buat Timer yang bisa kita pilih ( Timer 0 dan 2 : Timer 8 bit , dan Timer 1 : Timer 16 bit ). 

Berikut adalah Program Lengkap nya :

'==================================================================

$regfile = "m328def.dat"                                    'menggunakan Atmega328

$crystal = 16000000                                         'menggunakan crystal clock 16 MHz

$baud = 9600                                                'menggunakan baudrate 9600

 

'Konfigurasi Timer

 Config Timer1 = Timer , Prescale = 64

 

'Konfigurasi IO mikro'

 Config Portd.2 = Output

 Config Portd.3 = Input

 

'Pengguanaan Alias Name 

Signal_trigger Alias Portd.2                                'trigger

Signal_echo Alias Pind.3                                    'echo

 

 

'deklarasi variabel dan konstanta'

Dim Jarak1 As Integer , Jarak2 As Single

Const Centimeter = 58

Const K = 0.068965


'Aktifkan Interupsi dan Timer1 

Enable Interrupts

Enable Timer1

 

'Deklarasi Sub Rutin 

Declare Sub Aktifkan()

  

Print "TEST SENSOR HC SR04"

Print "BY MIKRODB.COM"

Wait 2


Do

   Call Aktifkan()

   Print "Timer :" ; Timer1

   Print "Jarak :" ; Jarak2 ; " cm"

   Print "Jarak_pembulatan :" ; Jarak1 ; " cm"

   Wait 2

Loop

End


Sub
Aktifkan()

   Reset Signal_trigger

   Waitus 10                                                'tunda Sebesar 10 Us

   Set Signal_trigger

   Waitus 10                                                'tunda Sebesar 10 Us

   Reset Signal_trigger

   Do

   Loop Until Signal_echo = 1

   Timer1 = 0

   Start Timer1

   Do

   Loop Until Signal_echo = 0

   Stop Timer1

   Jarak2 = Timer1 * K

   Jarak1 = Round(jarak2)                                   'pembulatan

   Waitus 200 

End Sub

 

Penjelasan program :

Disini saya menggunakanboard Arduino Uno sebagai Minimum Sistem nya tapi saya menggunakan compiler Bascom AVR untuk menulis program nya pakai bahasa Basic. Lalu dengan menggunakan Software EMDEBE LOADER yang kita kembangkan sendiri untuk me Load file HEX hasil compilasi ke board Arduino. bagi yang belum tau software EMDEBE LOADER silahkan ke klik disini.

Mikrokontroller yang dipakai adalah ATMEGA328 dan Kristal sebesar 16MHz, serta fasilitas Timer1. Kenapa saya memilih menggunakan Timer 1 ? Karena Timer 1 memiliki rentang perhitungan sebesar 16 bit ( 0-65535).  Disini saya juga menggunakan Prescaler sebesar 64. Mungkin sebagian dari kita ada yang bertanya apa itu Prescaler? Prescaler itu adalah sebuah penskalaan, sama halnya kita liat di Peta skala 1:100.000 , dimana 1 cm pada peta mewakili 100.000 cm ( 1 km ) pada jarak sebeneranya. Begitu juga hal nya di mikrokontroller karena pada program di atas nilai Prescaler nya adalah 64, maka artinya setiap Timer1 menghitung naik 1x membutuhkan hitungan 64 clock. Dimana clock itu sendiri adalah nilai kristal yang dipakai.

Fp ( Frek Prescaler ) = Fc (Frek Crystal ) / Prescaler
                            = 16.000.000 / 64
                            = 250.000 Hz

Sehingga N Timer1 = 1/Fc
                        = 1/250.000Hz
                        = 0.000004 Sec 
                        = 4uS ( 4 mikro secon )

Dari sini dapat kita tarik kesimpulan bahwa setiap kenaikan Timer1 membutuhkan waktu 4uS

Lalu rumus untuk menghitung jarak,  jika kita baca di datasheet adalah sebagai berikut :

Formula: uS / 58 = centimeters or uS / 148 =inch       '----------------------> Dari manakah ini di dapat?

Oke kita akan membahas nya supaya kita bisa menjadi lebih memahami. Kita tau kecepatakan rambat suara di udara sebesar kurang lebih 340m/s. Ini artinya suara ( dalam hal ini ultrasonik ) merambat di udara dalam 1 detik bisa mencapai 340 meter.

kalau saya ubah menjadi satuan cm / uS

340m/s = (340 * 100 cm) /( 1*1.000.000 uS)
           = 34.000 cm / 1.000.000 uS
           = 0.034cm/uS  --> setiap 1uS mencapai jarak 0.034cm

Jika kita balik pernyataan nya menjadi berapa waktu yang dibutuhkan suara untuk merambat diudara sejauh 1cm, maka :

1/0.034cm = 29.4 uS atau kita bulatkan menjadi 29 uS. Berarti membutuhkan waktu 29uS setiap 1cm nya .

Karena untuk kasus ultrasonics adalah waktu yang didapat adalah 2T

maka rumus mencari nilai Jarak( Lebar Pulsa / 29 uS ) / 2
                                           = ( Lebar Pulsa / 58 uS )   --> hasil jarak yang di dapat dalam satuan Cm

 

Contoh : Jika  diketahui Nilai Timer1 = 148, maka hitunglah Jarak .

NTimer1     = 148
Lebar Pulsa = Ntiimer1 * 4uS 
                = 148 * 4uS
                = 592 uS
Jarak         = Lebar Pulsa / 58
                = 592 / 58
                = 10.20 cm
                          

 Pada program di atas ada nilai Konstanta K sebesar  = 0.068965 --> ini di dapat dari rumus di atas (Timer1 * 4 / 58 )
 Sehingga pada perhitungan di program kita bisa langsung menggunakan nilai konstanta K ini atau kita juga bisa menghitung   nya per bagian. 

Sedangkan baris program ini  --> Jarak1 = Round(jarak2)   ' adalah bagian pembulatan sehingga hasil yang didapat menjadi bilangan bulat. 

Berikut adalah gambar dan video hasil percobaan : 

       

 

 https://www.youtube.com/watch?v=zoAw88plDao

">" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344">

Semoga bermanfaat..silahkan sharing jika ada kekeliruan..

Wassalam 

  

Add comment


Security code
Refresh