Spisu treści:

Zbuduj interaktywny most Rainbow za pomocą Minecraft Raspberry Pi Edition: 11 kroków
Zbuduj interaktywny most Rainbow za pomocą Minecraft Raspberry Pi Edition: 11 kroków

Wideo: Zbuduj interaktywny most Rainbow za pomocą Minecraft Raspberry Pi Edition: 11 kroków

Wideo: Zbuduj interaktywny most Rainbow za pomocą Minecraft Raspberry Pi Edition: 11 kroków
Wideo: Ешь. Бухай. Бури ► 1 Прохождение Deep Rock Galactic 2024, Listopad
Anonim
Image
Image

Wczoraj zobaczyłem mojego 8-letniego siostrzeńca grającego w Minecrafta przy pomocy Raspberry Pi, które mu wcześniej podarowałem, potem wpadłem na pomysł, który polega na wykorzystaniu kodu do wykonania niestandardowego i ekscytującego projektu klocków LED Minecraft-pi. Minecraft Pi to świetny sposób na rozpoczęcie pracy z mikrokomputerem Raspberry Pi. Minecraft Pi to specjalna, wykonana na zamówienie wersja Minecrafta, która pozwala nam na interakcję z grą za pomocą śmiertelnie prostego interfejsu API Pythona, aby dostosować wrażenia z gry i rekwizyty!

Istnieje wiele projektów, które możesz wykonać w świecie Minecrafta za pomocą Raspberry Pi, ale konkretnie dla nas to nie wystarczyło, szukaliśmy czegoś wymagającego i jednocześnie migającego. W tym projekcie wejdziemy na wiele bloków Minecraft, wykryjemy identyfikator bloku i wykryjemy kolor konkretnego bloku, na który nadepnęliśmy, w oparciu o kolor, który zapalimy naszą diodę LED RGB, aby stworzyć interaktywną grę kroków!

Do uzyskania efektu wykorzystam dwie metody, pierwsza to użycie akcesoriów, które mogą być bardzo chaotyczne…; drugi to CrowPi2 (uczący się komputer z wieloma czujnikami, obecnie finansowany na Kickstarterze:CrowPi2)

zacznijmy i zobaczmy, jak zarchiwizować tak niesamowity projekt!

Kieszonkowe dzieci

CrowPi2 jest teraz dostępny na kickstarterze, projekt CrowPi2 zebrał prawie 250 tys.

Kliknij link:

Metoda 1 Korzystanie z akcesoriów

Krok 1: Materiały

● 1 x Raspberry Pi 4 model B

● 1 x karta TF z obrazem

● 1 x zasilacz Raspberry Pi

● 1 monitor o przekątnej 10,1 cala

● 1 x Zasilanie monitora

● 1 x kabel HDMI

● 1 x klawiatura i mysz

● 1 x dioda RGB (wspólna katoda)

● 4 x zworki (kobieta do kobiety)

Krok 2: Schemat połączeń

Diagram połączeń
Diagram połączeń

W kolorowej diodzie LED RGB są właściwie trzy światła, które są światłem czerwonym, zielonym i niebieskim. Kontroluj te trzy światła, aby emitować światło o różnej intensywności, a po zmieszaniu mogą emitować światło o różnych kolorach. Cztery piny na lampce LED to odpowiednio GND, R, G i B. Użyta przeze mnie dioda RGB jest wspólną katodą, a połączenie z Raspberry Pi wygląda następująco:

RaspberryPi 4B (w nazwie funkcji) LED RGB

GPIO0 1 CZERWONY

GPIO1 3 ZIELONY

GPIO2 4 NIEBIESKI

GND 2 GND

Drugie zdjęcie to połączenie sprzętowe

Krok 3: Skonfiguruj dla SPI

Skonfiguruj dla SPI
Skonfiguruj dla SPI
Skonfiguruj dla SPI
Skonfiguruj dla SPI
Skonfiguruj dla SPI
Skonfiguruj dla SPI
Skonfiguruj dla SPI
Skonfiguruj dla SPI

Ponieważ musimy używać SPI do sterowania RGB, musimy najpierw włączyć interfejs SPI, który jest domyślnie wyłączony. Możesz wykonać poniższe kroki, aby włączyć interfejs SPI:

