MPU6050 6 Eksen İvme ve Gyro Sensörü
84,00 TL
Stokta yok
MPU-6050 çeşitli hobi, multicopter ve robotik projelerinde sıklıklı kullanılan üzerinde 3 eksenli bir gyro ve 3 eksenli bir açısal ivme ölçer bulunduran 6 eksenli bir IMU sensör kartıdır.Kart üzerinde voltaj regulatörü bulunduğundan 3 ile 5 V arası bir besleme voltajı ile çalıştırılabilir. İvme ölçer ve gyro çıkışlarının her ikisi de ayrı kanallardan I²C çıkışı vermektedir. Her eksende 16 bitlik bir çözünürlükle çıkış verebilmektedir. Pinler arası boşluk standart olarak ayarlandığı için breadboard veya farklı devre kartlarında rahatlıkla kullanılabilir. Ayrıca bu sensör ile sıcaklık verileride alabilirsiniz.Sensörü kullanabilmek için gerekli kodlar aşağıda mevcuttur.
- Çalışma gerilimi: 3-5V
- Gyro ölçüm aralığı: + 250 500 1000 2000 ° / s
- Açısal ivme ölçer ölçüm aralığı: ± 2 ± 4 ± 8 ± 16 g
- İletişim: Standart I²C
MPU6050 İvme ve Gyro Sensör Kartı Kullanımı
MPU6050 I2C protokolüyle haberleşen bir IMU sensörüdür. İvme, açısal hız ve sıcaklık okuma için kullanılır. Arduino ile kullanabilmek için Arduino’nun I2C özelliğini kullanmamız gerekmektedir. Arudino için çeşitli MPU6050 kütüphaneleri mevcuttur. Biz bu yazımızda Arudino’nun I2C kütüphanesi olan Wire.h kütüphanesini kullanacağız. Böylece dışarıdan bir kütüphane kullanmadan sensörü kullanmış olacağız.
MPU6050 Sıcaklık Verileri Okuma Kodu
#include<Wire.h>; //I2C Kütüphanesi
const int MPU_addr = 0x68; //MPU6050 I2C Slave Adresi
unsigned long previousMillis = 0; //Önceki millis değeri değişkeni
const long interval = 50; //Ölçümler arasındaki süre (ms)
void setup() {
Serial.begin(9600); //Seri haberlşeme başlatılır
Serial.println ("Başlamak için bir tuşa basınız"); //Devem edilmesi için girdi beklenir (Seri)
while (Serial.available() == 0);
Wire.begin(); //I2C Başlatılır
Wire.beginTransmission(MPU_addr); //0x6B register'ındaki setup değerleri 0 yapılır
Wire.write(0x6B);
Wire.write(0x00);
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop() {
unsigned long currentMillis = millis(); //Millis değeri alınır
if (currentMillis - previousMillis >= interval) { //İnterval süresi geçtiğinde içeri girilir
previousMillis = currentMillis;
Wire.beginTransmission(MPU_addr); //MPU6050 ile I2C haberleşme başlatılır
Wire.write(0x41); //Sıcaklık bilgisinin olduğu 0x41 ve 0x42 için request gönderilir
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 2, true);
int16_t tempFull = Wire.read() << 8 | Wire.read(); //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır.
float tempFinal = (float) tempFull / 340.0 + 35; //datasheet'te verilen değerlere göre sıcaklık hesaplanır
Serial.print("Temp = "); //Sıcaklık bilgisi Santigrad Derece cinsinden seri porttan basılır.
Serial.print(tempFinal);
Serial.println("C");
}
}
MPU6050 İvme Sensörü Okuma Kodları
#include<Wire.h>; //I2C Kütüphanesi
#include<Math.h>; //Trigonometrik işlemler için kütüphane
const int MPU_addr = 0x68; //MPU6050 I2C Slave adresi
unsigned long previousMillis = 0; //Önceki millis değeri için değişken
const long interval = 30; //Ölçümler arasındaki süre (ms)
float ang_x; //X ekseni ile yapılan açı için değişken
float ang_y; //Y ekseni ile yapılan açı için değişken
float ang_z; //Z ekseni ile yapılan açı için değişken
int X_offset = 0; //X ekseni için offset değeri
int Y_offset = 0; //Y ekseni için offset değeri
int Z_offset = 1700;//Z ekseni için offset değeri
void setup() {
Serial.begin(9600); //Seri haberlşeme başlatılır
Serial.println ("Başlamak için bir tuşa basınız"); //Devem edilmesi için girdi beklenir (Seri)
while (Serial.available() == 0);
Wire.begin(); //I2C Başlatılır
Wire.beginTransmission(MPU_addr); //0x6B register'ındaki setup değerleri 0 yapılır
Wire.write(0x6B);
Wire.write(0x00);
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop() {
unsigned long currentMillis = millis(); //Millis değeri alınır
if (currentMillis - previousMillis >= interval) { //İnterval süresi geçtiğinde içeri girilir
previousMillis = currentMillis;
Wire.beginTransmission(MPU_addr); //MPU6050 ile I2C haberleşme başlatılır
Wire.write(0x3B); //İvme bilgisinin olduğu 0x3B-0x40 için request gönderilir
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 6, true);
int16_t XAxisFull = (Wire.read() << 8 | Wire.read())+X_offset; //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır. Offset eklenir.
int16_t YAxisFull = (Wire.read() << 8 | Wire.read())+Y_offset; //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır. Offset eklenir.
int16_t ZAxisFull = (Wire.read() << 8 | Wire.read())+Z_offset; //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır. Offset eklenir.
float XAxisFinal = (float) XAxisFull / 16384.0; //Datasheet'te yazan değerlere göre "g" cinsinden ivme bulunur. (X ekseni için)
float YAxisFinal = (float) YAxisFull / 16384.0; //Datasheet'te yazan değerlere göre "g" cinsinden ivme bulunur. (Y ekseni için)
float ZAxisFinal = (float) ZAxisFull / 16384.0; //Datasheet'te yazan değerlere göre "g" cinsinden ivme bulunur. (Z ekseni için)
if(XAxisFinal>0.99) XAxisFinal=1; //0.99 olan değerler 1'e tamamlanır.
if(YAxisFinal>0.99) YAxisFinal=1;
if(ZAxisFinal>0.99) ZAxisFinal=1;
if(XAxisFinal<-0.99) XAxisFinal=-1; //-0.99 olan değerler 1'e tamamlanır.
if(YAxisFinal<-0.99) YAxisFinal=-1;
if(ZAxisFinal<-0.99) ZAxisFinal=-1;
ang_x = atan(YAxisFull/(sqrt(pow(XAxisFull,2)+pow(ZAxisFull,2)))) * 57296 / 1000; //Euler Açı formülüne göre açı hesabı. (X-Ekseni)
ang_y = atan(YAxisFull/(sqrt(pow(XAxisFull,2)+pow(ZAxisFull,2)))) * 57296 / 1000; //Euler Açı formülüne göre açı hesabı. (Y-Ekseni)
Serial.print("X Axis = "); //Her eksen için g değerleri seri porttan basılır
Serial.print(XAxisFinal);
Serial.print("g");
Serial.print("\t");
Serial.print("Y Axis = ");
Serial.print(YAxisFinal);
Serial.print("g");
Serial.print("\t");
Serial.print("Z Axis = ");
Serial.print(ZAxisFinal);
Serial.println("g");
// Serial.print("X angle = "); //X ve Y eksenleri için açı değerleri seri porttan basılır
// Serial.print(ang_x);
// Serial.print("");
// Serial.print("\t");
// Serial.print("Y angle = ");
// Serial.println(ang_y);
}
}
MPU6050 Gyro Sensörü Kodları
#include<Wire.h>; //I2C Kütüphanesi
const int MPU_addr = 0x68; //MPU6050 I2C Slave adresi
float old_x = 0; //Önceki okunan açısal hız değeri. (X ekseni için)
float old_y = 0; //Önceki okunan açısal hız değeri. (Y Ekseni için)
float prev_angle_x = 0; //Önceki okunan açı değeri. (X ekseni için)
float prev_angle_y = 0; //Önceki okunan açı değeri. (Y ekseni için)
unsigned long previousMillis = 0; //Önceki millis değeri
int interval = 30; //Ölçümler arasındaki bekleme süresi(ms)
int X_offset = 520; //X ekseni offset değeri
int Y_offset = 0; //Y ekseni offset değeri
int Z_offset = 0; //Z ekseni offset değeri
void setup() {
Serial.begin(9600); //Seri haberlşeme başlatılır
Serial.println ("Başlamak için bir tuşa basınız"); //Devem edilmesi için girdi beklenir (Seri)
while (Serial.available() == 0);
Wire.begin(); //I2C Başlatılır
Wire.beginTransmission(MPU_addr); //0x6B register'ındaki setup değerleri 0 yapılır
Wire.write(0x6B);
Wire.write(0x00);
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop() {
unsigned long currentMillis = millis(); //Millis değeri alınır
if (currentMillis - previousMillis >= interval) { //İnterval süresi geçtiğinde içeri girilir
previousMillis = currentMillis;
Wire.beginTransmission(MPU_addr); //MPU6050 ile I2C haberleşme başlatılır
Wire.write(0x43); //Gyro bilgisinin olduğu 0x43-0x48 için request gönderilir
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 6, true);
int16_t XGyroFull = (Wire.read() << 8 | Wire.read()) + X_offset; //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır. Offset eklenir.
int16_t YGyroFull = (Wire.read() << 8 | Wire.read()) + Y_offset; //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır. Offset eklenir.
int16_t ZGyroFull = (Wire.read() << 8 | Wire.read()) + Z_offset; //8-bitlik okunan iki değerden büyük ağırlıklı olanı 8 bit sola kaydırılıp küçük olanla veyalanır. Offset eklenir.
float XGyroFinal = (float)XGyroFull / 131; //Datasheet'te yazan değerlere göre "deg/s" cinsinden açısal hız bulunur. (X ekseni için)
float YGyroFinal = (float)YGyroFull / 131; //Datasheet'te yazan değerlere göre "deg/s" cinsinden açısal hız bulunur. (Y ekseni için)
float ZGyroFinal = (float)ZGyroFull / 131; //Datasheet'te yazan değerlere göre "deg/s" cinsinden açısal hız bulunur. (Z ekseni için)
//X ekseni için açı hesabı
float delta_angle_x = (0.03 * old_x) + ((0.03 * (XGyroFinal - old_x)) / 2); //açısal hız ve geçen süreye bağlı olarak taranan açı hesaplanır
float angle_x = (prev_angle_x + delta_angle_x); //taranan açı değeri ile bir önceki açı değeri hesaplanarak
prev_angle_x = angle_x; //güncel açı değeri bir sonraki döngüde kullanılmak üzere önceki açı değeri olarak kaydedilir
old_x = XGyroFinal; //güncel açısal hız değeri bir sonraki döngüde kullanılmak üzere önceki açısal hız değeri olarak kaydedilir
//Y ekseni için açı hesabı
float delta_angle_y = (0.03 * old_y) + ((0.03 * (YGyroFinal - old_y)) / 2); //yukarıdaki işlemlerin aynısı Y ekseni için de yapılır
float angle_y = (prev_angle_y + delta_angle_y);
prev_angle_y = angle_y;
old_y = YGyroFinal;
//Açısal hız değerleri seri porttan basılır
Serial.print("X Axis = ");
Serial.print(XGyroFinal);
Serial.print("deg/s");
Serial.print("\t");
Serial.print("Y Axis = ");
Serial.print(YGyroFinal);
Serial.print("deg/s");
Serial.print("\t");
Serial.print("Z Axis = ");
Serial.print(ZGyroFinal);
Serial.println("deg/s");
//Açı değerleri seri porttan basılır
// Serial.print("X angle = ");
// Serial.print(angle_x);
// Serial.print("");
// Serial.print("\t");
// Serial.print("Y angle = ");
// Serial.println(angle_y);
}
}
Gyro sensörü ile yapılan açı hesapları tek eksende yapılan hareketler için doğru sonuç vermektedir. Birden fazla eksende aynı anda hareket edilmesi halinde doğru sonuç vermeyecektir.


