krengo
EN

Bygg en krengevinkel-logger

Registrer dine egne krengevinkler med en liten ESP32 mikrokontroller, en BNO055 retningssensor og et microSD-kort. Denne guiden dekker delene, koblingen, montering, kalibrering og kodeeksempler for å forstå prinsippene.

Krengo er et prosjekt under utvikling. Denne siden beskriver den generelle tilnærmingen vi bruker; den lover ikke spesifikke målte resultater.

Det du trenger

Kobling

Koblingen under er et eksempel for en klassisk ESP32 med disse pinnene tilgjengelige, ikke for alle ESP32-varianter. I2C- og SPI-pinner må settes eksplisitt i programmet. Bruk 3,3 V-logikk, felles jord og moduler som støtter den valgte forsyningen.

Eksempelkobling for klassisk ESP32
SignalESP32-pinneMerknad
BNO055 VCC3,3 VTåler ikke 5 V
BNO055 GNDGNDFelles jord
BNO055 SDAGPIO 21I2C data
BNO055 SCLGPIO 22I2C klokke
SD VCC3,3 VBruk en 3,3 V-modul
SD GNDGNDFelles jord
SD CSGPIO 5Chip select
SD MOSIGPIO 23SPI MOSI
SD MISOGPIO 19SPI MISO
SD SCKGPIO 18SPI klokke

Noen BNO055-kort har en liten spenningsregulator og tåler 5 V på Vin-pinnen, men I2C-linjene må fortsatt være 3,3 V. Sjekk alltid modulens skjema før du kobler.

Montering av sensoren

Sensoren må festes solid til sykkelen. Vibrasjoner eller rotasjon i forhold til ramma ødelegger målingen. Gode monteringssteder er:

Statisk krengevinkel avhenger ikke av sensorens høyde. Under bevegelse påvirker monteringsstedet vibrasjoner og akselerasjoner. Fest sensoren stivt, dokumenter aksene og mål orienteringen når sykkelen holdes loddrett. Kompenser for monteringsvinkelen i analysen.

Kalibrering

BNO055 rapporterer kalibreringsstatus for fire delsystemer: system, gyroskop, akselerometer og magnetometer. Hver gir en verdi fra 0 til 3, der 3 er fullt kalibrert. Du kan lese dem med:

uint8_t sys, gyro, accel, mag;
bno.getCalibration(&sys, &gyro, &accel, &mag);
// Gyro: stillhet. Akselerometer: seks stabile retninger.

Hold sensoren i ro for gyrokalibrering. For akselerometeret brukes seks stabile retninger: ±X, ±Y og ±Z opp. Magnetometeret kalibreres med bevegelser i flere retninger, ofte et åttetall, borte fra magnetiske forstyrrelser. Status 3 betyr kalibrert delsystem, ikke bevist målenøyaktighet på sykkel.

Lese rulle-vinkel

Adafruit-bibliotekets VECTOR_EULER returnerer heading, roll og pitch i henholdsvis x(), y() og z(). Det er navn på utgangsverdier, ikke en automatisk kobling til sykkelens akser. Kontroller sensorens aksetilordning og montering med kjente bevegelser før du kaller en verdi krengevinkel.

imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);
float heading = euler.x();
float roll    = euler.y();
float pitch   = euler.z();

BNO055s Euler-utgang har begrensninger ved sammensatte rotasjoner, ikke bare nær 90°. Adafruit anbefaler kvaternioner for generell orientering. Uttrykket under gir en konvensjonell ZYX-rullevinkel fra en normalisert kvaternion i riktig koordinatsystem; det er ikke automatisk sykkelens krengevinkel. Også konverterte Euler-vinkler har singulariteter, ved pitch ±90° i denne konvensjonen.

imu::Quaternion q = bno.getQuat();
float sinr_cosp = 2 * (q.w() * q.x() + q.y() * q.z());
float cosr_cosp = 1 - 2 * (q.x() * q.x() + q.y() * q.y());
float rollZYX = atan2(sinr_cosp, cosr_cosp) * 180.0 / PI;

Logging til SD-kort

20 Hz kan brukes som et første designvalg for logging. Registrer faktisk tidsstempel, kvaternion og kalibreringsstatus for å kunne kontrollere tidsavvik og montering senere. CSV-biten under illustrerer bare filskriving med en allerede beregnet roll-verdi; den er ikke et komplett eller maskinvareverifisert loggerprogram.

File log = SD.open("/lean.csv", FILE_APPEND);
if (log) {
  log.print(millis());
  log.print(",");
  log.println(roll);
  log.close();
}

Å åpne og lukke for hver måling er enkelt, men gir ekstra SD-arbeid. Ved kontinuerlig logging kan filen holdes åpen, med bufrede skrivinger og et valgt flush-intervall. Kontroller returverdier og mål pauser i loggingen. Verken close() eller flush() garanterer mot tap eller filskade ved strømbrudd; bruk kontrollert avslutning.

Strøm og driftstid

Driftstid må måles på den faktiske kombinasjonen av kort, sensor, SD-kort og strømforsyning. Ideelt gir 1000 mAh / 200 mA fem timer hvis strømmen er målt på batterisiden. Brukbar kapasitet, regulatorens tap, temperatur og avstengningsgrense reduserer eller endrer dette anslaget. SD-skriving krever også margin for strømtopper.

Fra loggfil til innsikt

Kontroller tidsstempler, tapte målinger og kalibreringsstatus før du tolker toppvinkler. Sammenlign kjent statisk helning og dynamisk bevegelse med en uavhengig referanse. Et glidende gjennomsnitt kan skjule topper og retter ikke systematiske orienteringsfeil. Behold rådata og dokumenter filtreringen.

Hvor Krengo passer inn

Krengo bygger en logger langs disse linjene: ESP32 + BNO055, microSD-lagring, batteridrift og et feste under setet. Den langsiktige ideen er å gjøre dataene nyttige på en Garmin Edge via Bluetooth. Foreløpig er prosjektet fokusert på pålitelig logging og repeterbar analyse.

Kilder: Adafruit BNO055 veiledning og FAQ · Adafruit_BNO055 driverkode.

Vanlige spørsmål

Kan en BNO055 vise sykkelens krenging direkte?

Den rapporterer sensorens orientering. Sykkelens krengevinkel krever en kjent transformasjon fra sensor til sykkel og en fortegnskonvensjon, samt kontroll med kjente helninger og under bevegelse.

Hvilken Euler-verdi er roll i Adafruit-biblioteket?

For VECTOR_EULER inneholder x(), y() og z() henholdsvis heading, roll og pitch. Navnene fastslår ikke sykkelaksene; kontroller montering og aksetilordning.

Hvordan kalibreres akselerometeret?

Hold sensoren stille i seks retninger, med hver positiv og negativ akse opp etter tur. Åttetallsbevegelser brukes til magnetometerkalibrering.

Beviser kalibreringsstatus 3 nøyaktighet i svinger?

Nei. Det er en kalibreringsstatus, ikke et bevis på nøyaktighet under sykling. Dynamiske feil, vibrasjoner og sensorens montering må kontrolleres separat.

Hindrer lukking eller flushing av SD-filen datatap?

Nei. Det bidrar til å overføre bufrede data til lagring, men strømbrudd kan fortsatt gi datatap eller filskade. Håndter skrivefeil og bruk kontrollert avslutning.

Relaterte sider

Tilbake til krengo.pro