Bike Generator laddningsstation (4 / 10 steg)
Steg 4: Arduino Integration (laddning batteriet)
Som tidigare nämnts, för våra laddningsregulator till starta laddningen, måste start-knappen hållas i tre sekunder. Det är jobbigt att behöva förklara för en random användare och det kräver också laddningsregulator och alla dess främmande knappar (som vi hade ganska random folk inte bråka med) vara tillgänglig för användaren. Istället vill vi Arduino att trycka på start när användaren har börjat trampa. Detta kräver att hacka in i laddningsregulator.
Hacka laddningsregulator:
Laddningsregulator är till stor del en svart låda; Det tar en positiv och negativ slut från DC generator och ger en ström och spänning begränsade produktionen ut i andra änden till batteriet. Allt däremellan är utanför omfånget för detta Instructable och lämnas ensam. Men efter att höljet av laddningsregulator, var det fairy uppenbart hur knappen gränssnitt arbetat. De fyra knapparna är ansluten till ett band av fem ledningar. När en knapp trycktes ansluten den motsvarande tråd i menyfliksområdet till femte "referens" tråd. Besluta att det var lättare att arbeta med utan fallet tog vi i menyfliksområdet av där den anslutna på en skärbräda och lödda kablar till dessa anslutningar, bifoga dem till vår sköld med en molex-kontakten. Vi använde fyra knappar för att återskapa knapparna i laddningsregulator ifall vi hade att göra ändringar i inställningarna om vi hade till och trycka på "Start" tills vi hade Arduino ansluten.
VIKTIGT: Om du som oss, besluta att lämna din hacka laddningsregulatorn ur höljet, se till att förse den med en ordentlig kylfläns. Vårt charge controller fall fördubblats som en kylfläns och när vi tog detta bort, kunde överhettas efter intensiv cykling.
Att trycka på Start:
Utmaningen är då att få Arduino trycka på en knapp. Uppenbarligen använda inte det faktiskt en mekanisk knapp, så vi anställt ett relä. Ett relä består mer eller mindre av en induktor hela två stift och en strömbrytare över ytterligare två. När en spänning läggs över en induktor stänger växeln ansluta andra två stiften precis som det var en knapp knuffas. Om vi ansluter en PIN-kod till start tråd och den andra till referens tråd, har vi Arduino utspänning över de andra två stiften på reläet i tre sekunder på efterfrågan, således "att trycka på" start när vi ber den att. Även om vissa reläer har dioder inbyggda i dem, beslöt vi att sätta en försiktighetsprincipen en över reläets induktion stift att undvika nuvarande försöker att strömma tillbaka in den Arduino pin när den var inställd för låg.
Mäta batteri och Motor spänning:
Detta väcker frågan, när vi vill ha Arduino tryck på start? Självklart vill vi Arduino att trycka på start bara när någon trampa, laddningsregulator inte skulle annars på att starta i första hand. Även om laddningsregulator inte bör medvetet överladda batteriet, vill vi inte att fresta det genom att upprepade gånger be att ladda batteriet när det var full. Detta kräver Arduino att hålla reda på Matningsspänning av generatorn och batteriet. Vi vill att koppla dessa upp till våra Arduino analoga ingångar, men de bara vilja läsa i spänningar mellan 0 och 5V, medan batteriet kommer ut någonstans från 11-14V och generatorn kommer ut någonstans från 0 till 24V. För att avgå från var och en av dessa spänningar använder vi spänningsavdelare. När det gäller batteriet, vi använder en spänningsavdelare med första motståndet 1 k ohm och den andra (ansluten till marken) är 2.2 k ohm. Om max spänningen från batteriet är 14V, max spänningen över andra motståndet, är som vi mäter ca 4.4V (för mer information om hur spänningsavdelare arbete och matten bakom dem, kolla in Wikipedias sida). Vi använde motstånd 1 k ohm och 4.7 k ohm respektive för spänningsavdelare ansluten till generatorn. För en generator spänning på 24V skulle Arduino läsa 4.2V. Några enkla matematiska i Arduino koden kan enkelt konvertera dessa mätningar i de faktiska värdena. Uppenbarligen bör spänningen från batteriet vara mindre än 14V eller riskerar du överladdning av batteriet. Villkoren för generatorn är mer flexibla. Så länge användaren tillhandahåller tillräcklig spänning för de laddningsregulator till vända på, kan laddningsregulator ladda batteriet. Vi använder > 5V från generatorn och < 14V från batteriet som våra villkor.
Driver Arduino:
Arduinoen måste naturligtvis drivas för att "trycka på" några knappar (eller göra något verkligen). Att ha det ständigt ansluten till en dator är orimligt. Vi ville också använda ett 9V batteri eftersom vi inte ville byta ut det om det dog. Vi beslutade att använda 12V batteri för att driva Arduino direkt via uttaget power. Men detta bör kunna ta upp till 12V, bestämde vi att det var säkrare att använda en 5V regulator mellan batteriet och Arduino. (Denna 5V kunde också användas som en spänningskälla för annan elektronik i vår krets om vi ville undvika den Arduino 5V pin). Vi tog sedan en av batterier, skära av faktiska batteripaketet och anslutning av kablarna till 5V produktionen av regulatorn och marken. Tillsynsmyndigheter kan bli varm så det är viktigt att sätta en kylfläns på den.
Exempelkod:
fullständiga koden i slutet av detta Instructable
int motor = A0; motor/generator pin på Arduino
int batt = A1; 12V batteri stift
int cc = 8. Charge controller pin
int vänta = 500. fördröjning i millisekunder
flyta afactor = 1023.0; Arduino's analog läsa max värdet
float motorV, battV; motorisk spänning och batterispänning
booleska hasBeenOn = false; att komma ihåg om laddningsregulator har aktiverats
void setup() {
pinMode (motor, mata);
pinMode (batt, ingång);
pinMode (cc, utgång);
}
void loop() {
motorV = getmotorV(); motovr/generator utspänning
om (motorV > 1.0 & &! hasBeenOn) {//if våra DC-motor ger ut mer än 1V, vi säger att det är
digitalWrite (cc, hög); cc pin är ansluten till ett relä
som fungerar som "Start"-knappen för laddningsregulator
Delay(3500); vår laddningsregulatorn kräver start-knappen som ska hållas i 3 sekunder
digitalWrite (cc, låg); elektriskt släpper startknappen
hasBeenOn = sant; laddningsregulator bör laddar batteriet nu
Delay(Wait); Vi vill att våra Arduino att vänta så att inte kontrollera varje några millisekunder
}
annars om (motorV > 1.0 & & hasBeenOn) {
Delay(Wait); Återigen, vi vill inte Arduino att kontrollera varje några millisekunder
}
annat {
hasBeenOn = false; personen är inte längre cykling
}
}
Vi skrev separata funktioner så vi kan organisera vår kod
float getmotorV() {
tillbaka (float (analogRead(motor)) / afactor * 5.0); motorn ger ut om ett max på 5V
}
float getbattV() {
Return (float(analogRead(batt)) / afactor * 14,0); batteriet är tekniskt ~ 13.5V
}