s SENSOR KOMPAS CMPS03 ~ MIKROKONTROLLER AVR

Selasa, 26 Juni 2012

SENSOR KOMPAS CMPS03

assalamu'alaikum ya saudara-saudaraku, mudah2an kita selalu menjadi pencari ilmu yang sejati,.. kemajuan suatu negara bisa dilihat dari pedulinya negara terhadap sains,..
sains adalah salah satu faktor dalam kesuksesan..

emmm... baik saya akan paparkan sedikit tentang sensor kompas cmps03
sensor ini sangat banyak gunanya dalam proses navigasi atau petunjuk arah pada sistem-sistem elektronik/robotika dan kontroling lainnya. salah satu contoh adalah alat penunjuk arah angin. sensor ini dapat digunakan untuk menunjukkan arah angin,..alat ini dipasang ke alat yang bergerak sesuai arah angin

oke, selanjutnya bagaiman bentuk output dari sensor in,..
bentuk nya terbagi 2 yaitu PWM dan I2C
pada PWM, sensor akan mengeluarkan ouput dengan lebar gelombang PWM yang dihasilkan

kedua adalah ouput dengan bentuk I2C,. pin yang digunakan untuk interface I2C ini adalah SDA dan SCK

kemudian bagaimana membaca data output sensor dengan mikrokontroller atmega8535 dan codevision AVR sebagai compilernya??
emm  pada codevision avr diseting dulu komenikasi I2C nya, terus tentukan kaki SDA dan SCL nya
kemudian ketikkan program seperti dibawah ini

#include <mega8535.h>
#include <stdio.h>
#include <delay.h> 

unsigned int sudut,data_kompas;         
unsigned char kata1[16];     
unsigned char kata2[16];


// I2C Bus functions
#asm
   .equ __i2c_port=0x18 ;PORTB
   .equ __sda_bit=1
   .equ __scl_bit=0
#endasm
#include <i2c.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Declare your global variables here
void baca_kompas(void)
{     
      i2c_start();
      i2c_write(0xC0);
      i2c_write(0x01);
      i2c_start();              
      i2c_write(0xC1);
      data_kompas=i2c_read(0);
      i2c_stop();
      delay_ms(100);
      return;
      }

void main(void)
{
// Declare your local variables here


// I2C Bus initialization
i2c_init();

// LCD module initialization
lcd_init(16);

while (1)
      {              
      baca_kompas();
      sprintf(kata1,"Data=%d",data_kompas);      
      sprintf(kata2,"Sudut=%d.%d%c",sudut=(data_kompas*14)/10,sudut=(data_kompas*14)%10,0xdf);
      lcd_clear();
      lcd_gotoxy(0,0);lcd_puts(kata1);  
      lcd_gotoxy(0,1);lcd_puts(kata2);
      delay_ms(100);

      };
}

jika kita lihat program diatas maka makna dari:
// I2C Bus functions
#asm
   .equ __i2c_port=0x18 ;PORTB
   .equ __sda_bit=1
   .equ __scl_bit=0
#endasm
#include <i2c.h></i2c.h>
adalah kaki SDA sensor dihubungkan dengan PORTB.1 dan kaki SCL sensor dihubungkan dengan PORTB.0

kemudian
maksud dari program ini:
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h></lcd.h>
adalah interface LCD16x2 dihubunkan dengan PORTC

kemudian proses pembacaan ouput sensor yang dihubungkan dengan atmega8535 adalah sebagai berikut
void baca_kompas(void)
{     
      i2c_start();
      i2c_write(0xC0);
      i2c_write(0x01);
      i2c_start();              
      i2c_write(0xC1);
      data_kompas=i2c_read(0);
      i2c_stop();
      delay_ms(100);
      return;
      }

void main(void)
{

hehe selanjutnya silahkan mencoba
terimakasih
   


16 komentar:

gan,ane mau tnya nih
gimana ya prhitungan matematisny itu sensor dpet membaca derajatny/mmbaca magnet bumi ?
mhon d jawab ya gan.
thank's.

tolong lihat programnya mas, disitu dilihat klo pembacaan/perhitungan dapat dilihat di program
sprintf(kata1,"Data=%d",data_kompas);
sprintf(kata2,"Sudut=%d.%d%c",sudut=(data_kompas*14)/10,sudut=(data_kompas*14)%10,0xdf);
biasanya mas, klo saya program mikrokontroller dengan codevision, saya coba-coba ubah variable perhitungannya,. nah, pastinya di lcd juga akan berubah2 nilainya

silahkan coba program,. thanks

hmm,
(data_kompas*14)/10,sudut=(data_kompas*14)%10,0xdf);
knpa data kompas dikali dgn 14 mas ?
apakah dgn dibagi 10 hsilnya akan langsung mnjadi nilai dari sudut derajatnya ?

