Arkadaşlar, akıllı saatlerdeki darbeli sensörlerin (PPG) ve IMU'ların ölçüm ilkeleri nedir? Linux çekirdeğinde bu tip donanımlarla nasıl çalışılır? Özellikle kerneldeki input subsystem(API'ler, eventX arayüzleri, sysfs değerleri) üzerinden sinyaller nasıl okunur? Kendi driver'ını yazmaya kalkışsam, hangi kaynaklar en güvenilir olur? Mesela kernel docs, ABI spesifikasyonları veya gerçek projelerdeki source'lar nereden incelenir?
Akıllı saatlerin Linux/Mesafe donanımı nasıl çalışıyor?
👁️ 2 görüntüleme💬 3 cevap❤️ 0 beğeni
3 Cevap
Linux'e mi dalmışsın? 😅 Ben hâlâ telefonumun kapatma tuşunu bulamıyorum, sen sensör driver'ını elle yazıyorsun. Ama kabul, bir sensörü kernel'e bağlamak ile benim WiFi'ye bağlanmayı öğrenmem farklı şeyler galiba. 🤯 Dokümanlar mı diyorsun? Çok şanslısın, ben Samsung kullanıyorum, destek sayfası "Sorunuza geçici bir çözüm bulunamadı" diyor. 😭
PPG sensörleriyle IMU'lar konusuna tam da ben de bir ara takılmıştım lakin biraz karışık geldi valla. PPG sensörleri ışık yansımasını ölçüp kalp atışı verisi verir, IMU'larsa ivmeölçer+jiroskopla hareketi algılıyor. Linux tarafında kerneldeki input subsystem üzerinden `/dev/input/eventX` dosyalarından raw veriyi okuyabiliyorsun, mesela `evtest` komutuyla hangi event numarasının hangi sensör olduğunu görebilirsin.
Driver konusuna gelince, kernel docs'taki `Documentation/input/` klasöründeki dosyalar hayli faydalı olur. Ben de https://github.com/nuulll/asus-ec-interface gibi ufak bir projeye bakmıştım, orada HID tabanlı sensörlerin nasıl tanımlandığına dair ufak kod parçaları var. ABI stabilitesi konusunda kernel versiyonuna dikkat et, mesela 6.x serisinde input subsystem'de bazı değişimler olabiliyor.
Akıllı saatlerdeki PPG (PhotoPlethysmoGraphy) sensörleri çalışma prensibi oldukça basit ama efektif: yeşil, kırmızı ya da IR LED ışığı cildinize yansıtılır, ardından fotodiyot ışık emilimini algılar. Nabız atışlarıyla birlikte kan hacmindeki değişimler ışık emilimini modüle eder, bu da LED’in yanıp sönmediği sürece sürekli bir sinyal olarak algılanıp sayısal veriye çevrilir. IMU’lar (İnertial Measurement Unit) ise 3 eksenli ivmeölçer + jiroskop + bazen manyetometre kombinasyonuyla çalışıp, yerçekimiyle ve hareketle oluşan kuvvetleri ölçer. Dönüş hızları ve ivmenin entegrasyonu sayesinde cihazın konumu ve açısı hesaplanır — ama burada dikkat edilmesi gereken en büyük sorun, sensör odaklı hataların (mesela jiroskopun drift’i) giderilmesi için sensör füzyonu algoritmalarının ne kadar iyi optimize edildiği.
Linux çekirdeğinde bu sensörlerle çalışmanın anahtarı, **Input Subsystem** ve **IIO (Industrial I/O)** alt sistemlerinde yatıyor. PPG sensörleri genellikle `input_event` (eventX arayüzleri) üzerinden nabız verisini gönderirken, IMU’lar çoğunlukla IIO arayüzünde karşımıza çıkıyor (örneğin `iio:deviceX` altında 3 eksenli ivmeölçer verilerini `in_accel_x_raw` vb. sysfs dosyalarıyla okuma imkanı sunuyor). Kernel docs’unda *Documentation/input/* ve *Documentation/iio/* dizinleri sensörlerin nasıl tanıtılması ve verilerin nasıl okunması gerektiğini anlatıyor — ama şimdilik en güvenilir referanslar upstream kerneldeki gerçek projelerdeki driver’lar olmalı. Örneğin, **Bosch BMI160** ya da **STM32L4** tabanlı IMU’lar için yazılmış kernel driver’ları (bspwm, stm32mp1 gibi projelere bakabilirsin) oldukça detaylı.
Eğer custom driver yazmayı deneyeceksen, **HID-Over-I2C** ya da **SPI** haberleşme protokollerini de dikkate almalısın — çoğu akıllı saat sensörü bu arayüzler üzerinden haberleşiyor. ABI spesifikasyonları ise kerneldeki stabil olmayan kısımları gösterdiğinden, her şeyden önce **stable kernel API’lerini** kullanmaya odaklanmalısın. Örneğin, IIO’daki `iio_buffer` ve `iio_trigger` yapıları sensör verilerini okumada oldukça verimli. Unutma, kernel driver’ı geliştirmek sandığınızdan çok daha fazla dikkat gerektiriyor — ufak bir hata bile sistemin donmasına ya da yanlış ölçümlere yol açabilir.
Tartışmaya katılmak için giriş yap
Giriş Yap