Spisu treści:

DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami: 4 kroki (ze zdjęciami)
DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami: 4 kroki (ze zdjęciami)

Wideo: DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami: 4 kroki (ze zdjęciami)

Wideo: DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami: 4 kroki (ze zdjęciami)
Wideo: Montaż kufrów bocznych Shad do Suzuki GSX S125 2024, Listopad
Anonim
Image
Image
DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami
DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami
DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami
DIY Zestaw oświetlenia motocyklowego Topbox Givi V56 ze zintegrowanymi sygnałami

Jako motocyklista zbyt dobrze znam się na traktowaniu mnie, jakbym był niewidzialny na drodze. Jedną rzeczą, którą zawsze dodaję do moich rowerów, jest kufer górny, który zwykle ma zintegrowane światło. Niedawno przeszedłem na nowy rower i kupiłem pudełko Givi V56 Monokey, ponieważ miało dużo miejsca na przedmioty. W pudełku znajduje się miejsce na fabryczny zestaw oświetleniowy, który składa się z dwóch pasków diod LED z każdej strony. Problem polega na tym, że ten zestaw kosztuje około 70 USD i ma tylko hamulce. Istnieje zestaw na rynku wtórnym, który prawdopodobnie robi podobne rzeczy i może być nieco łatwiejszy do zainstalowania, ale twoja cena wzrasta do 150 USD. Będąc osobą zaradną i szukając pretekstu do wypróbowania adresowalnych taśm LED, postanowiłem stworzyć zintegrowany system, który nie tylko będzie miał światła stopu, ale także światła do jazdy (włączane zawsze, gdy się poruszam), kierunkowskazy i światła awaryjne. Tak dla cholery, dodałem nawet sekwencję startową…. bo mogłem. Zauważ, że wymagało to dużo pracy, chociaż miałem wiele rzeczy do wymyślenia. Mimo pracy jestem raczej zadowolony z tego, jak się to potoczyło. Mam nadzieję, że przyda się to komuś innemu.

Podstawową operacją działania tego układu jest to, że Arduino szuka sygnałów na pinach: światło hamowania, lewe światło skrętu i prawe światło skrętu. W celu odczytania sygnału 12V z motocykla użyłem optoizolatorów do konwersji sygnału 12V na sygnał 5V, który może odczytać Arduino. Następnie kod czeka na jeden z tych sygnałów, a następnie wysyła polecenia do paska LED za pomocą biblioteki FastLED. To podstawy, teraz przejdźmy do szczegółów.

Kieszonkowe dzieci

To są rzeczy, których używałem, ponieważ w większości już je miałem. Oczywiście w razie potrzeby można je wymienić:

  1. Arduino - użyłem nano ze względu na rozmiar, ale możesz użyć tego, co chcesz, o ile masz pięć pinów do użycia.
  2. Regulator 5V - użyłem L7805CV, który był zdolny do 1,5 ampera. Ten projekt będzie używał 0,72 ampera dla diod LED plus moc dla nano, więc 1,5 działa świetnie w tym projekcie.
  3. Kondensatory - do prawidłowego działania regulatora napięcia potrzebny będzie jeden 0,33 uF i jeden 0,1 uF.
  4. 3x optoizolatory - do konwersji sygnału z 12V na 5V. Użyłem typu PC817X, który ma tylko cztery piny, co jest wszystkim, czego potrzebujemy.
  5. Rezystory - będziesz potrzebować dwóch typów, po trzy każdego typu. Pierwszy musi wystarczyć, aby zmniejszyć prąd przez optoizolator LED IR. Będziesz potrzebował co najmniej 600 omów, ale 700 byłoby lepszym pomysłem, aby poradzić sobie ze zmieniającymi się napięciami na motocyklu. Drugi musi być gdzieś pomiędzy 10k a 20k, aby uzyskać szybki sygnał po drugiej stronie optoizolatora.
  6. Płytka prototypowa - miałem takie, które były na tyle małe, że zmieściły się w małym pudełku projektowym z niewielką ilością przycinania.
  7. Pudełko projektowe - wystarczająco duże, aby zmieścić komponenty, ale wystarczająco małe, aby można je było łatwo dopasować.
  8. Przewód - Użyłem przewodu Ethernet Cat 6, ponieważ miałem go dużo. Ma osiem przewodów, wszystkie oznaczone kolorami, co pomogło we wszystkich różnych połączeniach i było wystarczająco duże, aby poradzić sobie z poborami prądu.
  9. Wtyczki - wszędzie tam, gdzie chcesz, aby system można było łatwo wyjąć. Użyłem wodoodpornej wtyczki, aby umożliwić zdjęcie górnego pudełka i poradzić sobie z deszczem lub wodą, która się na nie dostanie. Potrzebowałem też mniejszych zaślepek do taśm LED, dzięki czemu nie musiałem wiercić dużych otworów.
  10. Opaski na suwak i samoprzylepne uchwyty na suwak utrzymują wszystko na swoim miejscu.
  11. Folia termokurczliwa, aby uporządkować połączenia.

Krok 1: Budowanie obwodu

Budowanie obwodu
Budowanie obwodu
Budowanie obwodu
Budowanie obwodu
Budowanie obwodu
Budowanie obwodu

Oczywiście, jeśli śledzisz moją kompilację, nie będziesz musiał przechodzić przez tyle testów, które wykonałem. Pierwszą rzeczą, którą zrobiłem, było upewnienie się, że mój kod działa i mogę poprawnie odbierać sygnał z optoizolatorów, a także prawidłowo sterować taśmami LED. Chwilę zajęło ustalenie, jak najlepiej podłączyć piny sygnałowe do izolatorów, ale metodą prób i błędów znalazłem właściwą orientację. Po prostu użyłem standardowej płytki prototypowej, ponieważ budowałem tylko jedną, a wymyślenie wzoru śladu zajęłoby więcej czasu, niż było to warte. Górna część płytki drukowanej wygląda świetnie, ale spód wygląda trochę bałagan, ale przynajmniej jest funkcjonalny.

Podstawowy projekt zaczyna się od wprowadzenia zasilania 12V z przełączanego źródła (przewód, który jest włączony tylko wtedy, gdy motocykl jest włączony). Schemat okablowania może naprawdę pomóc w znalezieniu tego przewodu. Jest on podawany z jednej strony regulatora napięcia. Kondensator 0,33 uF łączy to wejście z masą na regulatorze napięcia, który następnie jest przesyłany z powrotem do masy motocykla. Wyjście regulatora napięcia będzie miało kondensator 0,1uF związany z masą. Kondensatory te pomagają wygładzić napięcie z regulatora. Jeśli nie możesz ich znaleźć na zdjęciu płytki drukowanej, są one pod regulatorem napięcia. Stamtąd linia 5 V przechodzi do Vin na Arduino, do pinu zasilania, który będzie zasilał paski LED, oraz do dwóch po stronie źródła optoizolatora, który będzie zasilał piny Arduino, zapewniając potrzebny sygnał 5 V.

Jeśli chodzi o optoizolatory, to są dwie strony: jedna z diodą IR, a druga z tranzystorem z detektorem IR. Chcemy wykorzystać stronę LED IR do pomiaru sygnału 12V. Ponieważ dioda LED ma napięcie przewodzenia 1,2 V, potrzebujemy szeregowego rezystora ograniczającego prąd. 12V - 1,2V = 10,8V i do uruchomienia diody LED przy 18 mA (z powodów życiowych zawsze lubię prąd poniżej 20 mA), potrzebny będzie rezystor R = 10,8 V/0,018 A = 600 omów. Napięcia w pojazdach również mają tendencję do wyższych wartości, potencjalnie do 14 V, więc lepiej zaplanować to, co wynosi około 710 omów, chociaż 700 byłoby więcej niż rozsądne. Wyjście dla strony LED jest następnie przesyłane z powrotem do ziemi. Po stronie wyjściowej optoizolatora wejście będzie wykorzystywać sygnał 5V z regulatora, a następnie wyjście połączy się z innym rezystorem przed przejściem do masy. Ten rezystor musi mieć po prostu około 10k - 20k omów, przynajmniej tak pokazał mój arkusz danych. Zapewni to szybki pomiar sygnału, ponieważ nie mamy do czynienia z hałaśliwym otoczeniem. Wyjście na pin Arduino zostanie odłączone między rezystorem a wyjściem optoizolatora tak, że gdy sygnał jest wyłączony, pin jest niski, a gdy sygnał jest na pinie wysoki.

Z diodami LED są powiązane trzy przewody: zasilanie, uziemienie i dane. Zasilanie musi wynosić 5V. Ten projekt używa łącznie 12 diod LED (chociaż mam więcej diod LED na paskach, ale używam tylko co trzeciej diody LED) i każda pobiera 60mA, gdy białe światło jest używane przy pełnej jasności. Daje to łącznie 720 mA. Jesteśmy w granicach mocy wyjściowej regulatora napięcia, więc jesteśmy dobrzy. Tylko upewnij się, że przewód jest wystarczająco duży, aby obsłużyć moc, użyłem kabla Ethernet Cat 6 o średnicy 24. Przewód Ethernet był czymś, nad czym siedziałem i ma 8 przewodów oznaczonych kolorami, więc sprawdził się dobrze w tym projekcie. Jedyne przewody, które następnie muszą przejść do samego topboxa, to zasilanie i uziemienie (które są dzielone między paski) oraz dwie linie danych (po jednej dla każdego paska).

