Kazalo:

DIY Givi V56 komplet luči za motorno kolo Topbox z integriranimi signali: 4 koraki (s slikami)
DIY Givi V56 komplet luči za motorno kolo Topbox z integriranimi signali: 4 koraki (s slikami)

Video: DIY Givi V56 komplet luči za motorno kolo Topbox z integriranimi signali: 4 koraki (s slikami)

Video: DIY Givi V56 komplet luči za motorno kolo Topbox z integriranimi signali: 4 koraki (s slikami)
Video: Fjernbetjent lås til GIVI bagagebokse - Givi E174 / E175 2024, December
Anonim
Image
Image
Komplet svetilke Topbox za motorno kolo Givi V56 z integriranimi signali
Komplet svetilke Topbox za motorno kolo Givi V56 z integriranimi signali
Komplet svetilke Topbox za motorno kolo Givi V56 z integriranimi signali
Komplet svetilke Topbox za motorno kolo Givi V56 z integriranimi signali

Kot voznik motornega kolesa sem preveč seznanjen z obravnavo, kot da sem na cesti neviden. Kolom, ki jih vedno dodam, je zgornja škatla, ki ima običajno vgrajeno luč. Pred kratkim sem nadgradil na novo kolo in kupil škatlo Givi V56 Monokey, saj je imela veliko prostora za predmete. Ta škatla ima mesto za tovarniški komplet luči, ki je sestavljen iz dveh trakov LED na vsaki strani. Težava je v tem, da ta komplet stane približno 70 USD in deluje samo za zavore. Obstaja komplet za poprodajo, ki verjetno počne podobne stvari in bi ga bilo morda nekoliko lažje namestiti, vendar se vaša cena povzpne na 150 USD. Ker sem iznajdljiva oseba in iščem izgovor, da preizkusim naslovljive LED trakove, sem se odločil narediti integriran sistem, ki bo imel ne samo zavorne luči, ampak tudi luči za luči (prižgane, kadar koli se premikajo), smernike in varnostne luči. Za vraga sem celo dodal zagonsko zaporedje…. ker bi lahko. Upoštevajte, da je to zahtevalo veliko dela, čeprav sem moral ugotoviti veliko stvari. Kljub delu sem zelo zadovoljen, kako se je to izkazalo. Upajmo, da bo to na koncu še komu koristilo.

Osnovno delovanje tega sistema je, da enota Arduino išče signale na zatičih: zavorna luč, leva smer in desna smerna luč. Da bi prebral 12 -voltni signal z motornega kolesa, sem z optoizolatorji pretvoril 12 -voltni signal v 5 -voltni signal, ki ga lahko prebere Arduino. Koda nato počaka na enega od teh signalov in nato s pomočjo knjižnice FastLED odda ukaze na LED trak. To so osnove, zdaj za podrobnosti.

Zaloge

To so stvari, ki sem jih uporabljala, ker sem jih večinoma že ležala. Očitno jih je mogoče po potrebi zamenjati:

  1. Arduino - Nano sem uporabil zaradi velikosti, vendar lahko uporabite karkoli se vam zdi, če imate na voljo pet zatičev.
  2. 5V regulator - uporabil sem L7805CV, ki je zmogel 1,5 ampera. Ta projekt bo uporabljal 0,72 ampera za LED in moč za nano, zato 1,5 deluje odlično za ta projekt.
  3. Kondenzatorji - za pravilno delovanje napetostnega regulatorja potrebujete enega 0,33 uF in enega 0,1 uF.
  4. 3x optoizolatorji - za pretvorbo signala z 12V na 5V. Uporabil sem tip PC817X, ki ima samo štiri zatiče, kar je vse, kar potrebujemo.
  5. Upori - potrebovali boste dve vrsti, po tri vsake vrste. Prvi mora biti dovolj za zmanjšanje toka skozi optoizolator IR LED. Potrebovali boste vsaj 600 ohmov, vendar bi bilo bolje, če bi 700 upravljali spreminjanje napetosti na motociklu. Druga mora biti nekje med 10k in 20k za hiter signal na drugi strani optoizolatorja.
  6. Prototipna plošča - imel sem nekaj dovolj majhnih, da so se prilegali majhni projektni škatli z rahlo obrezovanjem.
  7. Škatla za projekt - dovolj velika, da se prilega komponentam, vendar dovolj majhna, da jo je mogoče enostavno namestiti.
  8. Wire - Uporabil sem Ethernet žico Cat 6, ker sem jo veliko sedel. Ta ima osem barvno označenih žic, ki so pomagale pri vseh različnih povezavah in so bile dovolj velike, da je lahko kos trenutnim žrebom.
  9. Vtiči - kjer koli želite, da je sistem enostavno odstranljiv. Uporabil sem vodoodporen čep, da sem omogočil odstranitev zgornje škatle in obvladal dež ali vodo, ki pride nanjo. Za LED trakove sem potreboval tudi manjše čepe, zato mi ni bilo treba vrtati velikih lukenj.
  10. Zadrge in lepilni nosilci za zadrge, ki držijo vse na mestu.
  11. Skrčite ovoj, da uredite povezave.

