Arduino Projeleri
#16Orta

Adım Sayar (MPU6050 İvmeölçer)

~1 saatI2C kavramına aşinalık faydalı

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 PiniBağlantı
MPU6050 VCC
5V
MPU6050 GND
GND
MPU6050 SDA
A4
MPU6050 SCL
A5

Devre Şeması

Arduino Kodu

arduino-16-adim-sayar-mpu6050-ivmeolcer.ino
1#include <Wire.h>
2const int MPU=0x68;
3int16_t ax, ay, az;
4float esikDeger = 1.3;
5int adimSayisi = 0;
6bool esikGecildi = false;
7
8void 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
16void 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.

Bu projenin kodunu AI ile özelleştir

Farklı pin, ek özellik ya da başka bir sensör mü istiyorsun?