Arduino-pohjainen tehomittari

Projektin ideana oli rakentaa arduino+lcd -yhdistelm√§st√§ ‚Äútehomittari‚ÄĚ polkupy√∂r√§n traineriin. Idean perustana on Kurt Kineticin Road Machine traineri, ja t√§lle m√§√§ritetty nopeus-teho yht√§l√∂ jonka perusteella poljentatehon voi laskea tunnetun nopeuden perusteella.

http://www.kurtkinetic.com/road-machine-p-35-l-en.html

Funktio on: P = (5.244820) * mph + (0.01968) * 3 * mph

Absoluuttisen oikeita treenitehoja yhtälöllä ei luonnollisestikkaan saa, koska tuo on Kineticin luoma matemaattinen malli sille kuinka paljon tehoa pitää tuottaa jonkun tietyn nopeuden ylläpitämiseksi stabiilissa ympäristössä (tuuleton tasamaa yms…). Pieni virhe todellisesta tehosta ei haittaa kunhan se pysyy saman harjoituksesta toiseen.

Projektin esikuva on Kurt Kineticin oma tehotietokone, joka pitää sisällään tuon edellämainitun tehokaava.

http://www.kurtkinetic.com/kinetic-wired-power-computer-p-152-l-en.html

Arduino tehomittarin toiminta perustuu reed-anturiin. Anturin avulla lasketaan renkaan pyörähtämiseen kulunut aika, ja tämän perusteella nopeus ja teho. Anturi sijoitettiin Sigman polkupyörän nopeusmittarin anturin yhteyteen ja magneettina toimi hyvin Sigman oma pinnaan sijoitettu magneetti.

#include <glcd.h>
#include "fonts/allFonts.h"
#include "bitmaps/allBitmaps.h"

const int reedPin = 48;
const float circu = 2.1;  // circumference of a 700x23 tyre (in meters)

unsigned long loopTimer = 0;
unsigned long lastSeen = 0;
unsigned long startTime = 0;
unsigned long delta = 0;
float delta_s = 0;
float spd = 0;
float spd_fra = 0;
int pwr = 0;
int running = 0;

char line[20];

void setup(){
  GLCD.Init(NON_INVERTED);
  GLCD.ClearScreen();  
  GLCD.SelectFont(System5x7);
  GLCD.ClearScreen();
  pinMode(reedPin, INPUT);
  Serial.begin(9600);
}

void loop(){
  loopTimer = millis();
  running = 0;

  while (millis() - loopTimer < 1000 ){
    if ( digitalRead(reedPin) == HIGH ) {
      lastSeen = millis();
      running = 1;
    }

    delta = lastSeen - startTime;
    startTime = lastSeen;
    delta_s = (float)delta / 1000;

    if ( delta > 10 ) {
      spd = ( circu / delta_s ) * 3.6;
      spd_fra = ( spd - (int)spd )*100;
      pwr = ((5.244820) * (spd / 0.62 )) + ((0.01968) * (spd / 0.62 ) * 3);
    }
  }
  
  if (running != 1 ) {
    spd = 0;
    spd_fra = 0;
    pwr = 0;
  }
  
  sprintf(line, "Speed: %02d,%02d km/h", (int)spd, (int)spd_fra);
  GLCD.CursorTo(1,1);
  GLCD.print(line);
  
  sprintf(line, "Pwr:   %03d   Watts", pwr);
  GLCD.CursorTo(1,2);
  GLCD.print(line);
}

Ja mittari toiminnassa

arduino_mittari2.jpg

arduino_mittari.jpg

Jatkoprojektina seuraaksi tuon kotelointi ja softan jatkokehittäminen (trippitoiminnot jne.).

Vielä kuin kerkeisi treenaamaan, eikä vaan neppailemaan arduinoa… :smiley:

Ihan hyvä projektin alku, mutta… Sopii lähinnä vain kuntopyörään, jossa ei ole ylimääräsiä nopeudesta riippuvia vastuksia ja ajo-olosuhteet ovat aina samat.

Isoin mutta:
Tehon laskeminen nopeuden funktiona onnistuu vain jos pyörää käytetään kuntopyöränä. Tosielämässä tehoon vaikuttaa myös ilmanvastus ja pintojen laatu. Esim. ylä- ja alamäkiä tämä laite ei ota huomioon? Alamäessä kyllä pyörät pyörivät ja polkijakin voi aikansa kuluksi polkea, mutta tehoa ei siihen tarvita. Ylämäessä taasen tehontarve kasvaa. Myös maasto aiheuttaa omat vastuksensa, onhan polkeminen pururadalla raskaampaa kuin asfaltilla.

Tehonmittaamiseen oikeasti käytössä olevaan polkupyörään vaatisi siis jonkinlaista tietoa vaikka vääntömomentista. En ota sit kantaa siihen miten vääntömomentin sitten pyörästä saa irti.

Pieni mutta:
Capture toiminnon käyttäminen pollaamisen sijaan, mahdollistaisi virransäästötoimintojen käytön ja lisäisi patterin käyttöikää. Jos ei Capture ole mahdollista, niin sitten vaikka ulkoinen keskeytys.

Vielä pienempi mutta:
Arduino ja graafinen näyttö on tähän hommaan hieman overkill. Jollain pienemmälläkin kontrollerilla ja alphanumeerisella näytöllä pärjäisi. Tämä mahdollistaisi laitteen koon pienentämisen.

Ei siinä ihmeempiä, ihan kätevä laite. Varsinkin jos ottaa huomioon, että alkuperäinen Kinecticin mittarikin soveltuu lähinnä vain kuntopyörään.

Jos siis tarkoitat kuntopy√∂r√§ll√§ esim. perus-Tunturin kuntopy√∂r√§√§, niin tuo kineticin mittari ei juuri sovellu siihen laisinkaan, tai mink√§√§n muun merkkiseen kuntopy√∂r√§√§n tai traineriin. Tuo teho-nopeus -kaava toimii vain kurtin trainereiden vastusyksik√∂ill√§. Kurtin v√§ki on ‚Äď toivottavasti! ‚Äď mitannut oikeilla fillareiden tehomittareilla (PowerTap, SRM, ‚Ķ) nopeuden ja tehon suhteen optimiolosuhteissa (tasamaa, tyyni, keskikokonen ja -rakenteiden py√∂r√§ilij√§) maantiell√§ ja rakentaneet trainereidensa vastukset siten ett√§ ne vastaavat maantien optimiolosuhteiden nopeus-teho -suhdetta. Muissa trainereissa tai kuntopy√∂riss√§ kaava ei pid√§ paikkaansa, puhumattakaan esimerkiksi vehkeist√§ jossa vastusta voi s√§√§t√§√§ nupista, silloinhan esim. 20 kmh voi tarkoittaa l√∂ysimmill√§√§n esim. 20 wattia ja kireimm√§ll√§ vastuksella 300 wattia.

Mutta juuri kuten sanoit, kaavassa tehoon vaikuttaa vain nopeus, ei muut muuttujat, kuten esim. oikella fillarin tehomittarilla havaittava tehopiikki ennen kiihdytystä. Lisäksi Kurtin tehomittari näyttää tehoja trainerilla rullatessa vaikka et polkisi yhtään, juuri kuten sanoit. Puhumattakaan löysistä renkaista, rasvaamattomista ketjuista, liejuisesta pururadasta, ylä-/alamäestä, jne.

Mutta joo, arduino mega + iso lcd on vähän overkilliä. Postissa onkin jo arduino mini ja 16x2 lcd tulossa jotta tuo homma saadaan järkevään kokoon.

Pari hulluhkoa tapaa tutkia pyörän momenttia

ilmanvastus, vierintävastus, ylä- ja alamäki kompensoidaan polkiessa. Jotta tiedetään paljonko energiaa se polkijan reppana joutuu antamaan takarattaalle, laitetaan ketjuun mutka jousen päähän eli kiristin. Mitä enemmän voimaa siirretään, sen suoremmaksi ketju menee. Ja tämä ei taatusti ole suoraan verrannollinen vaan vähintään neliössä. Sitten voidaan mitata tämän pyörän pyörimisnopeutta niin voidaankin jo laskea vaikka mitä.

Toinen hassu ajatus, joka pulahta mieleen olisi laakeroida keskiö uudelleen hassusti ja tutkia, paljonko se liikkuu. Mutta jos 80 kiloa uroslihaa rysäyttää 25 sentin kammen päästä 50mm tukipisteeseen, voipi olla aika hankala moista rakennetta valmistaa.

Tosikiero valmistaisi kammet ontosta jousiteräksestä ja laittaisi pietsot sisään tutkimaan taipumista. Tai itseasiassa pedaleista tarvitsisi tämä tutkia.

Tosikiero SRM on kaikessa kieroudessaan päätynyt laittamaan kammen ja rattaan väliin alumiinisen mittauspalan, jonka muodomuutosta mitataan venymäluiskoilla kun pyöräilijä runttaa otsasuoni pullollaan. Venymäliuskojen perusteella tiedetään poljennan aiheuttama momentti, tämän ja kulmanopeuden perusteella voidaan laskea teho. Umpikiero CycleOps on taas PowerTap tuotteissaan soveltanut samaista periaatetta takanavassa.

:smiley:

Muitakin tapoja löytyy eri valmistajilta, esim. Polarin ketkun kireyden ja värinän perusteella tapahtuva arvaus.

No polkupyöristä en muuta ymmärrä, kuin niitä ei vain voi viedä metsään (menevät rikki) ja niiden yli ei saa ajaaa autolla. Mutta kuten vissiin tuli selväksi, että joku muukin on asioita ajatellut ja tehnyt valmiita tuotteitakin.

Nuo nyt vain olivat ensimmäiset ajatukset joilla voisi itse alkaa tutkiman asioita jos DIY meiningillä mennään.

Tuo pedalipaineen tutkiminen voisi olla jännä tapa. Sähköt generoitaisiin pienellä dynamolla pedalin pyörinnästä ja mitattaisiin laakeripainetta. Nämä sitten lähetettäisiin radiolla keskusyksikköön, joka päättelisi asioita.

Projekti uusissa kuoseissa; Arduino mini & 16x2 lcd. Näytössä nopeus, laskettu teho, matkat ja aika.

ard_mini_2.jpg

Siinähän on näpsäkän näköinen kotelointikin. Oliko kotelo tarkoitettukin ko. näytölle? Mistä hankit ja paljonko maksoi?

Joku peruskotelo Elektorista. Olisiko ollut jonkun neljä euroa.