Programlama Kodları
#include <Wire.h>
const int modul_adres = 0x68;
float GyroX, GyroY, GyroZ;
float AccX, AccY, AccZ;
float Temp;
void setup()
{
Serial.begin(9600);
Wire.begin(); //I2C seri iletişimini başlat
//Modül resetleniyor
Wire.beginTransmission(modul_adres); //0x68 adresli modül ile iletişime geç
Wire.write(0x6B); //0x6B adresli register'a git.
Wire.write(0x00); //Register içeriğini sıfırla
Wire.endTransmission();
//Jiroskop ölçek ayarı yapılıyor
Wire.beginTransmission(modul_adres); //0x68 slave adresli modül ile iletişime başla.
Wire.write(0x1B); //0x1B adresli register’a git.
Wire.write(0x10); //Register içeriğini 00010000 yap. Ölçek ayarı ±1000deg/s olsun.
Wire.endTransmission();
//İvmeölçer ölçek ayarı yapılıyor
Wire.beginTransmission(modul_adres); //0x68 slave adresli modül ile iletişime başla.
Wire.write(0x1C); //0x1C adresli register’a git.
Wire.write(0x10); //Register içeriğini 00010000 yap. Ölçek ayarı ±8g olsun.
Wire.endTransmission();
//Dijital Alçak Geçiş Filtresinin (DLPF) Band Genişiliği belirleniyor
Wire.beginTransmission(modul_adres); //0x68 slave adresli modül ile iletişime başla.
Wire.write(0x1A); //0x1A adresli register’a git.
Wire.write(0x02); //Register içeriğini 00000010 yap. İvmeölçer band genişliği 94 Hz ve jiroskop bant genişliği 98 Hz olsun.
Wire.endTransmission();
delay(20);
}
void loop()
{
//Modülün 0x3B adresinden itibaren 0x48 e kadar sıralı olarak: 6 bayt ivmeölçer, 2 bayt sıcaklık, 6 bayt jiroskop ham değerleri vardır.
Wire.beginTransmission(modul_adres); //0x68 slave adresli modül ile iletişime başla.
Wire.write(0x3B); //0x3B adresli register’a git.
Wire.endTransmission(false); //Modül ile olan iletişimi durdurma, iletişime devam et ve Wire.write() ile 0x3B adresli register’a gidilmesini onayla.
Wire.requestFrom(modul_adres, 14, true); //0x68 slave adresli modülün 0x3B adresinden itibaren sıralı olarak 14 baytlık veri iste. (true)İstekten sonra veri yolunu serbest bırak.
//İvmeölçer ham değerleri modülden okunuyor
AccX = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu AccX değişkenine ata.
AccY = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu AccY değişkenine ata.
AccZ = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu AccZ değişkenine ata.
//Çipin ham sıcaklık değerleri modülden okunuyor
Temp = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu Temp değişkenine ata.
//Jiroskop ham değerleri modülden okunuyor
GyroX = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu GyroX değişkenine ata.
GyroY = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu GyroY değişkenine ata.
GyroZ = Wire.read() << 8 | Wire.read(); //1 bayt veri oku. 8 bit sola kaydır. Sonra 1 bayt veri daha oku. İlk okunan 1 bayt veri ile “veya” işlemine tabi tut ve sonucu GyroZ değişkenine ata
//İvmeölçerden okunan ham değerler ekrana yazdırılıyor
Serial.print("AccX = "); Serial.print(AccX); Serial.print(" | ");
Serial.print("AccY = "); Serial.print(AccY); Serial.print(" | ");
Serial.print("AccZ = "); Serial.print(AccZ); Serial.print(" ___ ");
//Çipin ham sıcaklık değerleri ekrana yazdırılıyor
Serial.print("Temp = "); Serial.print(Temp); Serial.print(" ___ ");
//Jiroskoptan okunan ham değerler ekrana yazdırılıyor
Serial.print("GyroX = "); Serial.print(GyroX); Serial.print(" | ");
Serial.print("GyroY = "); Serial.print(GyroY); Serial.print(" | ");
Serial.print("GyroZ = "); Serial.println(GyroZ);
delay(100);
}
Devre Şeması
Seri Port Ekran Görüntüsü

0 comments:
Yorum Gönder