3 Haziran 2014 Salı

Arduino ve Accelerometer ( İvmeölçer ) ile Eksenlere Uygulanan Kuvvet ve Açıları Bulmak

Hamza Öztaş Share:

 
Triple Axis Accelerometer Breakout - ADXL345

Merhaba arkadaşlar bugün kü yazımda Accelerometer yani ivme ölçer kullanarak eksenlere uygulanan kuvvet ve açıları nasıl bulabiliriz onun üzerine bir şeyler yazacağım. Öncelikle olarak arkadaşlar yazacaklarım genel bir konu olup sadece Arduino ile düşünülmemelidir, Arduino yada herhangi bir kontrolcü ne kullanırsanız kullanın bunların hepsi geçerlidir. 

Piyasada pek çok çeşitli marka ve özelliklerde ivme ölçerler bulunmaktadır ve hemen hemen hepsinin uygulama kodları üretici firma tarafından sağlanmaktadır. Hemen hemen herkes eminim ivme ölçer kullanmıştır. Genelde basit projelerimizde Arduino ve ivme ölçer'i nasıl kullanmışızdır? Size uzun zaman önce yaptığım basit bir projeden bahsedeyim, çok ta konuyu dağıtmadan. Proje şu idi, Arduino ve ivme ölçer kullanarak arabayı kablosuz olarak uzaktan kontrol etmek ve Arduino'u sağa yatırdığımızda sağa gidecek, sola yatırdığımızda sola, düz olursa ileriye gidecekti. Şimdi böyle bir durumda ihtiyacımız olan tek şey Arduino'nun sağa yada sola yattığını bulmak idi. Bunun içinde şöyle yapmıştım ben, ivme ölçer'im 3 eksendi ve ivme ölçer'i zemine düz bir şekilde yerleştirdim, 3 eksen için de analog değerleri aldım ve örneğin Rx değeri 100 olsun. Daha sonra Arduino'u sağa doğru yatırdığımda 100 değeri atıyorum 100-300 arasında değişiyordu. Sonrada kod kısmında;

if ( Rx>=100 && Rx<=300){
//Araba sağa hareket için komutlar
}
Ama şimdi arkadaşlar daha ciddi projelerimizde böyle olmuyor tabi :D. Hava araçları, kendini dengeleyen robotlar, zeminle yaptığı açıyı bulmamız gereken herhangi bir nesne ve benzer şekildeki tüm projeler için bu işlemi gerektirdiği gibi yapmamız gerekmektedir. Peki bunu nasıl gerçekleştireceğiz?
                                 
Yukarıdaki görmüş olduğunuz ivme ölçer sparkfun electronics firması tarafından üretilen "Triple Axis Accelerometer Breakout - ADXL345" ivme ölçer'dir. Üretici firma tarafından yayınlanan kodlara ulaşmak için buraya tıklayın. GitHub

Önemli Noktalar
  1. Arduino ile ivme ölçerden ( accelerometer)'dan x, y ve z olmak üzere 3 eksen için analog değerlerimizi aldık.
  2. İvme ölçerden 3 eksen için almış olduğumuz analog değerleri voltaja dönüştüreceğiz. Bunun için İvme ölçerin besleme voltajının ve kaç bit resolution olduğunu öğrenmemiz gerekmektedir.
    • 3.3 [ V ] besleme ve 10-bit resolution olsun ( Arduino ADC 10-bit )
      • VoltRx = Rx*3.3 V/1023 =.............................[V]
      • VoltRy = Ry*3.3 V/1023 =.............................[V]
      • VoltRz = Rz*3.3 V/1023 =.............................[V]
  3. Kullanmış olduğumuz ivmeölçerin datasheet'inden ZeroG ve Sensivity  değerlerini öğreneceğiz.
    • Bütün ivmeölçerlerin ve gyroların 0 g'de vermiş olduğu bir voltaj değeri vardır ve bu ZeroG olarak isimlendirilmiştir. Bu değer genelde ivmeölçerin besleme voltajının yarısıdır. 
      • Yani ZeroG= Vdd/2, Vdd = 3.3 V/2 = 1.65 [V]
    • Sensivity yani hassasiyet  ivmeölçerin her "g" başına vermiş olduğu bir voltaj değeridir ve çoğu zaman sensorümüzün datasheet'inde yazmaktadır.Birimi [mV/g], [counts/g]'dir.
    • Sensivity değerine datasheet'te ulaşamadığımız durumlarda şöyle bir yol izleyebiliriz.
      • Sensivity = (Vdd/2)/2g [V/g] = (3.3/2)/2g = 0.825 V/g = 825 [mV/g]
      • Sensivity = (0.9*Vdd-0.1*Vdd)/(+2g - - 2g)
      • Sensivity = ( 0.9*3.3-0.1*3.3)/4g = 0.66 [V/g] =      660 [mV/g]
      • Sensivity = (0.9*1023-0.1*1023)/4g =                  204.6 [counts/g]
  4. 2. işlem sırasında sensorden almış olduğumuz değerleri voltaj türünden ifade etmiştik. Şimdi bu değerden daha önce bulmuş olduğumuz ZeroG değerini çıkartıp, sonrada sensivity yani hassaiyet değerine bölersek sensorümüzün eksenlere uyguladığı kuvveti "g" türünden ifade etmiş oluruz.
    • Rx = (VoltRx-ZeroG)/ Sensivity  =.........(V-V) / [V/g] = [g]
    • Ry = (VoltRy-ZeroG)/ Sensivity  =.........(V-V) / [V/g] = [g]
    • Rz = (VoltRz-ZeroG)/ Sensivity  =......... (V-V) / [V/g] = [g]
  5. Birimler önemli olduğu için özellikle onları belirtmeye çalıştım arkadaşlar,
  6. Son olarak R^2 = Rx^2+Ry^2+Rz^2 denkelminde R vektörünü buluyoruz.
  7. Artık elimizde R vektörü  ve komponentleri Rx, Ry, Rz vektörleri var ve hepsini biliyoruz 
  8.                                          
  9. Şimdi basit bir şekilde x, y, z koordinat düzlemi ve bir tane R vektörü düşünün. R vektrörünü, komponentlerini biliyoruz. O zaman R vektörünün eksenlerle yaptığı açıları da bulabiliriz.
    • R vektörünün x eksenine yaptığı açıya Açı1 diyelim ve o açının cos'u nedir? 
    • R vektörünün x komponenti/ R vektörü yani,
    • cos(Açı1) = Rx/R =>>Açı1 = arccos(Rx/R) , Aynı şekilde diğerlerini de yapacak olursak
    • cos(Açı2) = Ry/R =>>Açı2 = arccos(Ry/R)
    • cos(Açı3) = Rz/R =>>Açı3 = arccos(Rz/R) olur.
  10. Bundan farklı olarak açıya dönüştürmek ile ilgili bir iki farklı yöntem daha var arkadaşlar, ilerleyen zamanlarda onlarla ilgilide yeni bir makale yayınlayacağım.

Tarafından Yayınlandı >> Hamza Öztaş

Hamza Öztaş'ı google plus'ta takip etmek için Google'a tıklayın;
Google+.

2
replies
  1. açı hesaplama yazısı gelince haberim olsun...

    YanıtlaSil
  2. helal olsun birader çok özel noktaları yakalamışsın... saygıalr

    YanıtlaSil

Get Updates in your Email
Complete the form below, and we'll send you our best of articles.

İletişim

© >> |
TOP