16-Mar-2024, 06:02 PM
(Dit bericht is het laatst bewerkt op 16-Mar-2024, 06:39 PM door HugoW1975.)
Zo, ik ben weer een stukje verder. Verder achteruit, helaas, maar verder.
Zo ziet de set-up er nu uit:
De loadcel wordt ergens dicht bij het hoofdtandwiel op het frame gemaakt. Het tandwieltje op de loadcel drukt dan iets op de ketting en zo reageert de loadcel op de kracht op het pedaal. Een infraroodsensor telt de 'spaakjes' van dit tandwieltje. Met een hoofdtandwiel van 52 tanden, 13 tanden op het kleine tandwieltje en 6 spaken kom ik dan op 24 pulsen per omwenteling van het hoofdtandwiel. Dat makkelijker te verwerken dan 52. De HX711 versterker is aangepast van 10 naar 80 metingen per seconde.
De code ziet er nu zo uit:
Maar werkt dus helaas niet. Ik weet nog niet waarom. Tips zijn welkom.
Hugo
Zo ziet de set-up er nu uit:
De loadcel wordt ergens dicht bij het hoofdtandwiel op het frame gemaakt. Het tandwieltje op de loadcel drukt dan iets op de ketting en zo reageert de loadcel op de kracht op het pedaal. Een infraroodsensor telt de 'spaakjes' van dit tandwieltje. Met een hoofdtandwiel van 52 tanden, 13 tanden op het kleine tandwieltje en 6 spaken kom ik dan op 24 pulsen per omwenteling van het hoofdtandwiel. Dat makkelijker te verwerken dan 52. De HX711 versterker is aangepast van 10 naar 80 metingen per seconde.
De code ziet er nu zo uit:
Citaat:/*
16-03-2024 HugoW
This is the sketch for my Arduino based bicyle power gauge.
It uses an Arduino Nano, a TM1637 display, an inductive sensor on the bike's main sprocket
and a load cell with a wheel pressing on the power-part of the chain.
The harder you push on the pedal, the bigger the chain tension.
The sketch records the load cell value at each passing of a tooth and adds those numbers together.
After one full revolution, the accumulated number is devided by the number of teeth, is the average torque (with a bit of
calculating to get from load cell amplifier signal to real torque in Nm). The average torque multiplied by RPS(revolutions per second) is Watts.
*/
// Include libraries:
#include <Arduino.h>
#include <TM1637Display.h>
#include <HX711.h>
// Declare variables and pins:
// For torque measurement and power calculation:
const int LOADCELL_DOUT_PIN = 5;
const int LOADCELL_SCK_PIN = 6;
long torque;
HX711 scale;
int torqueSum;
int torqueTare;
int torqueFactor;
int wattage;
// For TM1637 display:
#define CLK 9
#define DIO 10
TM1637Display display = TM1637Display(CLK, DIO);
// For tooth pulse input:
int trigger = 2;
volatile int triggerCount;
int numberOfTriggers;
int mainGearTeeth;
int sprocketTeeth;
int sprocketSpokes;
// For cycle time:
int startTimer;
int stopTimer;
int cycleDuration;
void triggered()
{
torque = scale.read(); // Read torque sensor.
torqueSum = (torqueSum + torque); // Add torque to sum.
triggerCount = (triggerCount + 1); // Raise counter by one.
if (triggerCount > numberOfTriggers)
{
triggerCount = 0; // Reset trigger count to zero.
stopTimer = millis(); // Read millis at stop of cycle, determine duraton of cycle.
cycleDuration = ((stopTimer - startTimer) / 1000);// Subtract starting value of millis to determine duraton of cycle.
startTimer = millis(); // Reset cycle.
wattage = (((torqueSum / numberOfTriggers) - torqueTare) * torqueFactor / cycleDuration);// calculate wattage by dividing the torquesum by the triggerCount, subtracting the tare value and multiplying a factor to get real Newton meters, divide by cycle duration.
torqueSum = 0; // reset torque sum to zero.
}
}
void setup()
{
// Declare pins and such:
Serial.begin(9600);
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
pinMode(trigger, INPUT);
// Setup display:
display.clear();
display.setBrightness(7);
// Set changing values to zero
torqueSum = 0;
startTimer = 0;
stopTimer = 0;
display.showNumberDec(0, false);
// Set fixed values:
mainGearTeeth = 52;
sprocketTeeth = 13;
sprocketSpokes = 6;
numberOfTriggers = (mainGearTeeth / sprocketTeeth * sprocketSpokes);
torqueTare = 0;
torqueFactor = -0.001;
attachInterrupt (digitalPinToInterrupt(trigger), triggered, RISING);
}
void loop()
{
display.showNumberDec(wattage, false);
Serial.println(wattage);
Serial.println(triggerCount);
delay(500);
}
Maar werkt dus helaas niet. Ik weet nog niet waarom. Tips zijn welkom.
Hugo