Adım Sayar (MPU6050 İvmeölçer)
Proje Amacı
MPU6050'den gelen 3 eksenli ivme verisinin vektör büyüklüğünü hesaplayıp belirli bir eşiği her geçişte adım sayısını bir artırır — akıllı saatlerin adım sayma mantığının basitleştirilmiş hali.
Gerekli Malzemeler
- Arduino Uno
- MPU6050 İvmeölçer/Jiroskop Modülü
- Breadboard
- Jumper kablolar
Gerekli Kütüphaneler
Gerekli ek kütüphane yok, Wire.h yerleşiktir (MPU6050 verisi ham I2C register okumasıyla alınıyor, ek sensör kütüphanesi gerekmez).
Pin Bağlantıları
| Bileşen Pini | Bağlantı |
|---|---|
| MPU6050 VCC | 5V |
| MPU6050 GND | GND |
| MPU6050 SDA | A4 |
| MPU6050 SCL | A5 |
Devre Şeması
Arduino Kodu
| 1 | #include <Wire.h> |
| 2 | const int MPU=0x68; |
| 3 | int16_t ax, ay, az; |
| 4 | float esikDeger = 1.3; |
| 5 | int adimSayisi = 0; |
| 6 | bool esikGecildi = false; |
| 7 | |
| 8 | void setup(){ |
| 9 | Wire.begin(); |
| 10 | Wire.beginTransmission(MPU); |
| 11 | Wire.write(0x6B); Wire.write(0); |
| 12 | Wire.endTransmission(true); |
| 13 | Serial.begin(9600); |
| 14 | } |
| 15 | |
| 16 | void loop(){ |
| 17 | Wire.beginTransmission(MPU); |
| 18 | Wire.write(0x3B); |
| 19 | Wire.endTransmission(false); |
| 20 | Wire.requestFrom(MPU,6,true); |
| 21 | ax=Wire.read()<<8|Wire.read(); |
| 22 | ay=Wire.read()<<8|Wire.read(); |
| 23 | az=Wire.read()<<8|Wire.read(); |
| 24 | |
| 25 | float toplamIvme = sqrt(pow(ax/16384.0,2)+pow(ay/16384.0,2)+pow(az/16384.0,2)); |
| 26 | |
| 27 | if(toplamIvme > esikDeger && !esikGecildi){ |
| 28 | adimSayisi++; |
| 29 | esikGecildi = true; |
| 30 | Serial.print("Adim: "); Serial.println(adimSayisi); |
| 31 | } else if(toplamIvme < esikDeger){ |
| 32 | esikGecildi = false; |
| 33 | } |
| 34 | |
| 35 | delay(50); |
| 36 | } |
Çalışma Açıklaması
esikDeger gerçek yürüme testleriyle kalibre edilmeli; çok düşük ayarlanırsa titreşimler bile adım sayılabilir. Gerçek bir giyilebilir cihaz için sensör bel/bilek gibi sabit bir noktaya monte edilmelidir.
Test Bilgisi
Devreyi kurun, kodu yükleyin, Seri Monitör'ü açın. Sensörü elinizde tutup yürüme hareketi simüle edin (yukarı-aşağı sallayın); adım sayısının arttığını gözlemleyin.
Olası Sorunlar ve Çözümleri
Adım sayısı hiç artmıyorsa: esikDeger çok yüksek olabilir, sensörü sallayarak Seri Monitör'de gerçek ivme değerlerini gözlemleyip eşiği düşürün. Çok fazla sahte adım sayılıyorsa: esikDeger'i artırın veya art arda algılamalar arasına minimum süre (debounce) ekleyin. Sensör hiç veri vermiyorsa: I2C bağlantısını (SDA-A4, SCL-A5) ve MPU6050'nin güç LED'inin yandığını kontrol edin.
Alternatif Çözümler
Ham ivme eşiği yerine daha gelişmiş bir adım algılama algoritması (tepe noktası/peak detection) kullanılarak doğruluk artırılabilir. MPU6050 yerine daha basit ADXL335 analog ivmeölçer de kullanılabilir. Adım sayısı bir LCD/OLED ekranda gösterilebilir veya SD karta günlük olarak kaydedilebilir.
Benzer Projeler
MQ-2 Gaz Alarmı
Ortamdaki yanıcı gaz/duman yoğunluğunu ölçüp tehlikeli seviyede LED ve buzzer ile alarm verir — ama bir uyarı: bu bir eğitim projesidir, sertifikalı bir ev tipi gaz alarmının yerini tutmaz (bkz. Çalışma Açıklaması).
Servo Kontrollü Kilit
Potansiyometreyi çevirerek servo motorun açısını 0-180° arasında kontrol eder; aynı mantık gerçek bir kilit mekanizmasına bağlandığında servo tabanlı bir erişim sistemine dönüşür.
Ses Komutlu Cihaz Kontrolü
Basit bir ses tanıma modülüyle önceden eğitilmiş sözcük komutlarına (örn. 'aç'/'kapat') göre bir LED'i kontrol eder — bu proje bilinçli olarak iskelet halinde bırakıldı çünkü komut kodları kullanılan modüle göre değişir (bkz. Çalışma Açıklaması).