Innholdsfortegnelse:

DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler: 4 trinn (med bilder)
DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler: 4 trinn (med bilder)

Video: DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler: 4 trinn (med bilder)

Video: DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler: 4 trinn (med bilder)
Video: magnetic wire connector project for led lighting a motorcycle top box Givi V47 2024, Kan
Anonim
Image
Image
DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler
DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler
DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler
DIY Givi V56 Motorsykkel Topbox Light Kit med integrerte signaler

Som motorsykkelrytter er jeg altfor kjent med å bli behandlet som om jeg er usynlig på veien. En ting jeg alltid legger til på syklene mine er en toppboks som vanligvis har et integrert lys. Jeg har nylig oppgradert til en ny sykkel og kjøpte Givi V56 Monokey -boksen siden den hadde mye plass til ting. Denne boksen har plass til et fabrikklyssett som består av to strimler med lysdioder på hver side. Problemet er at dette settet er omtrent $ 70 og bare bremser. Det er et ettermarkedssett som sannsynligvis gjør lignende ting og kan være litt enklere å installere, men prisen går opp til $ 150. Som en ressurssterk person og på utkikk etter en unnskyldning for å prøve de adresserbare LED -stripene, bestemte jeg meg for å lage et integrert system som ikke bare ville ha bremselys, men kjørelys (på når du beveger deg), blinklys og farelys. Bare for helvete, jeg har til og med lagt til en oppstartssekvens … fordi jeg kunne. Legg merke til at dette tok mye arbeid å gjøre, selv om jeg hadde mange ting å finne ut. Til tross for arbeidet er jeg ganske fornøyd med hvordan dette ble. Forhåpentligvis ender dette opp med å være nyttig for noen andre.

Den grunnleggende operasjonen for hvordan dette systemet fungerer er Arduino -enheten som ser etter signaler på pinnene: bremselys, venstre svinglys og høyre svinglys. For å lese 12 volt signalet fra motorsykkelen brukte jeg optoisolatorer til å konvertere 12V signalet til et 5V signal som Arduino kan lese. Koden venter deretter på et av disse signalene og sender deretter kommandoene til LED -stripen ved hjelp av FastLED -biblioteket. Det er det grunnleggende, nå for å komme inn på detaljene.

Rekvisita

Dette er tingene jeg brukte fordi jeg stort sett allerede hadde dem liggende. Selvfølgelig kan de byttes ut etter behov:

  1. Arduino - Jeg brukte en nano for størrelsesbetraktninger, men du kan bruke det du har lyst til så lenge du har fem pinner å bruke.
  2. 5V regulator - Jeg brukte en L7805CV som var i stand til 1,5 ampere. Dette prosjektet vil bruke 0,72 ampere for lysdiodene pluss strømmen til nano, så 1,5 fungerer bra for dette prosjektet.
  3. Kondensatorer - du trenger en 0,33 uF og en 0,1 uF for at spenningsregulatoren skal fungere skikkelig.
  4. 3x optoisolatorer - for å gjøre signalkonvertering fra 12V til 5V. Jeg brukte PC817X type som bare har fire pinner, som er alt vi trenger.
  5. Motstander - du trenger to typer, tre av hver type. Den første må være nok til å redusere strømmen gjennom optoisolatoren IR -LED. Du trenger minst 600 ohm, men 700 ville være en bedre idé å håndtere skiftende spenninger på motorsykkelen. Den andre må være et sted mellom 10k og 20k for et raskt signal på den andre siden av optoisolatoren.
  6. Prototypebrett - jeg hadde noen som var små nok til å passe inn i en liten prosjektboks med litt trim.
  7. Prosjektboks - stor nok til å passe til komponentene, men liten nok til å være enkel å montere.
  8. Wire - Jeg brukte Cat 6 ethernet wire fordi jeg hadde mye av det sittende. Denne har åtte ledninger alle fargekodet som hjalp med alle de forskjellige tilkoblingene og var en stor nok måler til å håndtere de nåværende trekkene.
  9. Plugger - hvor som helst du vil at systemet skal være lett å fjerne. Jeg brukte en vanntett plugg for å la toppboksen fjernes og for å håndtere eventuelt regn eller vann som kommer på den. Jeg trengte også mindre plugger til LED -stripene, så jeg slapp å bore store hull.
  10. Glidelås og glidelås for å holde alt på plass.
  11. Krymp innpakning for å rydde opp i tilkoblingene.

Trinn 1: Bygg kretsen

Bygg kretsen
Bygg kretsen
Bygg kretsen
Bygg kretsen
Bygg kretsen
Bygg kretsen

Tydeligvis, hvis du følger konstruksjonen min, trenger du ikke å gå gjennom mengden testing jeg gjorde. Det første jeg gjorde var å sørge for at koden min fungerte og at jeg kunne få et signal fra optoisolatorene og kontrollere LED -stripene. Det tok et øyeblikk å finne ut hvordan jeg best kunne feste signalpinnene til isolatorene, men gjennom prøving og feiling fant jeg riktig retning. Jeg brukte nettopp et standard prototypebrett siden jeg bare bygde en og fant ut et sporemønster ville ha tatt mer tid enn det var verdt. Den øverste delen av kretskortet ser bra ut, men bunnen ser ut som litt rot, men i det minste er den funksjonell.

Den grunnleggende designen starter med å legge inn 12V strøm fra en koblet kilde (en ledning som bare er på når motorsykkelen er på). Et koblingsskjema kan virkelig hjelpe til med å finne denne ledningen. Dette mates inn på den ene siden av spenningsregulatoren. En 0,33 uF kondensator knytter denne inngangen til bakken på spenningsregulatoren som deretter strømmer tilbake til bakken på motorsykkelen. Utgangen fra spenningsregulatoren vil ha en 0.1uF kondensator knyttet til den til bakken. Disse kondensatorene bidrar til å jevne ut spenningen fra regulatoren. Hvis du ikke finner dem på bildet av kretskortet, er de under spenningsregulatoren. Derfra går 5V -linjen til Vin på Arduino, til strømnålen som vil mate LED -stripene, og to kildesiden av optoisolatoren som vil mates inn i Arduino -pinnene og gir det nødvendige 5V -signalet.

Når det gjelder optoisolatorene, er det to sider: en med IR -LED og den andre med transistor med og IR -detektor. Vi ønsker å bruke IR LED -siden til å måle 12V -signalet. Siden lysdioden har en fremspenning på 1.2V, trenger vi en strømbegrensende motstand i serie. 12V - 1.2V = 10.8V og for å kjøre LED -en på 18 mA (jeg liker alltid å kjøre mindre enn 20 mA av livstidsgrunner), trenger du en motstand på R = 10.8V/0.018A = 600 ohm. Spenninger på biler har også en tendens til å gå høyere, potensielt opp til 14V, så det er bedre å planlegge for det, som er omtrent 710 ohm, selv om 700 ville være mer enn rimelig. Utgangen for LED -siden strømmer deretter tilbake til bakken. For utgangssiden til optoisolatoren vil inngangen bruke 5V -signalet fra regulatoren, deretter vil utgangen koble seg til en annen motstand før den går til bakken. Denne motstanden trenger bare å være rundt 10k - 20k ohm, det er i hvert fall det databladet mitt viste. Dette vil gi en rask signalmåling siden vi ikke har å gjøre med støyende omgivelser. Utgangen til Arduino -pinnen kommer av mellom motstanden og utgangen til optoisolatoren, slik at når signalet er av, er pinnen lav og når signalet er på pinnen, er den høy.

LED -stripelysene har tre ledninger knyttet til seg: Strøm, bakke og data. Strøm må være 5V. Dette prosjektet bruker totalt 12 lysdioder (selv om jeg har flere lysdioder på stripene, men jeg bruker bare hver tredje LED) og hver tar 60mA når hvitt lys brukes ved full lysstyrke. Dette gir totalt 720 mA. Vi er godt innenfor utgangseffekten for spenningsregulatoren, så vi er gode. Bare vær sikker på at ledningen er en stor nok måler til å håndtere strømmen, jeg brukte 24 gauge Cat 6 ethernet wire. Ethernet -ledning var noe jeg hadde sittende rundt, og den har 8 fargekodede ledninger, så det fungerte bra for dette prosjektet. De eneste ledningene som deretter trenger å gå til selve toppboksen er strøm og jord (som begge blir delt mellom strimlene) og to datalinjer (en for hver stripe).

Resten av ledningene kobles til pinnene på arduinoen og gir den strøm. Pinnene som ble brukt til dette prosjektet var følgende:

  1. Vin - koblet til 5V
  2. Gnd - koblet til bakken
  3. Pin2 - koblet til datalinje for venstre stripe
  4. Pin3 - koblet til høyre stripedatalinje
  5. Pin4 - koblet til bremsesignal fra optoisolatoren
  6. Pin5 - koblet til Venstre blinklys fra optoisolatoren
  7. Pin6 - koblet til Høyre blinklys fra optoisolatoren

Trinn 2: Kabling og installering

Kabling og installasjon
Kabling og installasjon
Kabling og installasjon
Kabling og installasjon
Kabling og installasjon
Kabling og installasjon

Når kretsen er bygget, er det på tide å faktisk koble dette på plass. Ved å bruke ledningsskjemaet for sykkelen din, må du finne følgende:

  • Byttet strømforsyning
  • Bakke
  • Bremsesignal inn
  • Venstre sving signal inn
  • Høyre sving signal inn

For min var det en enkelt plugg som hadde alt dette på, så jeg brukte det bare. Med nok tid kunne jeg kanskje ha funnet den samme pluggstilen og bare lage en plug -in -modul, men jeg gjorde det ikke, så jeg fjernet bare isolasjonen på steder og loddet den nye ledningen til den. Jeg brukte plugger på disse skjøteforbindelsene, slik at jeg kunne fjerne resten hvis jeg noen gang skulle trenge det i fremtiden. Derfra plasserte jeg Arduino, som nå er i en forseglet prosjektboks, under setet der jeg festet den. Utgangskabelen går deretter langs stativrammen til en vanntett plugg, går deretter inn i esken og går langs baksiden til lokket der den deler seg for hver side. Ledningene går langs innsiden av lokket til det punktet hvor tilkoblingene for lysdiodene er. Tråden er hjelp på plass ved hjelp av glidelåser festet til utendørs glidelåsfester med en klebende bakside. Du finner disse i kabelinstallasjonsdelen på en boligforbedringsbutikk

Jeg brukte to mini JST -plugger på LED -stripene fordi jeg trengte en plugg som var liten nok til å gå gjennom et hull med en minimumsdiameter og fordi jeg ville sørge for at det var nok ledning til å håndtere gjeldende krav. Igjen, det kan ha vært overkill, og jeg hadde ikke noen små plugger med tre ledninger hendig. Hullet i esken for lysstrimmelledningene å passere gjennom ble tettet for å holde vannet ute. Når det gjelder posisjonering av LED -stripene, fordi det er en liten feil i avstanden (det var omtrent 1 - 1,5 mm forskjell i avstanden mellom hullene i reflektoren og lysdiodene) plasserte jeg dem slik at de ville dele forskjellen mellom LED og hullet så mye som mulig. Jeg brukte deretter varmt lim for å klebe dem på plass og tetningsmasse for å forsegle området helt. Selve LED -stripene er vanntette, så det er ikke noe problem hvis de blir våte. Selv om det virker som mye å installere, gjør dette systemet lettere å fjerne i fremtiden eller det er nødvendig å bytte ut deler fordi det kan skje.

Trinn 3: Koden

Min kildekode skal være i begynnelsen av denne instruksjonsboken. Jeg kommenterer alltid koden min tungt, så det er lettere å forstå senere. Ansvarsfraskrivelse: Jeg er ikke en profesjonell kodeforfatter. Koden ble skrevet i en metode som var lettere å komme i gang først, og noen forbedringer ble gjort, men jeg vet at den kan bli mer raffinert. Jeg bruker også en stor mengde forsinkelse () -funksjonen for timing som ikke er like ideell. Signalene som enheten mottar, er imidlertid ikke raske signaler i sammenligning, så jeg følte meg fortsatt berettiget til å beholde dem over å bruke noe som millis (). Jeg er også en veldig travel far og mann, så jeg bruker tid på å forbedre noe som til slutt ikke vil endre funksjonen, er ikke høyt på listen.

