Konuyu Değerlendir
  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
ARDUİNO VE MATLAB İLE MPU6050 KULLANIMI VE YÖNTEMLER
#1
ARDUİNO VE MATLAB İLE MPU6050 KULLANIMI VE YÖNTEMLER

Uygulama videosunu izlemek için tıklayınız.

Arduino İçin Seri Bağlantı Oluşturmak İçin Bir Fonksiyon Oluşturuyoruz.(MATLAB Kodu)


Kod:
% arduino için seri bağlantı oluşturmak için setupSerial adında

% bir foonksiyon oluşturuyoruz.

% oluşturduğumuz fonksiyonu setupSerial.m adında kaydetmemiz gerekiyor

function [ s, serialFlag ] = setupSerial(comport)

%comport kısmına arduinonun bağlı olduğunu portu yazıyoruz

serialFlag=1;

s = serial(comport);    %seri bağlantı başlatıyor.bunu s şeklinde bir sınıf

% değişkenine atıyoruz.

set(s,'DataBits',8);

set(s,'StopBits',1);

set(s,'BaudRate',9600); %baudrate arduino yacdığımızla aynı olması gerekir

set(s,'Parity','none');

fopen(s);%sınıf değişkenini açıyoruz

a='b';

% döngüde arduino da seri olarak gönderdiğimiz Serialprintln('a')

% olarak gönderdiğimiz char ı okuyoruz

while(a ~='a')

   a=fread(s,1,'uchar');

end

if(a==a)

   disp('serial read');

end

fprintf(s,'%c','a'); % a yı girip arduinodaki seri bağlantıyı tamamlıyoruz

mbox=msgbox('Serial communication setup');

uiwait(mbox);

% commandwindow a 2 tane değişken girmemiz gerekiyor atarken

% örnek olarak [mpu.s, flag]=setupSerial('COM4') şeklinde girilebilir.

%yada comport='COM4'; yazılıp

%[mpu,s, flag]=setupSerial(); yazılabilir

end

Arduinodan Dataları Alması için gerekli Kod (MATLAB Kodu)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
% arduinodaki dataları almak arduinoda gömülü olan kod da R harfi seri

% olarak gönderilirdiğinde arduinonuz pcnize değerleri göndercektir.

function [ ax ay az gx gy gz tmp ] = readMPU( out )

fprintf(out.s,'R'); % gönderiliyor

% alınan değerler değişkenlere kaydediliyor

readings(1)=fscanf(out.s,'%f');

readings(2)=fscanf(out.s,'%f');

readings(3)=fscanf(out.s,'%f');

readings(4)=fscanf(out.s,'%f');

readings(5)=fscanf(out.s,'%f');

readings(6)=fscanf(out.s,'%f');

readings(7)=fscanf(out.s,'%f');

% ivmeler g şeklinde çıkış verer 16384 hassaslıktır istenirse arduinoda bu

% işlemler yapılabilir

ax=(readings(1)/16384)

ay=(readings(2)/16384)

az=(readings(3)/16384)

% gyro açısal hız şeklinde çıkış verir. 131 hassaslıktır.

gx=readings(4)/131

gy=readings(5)/131

gz=readings(6)/131

% tmp celcius şeklinde çıkış verir aşagıdaki işlemler yapıldığında celcius

% olara alınır.

tmp=(readings(7)+12412)/340

end

%kod kullanımı readMPU(mpu) mpu burda setupSerialde oluşturulan sınıf

%değişkenidir.İlk kod yazıldığında hata verecektir.2 kullanımda veriler

%alınacaktır.Hata sebebini daha çözememiş durumdayız.

Arduino Kodu

Kod:
#include <Wire.h> // I2C için gerekli library

#define MPU_ADDRESS 0x68 //Sürücü adresi
#define CTRL_REGL 0x6B //control registerı

//Gyro
int16_t gx, gy, gz;
//ivme
int16_t ax, ay, az;
//sicaklik
int16_t tmp;

void setup()
{
Serial.begin(9600); //Seri haberlesme baslatildi
Wire.begin(); //sensor ile I2C haberlesmesi baslatildi
writeregister(MPU_ADDRESS, CTRL_REGL, 1);
delay(1500);
/* matlab ile haberleşmede kullanılan döngü*/
Serial.println('a');
char a='b';

while(a !='a')
{
a=Serial.read();
}

}
void loop()
{
if(Serial.available()>0)
{
int mode=Serial.read();

if(mode=='R')
{

Values();
/*Değerler PC ye Seri haberleşme yoluyla gönderilir*/
Serial.println(ax);
Serial.println(ay);
Serial.println(az);
Serial.println(gx);
Serial.println(gy);
Serial.println(gz);
Serial.println(tmp);

}
delay(20);
}
}

/*Sensör ile veri iletişimini başlatmak için ilk olarak bir veri gönderimi
yapılır bu veri göndermi için oluşturulan fonksiyon*/
void writeregister(int DeviceAddress, byte Address, byte val)
{
Wire.beginTransmission(DeviceAddress);
Wire.write(Address);
Wire.write(val);
Wire.endTransmission(false);
}

/*Sensörden veri okumak için oluşturulan fonksiyon
int değişkenine MPU adresi. byte değişkenine ise alınacak veri adresi
girilir*/

byte readregister(int DeviceAddress, byte Address)
{
Wire.beginTransmission(DeviceAddress);
Wire.write(Address);
Wire.endTransmission(false);
Wire.requestFrom(DeviceAddress ,1);
while(!Wire.available()){
}
return Wire.read();
}
/*Sensörden ivme-gyro-sıcaklık değerleri 8bit veri pahetleri halinde
alınıp değişkenlere atanır.*/

void Values()
{
byte xacch = readregister(MPU_ADDRESS, 0x3B);
byte xaccl = readregister(MPU_ADDRESS, 0x3C);
ax =((xacch << 8) | xaccl);
byte yacch = readregister(MPU_ADDRESS, 0x3D);
byte yaccl = readregister(MPU_ADDRESS, 0x3E);
ay =((yacch << 8) | yaccl);
byte zacch = readregister(MPU_ADDRESS, 0x3F);
byte zaccl = readregister(MPU_ADDRESS, 0x40);
az =((zacch << 8) | zaccl);
byte tmph = readregister(MPU_ADDRESS, 0x41);
byte tmpl = readregister(MPU_ADDRESS, 0x42);
tmp =((tmph <<8) | tmpl);
byte xgyroh = readregister(MPU_ADDRESS, 0x43);
byte xgyrol = readregister(MPU_ADDRESS, 0x44);
gx =((xgyroh << 8) | xgyrol);
byte ygyroh = readregister(MPU_ADDRESS, 0x45);
byte ygyrol = readregister(MPU_ADDRESS, 0x46);
gy =((ygyroh << 8) | ygyrol);
byte zgyroh = readregister(MPU_ADDRESS, 0x47);
byte zgyrol = readregister(MPU_ADDRESS, 0x48);
gz =((zgyroh << 8) | zgyrol);
}

Uygulama videosunu izlemek için tıklayınız.
Bul
Alıntı


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  HC-05 BLUETOOTH MODÜL KULLANIMI Ken 0 188 19-05-2016, Saat: 09:57
Son Mesaj: Ken
  MIT APP INVERTOR & ARDUİNO İLE LED KONTROL ETME YÖNTEMİ Ken 0 124 19-05-2016, Saat: 09:55
Son Mesaj: Ken
  MIT APP INVERTOR VE ARDUİNO İLE SERVO MOTOR KONTROL ETME YÖNTEMİ Ken 0 130 19-05-2016, Saat: 09:53
Son Mesaj: Ken
  ARDUİNO İLE NOKİA 5110(PCD8544) GRAFİK LCD KULLANIMI VE GEREKLİ YÖNTEMLER Ken 0 196 19-05-2016, Saat: 09:52
Son Mesaj: Ken
  ARDUİNO KONTROLLÜ ÇİM SULAMA SİSTEMİ PROJESİ VE YÖNTEMLER Ken 0 143 19-05-2016, Saat: 09:51
Son Mesaj: Ken

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi
loading...