Spisu treści:

Lampka sygnalizacyjna roweru: 10 kroków (ze zdjęciami)
Lampka sygnalizacyjna roweru: 10 kroków (ze zdjęciami)

Wideo: Lampka sygnalizacyjna roweru: 10 kroków (ze zdjęciami)

Wideo: Lampka sygnalizacyjna roweru: 10 kroków (ze zdjęciami)
Wideo: Czy Wasi faceci też zamieniają się w Kubicę kiedy tylko zobaczą serpentyny? #kierowca #góry #żołądek 2024, Listopad
Anonim
Ręczne światło sygnalizacyjne roweru
Ręczne światło sygnalizacyjne roweru

Celem tego projektu jest stworzenie światła, które pasuje do rękawicy rowerowej i wskazuje w kierunku zamierzonego skrętu, aby zwiększyć widoczność w nocy. Powinien być lekki, łatwy w użyciu i zintegrowany z istniejącymi ruchami do sygnalizacji (minimalne podkręcenie metody sygnału (nie musisz naciskać przycisku, po prostu idzie, gdy sygnalizujesz)). To byłby świetny prezent świąteczny.

Uwaga: Wymaga to wcześniejszej znajomości sposobu lutowania i pomysłu na programowanie AVR jest dużym plusem. Mając to na uwadze, baw się dobrze, bądź cierpliwy i opublikuj zdjęcia swojego produktu poniżej! Oto wideo: A oto moje zdjęcie:

Krok 1: Części

Części
Części

x1 ATmega 32L 8PU (www.digikey.com)x1 40-pinowe gniazdo DIP (www.digikey.com)x1 8x8 LED Array (www.sparkfun.com)x1 74138 De-multiplekser (www.digikey.com)x2 Flex Sensors (www.sparkfun.com)x(Wiele) Rezystory 180 omów i 10 tys. www.sparkfun.com)x2 Headers - męskie (www.sparkfun.com), żeńskie (www.sparkfun.com) i kątowe (www.sparkfun.com)x1 LM7805 (www.digikey.com)x2 8-pinowe gniazda (Mam swoją w Radio Shack) x1 bateria 9vx1 naklejana stopka na rzepx1 rękawica rowerowa z pełnymi palcamix1 szpula poliestrowa nićx1 programator (mam ten)x1 ściągacz izolacji i klipsx1 multimetr Niektóre części:

Krok 2: Przygotuj tablice

Przygotuj tablice
Przygotuj tablice
Przygotuj tablice
Przygotuj tablice
Przygotuj tablice
Przygotuj tablice
Przygotuj tablice
Przygotuj tablice

Najpierw dodaj dystanse. Będziesz musiał skręcić dwa ze sobą, aby uzyskać odpowiednią wysokość. Upewnij się, że wypustki opadają z boku z klockami KWADRATOWYMI. W ten sposób możesz zmostkować pady z lutem na dole i zmostkować ze wspólnym padem na górze, aby połączyć się z masą. Następnie dodaj tablicę LED i wlutuj ją. Powinna być tak daleko od krawędzi płyty z dwoma słupkami, jak to możliwe, gdy YS jest skierowany w przeciwną stronę. Pin w lewym dolnym rogu to pin 1. (jest również zaznaczony na rysunku). Następnie dodaj dwa 8-pinowe gniazda jedno na drugim, aby utworzyć jedno 16-pinowe gniazdo. Upewnij się, że masz jedno miejsce po lewej stronie, a następnie wlutuj je. Następnie podziel męskie i żeńskie nagłówki na sekcje 10 i 11 pinów. Będziesz potrzebować dwa razy więcej żeńskich nagłówków. Przylutuj te, jak widać na zdjęciu. Jeśli chodzi o męskie główki, musisz przesunąć pinezkę tak, aby były równe po obu stronach plastiku. Najłatwiej jest spojrzeć na zdjęcie, żeby zobaczyć, co mam na myśli, więc spójrz na #6. Użyłem szczypiec i zadziałało całkiem dobrze. Teraz, jeśli weźmiesz męskie nagłówki i umieścisz je między 2 żeńskimi nagłówkami, zobaczysz, że mają teraz odpowiedni rozmiar, aby połączyć ze sobą górną i dolną płytę.

Krok 3: Dodaj rezystory

Dodaj rezystory
Dodaj rezystory
Dodaj rezystory
Dodaj rezystory
Dodaj rezystory
Dodaj rezystory

Rezystory te znajdują się między macierzą LED a 74138 (uziemieniem), aby chronić macierz. Złóż jeden z wyprowadzeń rezystora na górze, tak aby oba wyprowadzenia były równoległe. Zamontuj je na pinach 7, 9, 10, 11, 12, 13, 14 i 15 i przylutuj. Odkryłem, że działa najlepiej, jeśli zmienisz kierunek rezystora, jak widać na drugim i trzecim zdjęciu.

