openrowingmonitor/config/rowerProfiles.js

158 lines
5.9 KiB
JavaScript

'use strict'
/*
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
This file contains the rower specific settings for different models of ergometers.
These have been generated by the community. If your rower is not listed here and you did find
good settings for your rowing device please send them to us (together with a raw recording of
10 strokes) so we can add the device here.
*/
export default {
// The default rower profile
DEFAULT: {
// How many impulses are triggered per revolution of the flywheel
// i.e. the number of magnets if used with a reed sensor
numOfImpulsesPerRevolution: 1,
// Filter Settings to reduce noise in the measured data
// Minimum and maximum duration between impulses in seconds during active rowing. Measurements outside of this range
// will be replaced by a default value.
minimumTimeBetweenImpulses: 0.014,
maximumTimeBetweenImpulses: 0.5,
// Percentage change between successive intervals
maximumDownwardChange: 0.25, // effectively the maximum deceleration
maximumUpwardChange: 1.75, // effectively the maximum acceleration
flankLength: 2,
numberOfErrorsAllowed: 0,
// Settings for the rowing phase detection (in seconds)
minimumDriveTime: 0.500,
minimumRecoveryTime: 0.800,
// Needed to determine the damping constant of the rowing machine. This value can be measured in the recovery phase
// of the stroke.
// To display it for your rowing machine, set the logging level of the RowingEngine to 'info'. Then start rowing and
// you will see the measured values in the log.
// Open Rowing Monitor can also automatically adjust this value based on the measured damping. To do so, set the setting
// autoAdjustDampingConstant to true (see below).
omegaDotDivOmegaSquare: 0.02,
// The moment of inertia of the flywheel kg*m^2
// A way to measure it is outlined here: https://dvernooy.github.io/projects/ergware/, "Flywheel moment of inertia"
// You could also roughly estimate it by just doing some strokes and the comparing the calculated power values for
// plausibility. Note that the power also depends on omegaDotDivOmegaSquare (see above).
jMoment: 0.49,
// Set this to true, if you want to automatically update omegaDotDivOmegaSquare and kDamp based on the measured
// values in the stroke recovery phase. If your rower produces stable damping values, then this could be a good
// option to dynamically adjust your measurements to the damper setting of your rower.
autoAdjustDampingConstant: false,
// A constant that is commonly used to convert flywheel revolutions to a rowed distance
// see here: http://eodg.atm.ox.ac.uk/user/dudhia/rowing/physics/ergometer.html#section9
// Concept2 seems to use 2.8, which they admit is an arbitrary number which came close
// to their expectations. So for your rower, you have to find a credible distance for your effort.
// Also note that the rowed distance also depends on jMoment, so please calibrate that before changing this constant.
// PLEASE NOTE: Increasing this number decreases your rowed meters
magicConstant: 2.8,
// Set this to true if you are using a water rower
// The mass of the water starts rotating, when you pull the handle, and therefore acts
// like a massive flywheel
// Liquids are a tricky thing and therefore the dumping constant does not seem to be
// that constant on water rowers...
// This is WIP, but for now this setting is used to figure out the drive and recovery phases
// differently on water rowers
liquidFlywheel: false
},
// Sportstech WRX700
WRX700: {
numOfImpulsesPerRevolution: 2,
minimumTimeBetweenImpulses: 0.05,
maximumTimeBetweenImpulses: 1,
omegaDotDivOmegaSquare: 0.046,
jMoment: 0.49,
liquidFlywheel: true
},
// DKN R-320 Air Rower
DKNR320: {
numOfImpulsesPerRevolution: 1,
minimumTimeBetweenImpulses: 0.15,
maximumTimeBetweenImpulses: 0.5,
omegaDotDivOmegaSquare: 0.019,
jMoment: 0.4,
liquidFlywheel: true
},
// NordicTrack RX800 Air Rower
RX800: {
numOfImpulsesPerRevolution: 4,
liquidFlywheel: false,
// Damper setting 10
minimumTimeBetweenImpulses: 0.018,
maximumTimeBetweenImpulses: 0.0338,
maximumDownwardChange: 0.69,
maximumUpwardChange: 1.3,
flankLength: 3,
numberOfErrorsAllowed: 0,
minimumDriveTime: 0.300,
minimumRecoveryTime: 0.750,
omegaDotDivOmegaSquare: 0.00543660639574872,
jMoment: 0.174,
magicConstant: 3.75
//
/* Damper setting 8
minimumTimeBetweenImpulses: 0.017,
maximumTimeBetweenImpulses: 0.034,
maximumDownwardChange: 0.8,
maximumUpwardChange: 1.15,
minimumDriveTime: 0.300,
minimumRecoveryTime: 0.750,
omegaDotDivOmegaSquare: 0.005305471,
jMoment: 0.155, // still under investigation
magicConstant: 4 // still under investigation
*/
/* Damper setting 6
minimumTimeBetweenImpulses: 0.017,
maximumTimeBetweenImpulses: 0.034,
maximumDownwardChange: 0.85,
maximumUpwardChange: 1.15,
minimumDriveTime: 0.300,
minimumRecoveryTime: 0.750,
omegaDotDivOmegaSquare: 0.0047,
jMoment: 0.135, // still under investigation
magicConstant: 4.25 // still under investigation
*/
/* Damper setting 4
minimumTimeBetweenImpulses: 0.019,
maximumTimeBetweenImpulses: 0.032,
maximumDownwardChange: 0.70,
maximumUpwardChange: 1.30,
minimumDriveTime: 0.300,
minimumRecoveryTime: 0.750,
omegaDotDivOmegaSquare: 0.00355272,
jMoment: 0.125,
magicConstant: 4.4
*/
/* Damper setting 2
minimumTimeBetweenImpulses: 0.016,
maximumTimeBetweenImpulses: 0.033,
maximumDownwardChange: 0.85,
maximumUpwardChange: 1.15,
minimumDriveTime: 0.300,
minimumRecoveryTime: 0.750,
omegaDotDivOmegaSquare: 0.002263966,
jMoment: 0.111,
magicConstant: 4.6
*/
}
}