Po pierwsze, możesz użyć graficznego interfejsu użytkownika pulpitu, przechodząc do menu startowego Pi Konfiguracja Raspberry Pi, jak pokazano na pierwszym obrazku.

Po drugie, przejdź do „Interfejsów” i włącz SPI, a następnie kliknij OK (drugi obrazek).

Na koniec uruchom ponownie Pi, aby upewnić się, że zmiany zaczną obowiązywać. Kliknij menu Start PiPreferencjeZamknij. Ponieważ wystarczy ponownie uruchomić, kliknij przycisk Uruchom ponownie.

Krok 4: Kodeks

Zaczniemy od napisania naszego kodu Pythona, najpierw zaimportujemy kilka bibliotek, których będziemy potrzebować, aby zintegrować nasz kod ze światem Minecraft. Następnie zaimportujemy bibliotekę czasu, a konkretnie funkcję o nazwie sleep. Funkcja uśpienia pozwoli nam odczekać określony interwał przed wykonaniem funkcji. Na koniec importujemy bibliotekę RPi. GPIO, która pozwala nam kontrolować GPIO na Raspberry Pi.

z mcpi.minecraft import Minecraft z czasów import sleep import RPi. GPIO jako GPIO

I to wszystko, skończyliśmy z importowaniem bibliotek, teraz czas z nich korzystać! Pierwszą rzeczą jest skorzystanie z biblioteki Minecraft, chcemy podłączyć nasz skrypt Pythona do świata Minecraft, możemy to zrobić, wywołując funkcję init() biblioteki MCPI, a następnie ustawić tryb GPIO i wyłączyć ostrzeżenie.

mc = Minecraft.create()GPIO.setmode(GPIO. BCM) GPIO.setwarnings(0)

Teraz zdefiniujemy kilka kolorów tęczy w systemie szesnastkowym, abyśmy mogli zmieniać kolory RGB.

BIAŁY = 0xFFFFFF CZERWONY = 0xFF0000 POMARAŃCZOWY = 0xFF7F00 ŻÓŁTY = 0xFFFF00 ZIELONY = 0x00FF00 NIEBIESKI = 0x00FFFF NIEBIESKI = 0x0000FF FIOLETOWY = 0xFF00FF MAGENTA = 0xFF0090

Następnie musimy zdefiniować kilka zmiennych, aby zarejestrować kolor bloku wełny, który jest już zdefiniowany na liście bloków Minecraft.

W_BIAŁY = 0 W_CZERWONY = 14 W_POMARAŃCZOWY = 1 W_ŻÓŁTY = 4 W_ZIELONY = 5 W_CYJAN = 9 W_NIEBIESKI = 11 W_FIOLETOWY = 10 W_MAGENTA = 2

ID bloku wełny w Minecrafcie to 35. Teraz musimy skonfigurować pin dla diody RGB i ustawić dla nich.

czerwony_pin = 17 zielony_pin = 18 niebieski_pin = 27

GPIO.setup(red_pin, GPIO. OUT, initial=1) GPIO.setup(green_pin, GPIO. OUT, initial=1) GPIO.setup(blue_pin, GPIO. OUT, initial=1)

Następnie skonfiguruj PWM dla każdego pinu, zauważ, że zakres wartości PWM wynosi 0-100. Tutaj najpierw ustawiamy kolor RGB led na biały (100, 100, 100).

czerwony = GPIO. PWM(czerwony_pin, 100)

zielony = GPIO. PWM(zielony_pin, 100)niebieski = GPIO. PWM(niebieski_pin, 100) czerwony.start(100) zielony.start(100) niebieski.start(100)

Poniżej jest stworzenie dwóch funkcji, które mogą być użyte do dekodowania koloru i podświetlenia diody RGB! Zauważ, że funkcja map2hundred() ma mapować wartości od 255 do 100, jak wspomnieliśmy wcześniej, wartość PWM powinna wynosić 0-100.

def map2hundred(wartość): return int(wartość * 100 / 255)

def set_color(kod_koloru): # Decode wartość_czerwona = kod_koloru >> 16 i 0xFF wartość_zielona = kod_koloru >> 8 i 0xFF wartość_niebieskiej = kod_koloru >> 0 i 0xFF

# Mapuj wartości czerwona_wartość = mapa2hundred(czerwona_wartość) zielona_wartość = mapa2hundred(zielona_wartość) niebieska_wartość = mapa2hundred(niebieska_wartość)

# Zapalić! red. ChangeDutyCycle(czerwona_wartość) zielony. ChangeDutyCycle(zielona_wartość) niebieski. ChangeDutyCycle(niebieska_wartość)

Bardzo dobrze! Czas uruchomić nasz program główny, poczekać, należy zdefiniować inną zmienną, aby zapisać kod koloru bloku wełny przed programem głównym:

last_data = 0 try: x, y, z = mc.player.getPos() mc.setBlocks(x, y, z, x+1, y, z+2, 35, 14) mc.setBlocks(x+2, y+1, z, x+3, y+1, z+2, 35, 11) mc.setBlocks(x+4, y+2, z, x+5, y+2, z+2, 35, 2) mc.setBlocks(x+6, y+3, z, x+7, y+3, z+2, 35, 5) mc.setBlocks(x+8, y+4, z, x+9, y+4, z+2, 35, 4) mc.setBlocks(x+10, y+5, z, x+11, y+5, z+2, 35, 10) mc.setBlocks(x+12, y+6, z, x+13, y+6, z+2, 35, 1) mc.setBlocks(x+14, y+5, z, x+15, y+5, z+2, 35, 10) mc.setBlocks(x+16, y+4, z, x+17, y+4, z+2, 35, 4) mc.setBlocks(x+18, y+3, z, x+19, y+3, z+2, 35, 5) mc.setBlocks(x+20, y+2, z, x+21, y+2, z+2, 35, 2) mc.setBlocks(x+22, y+1, z, x+23, y+1, z+2, 35, 11) mc.setBlocks(x+24, y, z, x+25, y, z+2, 35, 14) podczas gdy prawda: x, y, z = mc.player.getPos() # pozycja gracza (x, y, z) block = mc.getBlockWithData(x, y-1, z) # identyfikator bloku #print(block) if block.id == WOOL i last_data != block.data: if block.data == W_RED: print("Czerwony!") set_color(RED) if block.data == W_ORANGE: print("Pomarańczowy!") set_color(ORANGE) if blok.dane == W_ ŻÓŁTY: print("Żółty!") set_color(ŻÓŁTY) if block.data == W_GREEN: print("Zielony!") set_color(ZIELONY) if block.data == W_CYAN: print("Cyan!") set_color(CYAN) if block.data == W_BLUE: print("Niebieski!") set_color(BLUE) if block.data == W_PURPLE: print("Fioletowy!") set_color(PURPLE) if block.data == W_MAGENTA: print(" Magenta!") set_color(MAGENTA) if block.data == W_WHITE: print("Biały!") set_color(WHITE) last_data = block.data sleep(0.05) z wyjątkiem KeyboardInterrupt: pass GPIO.cleanup()

Jak pokazano powyżej, aby użyć poleceń do wygenerowania kolorowych klocków wełnianych, musimy znaleźć pozycję gracza, aby uzyskać identyfikator klocków i jego kod koloru. Po uzyskaniu informacji o klocku użyjemy instrukcji do określenia, czy klocek pod graczem jest klockiem wełnianym i czy ma kod koloru. Jeśli tak, oceń jaki kolor ma blok wełny i wywołaj funkcję set_color(), aby zmienić kolor diody RGB tak samo jak blok wełny.

Ponadto dodajemy instrukcję try/except, aby przechwycić wyjątek przerwania użytkownika, gdy chcemy wyjść z programu, aby wyczyścić wyjście pinów GPIO.

W załączniku znajduje się kompletny kod.

Dobra robota, tyle akcesoriów i zbyt skomplikowane, prawda? Nie martw się, zobaczmy drugi sposób na realizację projektu, który sprawi, że poczujesz się bardziej elastyczny i wygodny, czyli skorzystanie z naszego CrowPi2!

Krok 5: Wynik

Image
Image

Otwórz grę i uruchom skrypt, wynik zobaczysz na powyższym filmie

Następnie użyjemy CrowPi2 do zbudowania interaktywnego mostu Rainbow

Krok 6: Korzystanie z materiałów CrowPi2-Materiały

●1 x CrowPi2

Krok 7: Korzystanie z CrowPi2 – schemat połączeń

Nie ma potrzeby. W CrowPi2 znajduje się wiele przydatnych czujników i komponentów (ponad 20), a wszystko to w jednym laptopie raspberry pi i platformie edukacyjnej STEM, która pozwala nam wykonywać wiele projektów z łatwością i bez potu! W tym przypadku zastosujemy atrakcyjny i kolorowy moduł na CrowPi2, który jest modułem matrycowym 8x8 RGB, który pozwala nam sterować jednocześnie 64 diodami RGB!

Krok 8: Korzystanie z CrowPi2-Konfiguruj dla SPI

Nie ma potrzeby. CrowPi2 ma wbudowany obraz z systemem uczenia! Wszystko zostało przygotowane, co oznacza, że możesz programować i uczyć się bezpośrednio. Poza tym dzięki naszemu CrowPi2 jest to łatwe i już zintegrowane z płytą jako platforma STEAM gotowa do pracy.

Krok 9: Korzystanie z CrowPi2 – kod

Teraz czas rozpocząć nasz program! Najpierw zaimportuj kilka bibliotek, takich jak biblioteka MCPI, która jest biblioteką Minecraft Pi Python, która pozwala nam korzystać z bardzo prostego interfejsu API do integracji ze światem Minecraft; biblioteka czasu, która pozwala nam na odczekanie określonego interwału przed wykonaniem funkcji; Biblioteka RPi. GPIO pozwalająca na sterowanie pinami GPIO Raspberry Pi.

z mcpi.minecraft import Minecraft z czasów import sleep import RPi. GPIO jako GPIO

Na koniec zaimportujemy bibliotekę o nazwie rpi_ws281x, która jest biblioteką RGB Matrix, wewnątrz biblioteki znajduje się wiele funkcji, których użyjemy, takich jak PixelStrip, aby skonfigurować obiekt taśmy LED i Color, aby skonfigurować obiekt koloru RGB do włączenia światła nasze diody LED RGB

z rpi_ws281x importuj PixelStrip, Color

I to wszystko, skończyliśmy z importowaniem bibliotek, teraz czas z nich korzystać! Tak samo, pierwszą rzeczą jest użycie biblioteki Minecraft, chcemy połączyć nasz skrypt Pythona ze światem Minecraft, możemy to zrobić, wywołując funkcję init biblioteki MCPI:

mc = Minecraft.utwórz()

Teraz za każdym razem, gdy chcemy wykonać operacje na świecie minecrat, możemy użyć obiektu mc.

Następnym krokiem będzie zdefiniowanie klasy matrycy LED RGB, której będziemy używać do sterowania naszymi diodami RGB, inicjujemy klasę z podstawową konfiguracją, taką jak liczba diod, piny, jasność itp…

tworzymy funkcję o nazwie clean, która „czyści” mniej z określonym kolorem, a także funkcję o nazwie run, która zainicjuje rzeczywisty obiekt LED RGB przy pierwszym użyciu.

klasa RGB_Matrix:

def _init_(self):

# Konfiguracja taśmy LED:

self. LED_COUNT = 64 # Liczba pikseli LED.

self. LED_PIN = 12 # pin GPIO podłączony do pikseli (18 wykorzystuje PWM!).

self. LED_FREQ_HZ = 800000 # Częstotliwość sygnału LED w hercach (zwykle 800khz)

self. LED_DMA = 10 # kanał DMA do wykorzystania do generowania sygnału (spróbuj 10)

self. LED_BRIGHTNESS = 10 # Ustaw na 0 dla najciemniejszego i 255 dla najjaśniejszego

self. LED_INVERT = False # Prawda, aby odwrócić sygnał

self. LED_CHANNEL = 0 # ustawione na '1' dla GPIO 13, 19, 41, 45 lub 53

# Zdefiniuj funkcje, które animują diody LED na różne sposoby. def clean(self, strip, color):

# wyczyść wszystkie diody na raz

for i in range(strip.numPixels()):

strip.setPixelColor(i, kolor)

strip.show()

def run(self):

# Utwórz obiekt NeoPixel z odpowiednią konfiguracją.

pasek = pasek pikseli(self. LED_COUNT, własny. LED_PIN, własna. LED_FREQ_HZ, własna. LED_DMA, self. LED_INVERT, self. LED_BRIGHTNESS, własny. LED_KANAŁ)

próbować:

pasek powrotny

z wyjątkiem KeyboardInterrupt:

# wyczyść matrycę LED przed przerwaniem

samooczyszczanie (pasek)

Po wykonaniu powyższych czynności, nadszedł czas na wywołanie tych klas i utworzenie obiektów, których możemy użyć w naszym kodzie, najpierw stwórzmy obiekt matrycy LED RGB, z którego będziemy mogli korzystać za pomocą stworzonej wcześniej klasy:

obiekt macierzy = macierz_RGB()

Teraz wykorzystajmy ten obiekt do stworzenia aktywnego obiektu taśmy LED, którego użyjemy do sterowania naszymi indywidualnymi diodami LED na matrycy RGB:

pasek = matrixObject.run()

Na koniec, aby aktywować ten pasek, musimy uruchomić ostatnią funkcję:

pasek.rozpocznij()

Interfejs API Minecraft zawiera wiele bloków, każdy blok Minecraft ma swój własny identyfikator. W naszym przykładzie wzięliśmy pewną ilość klocków Minecrafta i próbowaliśmy odgadnąć, który kolor jest dla nich najbardziej odpowiedni.

RGB oznacza czerwony, zielony i niebieski, więc będziemy potrzebować 3 różnych wartości z zakresu od 0 do 255 dla każdej z nich, kolory mogą być w formacie HEX lub RGB, w naszym przykładzie używamy formatu RGB.

W świecie Minecraft Pi istnieją identyfikatory normalnych bloków i specjalne identyfikatory bloków wełny, specjalna wełna ma numer ID 35, ale z podnumerami sięgającymi wielu różnych identyfikatorów… Rozwiążemy ten problem, tworząc 2 oddzielne listy, jedną dla normalnych bloków oraz jeden wykaz specjalnych bloków wełnianych:

Pierwsza lista dotyczy normalnych bloków, na przykład 0 reprezentuje blok powietrza, ustawimy go na kolor 0, 0, 0, który jest pusty lub całkowicie biały, gdy gracz będzie skakał lub latał w grze, RGB wyłączy się, 1 to inny blok z kolorem RGB 128, 128, 128 i tak dalej…

#Kolory tęczy

kolory_tęczy = {

"0":Kolor(0, 0, 0), "1": Kolor (128, 128, 128), "2":Kolor (0, 255, 0), "3": Kolor (160, 82, 45), „4”: Kolor (128, 128, 128), "22":Kolor(0, 0, 255)

}

W przypadku bloków wełnianych robimy to samo, ale należy pamiętać, że wszystkie bloki mają ID 35, na tej liście definiujemy podtypy bloku, którym jest blok wełniany. Różne podtypy wełny mają różne kolory, ale wszystkie są wełnianymi blokami.

kolory_wełny = {

"6":Kolor (255, 105, 180), "5":Kolor (0, 255, 0), "4":Kolor (255, 255, 0), "14":Kolor (255, 0, 0), "2":Kolor (255, 0, 255)

}

Teraz, gdy skończymy definiować nasz główny program, klasy i funkcje, nadszedł czas na integrację z naszym wbudowanym czujnikiem CrowPi2 RGB LED.

Główny program przejmie zdefiniowane przez nas wcześniej parametry i wpłynie na sprzęt.

Zamierzamy użyć diody LED CrowPi2 RGB, aby oświetlić je na podstawie kroków, które wykonujemy wewnątrz Minecraft Pi na każdym bloku, zaczynajmy!

