Skip to content

grobius/speedWeightSensor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

ESP32-C3 Skivstångssensor (Hastighet & Acceleration)

Detta projekt använder ett ESP32-C3-kort med en 0,42″ OLED-display och en BNO085 IMU (SPI) för att mäta hastighet och acceleration på en skivstång vid styrketräning.

Koden integrerar filtrerad vertikal acceleration för att uppskatta stångens hastighet, detekterar STILLASTÅENDE/RÖRLIGT beteende och visar realtidsdata på displayen.

Hårdvara

Komponenter

  • ESP32-C3 mikrokontroller
  • 0,42" OLED-display (SSD1306, 128x64 pixlar, 72x40 synligt område)
    • I2C-anslutning: SDA=GPIO5, SCL=GPIO6
    • Adress: 0x3C
  • BNO085 IMU (9-axlig rörelsesensor med sensorfusion)
    • SPI-anslutning:
      • SCK=GPIO3
      • MOSI=GPIO2
      • MISO=GPIO4
      • CS=GPIO7
      • INT=GPIO10
      • RST=GPIO1

Kopplingsschema

ESP32-C3          OLED (I2C)
GPIO5    ------>  SDA
GPIO6    ------>  SCL
3.3V     ------>  VCC
GND      ------>  GND

ESP32-C3          BNO085 (SPI)
GPIO3    ------>  SCK
GPIO2    ------>  MOSI
GPIO4    ------>  MISO
GPIO7    ------>  CS
GPIO10   ------>  INT
GPIO1    ------>  RST
3.3V     ------>  VIN
GND      ------>  GND

Programvara

Biblioteksberoenden

Följande Arduino-bibliotek krävs (installera via Library Manager):

  1. U8g2lib (>= 2.28.0)

  2. Adafruit BNO08x (>= 1.2.0)

  3. Adafruit BusIO (>= 1.14.0)

    • Beroende för Adafruit BNO08x
    • Abstraktion för I2C/SPI-kommunikation
  4. Wire (inbyggt i Arduino)

    • I2C-kommunikation för OLED
  5. SPI (inbyggt i Arduino)

    • SPI-kommunikation för BNO085

Installation av bibliotek

# Via Arduino IDE Library Manager:
# 1. Sketch -> Include Library -> Manage Libraries
# 2. Sök efter och installera:
#    - U8g2
#    - Adafruit BNO08x
#    - Adafruit BusIO (installeras automatiskt som beroende)

Funktioner

Huvudfunktionalitet

  • Vertikal hastighetsberäkning - Integrerar acceleration i världens upp-riktning (kompenserad för gravitation)
  • Rörelsedetektering - Skiljer mellan STILL och MOVING baserat på accelerationsmagnitud
  • Endast lyft-integration - Räknar bara hastighet vid uppåtgående acceleration (a_up > 0.25 m/s²)
  • Driftskontroll - Mild dämpning och klippning för att förhindra hastighetsackumulering
  • Peak acceleration tracking - Spårar maximal acceleration under varje lyftcykel
  • Realtidsvisning - Uppdaterar OLED-display ~10 Hz (100ms intervall)

Displayutdata

Displayen visar tre rader med information:

  1. Hastighet: Aktuell stånghastighet i m/s (fryses vid STILL-state)
  2. amax: Maximal acceleration sedan senaste lyft började
  3. Status: STILL eller MOVING

Seriell utdata

Detaljerad debug-information skickas till seriell konsol (115200 baud):

  • Linjär acceleration (x, y, z) i m/s²
  • Accelerationsmagnitud |a|
  • Vertikal acceleration a_up
  • Integrerad hastighet v_up
  • Aktuell status (STILL/MOVING)
  • Peak acceleration amax

Konfigurerbara parametrar

Följande konstanter kan justeras för att optimera mätningen (speedSensorTest1.ino:46-50):

const float A_GATE = 0.20f;          // Tröskelvärde för "stillastående" (m/s²)
const float A_LIFT = 0.25f;          // Minsta a_up för att börja integrera (m/s²)
const uint32_t STILL_HOLD_MS = 120;  // Tid under A_GATE för att bekräfta STILL (ms)
const float DAMPING = 0.02f;         // Dämpningsfaktor mot drift (0-1)
const float V_CLAMP = 6.0f;          // Max hastighet för sanity check (m/s)

Justeringsguide

  • A_GATE: Högre värde = mindre känslig för små rörelser, färre falska positiver
  • A_LIFT: Högre värde = endast snabbare lyft räknas, ignorerar långsamma faser
  • STILL_HOLD_MS: Längre tid = mer stabil detektion men långsammare respons
  • DAMPING: Högre värde = mer aggressiv driftreducering men kan underskatta hastighet
  • V_CLAMP: Säkerhetstak, bör vara högre än maximal förväntad stånghastighet

Teknisk beskrivning

Algoritm

  1. Sensorfusion: BNO085 levererar gravity-kompenserad linjär acceleration och gravitationsvektor
  2. Upp-riktning: Beräknas som -normalize(gravity) för att få världens vertikala riktning
  3. Projektion: Linjär acceleration projiceras på upp-vektorn med dot product
  4. Gating: Endast acceleration över A_LIFT integreras för hastighet
  5. State machine:
    • STILL: Ingen rörelse, v_up fryses till senast kända värde
    • MOVING: Aktiv rörelse, v_up integreras från a_up
  6. Reset: Peak acceleration nollställs vid varje ny MOVING-fas

Sensorkonfiguration

  • Linear Acceleration (SH2_LINEAR_ACCELERATION): Acceleration utan gravitationskomponent, rapporterad i världskoordinater
  • Gravity (SH2_GRAVITY): Gravitationsvektor som pekar nedåt, används för att hitta upp-riktningen
  • Samplingsfrekvens: 200 Hz (5000 μs) med fallback till 100 Hz

Display-layout

OLED är en 128x64 SSD1306-display men endast ett 72x40 fönster är synligt på detta specifika kort. Texten centreras i det synliga området med offset (X=30, Y=22).

Användningsområden

  • Styrketräning: Mät stånghastighet vid knäböj, bänkpress, marklyft
  • Hastighetsbaserad träning (VBT): Optimera belastning baserat på lyfthastighet
  • Teknikanalys: Jämför acceleration mellan olika lyft
  • Prestandaspårning: Objektiv mätning av explosivitet och kraft

Licens

Öppen källkod - fri att använda och modifiera.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages