Stap 6: Arduino integratie (RPM-Sensor)
In de geest van een work out fiets wilden we de gebruiker voorzien van een paar relevante statistieken over hun training. We uitgekozen de RPM van de band terug als een belangrijke statistiek. Hieruit kan men afleiden de gelijkwaardige snelheid die de fiets zou gaan of de afgelegde het zou hebben als het niet stationaire. Er zijn twee eenvoudige manieren om te meten de RPM met een Arduino: een optische sensor en een Hall Effect sensor.
Optische Sensor:
Wij kozen om te bouwen van een optische sensor met RPM voor onze fiets als gevolg van de onderdelen hadden we beschikbaar. Het concept is simpel; Een dekkende, stijve object (in ons geval een dunne kunststof rechthoek) is gekoppeld aan de rand van het achterwiel zodat telkens als het wiel draait, het object het pad tussen een LED en een foto diodeonderschept. Om de foto diode en een LED op zijn plaats houden, besloten we opnieuw een gunstig gevormd stuk piepschuim met een inkeping in het net breed genoeg voor het wiel (zie foto's). Piepschuim maakte het gemakkelijk aanpassen van de LED en foto diode rechtstreeks in overeenstemming met elkaar (omdat foto diodes zeer gevoelig voor de richting van het licht zijn — ze werken het beste met het licht gaan direct op de top, waardoor de ambient licht effecten). Als de LED was niet zijn uitgelijnd, stak we eenvoudig een ander gat in het piepschuim op de juiste locatie. Het is ook belangrijk om het ondoorzichtig object op de velg te koppelen, zodat het niet met de fan belt interfereren of druk op het frame, grond, fiets stand of andere obstakels.
Het circuit is ook vrij eenvoudig. We liepen 5V van de Arduino voor zowel de LED als de foto diode. Het is belangrijk dat de LED niet het enige wat tussen 5V en grond is. De LED biedt geen veel weerstand en zelfs 5V kan een grote hoeveelheid huidige via de draad, die uw LED blazen kan sturen. We gebruikten een 1 k ohm weerstand in serie met de LED, wat betekent dat de stroom door de LED alleen ~ 5mA. Het belangrijkste om te onthouden bij het gebruik van een foto diode is dat het functioneert het tegenovergestelde van de LED. In plaats van een spanning om te produceren licht toe te passen, een licht voor de productie van een spanning wordt toegepast, aldus de diode moet worden geplaatst in het circuit geconfronteerd met de tegenovergestelde richting als de LED. De spanning geproduceerd door de stroom van de foto diode wordt gemeten over een weerstand in serie na de foto diode. De omvang van deze spanning is onbelangrijk omdat we gewoon weten willen als de foto diode de LED zintuigen of als het is geblokkeerd. Aanpassen van de volgende weerstand, echter kunt wijzigen de omvang van de spanning gemeten zo dat zelfs met omgevingslicht, de spanning lezen is ingesteld op 0. We vonden dat met behulp van een 47k ohm weerstand voor een spanning van 0 wanneer geblokkeerd en een significant genoeg spanning gemakkelijk maatregel aangebracht wanneer het niet was geblokkeerd. Elke keer als de Arduino leest in 0 spanning, weet het dat het wiel een keer heeft gedraaid.
Hall Effect aanpak:
De Hall-effect kan ook worden gebruikt voor het meten van de rotatie van het wiel. Het Hall-effect verwijst naar de geïnduceerde spanning gemaakt door een magnetisch veld. De set-up voor deze aanpak is ook zeer eenvoudig. Een magneet is gekoppeld aan de rand van de fiets en een sonde Hall aan het frame of in een vergelijkbare positie als de LED's van de optische sensor is gekoppeld. Een sonde van de hal is een onderdeel van de circuit ontworpen om een uitgangsspanning evenredig aan het magnetisch veld dwarse ernaar. Dus elke keer dat de magneet gaat door de sonde van Hall, een spanning worden uitgevoerd en kan worden gelezen door de Arduino te tellen van een rotatie (nogmaals de omvang van de spanning is niet relevant).
Voorbeeldcode (optische Sensor):
de volledige code vindt u op het einde van dit Instructable
de vette code is wat wij toevoegen aan de code van bovenaf
int pdiode = A3; fotodiode voor rpm
int fotodiode;
int cyclus = 0;
int numCycle = 20; voor gemiddeld gebruik
zweven t0 = 0,0;
float t1;
VOID Setup {}
pinMode (pdiode, INPUT);
}
void loop {}
Als (motorV > 1.0 & &! hasBeenOn) {}
cyclus = 0;
t0 = float (millis());
}
getRpm();
}
ongeldig inverterControl() {}
anders if(timecheck <5000) {}
cyclus = 0; Dit is een veiligheid omdat meerdere threads kan niet worden uitgevoerd door arduino
t0 = float (millis());
}
}
ongeldig getRpm() {}
zou willen overwegen een if anders/boolean dat maakt zeker toenemende cyclus alleen bij fietsen
Als (t0 == 0.0) {//safety voor als de arduino net begonnen en t0 nog niet is ingesteld
t0 = float (millis());
}
fotodiode = analogRead(pdiode);
Als (((fotodiode! = 0) & & (analogRead(pdiode) == 0)) || ((photodiode == 0) & & (analogRead(pdiode)! = 0))) {
cyclus ++;
T1 = float(millis());
Als (cyclus > numCycle) {}
rpm = (float(cycle)) / (t1 - t0) * 1000.0 * 60,0; conversie naar rotaties per minuut
cyclus = 0;
t0 = float (millis());
}
}