23 Ekim 2026 Cuma


Programlama Kodları

const int x_ekseni = A0;
const int y_ekseni = A1;
const int z_ekseni = A2;
float Rx, Ry, Rz, R;  //eksen değişkenleri
float Axr, Ayr, Azr;  //açı değişkenleri
void setup()
{
  analogReference(EXTERNAL);
  Serial.begin(9600);
}

void loop()
{
  //Eksen değerleri okundu ve ekrana yazdırıldı
  Rx = analogRead(x_ekseni);
  Ry = analogRead(y_ekseni);
  Rz = analogRead(z_ekseni);

  Serial.print("x = "); Serial.print(Rx);
  Serial.print(" | ");
  Serial.print("y = "); Serial.print(Ry);
  Serial.print(" | ");
  Serial.print("z = "); Serial.println(Rz);

  //Eksen değerlerinden R vektörü değeri hesaplandı ve ekrana yazdırıldı
  R = sqrt(sq(Rx) + sq(Ry) + sq(Rz));
  Serial.print("R = "); Serial.println(R);

  //R vektörünün eksenler ile yaptığı açı hesaplandı e ekrana yazdırıldı
  Axr = acos(Rx / R);
  Ayr = acos(Ry / R);
  Azr = acos(Rz / R);

  Serial.print("Axr = "); Serial.print(Axr);
  Serial.print(" | ");
  Serial.print("Ayr = "); Serial.print(Ayr);
  Serial.print(" | ");
  Serial.print("Azr = "); Serial.println(Azr);

  //Boşluk bırakıldı
  Serial.println(" ");

  delay(2000);
}



Uygulama Açıklaması

Bu uygulamada X, Y, Z eksen değerlerinden oluşan R vektörünün eksenlerle yaptığı açılar hesaplandı.












Programlama Kodları

//AÇIKLAMA
//Bu uygulamada ivmeölçer sensörünün yatay eksenle yaptığı açı değerlerini 
//hesapladık. Sensör, Y ekseninde sabit tutulurken, X ve Z eksenleri 
//değerlerinden açıları hesapladık.

const int x_ekseni = A0;
const int y_ekseni = A1;
const int z_ekseni = A2;
int x_deger, z_deger;
int aci;
void setup()
{
  analogReference(EXTERNAL);
  Serial.begin(9600);
}

void loop()
{
  z_deger = analogRead(z_ekseni);
  x_deger = analogRead(x_ekseni);

  if (508 < x_deger && x_deger < 512)
  {
    if (612 < z_deger && z_deger < 616)
    {
      Serial.print("x = ");  Serial.print(x_deger);
      Serial.print(" ");
      Serial.print("z = ");  Serial.print(z_deger);
      Serial.print(" ");
      Serial.println("Sol Yatay Eksen Açı = 0");
    }
  }


  if (511 < x_deger && x_deger < 619)
  {
    if (515 < z_deger && z_deger < 613)
    {
      Serial.print("x = ");  Serial.print(x_deger);
      Serial.print(" ");
      Serial.print("z = ");  Serial.print(z_deger);
      Serial.print(" ");
      aci = map(x_deger, 511, 619, 0, 90);
      Serial.print("Sol Yatay Eksen Açı = ");
      Serial.println(aci);
    }
  }


  if (618 < x_deger && x_deger < 622)
  {
    if (512 < z_deger && z_deger < 516)
    {
      Serial.print("x = ");  Serial.print(x_deger);
      Serial.print(" ");
      Serial.print("z = ");  Serial.print(z_deger);
      Serial.print(" ");
      Serial.println("Açı = 90");
    }
  }


  if (518 < x_deger && x_deger < 619)
  {
    if (406 < z_deger && z_deger < 513)
    {
      Serial.print("x = ");  Serial.print(x_deger);
      Serial.print(" ");
      Serial.print("z = ");  Serial.print(z_deger);
      Serial.print(" ");
      aci = map(x_deger, 518, 619, 0, 90);
      Serial.print("Sağ Yatay Eksen Açı = ");
      Serial.println(aci);
    }
  }


  if (515 < x_deger && x_deger < 519)
  {
    if (403 < z_deger && z_deger < 407)
    {
      Serial.print("x = ");  Serial.print(x_deger);
      Serial.print(" ");
      Serial.print("z = ");  Serial.print(z_deger);
      Serial.print(" ");
      Serial.println("Sağ Yatay Eksen Açı = 0");
    }
  }
  delay(50);
}



Uygulama Açıklaması

Bu uygulamada ivmeölçer sensörünün yatay eksenle yaptığı açı değerlerini basit olarak hesapladık. Sensör, Y ekseninde sabit tutulurken, X ve Z eksenleri değerlerinden açıları hesapladık.



Bunun için öncelikle ivmeölçerin X ve Z eksenlerinin, aşağıdaki durumlarında verdiği analog değerleri tespit ettik.




Ardından program kodlarını yazmak için X ve Z eksenlerinin hangi değerlerde kaç derece açı oluşturacağını hesapladık. Açı hesabında X ekseninin verdiği değerleri kullandık.


Bu durumda X=510 ve Z=614 değerini vermişti. O zaman: 508 < X < 512 ve 612 < Z <616 olarak alırsak; 

Sol Yatay Eksen İle Olan Açı:  Açı = 0⁰





Bu aralıkta X değeri 510 ile 620 arasında, Z değeri de 514 ile 614 arasındadır. X’in ya da Z’nin diğer eksendeki değerleriyle çakışma ihtimali olabilir düşüncesiyle 1’er değer eksik-fazla aldık. O zaman 511 < X < 619 ve 515 < Z < 613 olarak alırsak;

Sol Yatay Eksen İle Olan Açı: Açı=map(X,511,619,0,90)





Bu durumda X=620 ve Z=514 değerini vermişti. O zaman: 618 < X < 622 ve 512 < Z <516 olarak alırsak;

Sol Yatay Eksen İle Olan Açı: Açı = 0⁰






Bu aralıkta X değeri 517 ile 620 arasında, Z değeri de 405 ile 514 arasındadır. X’in ya da Z’nin diğer eksendeki değerleriyle çakışma ihtimali olabilir düşüncesiyle 1’er değer eksik-fazla aldık. O zaman 518 < X < 619 ve 406 < Z < 513 olarak alırsak;

Sol Yatay Eksen İle Olan Açı: Açı=map(X,518,619,0,90)






Bu durumda X=517 ve Z=405 değerini vermişti. O zaman: 515 < X < 519 ve 403 < Z <407 olarak alırsak;

Sol Yatay Eksen İle Olan Açı: Açı = 0⁰





NOT: X ve Z bazı noktalarda linner artıp azalmadığı için bu noktalardan daha yavaş veri aldığı görüldü. 




Programlama Kodları

//AÇIKLAMA
//Bu uygulamada ADXL335 ivmeölçerin eksen değerleri, voltajları ve ivme hesaplanarak
//ekrana yazdırılmıştır.

const int x_ekseni = A0;
const int y_ekseni = A1;
const int z_ekseni = A2;

void setup()
{
  analogReference(EXTERNAL);
  Serial.begin(9600);
}

void loop()
{
  //Eksen değerleri okundu ve ekrana yazdırıldı
  int x_deger = analogRead(x_ekseni);
  int y_deger = analogRead(y_ekseni);
  int z_deger = analogRead(z_ekseni);

  Serial.print("X, Y, Z  = ");
  Serial.print(x_deger);
  Serial.print(", ");
  Serial.print(y_deger);
  Serial.print(", ");
  Serial.print(z_deger);
  Serial.print(" | ");

  //Eksen değerlerinin karşılık geldiği voltajlar hesaplandı ve ekrana yazdırıldı
  float x_voltaj = (3.3 / 1023.0) * x_deger;
  float y_voltaj = (3.3 / 1023.0) * y_deger;
  float z_voltaj = (3.3 / 1023.0) * z_deger;

  Serial.print(x_voltaj);
  Serial.print("V, ");
  Serial.print(y_voltaj);
  Serial.print("V, ");
  Serial.print(z_voltaj);
  Serial.print("V");
  Serial.print(" | ");

  //Eksen değerlerinin karşılık geldiği yerçekimi ivmesi(G) değeri hesaplandı ve ekrana yazdırıldı
  long x_yercekivm_milig = map(x_deger, 0, 1023, -3000, 3000);  //yerçekimi ivmesi MiliG olarak değer
  long y_yercekivm_milig = map(y_deger, 0, 1023, -3000, 3000);  //yerçekimi ivmesi MiliG olarak değer
  long z_yercekivm_milig = map(z_deger, 0, 1023, -3000, 3000);  //yerçekimi ivmesi MiliG olarak değer

  float x_yercekivm_g = x_yercekivm_milig / 1000.0; //yerçekimi ivmesi G olarak değer
  float y_yercekivm_g = y_yercekivm_milig / 1000.0; //yerçekimi ivmesi G olarak değer
  float z_yercekivm_g = z_yercekivm_milig / 1000.0; //yerçekimi ivmesi G olarak değer

  Serial.print(x_yercekivm_g);
  Serial.print("G, ");
  Serial.print(y_yercekivm_g);
  Serial.print("G, ");
  Serial.print(z_yercekivm_g);
  Serial.println("G");

  delay(1000);
}



Eksenlere Göre Sensör Çıkış Değerlerinin Seri Port Ekran Görüntüleri









Sonuç olarak X, Y ve Z’nin değerleri eksenlerde hemen hemen aşağıdaki gibi

ya da onlara yakın değerler vermektedir:







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