For dette prosjektet kreves bare ett bibliotek, som er FastLED -biblioteket. Denne har all koden for å kontrollere LED -strimler av typen WS2811/WS2812B. Derfra dekker jeg de grunnleggende funksjonene som skal brukes.

Den første andre enn standarddefinisjonene er å deklarere de to strimlene dine. Du vil bruke følgende kode for hver stripe:

FastLED.addLeds (leds [0], NUM_LEDS);

Denne kodelinjen setter opp Pin 2 definerer denne stripen som stripe 0 med antall lysdioder definert av konstanten NUM_LEDS, som i mitt tilfelle er satt til 16. For å definere den andre stripen, vil 2 bli 3 (for pin3) og stripen vil bli merket stripe 1.

Den neste linjen som vil være viktig er fargedefinisjon.

leds [0] [1] = Color_high CRGB (r, g, b);

Denne kodelinjen brukes imidlertid i forskjellige utseende (de fleste bruker jeg konstant). I utgangspunktet sender denne koden en verdi til hver av LED -kanalene (rød, grønn, blå) som definerer hver lysstyrke. Lysstyrkeverdien kan defineres med et tall 0 - 255. Ved å endre lysstyrkenivået for hver kanal kan du definere forskjellige farger. For dette prosjektet vil jeg ha en hvit farge for å holde lyset så lyst som mulig. Så de eneste endringene jeg gjør er å sette lysstyrken på det samme på tvers av alle tre kanalene.

Det neste settet med kode brukes til å belyse hvert lys individuelt. Vær oppmerksom på at for hver stripe har hver LED en adresse som starter på 0 for den som er nærmest datalinjeforbindelsen helt opp til den høyeste tall -LEDen du har minus 1. Eksempel, dette er 16 LED -strips, så den høyeste er 16 - 1 = 15. Grunnen til dette er fordi den første lysdioden er merket 0.

