31 Ekim 2026 Cumartesi

Arduino


Arduino Nedir?

Arduino, açık kaynaklı bir mikrodenetleyici platformudur. En basit tanımıyla üzerine bağlanan sensörlerden (sıcaklık, ışık, mesafe vb.) aldığı verileri işleyen ve bu verilere göre motorları, ışıkları veya ekranları kontrol edebilen "küçük bir bilgisayar beyni" dir.

Açık kaynaklı olması, kartın tasarım planlarının herkese açık olduğu anlamına gelir. Bu sayede hem orijinal İtalyan üretimi kartları hem de farklı firmaların ürettiği daha uygun fiyatlı "klon" kartları piyasada bulmak mümkündür.


Çeşitli Arduino Modelleri

1. Arduino Uno -R3


İşlemci: ATmega328P (8-bit)

Çalışma Voltajı / Saat Hızı: 5V, 16 MHz

Giriş/Çıkış: 14 Dijital (6 PWM), 6 Analog Giriş

Bellek: 32 KB Flash, 2 KB SRAM, 1 KB EEPROM

Özellik ve Kullanım Alanı: En popüler ve standart Arduino modelidir. Genellikle eğitim, hobi projeleri ve prototipleme için temel kart olarak kullanılır. Üzerinde tak-çıkat kılıfta (veya SMD) ATmega328P bulunur.



30 Ekim 2026 Cuma


Programlama Kodları

//AÇIKLAMA
//Bu uygulamada okutulan kartın belirlediğimiz kart UID'si ile aynı olup olmadığını test ettik.
//Aynıysa doğru, aynı değilse yanlış ifadesini seri port ekanına yazdırdık.

#include<SPI.h>
#include<MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);

String kart_ID = "6934CE06";
String okunan_ID = "";
int i;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.println("MIFARE Classic Kart/Etiket Bekleniyor...");
}

void loop()
{
  //__________________________________Kart/Etiket kontrolü_______________________________
  //If'in içerisinde return kullanmamızın nedeni: If içi 1(true) olduğunda programın, loop
  //döngüsünün başına gitmesini sağlamak içindir.
  if (!rfid.PICC_IsNewCardPresent())  //Yeni bir kart/etiket algılanıp algılanmadığını kontrol eder.
  {
    return;
  }

  if (!rfid.PICC_ReadCardSerial())  //Kartın/etiketin UID (Benzersiz Kimlik)’sinin okunup okunamadığını belirler.
  {
    return;
  }
  Serial.println("Kart/Etiket Algılandı.");

  okunan_ID = ""; //Stringi boşalt.

  //__________________UID'yi bayt bayt okuma, birleştirme, büyük harfe çevirme____________________
  for (i = 0; i < 4; i++)
  {
    if (rfid.uid.uidByte[i] < 0x10)
    {
      okunan_ID += "0";   // Tek haneli sayıların başına 0 ekleme.
    }
    okunan_ID.concat(String(rfid.uid.uidByte[i], HEX)); //"rfid.uid.uidByte[i]" komutuyla sayı olarak okuduğumuz baytı, HEX'e çevir ve ardından String yap. ardından, "concat" komutu ile okunan_ID stringinin son haliyle birleştir. for döngüsü ile bu durumu 4 sefer tekrarla.
  }

  okunan_ID.toUpperCase();  //büyük harfe çevir. kart_ID değişkenindeki harfler büyüktür. Ancak üstteki komutla HEX e dönüştürüldüğünde UID içerisindeki harfler küçülür. bu nedenle büyük harfe çevirme işlemi yapıldı.
  Serial.print("Kart UID: ");   Serial.println(okunan_ID);


  //__________________Okunan UID ile tanımlanan ID'yi karşılaştır____________________
  if (kart_ID == okunan_ID)
  {
    Serial.println("Okunan UID DOĞRU.");
    delay(1000);
  }
  else
  {
    Serial.println("Okunan UID YANLIŞ!.");
    delay(1000);
  }

  rfid.PCD_StopCrypto1(); //okuyucu (PCD) ile kart/etiket(PICC) arasındaki şifreli iletişimi (Crypto1) güvenli bir şekilde kapat.

}



