Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature currently requires accessing the site using the built-in Safari browser.
0
1052.6315789473683
1052.6315789473683
1052.6315789473683
1052.6315789473683
1052.6315789473683
1052.6315789473683
1052.6315789473683
1052.6315789473683
1052.6315789473683
1764.7058823529412
1764.7058823529412
1764.7058823529412
1764.7058823529412
1764.7058823529412
1764.7058823529412
1764.7058823529412
33.0760749724366
1818.1818181818182
deine tabelle hat aber keine 60 spaltenAlso in Level 5 bei 60 U/Min = Wert aus der Tabelle.
kuck ich mir später mal anHier in der Anleitung stehen die Werte auf Seite 11:
https://www.christopeit-sport.com/media/download/anleitungen/9126-Crosstrainer-Ergometer-CX6.pdf
also stützpunke für ausgewählte rpm, okInterpolieren zwischen den Werten wäre natürlich der Held vom Erdbeerfeld![]()
Magnetfeld
ach ok,Die RPM Tabelle s so unterteilt: Stufe ⁄ U/min 20 30 40 50 60 70 80 90 100 110 120
1
2
3
...
// 10 ist in pyhton kein kommentar sonder durch 10 mit cast auf intmach mal deinen mangneten ab, was kommen dann für werte?Ja, aber die Magnetbremse ist unten, die löst den reed Kontakt nicht aus Versehen aus.
kann seinder GPIO muss noch software entprellt werden so 200ms (bouncetime)
var SpeedMeter = function(pin, levelUpPin, levelDownPin, weighting, pulsesPerRev, timeOut, bounceTime)
{
var rpm = 0;
var level = 1;
var timeAct = 0;
var timeOld = 0;
var timeDiff = 0;
var watchdog = null;
var gpio = require('rpi-gpio');
var power = [
[6,12,20,29,40,53,69,79,92,106,121],
[8,16,26,38,53,68,88,103,120,138,152],
[9,20,32,47,66,84,107,125,148,172,186],
[11,23,39,56,79,101,126,150,173,206,219],
[13,27,45,65,92,117,145,175,202,238,254],
[15,31,52,75,105,135,166,202,231,275,289],
[16,35,58,85,118,152,185,226,260,305,332],
[18,39,65,96,131,169,208,249,289,333,375],
[19,42,71,104,144,184,227,272,318,361,408],
[21,46,77,113,157,199,245,295,345,386,442],
[23,50,84,123,170,216,262,318,372,413,480],
[24,53,89,131,183,230,279,342,398,441,512],
[26,56,94,139,196,245,296,365,424,468,548],
[28,60,101,148,209,261,318,389,449,494,585],
[30,64,108,158,222,277,337,415,476,518,620],
[32,68,115,168,235,296,355,439,503,548,658],
[33,72,122,177,248,312,373,463,530,576,694],
[35,76,129,187,261,328,390,484,556,606,727],
[37,79,134,195,274,342,407,507,572,632,763],
[39,83,140,204,287,354,424,528,598,659,790],
[40,87,146,213,300,368,442,551,616,689,812],
[42,91,153,223,313,385,461,574,645,720,840],
[44,95,160,234,326,401,479,598,673,752,872],
[47,101,171,246,340,418,501,625,706,788,908]
];
weighting = weighting || 0;
pulsesPerRev = pulsesPerRev || 1;
timeOut = timeOut || 10000;
bounceTime = bounceTime || 100;
gpio.on('change', function(channel, value)
{
if (channel == pin)
{
var timeAct = new Date();
if ((timeAct - timeOld) > bounceTime)
{
if (watchdog)
{
clearTimeout(watchdog);
}
if (timeOld)
{
timeDiff *= weighting;
timeDiff += (1 - weighting) * (timeAct - timeOld);
rpm = 60000 / (timeDiff * pulsesPerRev);
}
timeOld = timeAct;
watchdog = setTimeout(function()
{
timeOld = 0;
rpm = 0;
}, timeOut);
}
}
else if (channel == levelUpPin)
{
if (level < 23)
{
++level;
}
}
else if (channel == levelDownPin)
{
if (level > 1)
{
--level;
}
}
});
gpio.setup(pin, gpio.DIR_IN, gpio.EDGE_RISING);
this.getSpeed = function()
{
return rpm;
};
this.getLevel = function()
{
return level;
};
this.getPower = function()
{
var lowerVal = 0;
var upperVal = 0;
var idxLower = Math.floor(rpm / 10);
var idxUpper = Math.ceil(rpm / 10);
if (idxLower > 0)
{
lowerVal = power[level - 1][idxLower - 1];
}
if (idxUpper > 0 && idxUpper <= 11)
{
upperVal = power[level - 1][idxUpper - 1];
}
else if (idxUpper > 11)
{
console.log("RPM(", rpm, ") out of range");
return power[level - 1][10];
}
return (upperVal - lowerVal) / (idxUpper * 10 - idxLower * 10) * (rpm - idxLower * 10) + lowerVal;
};
};
module.exports.SpeedMeter = SpeedMeter;
var SpeedMeter = require('./SpeedMeter');
var speedmeter = new SpeedMeter.SpeedMeter(4, 38, 40);
setInterval(function()
{
console.log("level: ", speedmeter.getLevel(), " speed: ", speedmeter.getSpeed(), " power: ", speedmeter.getPower());
}, 250);
level: 1 speed: 483.8709677419355 power: 121
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
level: 1 speed: 21.747009786154404 power: 13.397607828923523
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
RPM( 495.8677685950413 ) out of range
level: 1 speed: 495.8677685950413 power: 121
level: 1 speed: 12.695725772323318 power: 7.61743546339399
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
RPM( 550.4587155963303 ) out of range
level: 1 speed: 550.4587155963303 power: 121
level: 1 speed: 28.625954198473284 power: 18.900763358778626
level: 1 speed: 28.625954198473284 power: 18.900763358778626
level: 1 speed: 28.625954198473284 power: 18.900763358778626
jaHabe 4 gegen 7 getauscht
wo hängen die denn drann? auf pin 20 oder gpio20?level werden noch nicht gewechselt
die sind doch vom gerät? keine ahnung ob die gute hardware verbaut haben, mal sehen was kommt(Müssen wir da auch entprellen)?
dann ersetzeUnd noch ein wenig index out of range![]()
bounceTime = bounceTime || 100;
bounceTime = bounceTime || 200;
ach bei 20 beginnt die tabelle? bin von 10 ausgegangenWobei wir aber sagen können. Wenn RPM < 20 Power = 0,
> 120 sollte überhaupt nicht vorkommen, und selbst wenn, ist der max. wert besser als 0Wenn RPM > 120 Power = 0
var SpeedMeter = function(pin, levelUpPin, levelDownPin, weighting, pulsesPerRev, timeOut, bounceTime)
{
var rpm = 0;
var level = 1;
var timeAct = 0;
var timeOld = 0;
var timeDiff = 0;
var watchdog = null;
var gpio = require('rpi-gpio');
var power = [
[6,12,20,29,40,53,69,79,92,106,121],
[8,16,26,38,53,68,88,103,120,138,152],
[9,20,32,47,66,84,107,125,148,172,186],
[11,23,39,56,79,101,126,150,173,206,219],
[13,27,45,65,92,117,145,175,202,238,254],
[15,31,52,75,105,135,166,202,231,275,289],
[16,35,58,85,118,152,185,226,260,305,332],
[18,39,65,96,131,169,208,249,289,333,375],
[19,42,71,104,144,184,227,272,318,361,408],
[21,46,77,113,157,199,245,295,345,386,442],
[23,50,84,123,170,216,262,318,372,413,480],
[24,53,89,131,183,230,279,342,398,441,512],
[26,56,94,139,196,245,296,365,424,468,548],
[28,60,101,148,209,261,318,389,449,494,585],
[30,64,108,158,222,277,337,415,476,518,620],
[32,68,115,168,235,296,355,439,503,548,658],
[33,72,122,177,248,312,373,463,530,576,694],
[35,76,129,187,261,328,390,484,556,606,727],
[37,79,134,195,274,342,407,507,572,632,763],
[39,83,140,204,287,354,424,528,598,659,790],
[40,87,146,213,300,368,442,551,616,689,812],
[42,91,153,223,313,385,461,574,645,720,840],
[44,95,160,234,326,401,479,598,673,752,872],
[47,101,171,246,340,418,501,625,706,788,908]
];
weighting = weighting || 0;
pulsesPerRev = pulsesPerRev || 1;
timeOut = timeOut || 10000;
bounceTime = bounceTime || 200;
gpio.on('change', function(channel, value)
{
if (channel == pin)
{
var timeAct = new Date();
if ((timeAct - timeOld) > bounceTime)
{
if (watchdog)
{
clearTimeout(watchdog);
}
if (timeOld)
{
timeDiff *= weighting;
timeDiff += (1 - weighting) * (timeAct - timeOld);
rpm = 60000 / (timeDiff * pulsesPerRev);
}
timeOld = timeAct;
watchdog = setTimeout(function()
{
timeOld = 0;
rpm = 0;
}, timeOut);
}
}
else if (channel == levelUpPin)
{
if (level < 23)
{
++level;
}
}
else if (channel == levelDownPin)
{
if (level > 1)
{
--level;
}
}
});
gpio.setup(pin, gpio.DIR_IN, gpio.EDGE_RISING);
gpio.setup(levelUpPin, gpio.DIR_IN, gpio.EDGE_RISING);
gpio.setup(levelDownPin, gpio.DIR_IN, gpio.EDGE_RISING);
this.getSpeed = function()
{
return rpm;
};
this.getLevel = function()
{
return level;
};
this.getPower = function()
{
var lowerVal = 0;
var upperVal = 0;
var idxLower = Math.floor(rpm / 10);
var idxUpper = Math.ceil(rpm / 10);
if (idxLower > 1)
{
lowerVal = power[level - 1][idxLower - 2];
}
else
{
idxLower = 0;
}
if (idxUpper > 1 && idxUpper <= 12)
{
upperVal = power[level - 1][idxUpper - 2];
}
else if (idxUpper > 12)
{
console.log("RPM(", rpm, ") out of range");
return power[level - 1][10];
}
else if (idxUpper <= 1)
{
idxUpper = 0;
}
return (upperVal - lowerVal) / (idxUpper * 10 - idxLower * 10) * (rpm - idxLower * 10) + lowerVal;
};
};
module.exports.SpeedMeter = SpeedMeter;
ich hatte das 15:15 nochmal geändert, hast du den stand genommen?Level bleibt auf 1
level: 5 speed: 0 power: NaN
level: 5 speed: 0 power: NaN
level: 5 speed: 29.25402242808386 power: 25.955631399317404
level: 5 speed: 29.25402242808386 power: 25.955631399317404
level: 5 speed: 29.25402242808386 power: 25.955631399317404
level: 5 speed: 29.25402242808386 power: 25.955631399317404
level: 5 speed: 29.25402242808386 power: 25.955631399317404
level: 5 speed: 29.25402242808386 power: 25.955631399317404
level: 5 speed: 38.510911424903725 power: 42.319640564826706
level: 5 speed: 38.510911424903725 power: 42.319640564826706
level: 5 speed: 38.510911424903725 power: 42.319640564826706
level: 5 speed: 38.510911424903725 power: 42.319640564826706
level: 5 speed: 38.510911424903725 power: 42.319640564826706
level: 5 speed: 41.49377593360996 power: 47.98755186721992
level: 5 speed: 41.49377593360996 power: 47.98755186721992
level: 5 speed: 41.49377593360996 power: 47.98755186721992
level: 5 speed: 41.49377593360996 power: 47.98755186721992
level: 5 speed: 41.49377593360996 power: 47.98755186721992
level: 5 speed: 41.49377593360996 power: 47.98755186721992
level: 5 speed: 42.918454935622314 power: 50.83690987124463
level: 22 speed: 0 power: NaN
level: 22 speed: 33.11258278145695 power: 110.29801324503309
level: 22 speed: 33.11258278145695 power: 110.29801324503309
level: 22 speed: 33.11258278145695 power: 110.29801324503309
ok, scheint also zu passen, der speed stimmt auch mit der anzeige am gerät halbwegs überein?
return (upperVal - lowerVal) / (idxUpper * 10 - idxLower * 10) * (rpm - idxLower * 10) + lowerVal;if (idxUpper == 0 && idxLower == 0)
{
return 0;
}