Reszta okablowania łączy się z pinami na arduino i zasila go. Piny użyte w tym projekcie były następujące:

  1. Vin - podłączony do 5V
  2. Gnd - podłączony do masy
  3. Pin2 - podłączony do linii danych lewego paska
  4. Pin3 - podłączony do linii danych prawej taśmy
  5. Pin4 - podłączony do sygnału hamulca z optoizolatora
  6. Pin5 - podłączony do lewego kierunkowskazu z optoizolatora
  7. Pin6-podłączony do prawego kierunkowskazu z optoizolatora

Krok 2: Okablowanie i instalacja

Okablowanie i instalacja
Okablowanie i instalacja
Okablowanie i instalacja
Okablowanie i instalacja
Okablowanie i instalacja
Okablowanie i instalacja

Po zbudowaniu obwodu nadchodzi czas, aby właściwie go podłączyć. Korzystając ze schematu okablowania roweru, musisz zlokalizować następujące elementy:

  • Zasilacz impulsowy
  • Grunt
  • Sygnał hamowania w
  • Lewy kierunkowskaz w
  • Prawy kierunkowskaz w

W moim przypadku była jedna wtyczka, która miała wszystkie te elementy, więc po prostu tego użyłem. Mając wystarczająco dużo czasu, być może udałoby mi się znaleźć ten sam styl wtyczki i po prostu zrobić moduł wtyczki, ale tego nie zrobiłem, więc po prostu usunąłem izolację w niektórych miejscach i przylutowałem do niej nowy przewód. Użyłem wtyczek na tych splecionych połączeniach, aby móc usunąć resztę, gdybym kiedykolwiek potrzebował w przyszłości. Stamtąd umieściłem Arduino, które jest teraz w zapieczętowanym pudełku projektowym, pod siedzeniem, do którego je przymocowałem. Kabel wyjściowy biegnie następnie wzdłuż ramy stojaka do wodoodpornej wtyczki, a następnie wchodzi do pudełka i biegnie wzdłuż tylnej części do pokrywy, gdzie dzieli się na każdą stronę. Przewody biegną po wewnętrznej stronie pokrywy do miejsca, w którym znajdują się połączenia dla diod LED. Drut jest mocowany na miejscu za pomocą opasek zaciskowych przymocowanych do mocowań do opasek błyskawicznych klasy Outdoor z samoprzylepnym podkładem. Można je znaleźć w sekcji instalacji kabli w sklepie dla majsterkowiczów

Użyłem dwóch wtyczek mini JST na taśmach LED, ponieważ potrzebowałem wtyku wystarczająco małego, aby przejść przez otwór o minimalnej średnicy i chciałem upewnić się, że jest wystarczająco dużo drutu, aby sprostać obecnym wymaganiom. Ponownie, może to była przesada i nie miałem pod ręką żadnych małych wtyczek z trzema przewodami. Otwór w pudełku, przez który przechodziły przewody taśmy świetlnej, został uszczelniony, aby nie dopuścić do przedostania się wody. Co do rozmieszczenia taśm LED, ponieważ jest lekka niedopasowanie rozstawu (była różnica w rozstawie między otworami w odbłyśniku a diodami około 1 - 1,5 mm) to ustawiłem je tak, aby dzieliły różnicę między diodą a diodami dziurę jak najwięcej. Następnie użyłem gorącego kleju, aby przykleić je na miejscu i uszczelniacza, aby całkowicie uszczelnić obszar. Same paski LED są wodoodporne, więc nie ma problemu, jeśli się zamoczą. Chociaż wydaje się, że instalacja jest długa, ułatwia to demontaż systemu w przyszłości lub wymianę części, ponieważ może się to zdarzyć.

Krok 3: Kodeks

Mój kod źródłowy powinien znajdować się na początku tej instrukcji. Zawsze mocno komentuję mój kod, aby później łatwiej go zrozumieć. Zastrzeżenie: nie jestem zawodowym twórcą kodu. Kod został napisany w sposób, który był łatwiejszy do uruchomienia jako pierwszy i wprowadzono pewne ulepszenia, ale wiem, że mógłby być bardziej dopracowany. Używam również dużej ilości funkcji delay() do synchronizacji, która nie jest tak idealna. Jednak sygnały, które odbiera urządzenie, nie są szybkimi sygnałami w porównaniu, więc nadal czułem się usprawiedliwiony, aby zachować je przy użyciu czegoś takiego jak millis(). Jestem też bardzo zajętym ojcem i mężem, więc spędzanie czasu na ulepszaniu czegoś, co ostatecznie nie zmieni funkcji, nie jest wysoko na liście.

W przypadku tego projektu wymagana jest tylko jedna biblioteka, czyli biblioteka FastLED. Zawiera cały kod do sterowania taśmami LED typu WS2811/WS2812B. Stamtąd omówię podstawowe funkcje, które będą używane.

Pierwszym innym niż standardowe definicje jest zadeklarowanie dwóch pasków. Dla każdego paska użyjesz następującego kodu:

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

Ten wiersz kodu ustawia Pin 2 definiuje ten pasek jako pasek 0 z liczbą diod LED zdefiniowaną przez stałą NUM_LEDS, która w moim przypadku jest ustawiona na 16. Aby zdefiniować drugi pasek, 2 stanie się 3 (dla pinu3) i pasek będzie oznaczony jako pasek 1.

Kolejna linia, która będzie ważna, to definicja koloru.

diody[0][1] = Kolor_wys. CRGB(r, g, b);

Ten wiersz kodu jest używany, chociaż w innym wyglądzie (większość używam stałej). Zasadniczo kod ten wysyła wartość do każdego z kanałów LED (czerwony, zielony, niebieski), która definiuje każdą jasność. Wartość jasności można określić liczbą 0 - 255. Zmieniając poziom jasności dla każdego kanału można zdefiniować różne kolory. W tym projekcie chcę mieć biały kolor, aby światło było jak najjaśniejsze. Jedyne zmiany, jakie wprowadzam, to ustawienie jednakowego poziomu jasności we wszystkich trzech kanałach.

Kolejny zestaw kodów służy do indywidualnego oświetlania każdego światła. Zwróć uwagę, że dla każdego paska każda dioda LED ma adres, który zaczyna się od 0 dla najbliższego połączenia linii danych, aż do najwyższej liczby diod LED, które masz minus 1. Przykład, jest to 16 taśm LED, więc najwyższa to 16 - 1 = 15. Powodem tego jest to, że pierwsza dioda LED jest oznaczona jako 0.