Devre Şeması




Seri Port Ekran Görüntüsü





Programlama Kodları

//AÇIKLAMA
//Bu uygulamada "MEHMET-GOKDAG-78" yazısı kartın 2. bloğuna yazılır ve ardından okunarak seri port ekranına yazdırılır. Ardından
//Kartın/Etiketin Bellek Dökümünü/Haritası ekrana seri port ekranına yazdırılır.

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;  //'key' adında bir MIFARE_Key yapısı değişkeni oluşturuldu. Bu değişkeni, güvenlik anahtarını programa bildirmek için kullanacağız. 6 bayttır.

int blok = 2;  //Bu, içine yazıp sonra okuyacağımız blok numarasıdır.0. sektör 2. blok anlamındadır.
byte gonderilen_veri[16] = {"MEHMET-GOKDAG-78"};  //Bloğa yazdıracağımız verilerimizi belirlemek için, 16 baytlık bir dizi tanımlayıp, içerisine yazı yazıyoruz. Eğer bir bloğun içini silmek istiyorsak; {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; dizisinin o bloğa yazdırılması yeterlidir.
byte okunan_veri[18];   //Bloktaki verileri okuduktan sonra kaydedeceğimiz diziyi tanımlıyoruz. Okuyacağımız veri 16 bayt olmasına rağmen diziyi 18 elemanlı tanımladık. Bunun nedeni, MFRC522 kütüphanesindeki MIFARE_Read fonksiyonunun en az 18 baytlık bir tampon gerektirmesidir.

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.println("MIFARE Classic Kart/Etiket Bekleniyor...");

  //_______________________Güvenlik Anahtarını Kütüphaneye Bildirme____________________
  //Yukarıda tanımladığımız 'key' adındaki 6 baytlık değişkeni kullanarak, güvenlik anahtarını kütüphaneye bildiririz.
  //Güvenlik anahtarı aşağıdaki for döngüsünde görüldüğü üzere her biri 1 baytlık olan 6 adet "0xFF" verisinden oluşur.
  //Yeni RFID kartlarının tümünün güvenlik anahtarı varsayılan olarak 0xFF olarak belirlenir.
  for (byte i = 0; i < 6; i++)
  {
    key.keyByte[i] = 0xFF;
  }
}

void loop()
{
  //If'in içerisinde return kullanmamızın nedeni: If içi 1(true) olduğunda programın, loop
  //döngüsünün başına gitmesini sağlamak içindir.
  if (!rfid.PICC_IsNewCardPresent())
  {
    return;
  }

  if (!rfid.PICC_ReadCardSerial())
  {
    return;
  }
  Serial.println("Kart/Etiket Algılandı.");

  veriyaz(blok, gonderilen_veri);  //"gonderilen_veri" dizisinde tanımlanan veri 2 numaralı bloğa yazılır.

  verioku(blok, okunan_veri);  //2 numaralı bloktaki veri okunarak "okunan_veri" dizisine kaydedilir.

  //Bloktan okunan veri seri port ekranına yazdırılır.
  Serial.print("Bloktan Okunan Veri: ");
  for (int j = 0; j < 16; j++) {
    Serial.write(okunan_veri[j]);
  }
  Serial.println("");

  //Kart/etiket hakkında tüm bilgileri seri port ekranına yazdırır.
  Serial.println(" ");
  Serial.print("_________________");  Serial.print("Kartın/Etiketin Bellek Dökümünü/Haritası"); Serial.println("__________________");
  rfid.PICC_DumpToSerial(&(rfid.uid));

  rfid.PCD_StopCrypto1(); //okuyucu (PCD) ile kart/etiket(PICC) arasındaki şifreli iletişimi (Crypto1) güvenli bir şekilde kapat. 
}

//_______________________Bloğa Veri Yazma Fonksiyonu____________________
int veriyaz(int blok_no, byte gon_veri_dizisi[])
{
  //Bu kısımda trailer(son) blok değeri belirlenir ve blok kontrolü yapılır. Verilen blok numarasının veri bloğuna mı yoksa sonlandırıcı bloğa mı karşılık geldiği kontrol edilir. Verilen blok numarası bir veri bloğuna karşılık gelmiyorsa, fonksiyon bir hata mesajı döndürür.
  int sayi_tam_kisim = blok_no / 4 * 4;   //blok_no önce 4'e bölünür sonra 4 ile çarpılır. Fakat değişkenler int türünden tanımlandığı için blok_no 4'e bölündüğünde sonuç virgüllü çıksa bile sadece tam kısmı alınır. Örn: 7/4=1,25 olarak değil sadece tam kısmı alınacağından bölüm sonucu 1 olur.
  int trailer_blok = sayi_tam_kisim + 3;  //Sektör için trailer(son) blok değerini belirleyin.
  if (blok_no > 2 && (blok_no + 1) % 4 == 0)
  {
    Serial.print(blok_no);
    Serial.println(" numaralı blok trailer bloğudur.");
    return 2;
  }
  Serial.print(blok_no);
  Serial.println(" numaralı blok veri bloğudur.");

  //Bu kısımda bloğa erişim için key doğrulaması yapılır. Doğrulama başarısız olursa, fonksiyon bir hata mesajı döndürür.
  byte status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailer_blok, &key, &(rfid.uid));
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print("Key doğrulama hatası: ");
    Serial.println(rfid.GetStatusCodeName(status));
    return 3;  //return "3" as error message
  }

  //Bu kısımda belirlenen veri olan "MEHMET-GOKDAG-78" yazısı bloğa yazılır.
  status = rfid.MIFARE_Write(blok_no, gon_veri_dizisi, 16);
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print("MIFARE_Write() Yazma Hatası: ");
    Serial.println(rfid.GetStatusCodeName(status));
    return 4;  //return "4" as error message
  }
  Serial.println("Bloğa yazma işlemi yapıldı.");
}

//_______________________Bloktan Veri Okuma Fonksiyonu____________________
int verioku(int blok_no, byte okunan_veri_dizisi[])
{
  //Bu kısımda trailer(son) blok değeri belirlenir
  int sayi_tam_kisim = blok_no / 4 * 4;
  int trailer_blok = sayi_tam_kisim + 3;  //Sektör için trailer(son) blok değerini belirleyin.

  //Bu kısımda bloğa erişim için key doğrulaması yapılır. Doğrulama başarısız olursa, fonksiyon bir hata mesajı döndürür.
  byte status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailer_blok, &key, &(rfid.uid));
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print("Key doğrulama hatası: ");
    Serial.println(rfid.GetStatusCodeName(status));
    return 3;  //return "3" as error message
  }

  //Bu kısımda bloktan veri okunur.
  byte dizi_boyutu = 18;  //"okunan_veri_dizisi" dizinin boyutunu belirlemek ve boyut değişkeninin adresini kütüphaneye bildirebilmek için değişken tanımlandı. boyut değişkeninin adresi, "&" işaretçisi kullanılarak kütüphaneye bildirilir.
  status = rfid.MIFARE_Read(blok_no, okunan_veri_dizisi, &dizi_boyutu);
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print("MIFARE_read() Okuma Hatası: ");
    Serial.println(rfid.GetStatusCodeName(status));
    return 4;  //return "4" as error message
  }
  Serial.println("Blok Okundu");
}



Devre Şeması




Seri Port Ekran Görüntüsü





Programlama Kodları

#include <SPI.h>
#include <MFRC522.h>

#define RST 9
#define SS  10

MFRC522 rfid(SS, RST);

byte piccType;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();  //“rfid” nesnesini başlatır.
  delay(4); //Bazı kartların hazır hale gelmesi için başlatıldıktan sonra daha fazla zamana ihtiyacı vardır.
  rfid.PCD_DumpVersionToSerial(); //RC522 kart/etiket okuyucu modülün bilgilerini gösterir.
}

