Arduino İvme Sensörü Kullanımı

İvme sensörü, anlık olarak ivmeyi ölçen bir cihazdır. Doğru ivme, bir cismin kendi anlık durgunluk çerçevesindeki ivmesidir (hız değişim oranı). Arduino ivme sensörü kullanımı ile çalışma prensibini tam olarak kavrayabilirsiniz.

İvmeölçerlerin endüstride ve bilimde birçok kullanımı mevcuttur. Son derece hassas ivmeölçerler, uçaklar ve füzeler için ataletsel navigasyon sistemlerinde kullanılmaktadır. Dönen makinelerde titreşim, ivmeölçerlerle izlenir. Tablet bilgisayarlarda ve dijital kameralarda ekranlardaki görüntülerin her zaman dik görüntülenmesi için kullanılırlar. İnsansız hava araçlarında, ivmeölçerler uçuşu stabilize etmeye yardımcı olur. Aslında anlaşılacağı üzere, ivmeölçerler günümüzde bir çok alanda kullanılmaktadır.

Arduino İvme Sensörü Kullanımı arduino ivme sensörü,arduino ivme sensörü kullanımı,arduino ile ivme sensörü kullanımı,arduino ivme ölçer,arduino ile ivme ölçer kullanımı
ADXL335 3 eksen ivmeölçer

Dünyada 1g, yaklaşık olarak 9.8 m/s2’ye denk gelmektedir. Ay’da dünyanın 1/6’sı, marsta ise dünyanın 1/3’ü kadardır.

İvmeölçer, hareket, şok veya titreşimden kaynaklanan dinamik hızlanmanın yanı sıra eğim algılama uygulamaları için de kullanılabilmektedir.

ADXL335 modülü

  • ADXL335, tam 3 eksenli hızlanma ölçümü yapmaktadır.
  • Bu modül x, y ve z ekseninde ±3 g aralığında ivmeyi ölçmektedir.
  • Bu modülün çıkış sinyalleri ivme ile orantılı analog voltajlardan oluşmaktadır.
  • İçerisinde Polisilikon yüzey-mikro işlenmiş sensör ve sinyal koşullandırma devresi bulunmaktadır. Buradan veri sayfasına ulaşabilirsiniz.

Çalışma Mekanizması

Arduino İvme Sensörü Kullanımı arduino ivme sensörü,arduino ivme sensörü kullanımı,arduino ile ivme sensörü kullanımı,arduino ivme ölçer,arduino ile ivme ölçer kullanımı
  1. Yukarıdaki şekilden de anlaşılacağı gibi, ivmeölçerin temel yapısı sabit plakalar ve hareketli plakalardan (kütle) oluşmaktadır.
  2. Hızlanma, hareketli kütleyi saptırır ve diferansiyel kondansatörün dengesini bozar. Bu da hızlanma ile orantılı bir sensör çıkış voltajı genliği ile sonuçlanmaktadır.
  3. Daha sonra ivmenin büyüklüğünü ve yönünü belirlemek için faza duyarlı demodülasyon teknikleri kullanılmaktadır.

İvmeölçer ADXL335 Modülü

Arduino İvme Sensörü Kullanımı arduino ivme sensörü,arduino ivme sensörü kullanımı,arduino ile ivme sensörü kullanımı,arduino ivme ölçer,arduino ile ivme ölçer kullanımı
İvmeölçer ADXL335 Modülü
  • VCC: Güç kaynağı pini, yani buraya 5V bağlanmaktadır.
  • X_OUT: X ekseni analog çıkışı burasıdır.
  • Y_OUT: Y ekseni analog çıkışı burasıdır.
  • Z_OUT: Z ekseni analog çıkışı burasıdır.
  • GND: Topraklama pini, yani toprağı buraya bağlayın.

ADXL335 ivmeölçer, çıkış X, Y, Z pinlerinde analog voltaj sağlamaktadır. Bu durum, X, Y, Z gibi ilgili yönlerdeki ivme ile orantılı olarak değişmektedir.

Dönme Açısı

Şimdi X, Y, Z ekseni etrafında tam bir dönüş açısı (0° – 360°) bulalım:

Roll (Yatış Hareketi) – X ekseni boyunca dönüş açısı
Pitch (yunuslama) – Y ekseni boyunca dönme açısı
Yaw (Dönme hareketi) – Z ekseni boyunca dönme açısı
Hepsi aşağıdaki kavramsal şemada gösterilmiştir:

Arduino İvme Sensörü Kullanımı arduino ivme sensörü,arduino ivme sensörü kullanımı,arduino ile ivme sensörü kullanımı,arduino ivme ölçer,arduino ile ivme ölçer kullanımı
Dönme Eksenleri

Arayüz Şeması

Arduino İvme Sensörü Kullanımı arduino ivme sensörü,arduino ivme sensörü kullanımı,arduino ile ivme sensörü kullanımı,arduino ivme ölçer,arduino ile ivme ölçer kullanımı
Devre Şeması

Arduino UNO ile ADXL335 İvmeölçer Modülü kullanımı aslında bu kadar basittir. Gerekli kodu da yazdıktan sonra işimiz zaten kolayca bitmektedir.

Proje Kodu

#include <math.h>
const int x_out = A1; // modülün x_out'unu UNO kartının A1 pinine bağlayın
const int y_out = A2; // modülün y_out'unu UNO kartının A2 pinine bağlayın
const int z_out = A3; // modülün z_out'unu UNO kartının A3 pinine bağlayın

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

void loop() {
  int x_adc_value, y_adc_value, z_adc_value; 
  double x_g_value, y_g_value, z_g_value;
  double roll, pitch, yaw;
  x_adc_value = analogRead(x_out);  // x_out pinindeki voltajın dijital değeri 
  y_adc_value = analogRead(y_out);  // y_out pinindeki voltajın dijital değeri
  z_adc_value = analogRead(z_out);  // z_out pinindeki voltajın dijital değeri
  Serial.print("x = ");
  Serial.print(x_adc_value);
  Serial.print("\t\t");
  Serial.print("y = ");
  Serial.print(y_adc_value);
  Serial.print("\t\t");
  Serial.print("z = ");
  Serial.print(z_adc_value);
  Serial.print("\t\t");
  //delay(100);
  
  x_g_value = ( ( ( (double)(x_adc_value * 5)/1024) - 1.65 ) / 0.330 );  // x yönünde g biriminde ivme
  y_g_value = ( ( ( (double)(y_adc_value * 5)/1024) - 1.65 ) / 0.330 );  // y yönünde g biriminde ivme
  z_g_value = ( ( ( (double)(z_adc_value * 5)/1024) - 1.80 ) / 0.330 );  // z yönünde g biriminde ivme

  roll = ( ( (atan2(y_g_value,z_g_value) * 180) / 3.14 ) + 180 );   // Roll için formül
  pitch = ( ( (atan2(z_g_value,x_g_value) * 180) / 3.14 ) + 180 );  // Pitch için formül
  //yaw = ( ( (atan2(x_g_value,y_g_value) * 180) / 3.14 ) + 180 );  // Yaw için formül
  
  // İvmeölçer kullanarak sapma ölçmek mümkün değil. Sapma da gerekliyse jiroskop kullanılmalıdır!!

  Serial.print("Roll = ");
  Serial.print(roll);
  Serial.print("\t");
  Serial.print("Pitch = ");
  Serial.print(pitch);
  Serial.print("\n\n");
  delay(1000);
}

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.