Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Gökhan BEKEN - 16 Temmuz 2014, 02:20:03

Başlık: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Gökhan BEKEN - 16 Temmuz 2014, 02:20:03
Bülent hocanın, bu örneğini, sonuçları seri porttan görecek şekilde kullandım.
www.picproje.org/index.php/topic,35896.msg262643.html#msg262643 (https://www.picproje.org/index.php/topic,35896.msg262643.html#msg262643)
Değerler 0 ila 255 arasında değişiyor. Bana açı değeri gerekiyor, yani x'in 0 ila 360 arasındaki gerçek açı değerleri lazım. Oran orantı ile yapmak yerine daha işe yarar bir yöntem var mı?
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: kantirici - 16 Temmuz 2014, 02:26:52
Hocam gelen ham verileri basit bir formülasyon ile açı ya dönüştürmek mümkün.

http://www.hobbytronics.co.uk/accelerometer-info (http://www.hobbytronics.co.uk/accelerometer-info)

http://www.barissamanci.net/Makale/26/accelerometer-gyroscope-imu-nedir/ (http://www.barissamanci.net/Makale/26/accelerometer-gyroscope-imu-nedir/)

Xangle = (Math.atan(Xaxis / Math.sqrt((Yaxis * Yaxis) + (Zaxis * Zaxis))) * 180) / Math.PI;
Xangle = Math.round(Xangle);
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Gökhan BEKEN - 16 Temmuz 2014, 02:48:44
Hocam
sqrt(y * y);
komutu işlemiyor, double türünde parametre alıyor bu fonksiyon. Oysa benim ham verilerim unsigned char türünde.
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: kantirici - 16 Temmuz 2014, 03:15:37
Hocam tip dönüşümü yapsanız   sorun hallolur diye düşünüyorum.
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: mir_as82 - 16 Temmuz 2014, 07:34:23
sqrt(1.0*y*y);

Bu olabilir mi?
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Gökhan BEKEN - 16 Temmuz 2014, 23:14:01
denex = sqrt(4); yapınca sorun yok.

@mir_as82  o da olmadı,
denex değişkeninin türünü double yaptım, çünkü dönen değer double
denex = sqrt((double) y); yaptım yine olmadı,
verdiği hata çok garip. "undefined reference to `sqrt'" diyor

denex = sqrt(denex); bile yaptım aynı hatayı veriyor.
Bu arada COOCOX ile oldu bunlar, keil'da hiç denemedim.
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Gökhan BEKEN - 17 Temmuz 2014, 13:22:36
Alıntı yapılan: kantirici - 16 Temmuz 2014, 02:26:52
Xangle = (Math.atan(Xaxis / Math.sqrt((Yaxis * Yaxis) + (Zaxis * Zaxis))) * 180) / Math.PI;
Xangle = Math.round(Xangle);

Bu formülde anlamadığım birşeyler var. Neden x açısını bulmak için x ham verisinin dışında, y ham verisi ve z ham verisini işin içine katıyoruz?
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Kabil ATICI - 17 Temmuz 2014, 14:47:20
Sanırım burada X eksenini harekete paralel olduğu ve Y ile Z eksenlerinin x ekseni etrafında döndüğü esasına göre hesaplanıyor. X ekseni etrafında  dönerse Y değeri değişir onun için Y değeri harekete paralel olma durumuna göre hesabı dengelemeye çalışıyor.

Basitçe X ekseni boyunca Y dönerse y değeri daha küçük olur. (vektörel olarak) Tam değerini bulmak için
Z değerini hesaba katmak gerekir.
X ekseni düz olduğ varsayılıyor. Normalde X eksenine göre de kayma olabilir, ama hesaplar çok karışır.
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Mucit23 - 17 Temmuz 2014, 18:00:21
Alıntı yapılan: meftun - 17 Temmuz 2014, 13:22:36
Bu formülde anlamadığım birşeyler var. Neden x açısını bulmak için x ham verisinin dışında, y ham verisi ve z ham verisini işin içine katıyoruz?

@Meftun formül öyle aslında
(http://farm3.staticflickr.com/2827/12257663885_a76066b835_o.jpg)

Sanırım durum ambar7 nin açıkladığı gibi.
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Kabil ATICI - 17 Temmuz 2014, 19:12:09
Xaxis ile Z axis parantez için neden aynı? Z axis için en azından X ile Z'nin yerinin değişmesini beklerdim.
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Gökhan BEKEN - 23 Temmuz 2014, 04:14:11
45 derece kendime doğru eğdiğim zaman:
x=10, y=37, z=37
-----------------------------------------
45 derece karşıya doğru eğdiğim zaman:
x=7, y=223, z=41
-----------------------------------------
boşta dururken:
x=0, y=0, z=52
-----------------------------------------
45 derece sağa doğru eğdiğim zaman:
x=223, y=0, z=39
-----------------------------------------
45 derece sola doğru eğdiğim zaman:
x=35, y=0, z=43
-----------------------------------------
90 derece sola doğru eğdiğim zaman:
x=60, y=0, z=0
-----------------------------------------
90 derece sola doğru eğdiğim zaman:
x=202, y=0, z=0
-----------------------------------------
boştayken ve ters durumdayken
x=0, y=0, z=195
-----------------------------------------
90 derece karşıya doğru eğdiğim zaman:
x=0, y=202, z=0
-----------------------------------------
90 derece kendime doğru eğdiğim zaman:
x=0, y=55, z=0
-----------------------------------------

c deki "atan" fonksiyonun windows hesap makinesindeki karşılığı sanırım, derece kısmındaki "tanh" işlemi. Doğru mudur?


Alıntı YapBir programda math.h kütüphanesi kullanılacakca, GCC derleyicisi -lm seçeneği ile birlikte kullanılmalıdır.
    Örneğin test.c içinde math.h'i kullanıyorsa derleme:    gcc -lm test.c -o test

    şeklinde yapılmalıdır. Aksi halde bir hata mesajı ile karşılaşılır.
Şeklinde yorumlar gördüm, coocox ta bu ayarı yapamadım nasıl yapıldığını bilen var mı?
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: muhittin_kaplan - 23 Temmuz 2014, 08:00:42
arc tanjant
ayrıca meftun, math i kullanacaksan gcc de, coide de "m" i eklemen gerekir

(http://www.coocox.org/userfiles/add%20math.JPG)

http://www.coocox.org/forum/topic.php?id=1040 (http://www.coocox.org/forum/topic.php?id=1040)

açılara gelince

The Aerospace Euler Angles (http://www.youtube.com/watch?v=UpSMNYTVqQI#ws)
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: fahri- - 23 Temmuz 2014, 10:40:23
Alıntı yapılan: meftun - 23 Temmuz 2014, 04:14:11

c deki "atan" fonksiyonun windows hesap makinesindeki karşılığı sanırım, derece kısmındaki "tanh" işlemi. Doğru mudur?



Yanlış hocam. "tanh" tanjant hiperbolik demektir. atan karşılığı : inv tan  dır (tanjant üzeri -1)
Başlık: Ynt: LIS302DL3 axis accelerometer açı sorunu
Gönderen: Gökhan BEKEN - 23 Temmuz 2014, 23:17:33
Teşekkürler Muhittin hocam, math.h sorunu düzeldi.

projeyi nihayet derledikten sonra, aşağıdaki şekilde yazdığım kodlar başarılı olamadı.
x_derece=(atan(x / sqrt((y * y) + (z * z))) * 180) / PI_SAYISI;
x_derece = round(x_derece);

y_derece=(atan(y / sqrt((x * x) + (z * z))) * 180) / PI_SAYISI;
y_derece = round(y_derece);

z_derece=(atan(z / sqrt((y * y) + (z * z))) * 180) / PI_SAYISI;
z_derece = round(z_derece);




cihazı sola doğru x ekseninde eğdiğimde, 0 ila 88 derece arası sonucu başarıyla gösterebiliyor
x ekseninde sağa doğru eğdiğimde, direkt 78 den başlıyor, ve 45 derece sağa eğdikten sonra 90 dereceye doğru biraz daha eğdiğimde cihaz 88 dereceye kadar sonuç üretiyor.

cihazı kendime doğru eğdiğimde y derecesi 75 dereceye kadar doğru gösteriyor
fakat karşıya doğru eğdiğimde 78 dereceden başlıyor, 45 dereceden sonra daha da eğersem 80 ila 83 arası sonuç gösteriyor

formüller mi yanlış ben mi yanlış birşey yapıyorum?

İnternette benzer formüller bulup denedim onlarda yanlış sonuç üretiyor.
Mesela:
x_derece  = atan2(sqrt(y*y + x*x),z)* 180/PI_SAYISI;
y_derece = atan2( sqrt(x*x + z*z), y) * 180/PI_SAYISI;

burdaki formülü de denedim: http://www.biopac.com/manuals/app_pdf/app273.pdf (http://www.biopac.com/manuals/app_pdf/app273.pdf)