1. korak: Izdelava vezja

Gradnja vezja
Gradnja vezja
Gradnja vezja
Gradnja vezja
Gradnja vezja
Gradnja vezja

Očitno, če spremljate mojo gradnjo, vam ne bo treba iti skozi toliko testiranj, ki sem jih opravil jaz. Najprej sem se prepričal, da je moja koda delovala in da sem lahko pravilno prejel signal iz optoizolatorjev ter pravilno krmilil LED trakove. Trajalo je nekaj časa, da sem ugotovil, kako najbolje pritrditi signalne zatiče na izolatorje, vendar sem s poskusi in napakami našel pravo orientacijo. Pravkar sem uporabil standardno prototipno ploščo, saj sem jo samo gradil in ugotovitev vzorca sledi bi vzela več časa, kot je bilo vredno. Zgornji del tiskanega vezja je videti super, spodnji pa je videti nekoliko zmešan, vendar je vsaj funkcionalen.

Osnovna zasnova se začne z vnosom 12V moči iz vklopljenega vira (žica, ki je vklopljena samo, ko je motorno kolo vklopljeno). Shema ožičenja lahko resnično pomaga najti to žico. Ta se napaja na eni strani regulatorja napetosti. Kondenzator 0,33 uF veže ta vhod na tla na regulatorju napetosti, ki se nato vrne nazaj na tla na motociklu. Na izhodu regulatorja napetosti bo na tla priključen kondenzator 0,1uF. Ti kondenzatorji pomagajo izravnati napetost iz regulatorja. Če jih na sliki tiskanega vezja ne najdete, so pod regulatorjem napetosti. Od tam vodi 5V linija do Vina na Arduinu, do napajalnega zatiča, ki bo napajal LED trakove, in dveh na izvorni strani optoizolatorja, ki se bo napajal v zatiče Arduino in zagotavljal potreben 5V signal.

Kar zadeva optoizolatorje, obstajata dve strani: ena z IR LED in druga s tranzistorjem z IR detektorjem. Za merjenje 12V signala želimo uporabiti IR LED stran. Ker ima LED napetost 1,2 V naprej, potrebujemo zaporedni upor za omejevanje toka. 12V - 1.2V = 10.8V in za delovanje LED pri 18 mA (iz življenjskih razlogov vedno rad delam manj kot 20 mA), boste potrebovali upor R = 10.8V/0.018A = 600 ohm. Napetosti na vozilih prav tako naraščajo, potencialno do 14V, zato je bolje načrtovati to, kar je približno 710 ohmov, čeprav bi bilo 700 več kot razumno. Izhod za LED stran se nato vrne nazaj na tla. Za izhodno stran optoizolatorja bo vhod uporabil 5V signal iz regulatorja, nato pa se bo izhod povezal z drugim uporom, preden se ozemlji. Ta upor mora biti le okoli 10k - 20k ohm, vsaj tako je pokazal moj podatkovni list. To bo omogočilo hitro merjenje signala, saj ne govorimo o hrupnem okolju. Izhod na zatič Arduino se bo umaknil med uporom in izhodom optoizolatorja, tako da bo signal, ko je izklopljen, nizek in če je signal na zatiču visok.

Luči LED traku imajo povezane tri žice: napajanje, ozemljitev in prenos podatkov. Napajanje mora biti 5 V. Ta projekt uporablja skupaj 12 LED (čeprav imam več LED na trakovih, vendar uporabljam le vsako tretjo LED) in vsaka traja 60 mA, če uporabljamo belo svetlobo pri polni svetlosti. To daje skupaj 720 mA. Za regulator napetosti smo v izhodni moči, zato smo dobri. Prepričajte se le, da je žica dovolj velika za merjenje moči, uporabil sem Ethernet žico Cat 6 s premerom 24. Ethernetna žica je bila nekaj, kar sem sedel okoli in ima 8 barvno označenih žic, zato se je za ta projekt dobro obnesel. Edina žica, ki morata nato iti do samega zgornjega polja, sta napajanje in ozemljitev (ki se razdeli med trakove) in dve podatkovni liniji (po ena za vsak trak).

Preostanek ožičenja je povezan z zatiči na arduinu in ga napaja. Zatiči, ki so bili uporabljeni za ta projekt, so bili naslednji:

  1. Vin - priključen na 5V
  2. Gnd - povezan z maso
  3. Pin2 - priključen na podatkovno linijo na levem traku
  4. Pin3 - priključen na podatkovno linijo desnega traku
  5. Pin4 - povezan z zavornim signalom iz optičnega izolatorja
  6. Pin5 - povezan z levim smernikom iz optoizolatorja
  7. Pin6 - povezan z desnim smernikom iz optoizolatorja

2. korak: Ožičenje in namestitev

Ožičenje in namestitev
Ožičenje in namestitev
Ožičenje in namestitev
Ožičenje in namestitev
Ožičenje in namestitev
Ožičenje in namestitev

Ko je vezje zgrajeno, pride čas, da se to dejansko poveže. S svojo shemo ožičenja za kolo boste morali poiskati naslednje:

  • Stikalno napajanje
  • Tla
  • Zavorni signalni vhod
  • Levi smernik
  • Desni smernik

Za mojega je bil en sam vtič, na katerem je bilo vse to, zato sem ga kar uporabil. Če bi imel dovolj časa, bi morda lahko našel enak slog vtiča in samo naredil vtični modul, vendar tega nisem storil, zato sem le mestoma odstranil izolacijo in nanjo spajkal novo žico. Na teh spojenih povezavah sem uporabil vtiče, da sem lahko v prihodnosti odstranil preostale. Od tam sem Arduino, ki je zdaj v zaprti projektni škatli, postavil pod sedež, kamor sem ga pritrdil. Izhodni kabel nato vodi vzdolž okvirja stojala do vodotesnega vtiča, nato vstopi v škatlo in teče vzdolž hrbta do pokrova, kjer se razdeli na vsako stran. Žice potekajo vzdolž notranjosti pokrova do točke, kjer so priključki za LED. Žica je na mestu z zadrgami, pritrjenimi na zunanje nosilce z zadrgo z lepilno podlago. Najdete jih v razdelku o namestitvi kablov v trgovini za gospodinjske izdelke

Na LED trakovih sem uporabil dva mini JST vtikača, ker sem potreboval dovolj majhen vtič, da je šel skozi luknjo najmanjšega premera, in ker sem se želel prepričati, da je dovolj žice za izpolnitev trenutnih zahtev. Še enkrat, morda je bilo preveč in nisem imel pri roki majhnih vtičev s tremi žicami. Luknje v škatli, skozi katere lahko preidejo žice svetlobnih trakov, so bile zatesnjene, da voda ne pride ven. Kar zadeva pozicioniranje LED trakov, ker prihaja do rahlega neskladja v razmiku (razlika med razmiki med luknjami v reflektorju in LED je bila približno 1 - 1,5 mm), sem jih postavil tako, da bodo razdelili razliko med LED in luknjo v največji možni meri. Nato sem jih uporabil z vročim lepilom, da jih pritrdim na mesto, in tesnilno maso, da v celoti zaprem površino. LED trakovi so vodotesni, zato ni težav, če se zmočijo. Čeprav se zdi, da ga je treba veliko namestiti, bo sistem v prihodnosti lažje odstraniti ali pa so potrebni deli, ker se to lahko zgodi.

3. korak: Koda

Moja izvorna koda bi morala biti na začetku tega navodila. Svojo kodo vedno močno komentiram, da jo bom kasneje lažje razumel. Izjava o omejitvi odgovornosti: Nisem profesionalni avtor kode. Koda je bila napisana z metodo, ki je bila lažja za začetek in je bila narejena nekaj izboljšav, vendar vem, da bi bila lahko bolj izpopolnjena. Uporabljam tudi veliko funkcijo delay () za merjenje časa, kar ni tako idealno. Vendar signali, ki jih naprava prejema, niso hitri signali v primerjavi, zato sem se še vedno počutil upravičeno, da jih ne uporabljam več kot milis (). Sem tudi zelo zaposlen oče in mož, zato poraba časa za izboljšanje nečesa, kar na koncu ne bo spremenilo funkcije, ni visoko na seznamu.

Za ta projekt je potrebna le ena knjižnica, to je knjižnica FastLED. Ta vsebuje vso kodo za krmiljenje LED trakov tipa WS2811/WS2812B. Od tam bom obravnaval osnovne funkcije, ki bodo uporabljene.

Prva, razen standardnih definicij, je deklariranje vaših dveh trakov. Za vsak trak boste uporabili naslednjo kodo:

FastLED.addLeds (LED diode [0], NUM_LEDS);

Ta vrstica kode, ki nastavi Pin 2, definira ta trak kot trak 0 s številom LED, ki jih določa konstanta NUM_LEDS, ki je v mojem primeru nastavljena na 16. Če želite določiti drugi trak, bo 2 postala 3 (za pin3) in trak bo označen kot trak 1.

Naslednja vrstica, ki bo pomembna, je definicija barve.

LED [0] [1] = Barva_visok CRGB (r, g, b);

Ta vrstica kode se uporablja v različnih pogledih (večina uporabljam konstanto). V bistvu ta koda pošlje vrednost vsakemu od LED kanalov (rdeča, zelena, modra), ki določa vsako svetlost. Vrednost svetlosti je mogoče določiti s številko 0 - 255. S spreminjanjem stopnje svetlosti za vsak kanal lahko določite različne barve. Za ta projekt želim belo barvo, da bo svetloba čim močnejša. Edine spremembe, ki jih naredim, je, da stopnjo svetlosti nastavim enako na vseh treh kanalih.

Naslednji niz kod se uporablja za individualno osvetlitev vsake luči. Upoštevajte, da ima vsak LED vsak naslov, ki se začne z 0 za tistega, ki je najbližje povezavi podatkovne linije, vse do največjega števila LED, ki ga imate minus 1. Primer, to je 16 LED trakov, zato je najvišji 16 - 1 = 15. Razlog za to je, ker je prva LED označena z 0.

