Project Hub
Step Counter
👟

Step Counter

Count steps with an MPU6050 accelerometer.

advanced90 min

Components Needed

Arduino UNO
MPU6050 module
0.96" I2C OLED

Circuit Diagram & Wiring

Add your circuit diagram image here.

  1. MPU6050 & OLED share I2C: SDA → A4, SCL → A5.
  2. VCC → 3.3V/5V, GND → GND.

Arduino Sketch (.ino)

step-counter.ino
<span style="color:#f97583">#includespan> &lt;Wire.h&gt;
<span style="color:#f97583">#includespan> &lt;Adafruit_SSD1306.h&gt;

Adafruit_SSD1306 oled(<span style="color:#79b8ff">128span>, <span style="color:#79b8ff">64span>, &amp;Wire, -<span style="color:#79b8ff">1span>);
const int MPU = 0x68;
long steps = <span style="color:#79b8ff">0span>;
float lastMag = <span style="color:#79b8ff">0span>;
unsigned long lastStep = <span style="color:#79b8ff">0span>;

void setup() {
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B); Wire.write(<span style="color:#79b8ff">0span>); Wire.endTransmission(true);
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
  Wire.beginTransmission(MPU);
  Wire.write(0x3B); Wire.endTransmission(false);
  Wire.requestFrom(MPU, <span style="color:#79b8ff">6span>, true);
  int16_t ax = Wire.read() &lt;&lt; <span style="color:#79b8ff">8span> | Wire.read();
  int16_t ay = Wire.read() &lt;&lt; <span style="color:#79b8ff">8span> | Wire.read();
  int16_t az = Wire.read() &lt;&lt; <span style="color:#79b8ff">8span> | Wire.read();
  float mag = sqrt((long)ax*ax + (long)ay*ay + (long)az*az) / <span style="color:#79b8ff">16384.0span>;
  unsigned long now = millis();
  if (mag - lastMag &gt; <span style="color:#79b8ff">0.4span> &amp;&amp; now - lastStep &gt; <span style="color:#79b8ff">300span>) {
    steps++; lastStep = now;
  }
  lastMag = mag;
  oled.clearDisplay();
  oled.setTextSize(<span style="color:#79b8ff">2span>); oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(<span style="color:#79b8ff">0span>, <span style="color:#79b8ff">0span>); oled.println(<span style="color:<span style="color:#f97583">#9ecbffspan>">&quot;Steps&quot;span>);
  oled.setTextSize(<span style="color:#79b8ff">3span>);
  oled.setCursor(<span style="color:#79b8ff">0span>, <span style="color:#79b8ff">24span>); oled.println(steps);
  oled.display();
  delay(<span style="color:#79b8ff">50span>);
}