for (int i = NUM_LEDS-1; i > -1; i = i - 3) { // To zmieni światło dla każdej trzeciej diody LED od ostatniej do pierwszej. diody[0] = Kolor_niski; // Ustaw kolor diody LED paska 0 na wybrany kolor. diody[1] = Kolor_niski; // Ustaw kolor diody LED taśmy 1 na wybrany kolor. FastLED.show(); // Pokaż ustawione kolory. diody[0] = CRGB::Czarny; // Wyłącz ustawianie koloru w prep dla następnego koloru. diody[1] = CRGB::Czarny; opóźnienie(150); } FastLED.show(); // Pokaż ustawione kolory.

Sposób działania tego kodu polega na tym, że zmienna (i) jest używana w pętli for jako adres diody LED, który jest następnie odnoszony do pełnej liczby diod LED (NUM_LEDS). Powodem tego jest to, że chcę, aby światła zaczynały się na końcu paska, a nie na początku. Ustawienie jest wyprowadzane na oba paski (led[0] i led[1]), a następnie wydawane jest polecenie pokazania zmiany. Następnie ta kontrolka gaśnie (CRGB::Black) i zapala się następna kontrolka. Odniesienie Black jest określonym kolorem w bibliotece FastLED, więc nie muszę wydawać 0, 0, 0 dla każdego kanału, chociaż zrobiliby to samo. Pętla For przesuwa się do przodu o 3 diody LED na raz (i = i-3), ponieważ używam tylko każdej innej diody LED. Pod koniec tej pętli sekwencja światła przejdzie od jednej diody LED do drugiej, z tylko jedną zapaloną na pasek, coś w rodzaju efektu Knight Rider. Jeśli chcesz, aby każde światło świeciło, aby pasek się budował, po prostu usuń linie, które wyłączają diody LED, co dzieje się w następnym zestawie kodu w programie.

for (int i = 0; i < dim; i++) { // Szybko zanikaj światła do poziomu światła do jazdy. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i < NUM_LEDS; i = i +3) { // Spowoduje to zapalenie trzech ostatnich świateł światła pozycyjnego. diody[0] = CRGB(rt, gt, bt); // Ustaw kolor diody LED paska 0 na wybrany kolor. diody[1] = CRGB(rt, gt, bt); // Ustaw kolor diody LED taśmy 1 na wybrany kolor. } FastLED.show(); opóźnienie(3); }

Ostatnim przykładem kodu, którego używam dla diod LED, jest pętla zanikania. Tutaj używam tymczasowych szczelin dla jasności dla każdego kanału (rt, gt, bt) i zwiększam je o 1 z opóźnieniem między każdym pokazem, aby uzyskać pożądany wygląd. Zauważ również, że ten kod zmienia tylko ostatnie trzy diody LED, ponieważ zanikają one w światłach do jazdy, więc zaczynam od 9, a nie od 0.

Reszta kodu LED to ich iteracje. Cała reszta skupia się na szukaniu sygnału na trzech różnych przewodach. Obszar Loop() kodu szuka świateł hamowania, które migną raz, zanim pozostaną włączone (można to zmienić w razie potrzeby) lub szukają kierunkowskazów. W przypadku tego kodu, ponieważ nie mogłem założyć, że lewe i prawe kierunkowskazy zapalą się dokładnie w tym samym czasie dla zagrożeń, muszę najpierw poszukać kodu, a następnie po małym opóźnieniu sprawdzam, czy obydwa są włączone światła awaryjne są włączone. Jedyną trudną częścią, jaką miałem, były kierunkowskazy, ponieważ światło zgaśnie na pewien czas, więc jak odróżnić sygnał nadal włączony, ale w okresie wyłączenia, a sygnałem anulowanym? To, co wymyśliłem, polegało na zaimplementowaniu pętli opóźniającej, która ma trwać dłużej niż opóźnienie między błyskami sygnału. Jeśli kierunkowskaz jest nadal włączony, pętla sygnału będzie kontynuowana. Jeśli sygnał nie wróci po zakończeniu opóźnienia, to wraca do początku loop(). Aby dostosować długość opóźnienia, zmień liczbę dla stałej lightDelay, pamiętając, że dla każdego 1 w lightDelay opóźnienie zmienia się o 100ms.

while (digitalRead(leftTurn) == LOW) { for(int i = 0; i < lightDelay; i++) { leftTurnCheck(); if(digitalRead(leftTurn) == HIGH) { leftTurnLight(); } opóźnienie(100); } for (int i = 0; i < NUM_LEDS; i = i +3) { // To zmieni światło dla każdej trzeciej diody LED od ostatniej do pierwszej. diody[0] = CRGB(0, 0, 0); // Ustaw kolor diody LED paska 0 na wybrany kolor. } for (int i = 9; i < NUM_LEDS; i = i +3) { // To ustawi światła do jazdy, które używają tylko trzech ostatnich. diody[0] = Kolor_niski; // Ustaw kolor diody LED paska 0 na wybrany kolor. } FastLED.show(); // Powrót ustawień wyjściowych; // Gdy kierunkowskaz nie jest już włączony, wróć do pętli. }

Mam nadzieję, że reszta kodu jest oczywista. To tylko powtarzający się zestaw sprawdzania i działania na sygnałach.

Krok 4: Wyniki

Wyniki
Wyniki

Niesamowite było to, że ten system zadziałał, gdy po raz pierwszy podłączyłem go do roweru. Teraz, żeby być uczciwym, wcześniej mocno przetestowałem to na ławce, ale nadal spodziewałem się problemu lub korekty. Okazuje się, że nie musiałem wprowadzać żadnych poprawek w kodzie i połączeniach. Jak widać na filmie, system przechodzi przez sekwencję startową (której nie musisz mieć), a następnie domyślnie włącza światła do jazdy. Następnie szuka hamulców, w którym to przypadku zapala wszystkie diody LED do pełnej jasności i miga je raz, zanim pozostanie włączone, aż hamulce zostaną zwolnione. Kiedy używany jest kierunkowskaz, wykonałem efekt przewijania dla strony, na której wskazany jest skręt, a druga strona będzie albo światłami do jazdy, albo światłami hamowania, jeśli są włączone. Światła awaryjne będą po prostu migać w rytm innych świateł.

Mam nadzieję, że dzięki tym dodatkowym światłom będę bardziej widoczny dla innych ludzi. Przynajmniej jest to miły dodatek, dzięki któremu moje pudełko wyróżnia się nieco bardziej niż inne, zapewniając jednocześnie użyteczność. Mam nadzieję, że ten projekt przyda się również komuś innemu, nawet jeśli nie pracuje on z oświetleniem kufra górnego motocykla. Dziękuję!

Zalecana: