senoleker
Üye
- Katılım
- 5 Ekim 2025
- Mesajlar
- 12
Birkaç konu okudum ve bir eksik gözüme çarptı. Örneğin bir ADC ölçüyorsunuz, çok hızlı değişiyor. Ekrana bunu yazdığınızda okunmuyor. Bu durumda ne yapacağız?
Bu yerlerde kullanılabilecek en iyi çözüm, "complementary filter" dir. (Tamamlayıcı filtre diye tercüme edilebilir)
Gürültülü sensörlerden alınan verileri çoğu durumda (tahmin için güzel bir model yoksa) Kalman filtresi kadar temiz düzeltir.
Üstelik uygulanması çok basittir:
Önce tanımlarımızı yaparız.
Sonra ana döngüde okuma ve yazma işlemini yaparız:
Hepsi bu kadar. gain'i 0.001 ya da 0.1 ya da ne bileyim 0.8 yapabilirsiniz. 0 olursa sensör okumaz. 1 olursa doğrudan yazdırıyormuş gibi olur. İkisinin arasında bir değer vererek istediğiniz sonucu alabilirsiniz.
Bunu kullandığınızda okumalar arasında kesinlikle bekleme yapmayın. Tersine, olabildiğince hızlı okuyun. Ekrandaki sakinliği gain'i değiştirerek ayarlayın.
Bu yerlerde kullanılabilecek en iyi çözüm, "complementary filter" dir. (Tamamlayıcı filtre diye tercüme edilebilir)
Gürültülü sensörlerden alınan verileri çoğu durumda (tahmin için güzel bir model yoksa) Kalman filtresi kadar temiz düzeltir.
Üstelik uygulanması çok basittir:
Önce tanımlarımızı yaparız.
Kod:
float gain=0.2 ; //Bu sayı, ne kadar filtreleyeceğini belirtir. 0 ile 1 arasında bir sayı olabilir.
int displayValue=ReadSonsor(); // ilk kez sensör okumasını böyle yapıyoruz. Size zor gelirse 0 da verebilirsiniz. Bu durumda ilk başta kısa bir süre hatalı değer gösterir. Değer mesela 5 olacaksa sıfırdan başlar ve artarak 5'e gelir.
Kod:
displayValue=ReadSensor*gain+displayValue*(1-gain);
printf displayValue;
Bunu kullandığınızda okumalar arasında kesinlikle bekleme yapmayın. Tersine, olabildiğince hızlı okuyun. Ekrandaki sakinliği gain'i değiştirerek ayarlayın.