for (int i = NUM_LEDS -1; i> -1; i = i -3) {// To bo spremenilo luč za vsako tretjo LED, ki gre od zadnje do prve. LED [0] = Barva_nizka; // Barvo traku 0 LED nastavimo na izbrano barvo. LED [1] = Barva_nizka; // Barvo LED 1 traku nastavite na izbrano barvo. FastLED.show (); // Pokaži nastavljene barve. LED diode [0] = CRGB:: Črna; // Izklopite nastavljeno barvo v pripravi za naslednjo barvo. LED diode [1] = CRGB:: Črna; zamuda (150); } FastLED.show (); // Pokaži nastavljene barve.

Ta koda deluje tako, da se spremenljivka (i) uporablja v zanki for kot naslov LED, ki se nato sklicuje na celotno število LED (NUM_LEDS). Razlog za to je, da želim, da se luči prižgejo na koncu traku in ne na začetku. Nastavitev se prikaže na obeh trakovih (LED [0] in LED [1]), nato se izda ukaz za prikaz spremembe. Po tem se lučka ugasne (CRGB:: Črna) in prižge naslednja lučka. Črna referenca je posebna barva v knjižnici FastLED, zato mi ni treba izdati 0, 0, 0 za vsak kanal, čeprav bi naredili isto. Zanka For napreduje 3 LED naenkrat (i = i-3), ker uporabljam samo vsako drugo LED. Do konca te zanke bo zaporedje svetlobe prehajalo od ene LED do druge z le eno osvetljeno na trak, nekakšen učinek viteza Riderja. Če želite, da je vsaka lučka prižgana, da se vrstica gradi, odstranite vrstice, ki izklopijo LED, kar se zgodi v naslednjem nizu kode v programu.

for (int i = 0; i <dim; i ++) {// Hitro pogasite luči na raven luči. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i <NUM_LEDS; i = i +3) {// To bo prižgalo zadnje tri luči pozicijske luči. LED [0] = CRGB (rt, gt, bt); // Barvo traku 0 LED nastavimo na izbrano barvo. LED [1] = CRGB (rt, gt, bt); // Barvo LED 1 traku nastavite na izbrano barvo. } FastLED.show (); zamuda (3); }

Zadnji primer kode, ki jo uporabljam za LED, je zbledeča zanka. Tukaj uporabljam začasne reže za svetlost vsakega kanala (rt, gt, bt) in jih povečam za 1 z zamikom med vsakim prikazom, da dosežem želeni videz. Upoštevajte tudi, da ta koda spreminja le zadnje tri LED diode, saj te luči tečejo, zato se i začne pri 9 in ne pri 0.

Preostala koda LED je njihova ponovitev. Vse ostalo je osredotočeno na iskanje signala na treh različnih žicah. Področje Loop () kode išče zavorne luči, ki jih bo enkrat utripal, preden ostane prižgan (po želji nastavljiv) ali išče smernike. Za to kodo, ker nisem mogel domnevati, da se bosta luči za obračanje leve in desne strani prižgale ob istem času zaradi nevarnosti, kodo najprej poiščem bodisi eno, nato pa po majhni zamudi preverim, ali obe svetita svetijo varnostne luči. En težaven del, ki sem ga imel, so bili smerniki, ker bo lučka za nekaj časa ugasnila. Kako naj torej povem razliko med signalom, ki je še vedno vklopljen, vendar v času izklopa, in preklicanim signalom? Prišel sem do izvedbe zanke z zakasnitvijo, ki naj bi trajala dlje kot zakasnitev med utripanjem signala. Če je smernik še vedno vklopljen, se bo signalna zanka nadaljevala. Če se signal po koncu zamude ne vklopi, se vrne na začetek zanke (). Če želite prilagoditi dolžino zakasnitve, spremenite številko konstantne svetlobe Zakasnitev zapomnitve za vsako 1 svetlobo Zakasnitev se spremeni za 100 ms.

while (digitalRead (leftTurn) == LOW) {for (int i = 0; i <lightDelay; i ++) {leftTurnCheck (); if (digitalRead (leftTurn) == HIGH) {leftTurnLight (); } zamuda (100); } for (int i = 0; i <NUM_LEDS; i = i +3) {// To bo spremenilo luč za vsako tretjo LED, ki bo šla od zadnje do prve. LED [0] = CRGB (0, 0, 0); // Barvo traku 0 LED nastavimo na izbrano barvo. } for (int i = 9; i <NUM_LEDS; i = i +3) {// To bo nastavilo luči, ki uporabljajo samo zadnje tri. LED [0] = Barva_nizka; // Barvo traku 0 LED nastavimo na izbrano barvo. } FastLED.show (); // Izhodne nastavitve se vrnejo; // Ko smernik ni več vklopljen, se vrnite na zanko. }

Upajmo, da je preostala koda samoumevna. To je samo ponavljajoči se niz preverjanja in delovanja na signale.

4. korak: Rezultati

Rezultati
Rezultati

Neverjetno je, da je ta sistem deloval, ko sem ga prvič priključil na kolo. Po pravici povedano, pred tem sem ga močno preizkusil na klopi, vendar sem vseeno pričakoval, da bo prišlo do težave ali prilagoditve. Izkazalo se je, da mi kode in povezav ni treba prilagajati. Kot lahko vidite v videoposnetku, sistem gre skozi zagonsko zaporedje (ki vam ga ni treba imeti), nato pa privzeto preklopi na luči. Nato poišče zavore, v tem primeru prižge vse LED diode do polne svetilnosti in jih enkrat utripa, preden ostanejo vklopljene, dokler se zavore ne sprostijo. Ko se uporablja smernik, sem na strani, na kateri je označen zavoj, naredil drsni učinek, na drugi strani pa bodo bodisi luči za luč ali zavorna luč, če je vklopljena. Luči za nevarnost bodo pravočasno utripale z drugimi lučmi.

Upam, da bom s temi dodatnimi lučmi bolj viden drugim ljudem. Vsaj to je lep dodatek, da moja škatla izstopa nekoliko bolj od drugih, hkrati pa nudi uporabnost. Upam, da bo ta projekt koristen tudi za koga drugega, tudi če ne dela z osvetlitvijo motornega kolesa. Hvala!

Priporočena: