RSS

PROGRAM MENGAKSES SENSOR JARAK SHARP GP2D12 MENGGUNAKAN CODEVISION AVR

25 Apr

Pada postingan ini saya akan menjelaskan bagaimana cara mengkalibrasi sensor GP2D12 dan programnya menggunakan CodeVision AVR. Akhirnya saya dapat menyelesaikan kalibrasi sensor Sharp GP2D12, dimana saya sebelumnya hanya mencoba program yang berasal dari beberapa blog.

Dari blog tersebut saya mendapatkan persamaan jarak untuk sensor GP2D12 adalah sebagai berikut.

jarak = (1611/data_adc)-3;   (tidak saya rekomendasikan untuk range 10-80 cm)

Ternyata setelah saya coba hasilnya lumayan baik, tetapi hanya pada range 10-40 cm saja. Dikarenakan saya membutuhkan pembacaan yang presisi dan mempunyai range yang cukup lebar yaitu full range (10-80 cm), maka saya mencoba melakukan kalibrasi sendiri dengan menggunakan metode Trendline (fitur dari MS. Excel). Baiklah dibawah ini beberapa penjelasan singkat tentang sensor Sharp GP2D12.

GP2D12 adalah sensor pengukur jarak yang diproduksi oleh Sharp. Sensor ini mengeluarkan sinyal analog dan mampu mengukur jarak pada rentang 10 – 80 cm.

Prinsip kerja sensor inframerah ini dalam mengukur jarak berbeda dengan sensor ultrasonik yang menggunakan waktu pantul gelombang bunyi karena waktu pantul cahaya jelas terlalu singkat untuk dapat diukur. Cahaya inframerah dengan frekuensi 40 kHz dipancarkan dan hasil pantulannya diterima oleh susunan detektor inframerah. Sudut pantulan sinar inframerah akan berubah sesuai jarak sensor dan obyek.

Antarmuka sensor GP2D12 dengan AVR sangatlah mudah, namun sayangnya output analog sensor ini sangatlah tidak linier.

Untuk mengatasi masalah ketidaklinearan sensor tersebut disini saya melakukan kalibrasi menggunakan metode Trendline dengan menggunakan MS. Exel.

Dari hasil kalibrasi yang saya lakukan dengan menggunakan ADC 8 bit, didapat persamaan jarak untuk sensor GP2D12 adalah:


atau jika direalisasikan ke dalam program CodeVision AVR, menjadi:

jarak=(float)((1/((0.04*Vout)-0.006)-0.42));

Nilai dari variabel Vout pada persamaan diatas masih merupakan tegangan keluaran (Volt) sensor GP2D12, sehingga perlu pengubahan dari nilai biner ADC 8 bit ke dalam bentuk tegangan keluaran sensor (Vout) tersebut, caranya:

Vout=read_adc(0);
Vout=Vout/51;

Berdasarkan datasheet GP2D12 perbandingn tegangan keluaran sensor dengan jarak adalah sebagai berikut:

GAMBAR 1

Terlihat jelas dari grafik diatas bahwa hubungan antara tegangan keluaran sensor dengan jarak sangat tidak linear.

Tetapi menurut application note sensor GP2D12 mempunyai hubungan yang cukup linear antara tegangan keluaran sensor (Vout) dengan 1/(distance+K), K bernilai 0,42 untuk tipe GP2D12. Berukut adalah grafik hubungannya:

GAMBAR 2

Sumbu X merupakan output sensor sedangkan sumbu Y adalah 1/(distance+K). Berdasarkan grafik diatas kita sudah dapat menggunakan persamaan metode Trendline yang ada pada MS. Exel. Baiklah berikut adalah beberapa langkah panduan melakukan kalibrasi sensor GP2D12:

LANGKAH PERTAMA

Teman-teman harus melakukan pengukuran dari 10-80 cm setiap kelipatan 5. Kemudian me-Record setiap tegangan keluarannya.  Kemudian berikan nilai untuk X=Vout dan untuk Y=1/(distance+K), K=0,42. Teman-teman dapat menggunakan Voltmeter untuk me-Record tegangan keluaran sensor.

Atau jika teman-teman malas menggunakan Voltmeter teman-teman dapat melihat tegangan keluarannya menggunakan sebuah program yang difungsikan untuk menghitung tegangan keluran sensor yang kemudian ditampilkan pada LCD menggunakan mikrokontroler. Untuk programnya dapat mendownloadnya disini.

Berikut adalah hasil yang saya dapatkan:

K=0.42
jarak X=Vout (Volt) Y=1/(distance+k)
10 2.4 0.09596929
15 1.8 0.064850843
20 1.4 0.048971596
25 1.1 0.039339103
30 1 0.03287311
35 0.86 0.028232637
40 0.78 0.024740228
45 0.7 0.022016733
50 0.63 0.019833399
55 0.6 0.018044027
60 0.55 0.016550811
65 0.5 0.015285845
70 0.48 0.014200511
75 0.43 0.013259082
80 0.41 0.012434718

LANGKAH KEDUA

Setelah mendapatkan nilai X dan Y untuk tabel diatas, plot tabel tersebut kedalam grafik pada MS. Exel dengan type grafik XY scatter. Maka akan muncul grafik seperti GAMBAR 2 seperti diatas.

Kemudian klik pada grafik dan pilih menu trendline di MS. Exel, caranya LAYOUT → ANALYSIS → TRENDLINE → MORE TRENDLINE OPTIONS → sesuaikan dengan gambar berikut. Kemudian CLOSE.

Maka akan muncul trendline persamaan seperti gambar dibawah ini:

Akhirnya sekarang kita dapat persamaan trendline nya yaitu Y=0.04X-0.006

Disini saya juga menyertakan hasil kalibrasi daya dalam MS. Exel, silakan download disini.


LANGKAH KETIGA (TERAKHIR)

Langkah terakhir ini digunakan untuk mendapatkan persamaan akhir yang akan dipakai pada program untuk menghitung jarak dari sensor Sharp GP2D12.

Caranya:

X=Vout
Y=1/(distance+K) → K=0.42

Disubtitusikan ke persamaan trendline yaitu:
Y=0.04X-0.006

Menjadi:
1/(distance+0.42)=(0.04*Vout)-0.006
Sehingga:
distance=((1/((0.04*Vout)-0.006)-0.42))

Atau dalam program menggunakan CodeVision menjadi:
jarak=(float)((1/((0.04*Vout)-0.006)-0.42));

Nilai dari Vout masih merupakan tegangan keluaran sensor GP2D12, sehingga perlu pengubahan dari nilai biner ADC 8 bit ke dalam bentuk tegangan keluaran sensor (Vout) tersebut, caranya:

Vout=read_adc(0);
Vout=Vout/51;

Berikut adalah listing program lengkap GP2D12, dengan output sensor GP2D12 masuk ke PA0:

//output sensor ke PA0

#include <mega16.h>
#include <lcd.h>
#include <stdlib.h>
#include <delay.h>     

int baca_adc;
float jarak, vo;
char temp[6];

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

void baca_sensor()
{      
baca_adc=read_adc(0);   
vo= (float)baca_adc/51;
}

void gp2d12()
{
jarak=(float)((1/((0.04*vo)-0.006)-0.42));
}

void tampil_lcd()//menampilkan jarak ke LCD
{
        lcd_clear();
        lcd_putsf(“ElectO-cOntrOl”);

        ftoa(jarak,1,temp);//menampilkan nilai jarak yg sesungguhnya
        lcd_gotoxy(0,1);
        lcd_puts(temp);    

        lcd_gotoxy(4,1);
        lcd_putsf(“cm”);

        ftoa(vo,2,temp); //menampilkan nilai dari Vout (tegangan keluaran sensor)
        lcd_gotoxy(9,1);
        lcd_puts(temp);

        delay_ms(2000);
}

void main(void)
{
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// LCD module initialization
lcd_init(16);

while (1)
      {
      baca_sensor();
      gp2d12();
      tampil_lcd();
      };
}

Jika anda ingin mendapatkan file program dalam bentuk CodeVision AVR silakan download link dibawah ini.

File program CodeVision AVR mengukur jarak GP2D12

 

CATATAN: sebenarnya teman-teman sudah bisa langsung menggunakan program diatas, tetapi dikarenakan karakteristik setiap sensor dengan tipe yang sama bisa saja berbeda, maka saya merekomendasikan untuk melakukan kalibrasi terlebih dahulu.

Semoga bermanfaat…

 
2 Comments

Posted by on April 25, 2011 in AVR Projects

 

Tags: , , , , ,

2 responses to “PROGRAM MENGAKSES SENSOR JARAK SHARP GP2D12 MENGGUNAKAN CODEVISION AVR

  1. yogi

    June 6, 2011 at 08:28

    mas bisa ngasih contoh proses kalibrasi sensor LDR?
    bisa dikirim ke email saya yogi.girola@gmail.com.
    klo smua proses kalibrasi output yg g linier kyak gtu agak rumit jga ya(newbi). krna dlu sya mikirnya proses kalibrasi itu perbandingan antara hasil pengukuran alat ukur(luxmeter=cahaya)dan output dari analog, trus dijadikan tabel dan apabila ada data yg belum masuk dalam tabel pke rumus interpolasi(yg punya eror kecil dan mendekati data asli).
    CMIIW

     
    • ElectrO-cOntrOl Team

      June 6, 2011 at 11:10

      klo untuk LDR cara calibrasinya yaitu dengan membuat tabel (look up table) seperti kata Anda, karena output LDR sangat2 tidak linear. Sedangkan pada aplikasi ini (GP2D12) mempunyai grafik yang hampir linear jika didekati hubungan antara Vout sensor dengan Y=1/(distance+k) dimana k=0.42, oleh karena itu aplikasi ini dapat dikalibrasi menggunakan metode trendline pada MS Exel.

       

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

 
%d bloggers like this: