Skocz do zawartości

Pomocna odpowiedź

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:

IMG_20190112_123051.thumb.jpg.34023fc514cc0bbab3a4321e8993ffff.jpg

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.

IMG_20190112_115214.thumb.jpg.85140e7a084ab0c71e9cbb6ad0443c23.jpg

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.

IMG_20190112_122811.thumb.jpg.d45b6a29b37d91ff7fd8bbbe2b2924c4.jpg

Obwód prezentuje się następująco:

LED_Star_schemat.thumb.png.89448ac772ef770b7f12262c94a6129b.png

Całością steruje Cytron Maker Uno.

IMG_20190112_120134.thumb.jpg.147852c302ad84837f49530e958af861.jpg

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.

IMG_20190112_114955.jpg IMG_20190112_122719.jpg

Shift_Registers.rar

  • Lubię! 2
Link to post
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.