maap mas,saya bnyk nanya.
thank's.

mas, kalau program i2c membaca nilai output pada CMPS03 bisa digunakan untuk alat elektronik lain?!
terimakasih......

Choirul iyut@ contohnya?
gak faham maksudnya, untuk komenikasi I2C atau serial, atau jenis lainya, itu tergantung output sensor, mis: sensor kelembaban, dia menggunakan output I2C, maka untuk membaca datanya dengan AVR, maka harus kita sesuaikan

apakah program diatas bisa digunakan untuk jangka sorong digital? jangka sorong digital juga menggunakan komunikasi i2c, ada SDA dan SCL.

pada CMPS03 kan mengeluarkan data pada LCD 16x2 dengan menggunakan program i2c.
terimakasih.

tentu bisa bro,.. tapi aplikasi jangka sorong untuk apa? apakh mengukur sudut saja/radius??

wah-wah... jadi ada perhitungan matematikanya donk?

terimakasih mas.....
tapi jangka sorong digital menggunkan tegangan 1.5V dan mikrokontroler menggunakan tegangan 5V. apakah mas bisa menjelaskan juga tentang konverter tegangan?!

tidak mas, cuma ingin mengeluarkan data pada jangka sorong digital ke LCD 16x2 ssaja... bisa iya mas?!

berarti dengan kata lain,.. output jangka sorong digital yang mas buat sudah jadi?? outpunya tegangan 0-1.5 Volt?
jika output data sensor berupa tegangan, dan akan di baca mikrokotroller, maka fitur yang digunakan pada mikrokontroller adalah... ADC, analog to digital converter..kemudian output ini akan dibaca di lcd? program sederhananya adalah:

#include

#include

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

// Standard Input/Output functions
#include

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result
unsigned int 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 ADCW;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
long int adc0,adc1;
long int suhu,cahaya;
unsigned char buf[16],buf1[16];


ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
SFIOR&=0xEF;

// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("baca tegangan");
delay_ms(2000);
lcd_clear();
while (1)
{
// Place your code here
adc0 = read_adc(0);

sprintf(buf1,"data: %-i",adc0);
lcd_gotoxy(0,0);
lcd_puts(buf);

delay_ms(250);
lcd_clear();

};
}

lcd 16x2 dihubungkan ke port C, sesuai dengan configurasi yang ada di codevisionnya( mas bisa download rangkaiannya di: http://belajaravr.blogspot.com/p/download-rangkaian.html)

kemudian input tegannya di hubungkan langsung ke PORTA.0/ADC0 Mikrokontroller... selamat mencoba.... bila perlu, mas emailkan kesaya blog diagram perancangan yang mas buat.. thanks

choirul:
eh baru ingat ;) ... program ini di hapus ya mas, program di atas
long int suhu,cahaya;
unsigned char buf[16],buf1[16];

karena program ini tidak akan deklarasikan di main programnya

iya mas terimakasih bantuannya....

berarti programnya mengunakan ADC iya mas... tidak mengunakan I2C (SDA dan SCL)?!

http://www.google.co.id/imgres?q=jangka+sorong+digital+dengan+mikrokontroler&um=1&hl=id&biw=1366&bih=667&tbm=isch&tbnid=87n7eV9Bo1b11M:&imgrefurl=http://dics.voicecontrol.ro/had/post/4918/Reading_a_digital_caliper_with_a%25C2%25A0microcontroller.html&docid=nMOz6g9-N_QWoM&imgurl=http://dics.voicecontrol.ro/had/images/reading_a_digital_caliper_with_a_microcontroller.jpg&w=470&h=344&ei=4nh1UdeFGIWsrAeiioH4Cg&zoom=1&ved=1t:3588,r:8,s:0,i:100&iact=rc&dur=1404&page=1&tbnh=192&tbnw=262&start=0&ndsp=19&tx=123&ty=68

seperti gambar pada link diatas mas yang saya maksut.....
di jangka sorong digital kan mempunyai lcd sendiri terus mau saya keluarkan di lcd 16x2 lewat mikrokontroler......
lah di jangka sorong digital ada 4 kaki... vcc, sda, scl, dan ground.....
itu programnya seperti program suhu atau program ADC?!

sori ya chorul, belum sempat dibalas2 nih,.. kerjaan masih menumpuk karena di kejar target di kantor,..
klo ada waktu saya balas ya,.. maaf

iya mas...
terimakasih....

mas, yang tampil kok angkanya 255 terus ya... gmn mas... kalau derajatnya malah 0 terus..... dan kalau pul up resistornya gk di ksh tegangan tampilannya hilang smw... mohon bantuannya mas

permisi mas mau nanya kalau penerapan dan pemrogramannya pada stm32f4 gimana yah?.makasih sebelunya

Posting Komentar

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites