Stap 4: Arduino integratie (het opladen)
Zoals gezegd, voor onze heffing controller om te beginnen met het opladen van de batterij, moet de startknop worden ingedrukt gedurende drie seconden. Dit is een gedoe om uit te leggen aan een willekeurige gebruiker en het vereist ook de heffing controller en alle overbodige knoppen (die we hadden nogal willekeurige mensen niet knoeien met) voor de gebruiker toegankelijk zijn. In plaats daarvan willen we de Arduino te drukken start zodra de gebruiker is begonnen met het trappen. Dit vereist de heffing controller hacken.
De heffing Controller hacken:
De heffing controller is grotendeels een zwarte doos; het neemt in een positieve en negatieve einde van de DC-generator en biedt een stroom en spanning beperkt uitgang out het andere uiteinde op de batterij. Alles daartussenin valt buiten het bestek van dit Instructable en blijft alleen. Echter na het nemen van de behuizing van de heffing controller, was het sprookje duidelijk hoe de knop interface werkte. De vier knoppen op een lint van vijf draden aangesloten. Wanneer een knop is ingedrukt het aangesloten de overeenkomstige draad op het lint op de vijfde "referentie" draad. Beslissen dat er gemakkelijker mee kunt werken zonder het geval we het lint hebben uit waar het aangesloten op het breadboard en gesoldeerd draden aan deze verbindingen, koppelen ze aan onze schild met een molex connector. We vier knoppen gebruikt om opnieuw van de knoppen van de heffing controller enkel voor het geval dat wij moest indien we moesten wijzigingen aanbrengen in de instellingen en druk op "Start", totdat we de Arduino aangesloten had.
BELANGRIJK: Als, net als wij, u wilt verlaten uw gehackte heffing controller uit de behuizing, zorg ervoor dat het met een goede koellichaam. Ons gratis controller geval verdubbeld als een koellichaam en wanneer we dit wegnam, kon oververhitten na intens fietsen.
Op Start te drukken:
De uitdaging is dan krijgen de Arduino een knop in te drukken. Uiteraard niet het eigenlijk gebruiken een mechanische knop, zodat we een relais in dienst. Een Relais bestaat min of meer uit een spoel over twee pinnen en een schakelaar over nog eens twee. Wanneer een spanning wordt toegepast in de spoel sluit de schakelaar aansluiten van de andere twee pinnen, net als het was een knop geduwd. Als we verbinden met één pin de start draad en de andere met de referentie-draad, kunnen we de Arduino een uitgangsspanning over de andere twee pinnen voor de relay gedurende drie seconden op aanvraag, dus "" op start te drukken wanneer we vragen het aan. Hoewel sommige Relais dioden ingebouwd in hen hebben, besloten hebben we om een bewarende één over de Relais inductie pinnen om te voorkomen dat de huidige proberen stromen terug naar de Arduino pin wanneer het is ingesteld op laag.
Het meten van de batterij en Motor spanning:
Dit roept de vraag, wanneer willen we dat de druk op start Arduino? Uiteraard wensen wij de Arduino te drukken start alleen wanneer iemand was trappen, anders de heffing controller niet zouden op te starten in de eerste plaats. Hoewel de heffing controller moet niet willens en wetens het overladen van de accu, wil wij niet verleiden het door herhaaldelijk vragen de batterij opladen als het vol was. Dit vereist de Arduino om de output van de spanning van de generator en de accu bij te houden. Wij zouden graag deze tot de analoge ingangen van onze Arduino draad, maar ze alleen willen lezen in de spanningen tussen 0 en 5 v, overwegende dat de batterij overal vanaf 11-14V en de generator output zal zal output overal van 0 naar 24V. We gebruiken om het aftreden van elk van deze spanningen spanning dividers. In het geval van de batterij, gebruiken we een divider spanning met de eerste weerstand van 1 k ohm en de tweede (aangesloten op de grond) wordt 2,2 k ohm. Als de maximum spanning van de accu 14V, de max spanning over de tweede weerstand is, is die we zullen meten ongeveer 4.4V (voor meer informatie over hoe spanning dividers werk en de wiskunde achter hen, check out de Wikipedia-pagina). We gebruikten respectievelijk weerstanden van 1 k-ohm en 4.7 k ohm voor de scheidingslijn van de spanning aangesloten op de generator. Voor een spanning van generator van 24V luidt de Arduino 4.2V. Sommige eenvoudige wiskunde in de Arduino-code kan eenvoudig deze metingen converteren naar de werkelijke waarden. Uiteraard moet de spanning van de accu kleiner zijn dan 14V of loop je het risico het overladen van de accu. De voorwaarden voor de generator zijn nu nog flexibeler. Zolang de gebruiker is het verstrekken van voldoende spanning voor de heffing controller te schakelen, kan de heffing controller de batterij opladen. We gebruiken > 5V van de generator en < 14V van de batterij als onze voorwaarden.
Het voeden van de Arduino:
Uiteraard moet de Arduino aangedreven worden als het 'Druk op' geen knoppen (of iets echt doen). Met het constant aangesloten op een computer is onredelijk. Wij ook wilt niet gebruiken van een 9V batterij, omdat we niet hebben om het te vervangen willen als het stierf. We besloten om het gebruik van de 12V-accu voor het aandrijven van de Arduino rechtstreeks via de aansluiting van de macht. Hoewel dit kundig voor 12V duren zitten moet, besloten hebben we dat het veiliger was om een 5V regelgever tussen de accu en de Arduino gebruiken. (Deze 5V kan ook worden gebruikt als een spanningsbron voor andere elektronica in onze schakeling als we wilden voorkomen dat van de Arduino 5V pin). Vervolgens namen we een van de batterijpakken, afsnijden van de werkelijke battery pack en de draden aansluiten op de 5V output van de regelgever en de grond. Regelgevers kunnen krijgen warm dus het is belangrijk om een heat sink op te zetten.
De Code van de steekproef:
volledige code aan het eind van dit Instructable
int motor = A0; Motor/generator pin op de Arduino
int batt = a1 worden verkregen; 12V accu pin
int cc = 8; gratis controller pin
int wachten = 500; de wachttijd in milliseconden
zweven afactor = 1023.0; Arduino van analoge Lees max waarde
float motorV, battV; motor spanning en accuspanning
Boole hasBeenOn = false; om te onthouden als de heffing controller is ingeschakeld
VOID Setup {}
pinMode (motor, ingang);
pinMode (batt, INPUT);
pinMode (cc, uitvoer);
}
void loop {}
motorV = getmotorV(); motovr/generator uitgangsspanning
Als (motorV > 1.0 & &! hasBeenOn) {//if onze gelijkstroommotor meer dan 1V geeft, we zeggen dat het op
digitalWrite (cc, hoge); de cc-pin is aangesloten op een Relais
die fungeert als de knop "Start" voor de heffing controller
delay(3500); onze heffing controller vereist de startknop worden gehouden gedurende 3 seconden
digitalWrite (cc, laag); elektrisch loslaten van de startknop
hasBeenOn = true; de heffing controller moet worden opladen van de batterij nu
delay(wait); Wij willen onze Arduino te wachten dus niet om te controleren elke paar millisec
}
anders als (motorV > 1.0 & & hasBeenOn) {}
delay(wait); nogmaals, we willen niet dat de Arduino te controleren van elke paar millisec
}
else {}
hasBeenOn = false; de persoon is niet langer fietsen
}
}
We schreven gescheiden functies zodat we onze code kon organiseren
float getmotorV() {}
retourneren (float (analogRead(motor)) / afactor * 5.0); de motor geeft over een max van 5V
}
float getbattV() {}
retourneren (float(analogRead(batt)) / afactor * 14.0); de batterij is technisch ~ 13.5V
}