void loop()
{
  //If'in içerisinde return kullanmamızın nedeni: If içi 1(true) olduğunda programın, loop
  //döngüsünün başına gitmesini sağlamak içindir.
  if (!rfid.PICC_IsNewCardPresent())  //Yeni bir kart/etiket algılanıp algılanmadığını kontrol eder.
  {
    return;
  }
  if (!rfid.PICC_ReadCardSerial())  //Kartın/etiketin UID (Benzersiz Kimlik)’sinin okunup okunamadığını belirler.
  {
    return;
  }

  Serial.print("Kart UID: ");
  Serial.print(rfid.uid.uidByte[0],HEX);  Serial.print(" ");
  Serial.print(rfid.uid.uidByte[1],HEX);  Serial.print(" ");
  Serial.print(rfid.uid.uidByte[2],HEX);  Serial.print(" ");
  Serial.println(rfid.uid.uidByte[3],HEX);

  delay(1000);
}



Devre Şeması




Seri Port Ekran Görüntüsü





Programlama Kodları

#include <SPI.h>
#include <MFRC522.h>

#define RST 9
#define SS  10

MFRC522 rfid(SS, RST);

byte piccType;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();  //“rfid” nesnesini başlatır.
  delay(4); //Bazı kartların hazır hale gelmesi için başlatıldıktan sonra daha fazla zamana ihtiyacı vardır.
  rfid.PCD_DumpVersionToSerial(); //RC522 kart/etiket okuyucu modülün bilgilerini gösterir.
}

void loop()
{
  //If'in içerisinde return kullanmamızın nedeni: If içi 1(true) olduğunda programın, loop
  //döngüsünün başına gitmesini sağlamak içindir.
  if (!rfid.PICC_IsNewCardPresent())  //Yeni bir kart/etiket algılanıp algılanmadığını kontrol eder.
  {
    return;
  }
  if (!rfid.PICC_ReadCardSerial())  //Kartın/etiketin UID (Benzersiz Kimlik)’sinin okunup okunamadığını belirler.
  {
    return;
  }

  piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.print("Kart Tipi: ");
  Serial.println(rfid.PICC_GetTypeName(piccType));
  delay(1000);
}



Devre Şeması




Seri Port Ekran Görüntüsü




28 Ekim 2026 Çarşamba


Programlama Kodları

#include <SPI.h>
#include <MFRC522.h>

#define RST 9
#define SS  10

MFRC522 rfid(SS, RST);

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();  //“rfid” nesnesini başlatır.
  delay(4); //Bazı kartların hazır hale gelmesi için başlatıldıktan sonra daha fazla zamana ihtiyacı vardır.
  rfid.PCD_DumpVersionToSerial(); //RC522 kart/etiket okuyucu modülün bilgilerini gösterir.
}

void loop()
{
  //If'in içerisinde return kullanmamızın nedeni: If içi 1(true) olduğunda programın, loop
  //döngüsünün başına gitmesini sağlamak içindir.
  if (!rfid.PICC_IsNewCardPresent())  //Yeni bir kart/etiket algılanıp algılanmadığını kontrol eder. 
  {
    return;
  }
  if (!rfid.PICC_ReadCardSerial())  //Kartın/etiketin UID (Benzersiz Kimlik)’sinin okunup okunamadığını belirler.
  {
    return;
  }

  rfid.PICC_DumpToSerial(&(rfid.uid));  //Kart/etiket hakkında tüm bilgileri seri port ekranına yazdırır.
}



Devre Şeması




Seri Port Ekran Görüntüsü




26 Ekim 2026 Pazartesi


RC522 RFID Modülü

RFID Teknolojisi Nedir Ve Nasıl Çalışır?

RFID, “Radio Frequency Identification” teriminin kısaltmasıdır. Türkçe olarak “Radyo Frekansı Tanımlama” anlamına gelir. RFID teknolojisi nesnelerin radyo dalgaları kullanılarak tanınması için kullanılan teknolojidir. Bir kimliklendirme sistemi de denilebilir. Temel olarak kullanım amacı, nesneleri tanımak, bunlarla ilgili veri toplamak ve bu verileri ilgili yazılım sistemleriyle paylaşmaktır. Barkodun aksine etiketin, okuyucunun görüş alanında olması gerekmez. RFID etiketlerinde kodlanan dijital verilerin radyo dalgaları aracılığıyla okuyucular tarafından yakalandığı bir teknolojiyi ifade eder.

RFID teknolojisinin kullanım alanları oldukça geniştir. Toplu taşıma biletlerinde, işyeri ve okul girişlerindeki turnikelerde, alışveriş merkezlerinde, marketlerde, kargo firmalarında, canlı hayvan takiplerinde vs. kullanılmaktadır. RFID teknolojisi sayesinde şirketlerin insan gücü maliyeti, stok kontrolü, ürün takibi gibi konularda kayda değer kolaylıklar sunmaktadır.

RFID sistemleri temek olarak 2 bileşenden oluşur: 

  • RFID Okuyucu.

  • Etiket adı verilen, aktif veya pasif küçük bir radyo transponderi.


RFID Okuyucu: 


Çevresinde yüksek frekanslı elektromanyetik alan oluşturan bir radyo frekansı modülü ve bir anten içerir. Yakındaki bir RFID etiketine elektromanyetik sorgulama darbesi gönderir. Etiketten gelen verileri analiz ederek etiketi tanımlar. Barkod veya QR kodunun aksine, etiketin okuyucunun görüş alanında olması gerekmez.





Programlama Kodları

//AÇIKLAMA
//Bu uygulamada jiroskop ve ivmeölçerden alınan verilerle Roll, Pitch ve Yaw hesabı yapılır.
//İlk başta "IMU_olcum_hatalari()" fonksiyonu ile jiroskop ve ivmeölçerden alınan 200'er adet
//verinin ortalaması alınarak Ofset(hata payı) değerleri bulunur ve okunan değerlerlerden
//çıkarılarak gerçek değerler bulunur.

#include <Wire.h>

const int modul_adres = 0x68;
float GyroX, GyroY, GyroZ;  //jiroskop değerleri için değişkenler
float AccX, AccY, AccZ;     //ivmeölçer değerleri için değişkenler
float gyroAngleX, gyroAngleY, gyroAngleZ; //jiroskop açı değişkenleri
float accAngleX, accAngleY; //ivmeölçer açı değişkenleri
float GyroErrorX, GyroErrorY, GyroErrorZ; //jiroskop Ofset(hata payı) değişkenleri
float AccErrorX, AccErrorY;  //ivmeölçer Ofset(hata payı) değişkenleri
float roll, pitch, yaw;
float simdiki_zaman, gecmis_zaman, gecen_zaman;
int i = 0;

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ının varsayılan değeri olan ±250deg/s'yi kullanacağız
  //İvmeölçer ölçek ayarının varsayılan değeri olan ±2g'yi kullanacağız.

  //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();

  //Ölçüm hataları hesaplanıyor
  IMU_olcum_hatalari();

  delay(3000);
}