Krok 4: Podłącz górną część

Drut na górze
Drut na górze
Drut na górze
Drut na górze
Drut na górze
Drut na górze
Drut na górze
Drut na górze

To zdecydowanie najdłuższy etap projektu, więc mam nadzieję, że lubisz lutować! Po prostu postępuj zgodnie ze schematem poniżej i upewnij się, że testujesz ciągłość za pomocą multimetru. Jeśli chcesz wiedzieć, jak przyszedłem ze schematem, spójrz na arkusz danych dla tablicy i 74138.

Krok 5: Wypełnij dno

Wypełnij dno
Wypełnij dno
Wypełnij dno
Wypełnij dno
Wypełnij dno
Wypełnij dno
Wypełnij dno
Wypełnij dno

Teraz nadszedł czas na umieszczenie naszych podstawowych komponentów na dolnej płycie. Najpierw zrobimy 40-pinowe gniazdo DIP, które znajduje się jak najbliżej lewego górnego rogu, pozostawiając jeden rząd miejsca po lewej stronie. (Patrz rysunek nr 1.) Przylutuj to, a następnie umieść nagłówki. Najłatwiej to zrobić, łącząc te na górze z tymi, które znajdą się na dole za pomocą zmodyfikowanych męskich nagłówków. Jeśli zrobiłeś wszystko dobrze, powinieneś skończyć z trzema górnymi pinami na lewym nagłówku obok prawych dolnych pinów na gnieździe. To jest wporządku. Używamy tylko najniższej szpilki po prawej stronie i jak widać, mamy na nią wyraźny strzał z innego kierunku. Teraz dodaj regulator napięcia, jak pokazano na rysunku. Swoją zabezpieczyłem przez otwór w metalowym radiatorze śrubą i nakrętką. Radiator to kolejny sposób na uziemienie chipa, a przykręcenie go do płyty zapewnia solidny kontakt ze wspólnym połączeniem. Jest on połączony zarówno z dołem, jak iz górą, ponieważ oba są połączone metalowymi wspornikami. Jeśli jednak nie używasz wspólnego połączenia z uziemieniem, NIE przykręcaj radiatora do płyty, ponieważ radiator służy jako uziemienie i prawdopodobnie spowodujesz zwarcie. Kolejny przewód w zacisku akumulatora. Czerwony idzie do pinu po lewej stronie (z radiatorem do góry i pinami w dół) czarny do środka, a prawy pin daje +5v. Teraz możesz podłączyć zasilanie do góry (patrz obrazek #2). Teraz dla łącznika programisty. Mam adapter, który zrobiłem dla mojego programisty, ale prawdopodobnie będziesz chciał włączyć do swojego projektu 6-stykowe (3x2) złącze. Jeśli jednak masz adapter taki jak ja, oto co zrobiłem. Wziąłem głowicę kątową i głowicę żeńską i przylutowałem je razem (Zdjęcie #3). Następnie dołączyłem go do płytki z pierwszym pinem podłączonym do pinu 6. Teraz musisz zasilić i uziemić układ, a także okablowanie w rezystorze, aby podnieść reset w górę. Uruchomiłem rezystor 10k od pinu 9 do pinu 10, a następnie podłączyłem pin 10 do +5V. Kolejny pin (11) idzie do wspólnego połączenia (masa). Na koniec spójrz na obrazek nr 4, aby zakończyć ten krok (to dość oczywiste).

Krok 6: Podłącz spód

Drut na dole
Drut na dole
Drut na dole
Drut na dole
Drut na dole
Drut na dole

Pamiętasz ten naprawdę zabawny krok, w którym musisz uruchomić ponad 30 przewodów, aby uruchomić matrycę LED? Teraz możesz to zrobić ponownie! Na dole!. Ten jest trochę szybszy, ale nie za bardzo. Jeszcze raz spójrz na schemat i sprawdź wszystkie połączenia za pomocą multimetru. Nie martw się, to ostatni duży element lutowniczy projektu i prawie gotowe.

Krok 7: Czujniki Flex i akcelerometr

Czujniki Flex i akcelerometr
Czujniki Flex i akcelerometr
Czujniki Flex i akcelerometr
Czujniki Flex i akcelerometr
Czujniki Flex i akcelerometr
Czujniki Flex i akcelerometr

Najpierw zajmiemy się czujnikami flexu, ale jeśli chodzi o sprzęt, jesteś w domu. Myślę, że poniższe zdjęcia dość dobrze wyjaśniają, co robić. Podłącz jeden pin do +5v drugi do trzeciego lub czwartego pinu od góry po prawej stronie AVR (mikrokontroler w sercu tego projektu). Kiedy po raz pierwszy to złożyłem, pomyślałem, że to wszystko, co muszę zrobić, ale okazuje się, że aby AVR mógł odczytać czujniki flexu, musisz umieścić rezystor z pinu na czujniku idącego do AVR do masy (patrz zdjęcia # 10 i 11). Użyłem 10k. Dzieli to napięcie trafiające do AVR, co praktycznie podwaja czułość czujnika. Teraz przejdźmy do akcelerometru. Ponieważ akcelerometr jest tylko o włos wyższy niż przestrzeń między dwiema płytami i ponieważ być może pewnego dnia będziemy chcieli go wymienić, zdecydowałem się użyć nagłówków, aby wybić go z płytki i podłączyć. Użyj nagłówka pod kątem prostym, aby połączyć się z 6 pinami na tablicy zaciskowej. Teraz weź kolejną głowicę kątową i przylutuj żeńską głowicę do krótkich kołków, a następnie przylutuj ją w lewym dolnym rogu płyty. Podłącz akcelerometr, aby upewnić się, że pasuje, odłącz go, a następnie podłącz odpowiednie piny do Vcc (+5v) i Gnd. Następnie podłącz pin wysyłający X do pinu 40, a Y do pinu 39. Teraz powinieneś dodać układ scalony (układy scalone) i włączyć go.

26.12.2009: Odkryłem, że sposób zamontowania czujnika zgięcia palca wskazującego spowodował degradację materiału łączącego czujnik z pinami. Od tego czasu kupiłem zamienny czujnik i przykleiłem na gorąco kawałek cienkiego plastiku do czujnika, aby zapobiec temu, aby ten obszar był częścią najbardziej zginającą się. Oznaczyłem lokalizację na poniższym zdjęciu.

Krok 8: Dodawanie układów scalonych i pierwszego programu

Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu
Dodawanie układów scalonych i pierwszego programu

To prawdopodobnie najłatwiejszy etap całego procesu. Po raz kolejny obraz pomaga. Upewnij się, że masz żetony we właściwy sposób, jak wyjaśniono na obrazku #3. Podłączyłbym najpierw zasilanie z niczym nie podpiętym i dotknąłem radiatora na regulatorze napięcia. Jeśli jest gorąco, coś się zwiera i musisz wrócić i sprawdzić połączenia. Postępuj w ten sposób, dodając jeden żeton na raz, wyczuwając ciepło i gdy wszystko jest na swoim miejscu, dokręć nakrętki na dolnej desce, aby obie deski były bezpiecznie połączone ze sobą. Następnie zaprogramujesz AVR. Jeśli nigdy wcześniej tego nie robiłeś, szybkie wyszukiwanie w Google daje mnóstwo wyników. Gdybym był tobą, umieściłbym swój AVR na tablicy prototypowej i zaprogramował tam, zanim spróbujesz to zrobić na swojej ciężkiej pracy. Napisałem prosty program do wysyłania informacji otrzymywanych z czujników flex do tablicy LED. Powinno to dać podstawowe pojęcie o tym, co działa, a co nie działa w twoim obwodzie. Oto wideo kodu w akcji…… a oto kod: #define F_CPU 800000UL#include #include #include void ADCINIT(){ ADMUX = 0b01100000; ADCSRA = 0b10000000;}int main(){ int a; a = 0; intb; b = 0; DDRD = 0xFF; DDRB = 0xFF; DDRA = 0b11100000; ADCINIT(); while(1) {ADMUX = 0b01100011; ADCSRA |= 0b01000000; while(bit_is_clear(ADCSRA, ADIF)); PORTA = 0b00000000; PORTD = ADCH; _opóźnienie_ms(1); PORTD = 0x00; ADMUX = 0b01100010; ADCSRA |= 0b01000000; while(bit_is_clear(ADCSRA, ADIF)); PORTA = 0b11100000; PORTB = ADCH; _opóźnienie_ms(1); PORTB = 0x00; }}

Krok 9: Mocowanie obwodu do rękawiczki

Mocowanie obwodu do rękawicy
Mocowanie obwodu do rękawicy
Mocowanie obwodu do rękawicy
Mocowanie obwodu do rękawicy
Mocowanie obwodu do rękawicy
Mocowanie obwodu do rękawicy

Myślę, że istnieje wiele sposobów na przymocowanie obwodu do dłoni i przez chwilę myślałem, że zostawię to czytelnikowi, ale potem zdecydowałem, że instrukcja nie byłaby kompletna bez tego zamknięcia. Poszedłem do mojego lokalnego sklepu rowerowego i dostałem najtańszą rękawicę z pełnym palcem, jaką mogłem znaleźć. Konieczny jest pełny palec, ponieważ inaczej nie można bardzo dobrze przymocować czujników flex. Potem poszedłem do sklepu z tkaninami i kupiłem trochę poliestrowej nici i rzepów. Założyłem rękawiczkę i założyłem obwód na rękę. Częścią pozycjonowania jest wygoda, ale inną częścią są czujniki flex. Powinny iść w dół po środku dwóch palców. Uszyłem pętle wokół trzech wsporników, aby utrzymać płytę główną (patrz zdjęcie #2), a następnie zrobiłem luźne pętle 3/4 długości każdego palca czujnika flex (#3 i 4). Upewnij się, że nie zaszyłeś rękawicy zamkniętej. Następnie przykleiłem kawałek rzepa z boku kciuka, aby trzymać baterię. Po przetestowaniu odkryłam, że naprawdę opłaca się przyszyć to, ponieważ kij nie trwa zbyt długo. Następnie założyłem pętlę z rzepu na 9v (Zdjęcie 5). Ta konfiguracja wydaje się działać całkiem dobrze. Jak widać na zdjęciach na pierwszym i ostatnim slajdzie, dodałem teraz rękawy na czujniki zgięcia, ale jeśli nie masz czasu, pętle powinny wystarczyć. Kiedy skończysz swój projekt, zamieść zdjęcia gotowego produktu poniżej. Chciałbym zobaczyć, co wymyśliłeś, aby dołączyć obwód!

Krok 10: Prawdziwy kod

Prawdziwy kod
Prawdziwy kod

Dzięki za wyrozumiałość ze mną do tej pory. Proszę pamiętać, że mój kod nie jest doskonały. Odkryłem, że potrzeba trochę nauki, aby sygnał działał prawidłowo. Będę nadal próbował udoskonalać swój system i będę aktualizował tę stronę o nowy kod, gdy go napiszę. 26 grudnia 2009: NOWY KOD! Jest umieszczony tam, gdzie był stary kod. Wielkie podziękowania dla Jacoba za uproszczenie. To naprawdę dobrze działa. Oto jest. Dziękujemy za przeczytanie i nie zapomnij zagłosować! #include #include #include // Ustawia lub czyści bity w rejestrach #define setBit(sfr, bit) (sfr |= (1 << bit)) #define clearBit(sfr, bit) (sfr &= ~(1 << bit)) #define flipBit(sfr, bit) (sfr ^= (1 << bit)) #define FALSE 0 #define TRUE 1 #define matrixX(x) (PORTA = (x - 1) << 5) #define matrixGY(y) (PORTD = y) #define matrixRY(y) (PORTB = y) void delay(unsigned int delay) { unsigned int x = 0; while(x < opóźnienie) { x++; } } void initMatrix() { DDRD = 0xFF; // Zielona kontrola DDRB = 0xFF; // Czerwona kontrola DDRA = 0xE0; // Kontrola naziemna } void matrixRowDraw(char greenmask, char redmask, char column) { matrixX(column); int i = 0; for(i = 0; i < 8; i++) { macierzGY(zielona maska & (1 << i)); matrixRY(czerwona maska & (1 << i)); _delay_us(150); } macierz GY(0x00); macierzRY(0x00); } void matrixLeft() { matrixRowDraw(0x10, 0, 1); matrixRowDraw(0x20, 0, 2); matrixRowDraw(0x40, 0, 3); matrixRowDraw(0xFF, 0, 4); matrixRowDraw(0xFF, 0, 5); matrixRowDraw(0x40, 0, 6); matrixRowDraw (0x20, 0, 7); matrixRowDraw(0x10, 0, 8); } void matrixRight() { matrixRowDraw(0x18, 0, 1); matrixRowDraw (0x18, 0, 2); matrixRowDraw (0x18, 0, 3); matrixRowDraw (0x18, 0, 4); matrixRowDraw (0x99, 0, 5); matrixRowDraw(0x5A, 0, 6); matrixRowDraw(0x3C, 0, 7); matrixRowDraw (0x18, 0, 8); } void adcInit() { ADMUX = 0x60; ADCSRA = 0x80; } char adcGet(char chan) { ADMUX = 0x60 | chan; ADCSRA |= 0x40; while(bit_is_clear(ADCSRA, ADIF)); powrót ADCH; } char adcAvg(char chan, char avgnum) // Średnie tylko do 256 próbek { int i = 0; unsigned int total = 0; for(i = 0; i < śr.; i++) { total += adcGet(chan); } zwróć sumę/śr.; } int main() { initMatrix(); adcInit(); while(1) { while(adcAvg(3, 50) > 0x45 & adcAvg(2, 50) > 0x70) // Wartości szesnastkowe powinny zostać zmienione w zależności od ustawień użytkownika, aby określić czułość czujników flex. { if(adcAvg(1, 50) > 0x4F) { matrixRight(); } if(adcAvg(1, 100) < 0x4F) { matrixLeft(50); } } } return 0; } Specjalne podziękowania dla Chamberlains, moich rodziców i przyjaciół, którzy pomogli.

Finalista konkursu Homemade Holidays

Zalecana: