Hareket etmekte olan bir cismin hızının zamana göre değişimine ivme denir. İvme vektörel bir büyüklüktür ve m/s2 şeklinde ölçülür. Zamana göre hızlanan bir cismin ivmesi pozitif, yavaşlayan bir cismin ivmesi negatiftir. Sabit hızla ilerleyen bir cismin ivmesi ise sıfırdır. Serbest düşen bir cismin yerçekimi sayesinde kazandığı sabit ivme g ile gösterilir ve g=9,8m/s2 dir.
ADXL345; SPI veya I2C arabirimleri ile veri iletebilen, 13 bit çözünürlükte ölçüm yapabilen ve düşük enerji tüketimine sahip bir ivme ölçüm sensörüdür. 16g’ye kadar ölçüm yapabilen ADXL345 sensör ile aşağıdaki işlemler gerçekleştirilebilir:
- aktivite ve hareketsizlik algılama
- yerçekimi ivmesi ölçümü
- dinamik ivme ölçümü
- eğim algılama
- önceden belirlenmiş eşik değerine göre ile hareketin varlığını veya yokluğunu tespit etme
- dokunma algılama (özellikle harekete duyarlı alarma sistemleri için)
- serbest düşüş algılama
ADXL345 ivme ölçüm modülü, birkaç farklı tasarımda üretilir. Tasarım farklı olsa da özellikleri ve bağlantı pinleri genellikle aynıdır. Bu yazıda ADXL345 sensör modülü I2C seri arayüzü ile Arduino’ya bağlanmış ve ivmedeki anlık değişimleri gösteren bir uygulama gerçekleştirilmiştir.
Malzemeler
- Arduino Uno
- ADXL345 sensör modülü
Bağlantı şeması
Kaynak kod
ADXL345 modülü için gerekli olan Adafruit_Sensor.h ve Adafruit_ADXL345_U.h kütüphanelerini indirmek için tıklayınız.
Kaynak kodda; x, y ve z adında üç değişken tanımlanmıştır ve bu değişkenler bir önceki döngüde ilgili eksende ölçülen ivme değerlerini tutmaktadır. if(event.acceleration.x!= x)
komut satırı ile x ekseninde yeni ölçülen ivme değeri ile bir önceki ölçüm değeri kıyaslanır ve bu eksende bir ivme değişimi varsa, ivmedeki değişim miktarı hx = event.acceleration.x - x;
kod satırı ile hx değişkenine aktarılır. Bu işlem her döngüde x, y ve z eksenleri için gerçekleştirilir ve ivmedeki değişiklikler seri port ekranına yazdırılır.
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_ADXL345_U.h> Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(); float hx, x, hy, y, hz, z; void setup(void) { Serial.begin(9600); if(!accel.begin()) { Serial.println("Sensör bulunamadı."); while(1); } else { sensors_event_t event; accel.getEvent(&event); x = event.acceleration.x; y = event.acceleration.y; z = event.acceleration.z; } } void loop(void) { sensors_event_t event; accel.getEvent(&event); if(event.acceleration.x!= x) { hx = event.acceleration.x - x; x = event.acceleration.x; } if(event.acceleration.y!= y) { hy = event.acceleration.y - y; y = event.acceleration.y; } if(event.acceleration.z!= z) { hz = event.acceleration.z - z; z = event.acceleration.z; } Serial.print("x ekseninde hareket: ");Serial.print(hx); Serial.print(" y ekseninde hareket: ");Serial.print(hy); Serial.print(" z ekseninde hareket: ");Serial.println(hz); delay(10); }
Kaynak kod çalıştırıldığında seri port ekranında x, y ve z eksenlerindeki ivme aşağıdaki şekilde gösterilir.
Arduino programının araçlar menüsünden “seri çizici”yi açarak ADXL345 sensörden okunan x, y veya z ivme verilerinin zamana göre değişimi grafiği alınabilir.
Serial.print("x ekseninde hareket: ");Serial.print(hx); Serial.print(" y ekseninde hareket: ");Serial.print(hy); Serial.print(" z ekseninde hareket: ");Serial.println(hz);
Bu işlem için yukarıdaki kod satırları silinip, bunun yerine x ekseni için Serial.print(hx);
y ekseni için Serial.print(hy);
ve z ekseni için Serial.print(hz);
yazılarak aşağıdaki gibi ivme-zaman grafiği elde edilir.