Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Opbygning af kredsløbet
- Trin 2: Kabelføring og installation
- Trin 3: Koden
- Trin 4: Resultater
Video: DIY Givi V56 Motorcykel Topbox Light Kit med integrerede signaler: 4 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Som motorcykelrytter er jeg alt for bekendt med at blive behandlet som om jeg er usynlig på vejen. En ting, jeg altid tilføjer til mine cykler, er en topboks, der normalt har et integreret lys. Jeg har for nylig opgraderet til en ny cykel og købte Givi V56 Monokey -boksen, da den havde masser af plads til varer. Denne boks har plads til et fabrikslyskit, der består af to strimler LED'er til hver side. Problemet er, at dette kit er omkring $ 70 og kun bremser. Der er et eftermarkedssæt, der sandsynligvis gør lignende ting og måske er lidt lettere at installere, men din pris går op til $ 150. Da jeg var en ressourcefuld person og ledte efter en undskyldning for at prøve de adresserbare LED -strimler, besluttede jeg at lave et integreret system, der ikke kun ville have bremselys, men kørelys (tændt, når du bevæger dig), blinklys og farelys. Bare for pokker, tilføjede jeg endda en startsekvens…. fordi jeg kunne. Bemærk, at dette tog meget arbejde, selvom jeg havde mange ting at finde ud af. På trods af arbejdet er jeg ret tilfreds med, hvordan det blev. Forhåbentlig ender dette med at være nyttigt for en anden.
Den grundlæggende betjening af, hvordan dette system fungerer, er Arduino -enheden, der leder efter signaler på stifterne: bremselys, venstre drejelys og højre drejelys. For at aflæse 12 volt signalet fra motorcyklen brugte jeg optoisolatorer til at konvertere 12V signalet til et 5V signal, som Arduino kan læse. Koden venter derefter på et af disse signaler og sender derefter kommandoerne til LED -strimlen ved hjælp af FastLED -biblioteket. Det er det grundlæggende, nu for at komme ind i detaljerne.
Forbrugsvarer
Det er de ting, jeg brugte, fordi jeg for det meste allerede havde dem liggende. Det er klart, at de kan udveksles efter behov:
- Arduino - Jeg brugte en nano til størrelsesovervejelser, men du kan bruge hvad du har lyst til, så længe du har fem pins til at bruge.
- 5V regulator - jeg brugte en L7805CV, der var i stand til 1,5 ampere. Dette projekt bruger 0,72 ampere til lysdioderne plus strøm til nano, så 1,5 fungerer godt til dette projekt.
- Kondensatorer - du skal bruge en 0,33 uF og en 0,1 uF for at spændingsregulatoren fungerer korrekt.
- 3x optoisolatorer - til at udføre signalomdannelsen fra 12V til 5V. Jeg brugte PC817X type, som kun har fire ben, hvilket er alt, hvad vi har brug for.
- Modstande - du skal bruge to typer, tre af hver type. Den første skal være nok til at reducere strømmen gennem optoisolatoren IR LED. Du skal bruge mindst 600 ohm, men 700 ville være en bedre idé at håndtere skiftende spændinger på motorcyklen. Den anden skal være et sted mellem 10k og 20k for et hurtigt signal på den anden side af optoisolatoren.
- Prototype board - jeg havde nogle, der var små nok til at passe ind i en lille projektkasse med en lille mængde trimning.
- Projektboks - stor nok til at passe til komponenterne, men lille nok til at være let at montere.
- Wire - jeg brugte Cat 6 ethernet wire, fordi jeg havde meget af det siddende. Dette har otte ledninger alle farvekodede, hvilket hjalp med alle de forskellige forbindelser og var en stor nok måler til at håndtere de nuværende trækninger.
- Stikkontakter - hvor som helst du vil have, at systemet let kan fjernes. Jeg brugte et vandtæt stik til at tillade at topboksen fjernes og til at håndtere enhver regn eller vand, der kommer på den. Jeg havde også brug for mindre stik til LED -strimlerne, så jeg ikke behøvede at bore store huller.
- Lynlåsbinder og lynlås -klæbende beslag til at holde alt på plads.
- Krymp indpakning for at rydde op i forbindelserne.
Trin 1: Opbygning af kredsløbet
Det er klart, at hvis du følger min build, behøver du ikke at gennemgå den mængde test, jeg har foretaget. Det første, jeg gjorde, var at sikre, at min kode fungerede, og at jeg korrekt kunne få et signal fra optoisolatorerne samt korrekt kontrollere LED -strimlerne. Det tog et øjeblik at finde ud af, hvordan man bedst kunne fastgøre signalstifterne til isolatorerne, men gennem forsøg og fejl fandt jeg den rigtige retning. Jeg har lige brugt et standard prototypebord, da jeg kun byggede et og fandt ud af et spormønster ville have taget mere tid, end det var værd. Den øverste del af printkortet ser godt ud, men bunden ligner lidt rod, men det er i det mindste funktionelt.
Det grundlæggende design starter med at indtaste 12V -strømmen fra en koblet kilde (en ledning, der kun er tændt, når motorcyklen er tændt). Et ledningsdiagram kan virkelig hjælpe med at finde denne ledning. Dette føres ind i den ene side af spændingsregulatoren. En 0,33 uF kondensator binder denne indgang til jorden på spændingsregulatoren, som derefter strømmer tilbage til jorden på motorcyklen. Udgangsspændingen fra spændingsregulatoren vil have en 0.1uF kondensator bundet til den til jorden. Disse kondensatorer hjælper med at udjævne spændingen fra regulatoren. Hvis du ikke kan finde dem på billedet af printkortet, er de under spændingsregulatoren. Derfra går 5V -linjen til Vin på Arduino, til strømstiften, der vil fodre LED -strimlerne, og to kildesiden af optoisolatoren, der vil føde ind i Arduino -stifterne, hvilket giver det nødvendige 5V -signal.
Hvad angår optoisolatorerne, er der to sider: den ene med en IR -LED og den anden med en transistor med og IR -detektor. Vi vil bruge IR LED -siden til at måle 12V -signalet. Da LED'en har en fremspænding på 1,2V, har vi brug for en strømbegrænsende modstand i serie. 12V - 1.2V = 10.8V og for at køre LED'en ved 18 mA (jeg kan altid lide at køre mindre end 20 mA af livstidsgrunde), skal du bruge en modstand på R = 10.8V/0.018A = 600 ohm. Spændinger på køretøjer har også en tendens til at køre højere, potentielt op til 14V, så det er bedre at planlægge det, hvilket er omkring 710 ohm, selvom 700 ville være mere end rimeligt. Outputtet til LED -siden føder derefter tilbage til jorden. For optoisolatorens udgangsside vil input bruge 5V -signalet fra regulatoren, derefter vil udgangen forbinde til en anden modstand, før den går til jorden. Denne modstand skal bare være omkring 10k - 20k ohm, i det mindste er det, hvad mit datablad viste. Dette vil give en hurtig signalmåling, da vi ikke har at gøre med et støjende miljø. Udgangen til Arduino -stiften vil komme ud mellem modstanden og output fra optoisolatoren, så når signalet er slukket, er stiften lav, og når signalet er på stiften, er den høj.
LED -striplysene har tre ledninger forbundet med dem: Strøm, jord og data. Strøm skal være 5V. Dette projekt bruger i alt 12 lysdioder (selvom jeg har flere lysdioder på strimlerne, men jeg bruger kun hver tredje LED) og hver tager 60mA, når hvidt lys bruges ved fuld lysstyrke. Dette giver i alt 720 mA. Vi er godt inden for udgangseffekten til spændingsregulatoren, så vi er gode. Bare sørg for at ledningen er en stor nok måler til at håndtere strømmen, jeg brugte 24 gauge Cat 6 ethernet wire. Ethernet -ledning var noget, jeg havde siddende, og den har 8 farvekodede ledninger, så det fungerede godt til dette projekt. De eneste ledninger, der derefter skal gå til selve topboksen, er strøm og jord (som begge bliver delt mellem strimlerne) og to datalinjer (en for hver strimmel).
Resten af ledningerne forbinder til benene på arduinoen og giver den strøm. De ben, der blev brugt til dette projekt, var følgende:
- Vin - tilsluttet 5V
- Gnd - forbundet til jorden
- Pin2 - tilsluttet til venstre stripdatalinje
- Pin3 - forbundet til højre stripdatalinje
- Pin4 - forbundet til bremsesignal fra optoisolatoren
- Pin5 - tilsluttet venstre blinklys fra optoisolatoren
- Pin6 - forbundet til højre blinklys fra optoisolatoren
Trin 2: Kabelføring og installation
Når kredsløbet er bygget, er det tid til faktisk at føre dette på plads. Ved hjælp af din ledningsskema til din cykel skal du finde følgende:
- Skiftet strømforsyning
- Jord
- Bremsesignal ind
- Venstre drejesignal ind
- Højre drej signal ind
Til mit var der et enkelt stik, der havde alle disse på, så jeg brugte det bare. Med nok tid kunne jeg måske have fundet den samme stikstil og bare lave et stikmodul, men det gjorde jeg ikke, så jeg fjernede isoleringen nogle steder og lodde den nye ledning til den. Jeg brugte stik på disse splejsetilslutninger, så jeg kunne fjerne resten, hvis jeg nogensinde skulle få brug for det i fremtiden. Derfra placerede jeg Arduino, som nu er i en forseglet projektkasse, under sædet, hvor jeg fastgjorde den. Outputkablet løber derefter langs stativrammen til et vandtæt stik, går derefter ind i boksen og løber langs bagsiden til låget, hvor det deler sig for hver side. Ledningerne løber langs indersiden af låget til det punkt, hvor forbindelserne til lysdioderne er på. Tråden hjælper på plads ved hjælp af lynlåse, der er fastgjort til lynlåsbeslag i udendørs kvalitet med en klæbende bagside. Du finder dem i afsnittet om kabelinstallation i en boligforbedringsbutik
Jeg brugte to mini JST -stik på LED -strimlerne, fordi jeg havde brug for et stik, der var lille nok til at gå gennem et hul med en minimumsdiameter, og fordi jeg ville sikre mig, at der var nok ledning til at håndtere de nuværende krav. Igen kan det have været overkill, og jeg havde ikke nogen små stik med tre ledninger til rådighed. Hullet i kassen, hvor lysstrimletrådene skulle passere, blev forseglet for at holde vand ude. Med hensyn til placering af LED -strimlerne, fordi der er et lille mismatch i afstanden (der var omkring 1 - 1,5 mm forskel i afstanden mellem hullerne i reflektoren og LED'erne) placerede jeg dem, så de ville opdele forskellen mellem LED og hullet så meget som muligt. Jeg brugte derefter varm lim til at klæbe dem på plads og tætningsmiddel for at forsegle området fuldstændigt. Selve LED -strimlerne er vandtætte, så det er ikke noget problem, hvis de bliver våde. Selvom det virker meget at installere, gør dette systemet lettere at fjerne i fremtiden eller udskiftning af dele er nødvendige, fordi det kan ske.
Trin 3: Koden
Min kildekode skulle være i begyndelsen af denne instruktionsbog. Jeg kommenterer altid min kode kraftigt, så det er lettere at forstå senere. Ansvarsfraskrivelse: Jeg er ikke en professionel kodeforfatter. Koden blev skrevet i en metode, der var lettere at komme i gang først, og der blev foretaget nogle forbedringer, men jeg ved, at den kunne være mere forfinet. Jeg bruger også en stor mængde funktionen delay () til timing, som ikke er så ideel. Signalerne, som enheden modtager, er imidlertid ikke hurtige signaler i sammenligning, så jeg følte mig stadig berettiget til at beholde dem ved hjælp af noget som millis (). Jeg er også en meget travl far og mand, så jeg bruger tid på at forbedre noget, der i sidste ende ikke ændrer funktionen, er ikke højt på listen.
Til dette projekt kræves der kun et bibliotek, som er FastLED -biblioteket. Dette har al koden til styring af LED -strimler af typen WS2811/WS2812B. Derfra dækker jeg de grundlæggende funktioner, der skal bruges.
Den første anden end standarddefinitionerne er at deklarere dine to strimler. Du vil bruge følgende kode til hver strimmel:
FastLED.addLeds (leds [0], NUM_LEDS);
Denne kodelinje opretter Pin 2 definerer denne strimmel som strimmel 0 med antallet af lysdioder defineret af de konstante NUM_LEDS, som i mit tilfælde er indstillet til 16. For at definere den anden strimmel bliver 2 til 3 (for pin3) og strimlen vil blive mærket strimmel 1.
Den næste linje, der vil være vigtig, er farve definition.
leds [0] [1] = Color_high CRGB (r, g, b);
Denne kodelinje bruges dog i forskellige udseende (de fleste af mine brug er en konstant). Grundlæggende sender denne kode en værdi til hver af LED -kanalerne (rød, grøn, blå), der definerer hver lysstyrke. Lysstyrkeværdien kan defineres med et tal 0 - 255. Ved at ændre lysstyrkeniveauet for hver kanal kan du definere forskellige farver. Til dette projekt vil jeg have en hvid farve for at holde lyset så lyst som muligt. Så de eneste ændringer, jeg gør, er at indstille lysstyrkeniveauet ens på alle tre kanaler.
Det næste sæt kode bruges til individuelt at tænde hvert lys. Bemærk, at for hver strimmel har hver LED en adresse, der starter ved 0 for den, der er tættest på datalinjeforbindelsen helt op til den højeste tal -LED, du har minus 1. Eksempel, disse er 16 LED -strimler, så den højeste er 16 - 1 = 15. Grunden til dette er, fordi den første LED er mærket 0.
for (int i = NUM_LEDS -1; i> -1; i = i -3) {// Dette ændrer lyset for hver tredje LED, der går fra den sidste til den første. leds [0] = Color_low; // Indstil strip 0 LED -farve til den valgte farve. leds [1] = Color_low; // Indstil strimmel 1 LED -farve til den valgte farve. FastLED.show (); // Vis de indstillede farver. leds [0] = CRGB:: Sort; // Slå den indstillede farve fra i forberedelsen til næste farve. leds [1] = CRGB:: Sort; forsinkelse (150); } FastLED.show (); // Vis de indstillede farver.
Den måde, denne kode fungerer på, er, at en variabel (i) bruges i en for loop som LED -adressen, som derefter refereres til det fulde antal LED'er (NUM_LEDS). Grunden til dette er, at jeg vil have lysene til at starte i slutningen af strimlen frem for begyndelsen. Indstillingen udsendes til både strimler (lysdioder [0] og leds [1]), derefter udsendes en kommando for at vise ændringen. Herefter slukkes dette lys (CRGB:: Sort), og det næste lys tændes. Den sorte reference er en bestemt farve i FastLED -biblioteket, så jeg behøver ikke at udstede 0, 0, 0 for hver kanal, selvom de ville gøre det samme. For-løkken skrider frem 3 lysdioder ad gangen (i = i-3), da jeg kun bruger hver anden LED. Ved slutningen af denne sløjfe vil lyssekvensen gå fra en LED til den næste med kun en tændt pr. Strimmel, en slags Knight Rider -effekt. Hvis du vil holde hvert lys tændt, så bjælken bygger op, ville du bare fjerne de linjer, der slukker lysdioderne, hvilket sker i det næste sæt kode i programmet.
for (int i = 0; i <dim; i ++) {// Fade lys hurtigt til løbende lysniveau. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i <NUM_LEDS; i = i +3) {// Dette lyser de sidste tre lamper for positionslyset. leds [0] = CRGB (rt, gt, bt); // Indstil strip 0 LED -farve til den valgte farve. leds [1] = CRGB (rt, gt, bt); // Indstil strimmel 1 LED -farve til den valgte farve. } FastLED.show (); forsinkelse (3); }
Det sidste eksempel på kode, som jeg bruger til lysdioderne, er en fade loop. Her bruger jeg midlertidige slots til lysstyrken for hver kanal (rt, gt, bt) og øger dem med 1 med en forsinkelse mellem hver visning for at opnå det udseende, jeg ønsker. Bemærk også, at denne kode kun ændrer de sidste tre lysdioder, da dette falmer i kørelysene, så jeg starter ved 9 i stedet for 0.
Resten af LED -koden er iterationer af disse. Alt andet er fokuseret omkring at lede efter et signal på de tre forskellige ledninger. Området Loop () i koden leder efter bremselys, som den vil blinke én gang, før den forbliver tændt (dette kan justeres, hvis det ønskes) eller leder efter blinklys. For denne kode, fordi jeg ikke kunne antage, at venstre og højre drejelys ville tænde nøjagtig samme tid for farer, har jeg koden til at kigge efter en først, derefter efter en lille forsinkelse kontrollerer jeg, om begge er tændt farelyserne er tændt. Den ene vanskelige del, jeg havde, var blinklys, fordi lyset vil slukke i en periode, så hvordan kan jeg se forskellen mellem signalet, der stadig er tændt, men i slukket periode, og et annulleret signal? Det, jeg fandt på, var at implementere en forsinkelsessløjfe, der er indstillet til at fortsætte længere end forsinkelsen mellem signalblink. Hvis blinklyset stadig er tændt, fortsætter signalsløjfen. Hvis signalet ikke tændes igen, når forsinkelsen slutter, går det tilbage til starten af sløjfen (). For at justere forsinkelsens længde ændres tallet for det konstante lysforsinkelse, der huskes for hver 1 i lysforsinkelsen, forsinkelsen ændres med 100 ms.
mens (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 ændrer lyset for hver tredje LED, der går fra den sidste til den første. leds [0] = CRGB (0, 0, 0); // Indstil strip 0 LED -farve til den valgte farve. } for (int i = 9; i <NUM_LEDS; i = i +3) {// Dette opretter kørelysene, der kun bruger de sidste tre. leds [0] = Color_low; // Indstil strip 0 LED -farve til den valgte farve. } FastLED.show (); // Outputindstillinger vender tilbage; // Når blinklyset ikke længere er tændt, skal du gå tilbage til loop. }
Forhåbentlig er resten af koden selvforklarende. Det er bare et gentaget sæt kontrol og handling på signaler.
Trin 4: Resultater
Den fantastiske del var, at dette system virkede første gang, jeg kørte det til cyklen. For at være ærlig testede jeg det kraftigt på bænken før dette, men jeg forventede stadig at have et problem eller en justering. Det viste sig, at jeg ikke behøvede at foretage justeringer af koden såvel som forbindelserne. Som du kan se i videoen, går systemet gennem startsekvensen (som du ikke behøver at have), og standardindstilles derefter til kørelys. Derefter leder den efter bremserne, i så fald lyser alle LED'er til fuld lysstyrke og blinker dem en gang, før de forbliver tændt, indtil bremserne frigøres. Når der bruges et blinklys, lavede jeg en rulleeffekt for siden, at svinget er angivet, og den anden side vil enten være kørelys eller bremselys, hvis den er tændt. Farelys blinker bare i takt med de andre lys.
Forhåbentlig med disse ekstra lys vil jeg være mere synlig for andre mennesker. I det mindste er det en god tilføjelse til at få min kasse til at skille sig lidt mere ud end andre, mens den giver nytteværdi. Jeg håber, at dette projekt også er nyttigt for en anden, selvom de ikke arbejder med en motorcykelboksbelysning. Tak!
Anbefalede:
Motorcykel baglygte med integrerede blinklys ved hjælp af programmerbare lysdioder: 4 trin
Motorcykel baglygte med integrerede blinklys ved hjælp af programmerbare lysdioder: Hej! Det er lidt en let DIY om, hvordan du laver en tilpasset programmerbar RGB baglygte (med integrerede blink/indikatorer) til din motorcykel eller muligvis noget ved hjælp af WS2812B (individuelt adresserbare lysdioder) og Arduinos . Der er 4 lysformer
Genanvendt motorcykel fra flaskehætte: 9 trin (med billeder)
Genanvendt motorcykel fra flaskehætte: v Hvad skal man gøre derhjemme? Her er nogle enkle måder at lave racerbiler derhjemme. Jeg vil guide dig trin for trin til at lave grundlæggende til avancerede racerbiler. Du kan gøre og prøve det. eller du kan pakke den som en gave til at give dine børn eller dine venner. Jeg håber
INTEGREREDE GOOGLE -KORT: 4 trin
INTEGREREDE GOOGLE MAPS: I dette projekt skal vi implementere en enhed, der gør indikationen fra Google Maps til en sensorisk output for at demostrere, hvad vi kunne bruge et integreret navigationssystem på vores krop. Vi implementerer dette ved at forbinde vores Ardui
Integrerede Alexa -styrede smart persienner: 8 trin (med billeder)
Integrerede Alexa Controlled Smart Blinds: Der er masser af Smart Blind -projekter og instruktioner i øjeblikket tilgængelige online. Jeg ville dog sætte mit eget præg på de aktuelle projekter med det formål at have alt internt i blinde inklusive alle kredsløb. Dette ville betyde
Syndiker data fra dine integrerede enheder: 10 trin
Syndiker data fra dine integrerede enheder: Denne instruktør viser dig, hvordan du tager dataoutput fra en USB -temperaturlogger og syndikerer dem på internettet ved hjælp af syndicit.com. Når dine data er gemt på syndicit.com, kan du dele dem på internettet som et regneark, live Google Earth -feed, RSS