for (int i = NUM_LEDS -1; i> -1; i = i -3) {// Dette endrer lyset for hver tredje LED fra den siste til den første. leds [0] = Color_low; // Sett stripe 0 LED -farge til den valgte fargen. leds [1] = Color_low; // Sett stripe 1 LED -farge til den valgte fargen. FastLED.show (); // Vis de angitte fargene. leds [0] = CRGB:: Svart; // Slå av settfargen i forberedelsen til neste farge. leds [1] = CRGB:: Svart; forsinkelse (150); } FastLED.show (); // Vis de angitte fargene.

Måten denne koden fungerer på er at en variabel (i) brukes i en for sløyfe som LED -adressen som deretter refereres til hele LED -lyset (NUM_LEDS). Grunnen til dette er at jeg vil at lysene skal starte på slutten av stripen i stedet for begynnelsen. Innstillingen sendes ut til begge strimler (lysdioder [0] og leds [1]), og deretter sendes en kommando for å vise endringen. Etter det slås dette lyset av (CRGB:: Svart) og det neste lyset tennes. Den svarte referansen er en bestemt farge i FastLED -biblioteket, så jeg trenger ikke å utstede 0, 0, 0 for hver kanal, selv om de ville gjøre det samme. For-sløyfen skrider frem 3 lysdioder om gangen (i = i-3) siden jeg bare bruker annenhver LED. Ved slutten av denne sløyfen vil lyssekvensen gå fra en LED til den neste med bare en tent per stripe, en slags Knight Rider -effekt. Hvis du vil holde hvert lys tent slik at linjen bygger, ville du bare fjerne linjene som slår av lysdiodene som skjer i det neste settet med kode i programmet.

for (int i = 0; i <dim; i ++) {// Lyser lys raskt til nivået for løpende lys. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i <NUM_LEDS; i = i +3) {// Dette vil lyse opp de tre siste lysene for posisjonslyset. leds [0] = CRGB (rt, gt, bt); // Sett stripe 0 LED -farge til den valgte fargen. leds [1] = CRGB (rt, gt, bt); // Sett stripe 1 LED -farge til den valgte fargen. } FastLED.show (); forsinkelse (3); }

Det siste eksemplet på kode som jeg bruker for lysdiodene er en fade loop. Her bruker jeg midlertidige spor for lysstyrken for hver kanal (rt, gt, bt) og øker dem med 1 med en forsinkelse mellom hver visning for å oppnå det utseendet jeg ønsker. Vær også oppmerksom på at denne koden bare endrer de tre siste lysdiodene, siden dette blekner i kjørelysene, så jeg starter klokka 9 i stedet for 0.

Resten av LED -koden er iterasjoner av disse. Alt annet er fokusert på å lete etter et signal på de tre forskjellige ledningene. Loop () -området i koden ser etter bremselys, som den vil blinke en gang før den forblir på (dette kan justeres om ønskelig) eller ser etter blinklys. For denne koden, fordi jeg ikke kunne anta at venstre og høyre svinglys ville slå på nøyaktig samme tid for farer, har jeg koden til å lete etter en først, så etter en liten forsinkelse sjekker jeg om begge er på for å indikere farelysene lyser. Den vanskelige delen jeg hadde var blinklys fordi lyset vil slukke i en periode, så hvordan kan jeg se forskjellen mellom signalet fortsatt på, men i avstengt periode og et avbrutt signal? Det jeg kom på var å implementere en forsinkelsessløyfe som er satt til å fortsette lenger enn forsinkelsen mellom signalblink. Hvis blinklyset fortsatt er på, fortsetter signalsløyfen. Hvis signalet ikke tennes igjen når forsinkelsen slutter, går det tilbake til starten av sløyfen (). For å justere forsinkelsens lengde, endrer du tallet for konstant lysforsinkelse som husker for hver 1 i lysforsinkelse endringen med 100 ms.

while (digitalRead (leftTurn) == LOW) {for (int i = 0; i <lightDelay; i ++) {leftTurnCheck (); hvis (digitalRead (leftTurn) == HIGH) {leftTurnLight (); } forsinkelse (100); } for (int i = 0; i <NUM_LEDS; i = i +3) {// Dette endrer lyset for hver tredje LED som går fra den siste til den første. leds [0] = CRGB (0, 0, 0); // Sett stripe 0 LED -farge til den valgte fargen. } for (int i = 9; i <NUM_LEDS; i = i +3) {// Dette vil sette opp kjørelysene som bare bruker de tre siste. leds [0] = Color_low; // Sett stripe 0 LED -farge til den valgte fargen. } FastLED.show (); // Utgangsinnstillinger returnerer; // Når blinklys ikke lenger er på, går du tilbake til sløyfe. }

Forhåpentligvis er resten av koden selvforklarende. Det er bare et gjentakende sett med å kontrollere og handle etter signaler.

Trinn 4: Resultater

Resultater
Resultater

Den fantastiske delen var at dette systemet fungerte første gang jeg koblet det til sykkelen. Nå, for å være rettferdig, testet jeg den tungt på benken før dette, men jeg forventet fortsatt å ha et problem eller en justering. Det viser seg at jeg ikke trengte å gjøre noen justeringer av koden så vel som tilkoblingene. Som du kan se i videoen, går systemet gjennom oppstartsekvensen (som du ikke trenger å ha), og starter deretter som standard kjørelys. Etter det ser det etter bremsene, i så fall vil det lyse opp alle lysdiodene til full lysstyrke og blinke dem en gang før de forblir på til bremsene slippes. Når et blinklys brukes, laget jeg en rulleeffekt for siden at svingen er indikert, og den andre siden vil enten være kjørelys eller bremselys hvis den er på. Farelys vil bare blinke i tide med de andre lysene.

Forhåpentligvis med disse ekstra lysene, vil jeg være mer synlig for andre mennesker. I det minste er det et fint tillegg for å få boksen min til å skille seg litt mer ut enn andre mens den gir verktøy. Jeg håper dette prosjektet er nyttig for noen andre også, selv om de ikke jobber med en motorsykkel toppbelysning. Takk!

Anbefalt: