Popularny post Programista3 Napisano Styczeń 12, 2019 Popularny post Udostępnij Napisano Styczeń 12, 2019 Sześciany LED są na tyle popularne że ich budowa jest bardzo łatwa (ogromna ilość poradników pokazujących krok po kroku co zrobić) i przez to nudna 😕. Ponieważ wolę wymyślić coś samemu niż zbudować to co pojawiało się już wielokrotnie postanowiłem wykorzystać diody w inny sposób. Wpadłem na pomysł żeby było to coś związanego ze świętami i zdecydowałem się na gwiazdę 🌟. Tak wygląda efekt końcowy: Prezentacja wideo Budowa Gwiazda składa się z 40 diod połączonych katodami tak, że tworzą kształt gwiazdy. Konstrukcja umieszczona jest na kartonowym szablonie. Do sterowania diodami użyłem 5 połączonych rejestrów przesuwnych 74HC595. Każdej diodzie odpowiada również jeden rezystor 1kΩ. Układ zlutowałem na płytce uniwersalnej. Gwiazda jest podłączona do układu za pomocą przewodów połączeniowych żeńsko-męskich. Nie wygląda to zbyt ładnie ale konstrukcję można szybko zdemontować a układu użyć do sterowania innymi rzeczami. W płytkę można również wpiąć 4 tranzystory i sterować 4 warstwami np. sześcianu led. Obwód prezentuje się następująco: Całością steruje Cytron Maker Uno. Podłączenie połączonych rejestrów przesuwnych Rejestry łączymy w następujący sposób: VCC i MR (10 pin rejestru) do 5V GND i OE (13 pin rejestru) do GND DS (14 pin rejestru) pierwszego rejestru do 11 pinu Cytrona ST_CP (12 pin rejestru) wszystkich rejestrów do 10 pinu Cytrona SH_CP (11 pin rejestru) wszystkich rejestrów do 12 pinu Cytrona Q7" do pinu DS kolejnego rejestru Q0 - Q7 do kolejnych diod Oprogramowanie Gwiazdą steruję wysyłając 5 bajtów (1 bajt dla każdego rejestru). Kolejne bity w przesłanym bajcie odpowiadają stanowi kolejnych wyjść rejestru. Trzeba pamiętać, że bajty są przekazywane między rejestrami w taki sposób, że pierwszy bajt trafia do ostatniego rejestru, drugi do przedostatniego itd. Deklaracja pinów które będą użyte do komunikacji z rejestrami: int latchPin = 10; int clockPin = 12; int dataPin = 11; Do ustawiania stanu diod używam dwóch funkcji. Funkcja writeBytes wysyła po kolei otrzymane bajty. Bajty przekazujemy do funkcji jako tablicę liczb (wartość bajtu zapisana dziesiętnie) np. jeśli przekażemy do funkcji 5 wartości 255 wszystkie 40 diod zacznie się świecić ponieważ każdy rejestr otrzyma wartość 11111111. void writeBytes(int bytes[], int numberOfBytes) { digitalWrite(latchPin, LOW); for(int i=0; i<numberOfBytes; i++) { registerState[i] = bytes[i]; shiftOut(dataPin, clockPin, MSBFIRST, bytes[i]); } digitalWrite(latchPin, HIGH); } Funkcja writePin jest prostsza w użyciu, wystarczy podać numer diody (w tym przypadku od 0 do 39) i stan diody (LOW/HIGH). Funkcja odpowiednio zaktualizuje wartości i je wyśle włączając lub wyłączając diodę o podanym numerze. void writePin(int pin, bool state){ int reg = pin / 8; int actualPin = pin - (8 * reg); digitalWrite(latchPin, LOW); for (int i=numOfRegisters; i>=0; i--) { if (i == reg){ bitWrite(registerState[i], actualPin, state); } shiftOut(dataPin, clockPin, MSBFIRST, registerState[i]); } digitalWrite(latchPin, HIGH); } Z użyciem powyższych funkcji można już pisać różne efekty. Dla przykładu funkcja wypełniająca gwiazdę losowo wyglądają następująco: void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void effectJ(int d) { clear(); int state[8*numOfRegisters]; for(int i=0; i<8*numOfRegisters; i++) { state[i] = i; } int r; for(int i=8*numOfRegisters-1; i>0; i--) { r = random(0, i); swap(&state[i], &state[r]); } for(int i=0; i<8*numOfRegisters; i++) { writePin(state[i], HIGH); delay(d); } } Kompletny kod znajduje się w załączniku. Shift_Registers.rar 4 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Styczeń 13, 2019 Udostępnij Styczeń 13, 2019 @Programista3, właśnie zaakceptowałem Twój opis, możesz go teraz zgłosić do akcji rabatowej umieszczając link w temacie zbiorczym. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum 🙂 Link do komentarza Share on other sites More sharing options...
redvbl Kwiecień 10, 2023 Udostępnij Kwiecień 10, 2023 Ja coś takiego mam Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »