Project Hub

👟
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.
- MPU6050 & OLED share I2C: SDA → A4, SCL → A5.
- VCC → 3.3V/5V, GND → GND.
Arduino Sketch (.ino)
step-counter.ino
<span style="color:#f97583">#includespan> <Wire.h>
<span style="color:#f97583">#includespan> <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(<span style="color:#79b8ff">128span>, <span style="color:#79b8ff">64span>, &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() << <span style="color:#79b8ff">8span> | Wire.read();
int16_t ay = Wire.read() << <span style="color:#79b8ff">8span> | Wire.read();
int16_t az = Wire.read() << <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 > <span style="color:#79b8ff">0.4span> && now - lastStep > <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>">"Steps"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>);
}