Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Lis302dl I2C İletişimi

Başlatan Mucit23, 05 Mart 2013, 15:39:50

muhittin_kaplan

bak ben hesaplamak için ne yapmışım.


Xv=AlınanBilgiX * 1/56
Yv=AlınanBilgiY * 1/56
Zv=AlınanBilgiZ * 1/56

Pitch=Round ((Atan(Xv/(sqrt(Yv^2+Zv^2))))*180/PI)
Roll=Round(Atan(Yv/(sqrt(Xv^2+Zv^2)))*180/PI)
Theta=Round(Atan(sqrt(Yv^2+Zv^2))/Zv)*180/PI)

yapmışım. buradan açıları hesaplayabilirsin. (Bu kodlar Pc de koşuyor. Parantezlerde yanlız yapmış olabilirim.)


mesaj birleştirme:: 07 Mart 2013, 14:56:42

max deger 56 mış sanırım. oda tam 90 dereceye denk geliyordu

Mucit23

Hocam aynen Bende max 56 alıyorum. Ama 56dan fazlada gelebiliyor. Mesela tam 90 derece yapıp birden yukarı doğru kaldırınca 70-80 ları görüyorum.

muhittin_kaplan

ivme ölçüyorsun. dikkat et.
hareket halindeyken tam90 yapsan başka değerler görürsün.

mistek

Alıntı yapılan: Mucit23 - 07 Mart 2013, 15:04:21
Hocam aynen Bende max 56 alıyorum. Ama 56dan fazlada gelebiliyor. Mesela tam 90 derece yapıp birden yukarı doğru kaldırınca 70-80 ları görüyorum.

Çünkü g kuvvetini değiştiriyorsunuz. Durgun halde iken yer çekimi 1g dir. Düz pozisyonda Z ekseninden okuduğunuz değer 1g ye karşılık gelir. Açı hesaplamak için şuraya göz atabilirsiniz. http://www.barissamanci.net/Makale/26/accelerometer-gyroscope-imu-nedir/
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

fatih6761

@Mucit23 hocam sensör G cinsinden ölçüyor. CTRL1 register'ındaki FS biti önemli. Eğer cihazı ayarlarken FS bitini 0 yaparsanız, okuduğunuz max değer 2.3g'ye eşit olur. Okuyacağınız her bir birim, yan, ivme sabiti 18 miligal ivmeye denk. FS biti 1 olursa max değer 9.2g'ye eşit olur. Her birim değer, ivme sabiti 72 miligal demektir. Miligal dediğimiz G/1000 oluyor. Eğim açısı bulurken direkt değerlei kullanmayacaksınız. Çünkü kart aynı konumda dursa bile istanbulda ölçeceğiniz değer ile eversetin tepesinde ölçeceğiniz değer çok farklı çıkar. X, Y, Z eksen bilgilerini kullanarak basit bir trigonometri ile açıları hesaplayabilirsiniz.
[jstex]Angle_X = arctan(\frac{X}{Y^2 + Z^2}) \\
Angle_Y = arctan(\frac{Y}{X^2 + Z^2}) \\
Angle_Z = arctan(\frac{Z}{X^2 + Y^2}) \\[/jstex]
Değerler float cinsinden olsun. Çipten okuyacağınız eksen değerlerini önce signed int bir türe atın. Sonra bu değerleri ivme sabitleri ile bölün. Böylece ölçeklemiş oluyorsunuz.

Mucit23

Bu sensörde anlamadığım birkaç nokta var. Sendörü 2.3G modunda çalıştırıyorum. Bu moddayken max değer olan +127 geldiği zaman sensöre uygulanan g kuvvetti 2.3g mi olmuş oluyor. Ben bunu baz alarak orantı kurabilirmiyim yoksa farklı bir hesabımı var?

Mucit23

Hocam açı Hesabında hata yapıyorum sanırım.

C# programında aşağıdaki hesaplamaları yaptım.
        public void angle_calculate(int Xaxis,int Yaxis,int Zaxis)  //Açı Hesabını Yap
        {
            double Xangle;
            double Yangle;
            double Zangle;

            Xangle = Math.Atan(Xaxis / Math.Sqrt(Yaxis * Yaxis + Zaxis * Zaxis));

            label12.Text = Xangle.ToString();

        }


Bu fonksiyona direk ivme ölçerden okuduğum değerleri gönderiyorum.
Yapılan işlem sonucunda Çok küsüratlı değerler alıyorum genelde 0,012535654.... gibi değerler

Muhittin Hocam sizin kodları deneyeceğim ama siz şöyle bir işlem yapmışsınız.

Xv=AlınanBilgiX * 1/56
Yv=AlınanBilgiY * 1/56
Zv=AlınanBilgiZ * 1/56

Burada okunan değeri neden 1/56 ile çarpıyorsunuz.?

muhittin_kaplan

aynı adc hesabı gibi.
1g/56 90derece olduğunda 1g oluyor ve 90derece olduğunda max 56 değerini alıyor.
ölçtüğüm değer ile de çarpınca bir eksen için açıyı bulmuş oluyorum. ama euler için trigonemetrik fonk. işletilmesi gerekir.

Mucit23

buradaki formül neden çalışmadı onu anlamadım.


online photo storage

Acaba giriş değerlerinin formatımı yanlış

muhittin_kaplan

radyan derece den kaynaklı olabilir. aldığın değerin radyan derece dönüşümünü yaparmısın.

(bu arada benim verdiğim formuller çalışıyor.)

fatih6761

Alıntı yapılan: muhittin_kaplan - 11 Mart 2013, 14:16:14
radyan derece den kaynaklı olabilir. aldığın değerin radyan derece dönüşümünü yaparmısın.

(bu arada benim verdiğim formuller çalışıyor.)
Hocam sizin verdiğiniz orantı formülü sadece bir yerde geçerli ayrıca yatay eksende sıkıntı çekersiniz. Şöyle düşünün sizin olduğunuz yerde çip dik iken 56 değerine karşılık gelebilir, doğu illerinde bu değer 55-54'e düşer, Everestin tepesinde 52-53 civarına, ekvatorda isebelki de 50 küsür civarına düşebilir. Ayrıca bu sensör Gyro sensörü değil, Accel sensörü dolayısıyla kartı yere göre düz tutmak kaydıyla araba ile hareket ettirirseniz etkiyen eylemsizlik ivmesi nedeniyle ölçümler yanlış çıkar. Siz benim verdiğim fomülü kullanın. Oradaki açı değeri Radyan türündendir.
İyi çalışmalar...

muhittin_kaplan

#26

Mucit23

Fatih Hocam merhaba..

Hesabı değiştirdim.

En son formülüm böyle oldu.

        public void angle_calculate(int Xaxis,int Yaxis,int Zaxis)  //Açı Hesabını Yap
        {
            double Xangle;
           //  double Yangle;
           // double Zangle;

            Xangle = (Math.Atan(Xaxis / Math.Sqrt(Yaxis * Yaxis + Zaxis * Zaxis))*180)/Math.PI;
            label12.Text = Xangle.ToString();

        }

Bu şekilde akla yatkın değerler alıyorum ama yine tam dikken 90 dereceyi göremedim bir türlü. Birtek bu canımı sıktı.

Örnek

Sensörden aldığım X değeri 55, Y Değeri -2, Z Değeri -2 iken yukarıdaki işlem sonucu aldığım değer  87,056103... şeklinde gidiyor. Sanırım ben bu değere açı değeri diyebilirim.

-90 Göremememin sebebi Y ve Z eksenleriylemi ilgili?

Bir sorum daha olacak. Dediğim gibi  sonuç olarak elimde aşırı küsüratlı bir değer oluyor. Ben text olarak yazdırırken sadece virgülden sonra 1 hane olarak yazdırmak istiyorum. örneğin 73,1 gibi. Bunu C# da nasıl yaparım?

haydarpasamikro

int roundedUp = (int)Math.Ceiling(precise);

Ceil fonksiyonu ile tavana yuvarla.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

fatih6761

@Mucit23 hocam neticede bu Gyro sensörü değil, Accel sensörü. Tam değer vermesi zaten çok zor. Eğer temel amaç açı ölçmekse ya Gyro, ya da Gyro + Accel kullanmalısınız hocam. Hangi yöntemi kullanırsanız kullanın 2-3 derecelik hata olacaktır. (olmaktadır da :) )
İyi çalışmalar hocam...