HEPSİ-JET İLE TÜRKİYE'NİN HERYERİNE
Günümüz itibariyle 81 ilde hizmet sağlayan HepsiJet, 2000’e yakın taşımacısı, 50’den fazla filo aracı, birbirinden farklı hizmet modelleri ve 250’yi aşkın ofis çalışanıyla her geçen gün büyüyen bir marka haline gelmiştir.
Teknoloji ekibiyle beraber her geçen gün geliştirdiği yazılım ve Ar-Ge çalışmaları sayesinde sektördeki öncü firmalardan biri haline geldi.
DHL EXPRESS İLE DÜNYA'NIN HERYERİNE
DHL, lojistik sektörünün lider küresel markasıdır. DHL ailesi yurt içi ve uluslararası paket teslimatı, e-ticaret lojistik ve ikmal çözümleri, uluslararası ekspres, kara, hava ve deniz taşımacılığı, endüstriyel tedarik zinciri yönetimi gibi birçok alanda rakipsiz bir lojistik hizmetler portföyü sunmaktadır.
Dünya çapında 220’nin üzerinde ülke ve bölgede yaklaşık 350.000 çalışanı olan DHL, insanları ve işletmeleri güvenli ve güvenilir bir şekilde birbirlerine bağlayarak küresel ticaret akışına olanak sağlamaktadır.
Değerlendirmeler
Henüz değerlendirme yapılmadı.