Bike Generator laddningsstation (6 / 10 steg)
Steg 6: Arduino Integration (RPM Sensor)
I en anda av ett arbete ut cykel ville vi ge användaren några relevant statistik om deras träning. Vi pekas ut VARVTALET på den baksida däcket som en viktig statistik. Från det kan man härleda motsvarande hastighet cykeln skulle gå eller avståndet skulle ha reste det om det inte vore stationära. Det finns två enkla sätt att mäta VARVTALET med en Arduino: en optisk sensor och en Hall effekt sensor.
Optisk Sensor:
Vi valde för att bygga en optisk RPM sensor för vår cykel på grund av delarna vi hade tillgängliga. Konceptet är enkelt; En ogenomskinlig, stela objekt (i vårt fall en tunn plast rektangel) är kopplad till kanten av bakhjulet så att varje gång hjulet roterar objektet spärrar vägen mellan en LED och ett Foto diod. För att hålla fotodiod och LED på plats, vi åter utlovat en praktiskt formad bit frigolit med ett hack i den bara tillräckligt bred för hjulet (se bilder). Styrofoam gjorde det enkelt att justera LED och foto diod direkt i linje med varandra (eftersom bilden dioder är mycket känsliga för riktningen av ljuset – de fungerar bäst med ljuset går direkt till toppen, vilket minskar omgivande ljus effekter). Om lampan inte arrangera i rak linje, petade vi enkelt ett annat hål i styrofoam på rätt plats. Det är också viktigt att bifoga det ogenomskinliga objektet på kanten så att den inte stör fläktremmen eller slå ramen, marken, cykel stå eller andra hinder.
Kretsarna är också ganska enkelt. Vi sprang 5V från Arduino till både lampan och fotodioden. Det är viktigt att LED är inte enda mellan 5V och marken. LED ger inte mycket motstånd och även 5V kan skicka en stor mängd ström genom tråd, som kan blåsa din LED. Vi använde en 1 k ohms motstånd i serie med lampan, vilket innebär att strömmen genom lysdioden är endast ~ 5mA. Det viktigaste att komma ihåg när du använder ett fotodiod är att den fungerar motsatsen till LED. Stället för att tillämpa en spänning för att producera ljus, en ljus används för att producera en spänning, alltså dioden måste placeras i kretsen vänd åt motsatt håll som LED. Spänningen produceras av strömmen från fotodioden mäts över ett motstånd i serie efter fotodioden. Omfattningen av denna spänning är oviktigt eftersom vi vill helt enkelt veta om fotodioden sinnen LED eller om den är blockerad. Justera följande motståndet, kan dock ändra omfattningen av spänning mätt så att även med omgivande ljus, spänningen läsa är 0. Vi fann att använda en 47k ohms motstånd gjorde för en spänning på 0 när blockerad och en tillräckligt stor spänning att enkelt mäta när det inte var blockerad. Varje gång Arduino läser in 0 spänning, vet det hjulet har roterat en gång.
Hall effekt tillvägagångssätt:
Hall-effekt kan också användas att mäta rotation av hjulet. Halleffekten avser den inducerade spänningen skapad av ett magnetfält. Ställ in för detta synsätt är också mycket enkel. En magnet är kopplat till kanten av cykeln och en Hall sond är kopplad till bildrutan eller i ett liknande läge som lysdioder i den optiska sensorn. En Hall probe är en krets komponent som konstruerats att mata en spänning proportionell mot det magnetiskt sätter in transverse till den. Således varje gång magneten går av Hall-givare, en spänning är produktionen och kan läsas av Arduino att räkna en rotation (återigen omfattningen av spänningen är irrelevant).
Exempelkoden (optisk Sensor):
fullständiga koden finns i slutet av detta Instructable
fetstil koden är vad vi lägga till koden från ovan
int pdiode = A3; fotodiod för rpm
int fotodiod;
int cykel = 0;
int numCycle = 20; för användning i genomsnitt
flyta t0 = 0,0;
float t1;
void setup() {
pinMode (pdiode, ingång);
}
void loop() {
om (motorV > 1.0 & &! hasBeenOn) {
Cycle = 0;
t0 = float (millis());
}
getRpm();
}
void inverterControl() {
annat if(timecheck <5000) {
Cycle = 0; Detta är en säkerhet eftersom arduino inte kan köra flera trådar
t0 = float (millis());
}
}
void getRpm() {
kanske vill överväga en om annat/boolean som gör visst ökande cykla bara när cykling
om (t0 == 0,0) {//safety för om arduino precis börjat och t0 inte har ställts in ännu
t0 = float (millis());
}
fotodiod = analogRead(pdiode);
om (((fotodiod! = 0) & & (analogRead(pdiode) == 0)) || ((photodiode == 0) & & (analogRead(pdiode)! = 0))) {
cykeln ++;
T1 = float(millis());
om (cykel > numCycle) {
rpm = (float(cycle)) / (t1 - t0) * 1000.0 * 60,0; konvertering till rotationer per minut
Cycle = 0;
t0 = float (millis());
}
}