void loop()
{
  //_______________İvmeölçer Hesaplamaları______________
  //İvmeölçer değerleri okunuyor
  Wire.beginTransmission(modul_adres);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(modul_adres, 6, true);
  AccX = (Wire.read() << 8 | Wire.read()) / 16384.0;
  AccY = (Wire.read() << 8 | Wire.read()) / 16384.0;
  AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0;

  //İvmeölçerden okunan değerlerle açılar hesaplanıyor ve Ofsetler(hata payları) çıkarılıyor
  accAngleX = (atan2(AccY, sqrt(pow(AccX, 2) + pow(AccZ, 2))) * 180 / PI) - (-1.02);
  accAngleY = (atan2(-1 * AccX, sqrt(pow(AccY, 2) + pow(AccZ, 2))) * 180 / PI) - (-6.98);

  //__________________Jiroskop Hesaplamaları________________
  //zaman hesapları yapılıyor. jiroskop açı hesabı için kullanılacak
  gecmis_zaman = simdiki_zaman;
  simdiki_zaman = millis(); //Arduino çalışmaya başladığından itibaren ms olarak geçen süre
  gecen_zaman = (simdiki_zaman - gecmis_zaman) / 1000; //geçen süre hesaplanıp sn'ye çevrildi

  //Jiroskop değerleri okunuyor
  Wire.beginTransmission(modul_adres);
  Wire.write(0x43);
  Wire.endTransmission(false);
  Wire.requestFrom(modul_adres, 6, true);
  GyroX = (Wire.read() << 8 | Wire.read()) / 131.0;
  GyroY = (Wire.read() << 8 | Wire.read()) / 131.0;
  GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0;

  //Jiroskoptan okunan değerlerden Ofsetler(hata payları) çıkarılıyor
  GyroX = GyroX - (-0.18);
  GyroY = GyroY - (-0.60);
  GyroZ = GyroZ - (-0.32);

  //Jiroskop açıları hesaplanıyor
  gyroAngleX = gyroAngleX + GyroX * gecen_zaman;
  gyroAngleY = gyroAngleY + GyroY * gecen_zaman;
  gyroAngleZ = gyroAngleZ + GyroZ * gecen_zaman;

  //_________________Tamamlayıcı Filtre (Complementary Filter___________
  //Tamamlayıcı filtre ile Roll, Pitch, Yaw hesaplanıyor
  roll = 0.96 * gyroAngleX + 0.04 * accAngleX;
  pitch = 0.96 * gyroAngleY + 0.04 * accAngleY;
  yaw = gyroAngleZ;

  //________________________Seri Port Ekranına Yazdırma___________________
  Serial.print("Roll = ");  Serial.print(roll);   Serial.print(" | ");
  Serial.print("Pitch = "); Serial.print(pitch);  Serial.print(" | ");
  Serial.print("Yaw = ");   Serial.println(yaw);

  delay(200);
}

void IMU_olcum_hatalari()
{
  //__________________İvmeölçer Ölçüm Hatası_______________
  //İvmeölçerden ard arda 200 okuma yapılıp ortalaması alınıyor
  while (i < 200)
  {
    Wire.beginTransmission(modul_adres);
    Wire.write(0x3B);
    Wire.endTransmission(false);
    Wire.requestFrom(modul_adres, 6, true);
    AccX = (Wire.read() << 8 | Wire.read()) / 16384.0 ;
    AccY = (Wire.read() << 8 | Wire.read()) / 16384.0 ;
    AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0 ;

    AccErrorX  = AccErrorX + (atan2(AccY, sqrt(pow(AccX, 2) + pow(AccZ, 2))) * 180 / PI);
    AccErrorY  = AccErrorY + (atan2(-1 * AccX, sqrt(pow(AccY, 2) + pow(AccZ, 2))) * 180 / PI);

    i++;
  }
  AccErrorX = AccErrorX / 200;
  AccErrorY = AccErrorY / 200;
  i = 0;

  //__________________Jiroskop Ölçüm Hatası_______________
  //Jiroskoptan ard arda 200 okuma yapılıp ortalaması alınıyor
  while (i < 200)
  {
    Wire.beginTransmission(modul_adres);
    Wire.write(0x43);
    Wire.endTransmission(false);
    Wire.requestFrom(modul_adres, 6, true);
    GyroX = (Wire.read() << 8 | Wire.read()) / 131.0;
    GyroY = (Wire.read() << 8 | Wire.read()) / 131.0;
    GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0;

    GyroErrorX = GyroErrorX + GyroX;
    GyroErrorY = GyroErrorY + GyroY;
    GyroErrorZ = GyroErrorZ + GyroZ;

    i++;
  }

  GyroErrorX = GyroErrorX / 200;
  GyroErrorY = GyroErrorY / 200;
  GyroErrorZ = GyroErrorZ / 200;

  //________________________Seri Port Ekranına Yazdırma___________________
  Serial.print("AccErrorX = ");   Serial.println(AccErrorX);
  Serial.print("AccErrorY = ");   Serial.println(AccErrorY);
  Serial.print("GyroErrorX = ");  Serial.println(GyroErrorX);
  Serial.print("GyroErrorY = ");  Serial.println(GyroErrorY);
  Serial.print("GyroErrorZ = ");  Serial.println(GyroErrorZ);
}



Devre Şeması




Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Sensörler ve Aygıtların Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com

Blog Archive