Pierwszą rzeczą, którą zrobimy, jest wygenerowanie kilku bloków wełnianych z poleceniami i utworzenie pętli while, aby program działał tak długo, jak długo gramy w grę.

Będziemy potrzebować danych od gracza, najpierw używamy polecenia player.getPos(), aby uzyskać pozycję gracza, a następnie używamy getBlockWithData(), aby uzyskać blok, na którym obecnie stoimy (współrzędna y wynosi -1, co oznacza pod odtwarzaczem)

x, y, z= mc.player.getPos()

mc.setBlocks(x, y, z, x+1, y, z+2, 35, 14)

mc.setBlocks(x+2, y+1, z, x+3, y+1, z+2, 35, 11)

mc.setBlocks(x+4, y+2, z, x+5, y+2, z+2, 35, 2)

mc.setBlocks(x+6, y+3, z, x+7, y+3, z+2, 35, 5)

mc.setBlocks(x+8, y+4, z, x+9, y+4, z+2, 35, 4)

mc.setBlocks(x+10, y+5, z, x+11, y+5, z+2, 35, 10)

mc.setBlocks(x+12, y+6, z, x+13, y+6, z+2, 35, 1)

mc.setBlocks(x+14, y+5, z, x+15, y+5, z+2, 35, 10)

mc.setBlocks(x+16, y+4, z, x+17, y+4, z+2, 35, 4)

mc.setBlocks(x+18, y+3, z, x+19, y+3, z+2, 35, 5)

mc.setBlocks(x+20, y+2, z, x+21, y+2, z+2, 35, 2)

mc.setBlocks(x+22, y+1, z, x+23, y+1, z+2, 35, 11)

mc.setBlocks(x+24, y, z, x+25, y, z+2, 35, 14)

podczas gdy prawda:

x, y, z = mc.player.getPos() # pozycja gracza (x, y, z)

blockType, data = mc.getBlockWithData(x, y-1, z) # identyfikator bloku

drukuj (typ bloku)

Następnie sprawdzimy, czy klocek to klocek wełniany o numerze ID bloku 35, jeśli tak, odniesiemy się do wool_colors kolorem klocka na podstawie identyfikatora ze słownika i odpowiednio podświetlimy odpowiedni kolor.

jeśli typ bloku == 35:

# niestandardowe kolory wełny

matrixObject.clean(pasek, kolory_wełny[str(dane)])

Jeśli nie jest to blok wełny, sprawdzimy, czy blok znajduje się obecnie w słowniku rainbow_colors, aby uniknąć wyjątków, jeśli tak, będziemy kontynuować, biorąc kolor i zmieniając RGB.

if str(blockType) w rainbow_colors:

print(Rainbow_colors[str(blockType)])

matrixObject.clean(pasek, rainbow_colors[str(blockType)])

sen(0.5)

Zawsze możesz spróbować dodać więcej bloków do rainbow_color, aby dodać więcej kolorów i więcej bloków!

Doskonały! Wykonywanie projektów przy użyciu akcesoriów jest skomplikowane, ale przy użyciu układu scalonego CrowPi2 sprawy stają się znacznie prostsze! Co więcej, w CrowPi2 znajduje się ponad 20 czujników i komponentów, co pozwala osiągnąć idealne projekty, a nawet projekty AI!

Poniżej pełny kod:

Krok 10: Korzystanie z CrowPi2-wynik

Otwórz grę i uruchom skrypt, wynik zobaczysz na powyższym filmie:

Krok 11: Korzystanie z CrowPi2 – Idź dalej

Teraz zakończyliśmy nasz kolorowy projekt w grze Minecraft z CrowPi2. Dlaczego nie spróbować użyć innych czujników i komponentów w CrowPi2 do grania w grę, takich jak joystick do sterowania ruchem gracza, RFID do generowania bloków na podstawie różnych kart NFC itp. Baw się dobrze z grą na CrowPi2 i miej nadzieję, że możesz to zrobić więcej niesamowitych projektów z CrowPi2!

Teraz CrowPi2 jest teraz na Kickstarterze, Ty też możesz cieszyć się atrakcyjną ceną.

Dołącz link do strony Kickstarter CrowPi2

Zalecana: