Senin, 13 Juni 2011

Meterran digital dengan Ultra sonic

  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.


Pada dasarnya, 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


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.
PORTB.0untuk Ping
Arus
No   Berikut adalah langkah percobaannya :
  • Buka Aplikasi CodeVisionAVR C Compiler
  • Klik File -> New muncul seperti gambar di bawah ini

  • Pilih project 
  • Klik Yes
  • Klik Generate,Save and Exit
Klik Project >> Configure >> C Compiler, pada pilihan (s)printf Feature pilih float, width, precision. 
    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 <mega8535.h>
      #include delay.h>
      #include <stdio.h>
      // Alphanumeric LCD Module functions
      #asm
      .equ __lcd_port=0x1B ;PORTA
      #endasm
      #include <lcd.h>
      // 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();
      };
      }