Sadržaj:
- Supplies
- Korak 1: Materijali
- Korak 2: Dijagram povezivanja
- Korak 3: Konfigurirajte za SPI
- Korak 4: Kôd
- Korak 5: Rezultat
- Korak 6: Korištenje CrowPi2-materijala
- Korak 7: Upotreba CrowPi2- Dijagram povezivanja
- Korak 8: Korištenje CrowPi2- Konfiguracija za SPI
- Korak 9: Korištenje CrowPi2- koda
- Korak 10: Korištenje CrowPi2-rezultat
- Korak 11: Korištenje CrowPi2- Idite dalje
Video: Izgradite Rainbow interaktivni most koristeći Minecraft Raspberry Pi Edition: 11 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Jučer sam vidio svog osmogodišnjeg nećaka kako igra Minecraft sa Raspberry Pi-jem koji sam mu dao prije, a onda sam dobio ideju da koristi kod za izradu prilagođenog i uzbudljivog projekta Minecraft-pi LED blokova. Minecraft Pi je odličan način da započnete s mikroračunarom Raspberry Pi, Minecraft Pi je posebna prilagođena verzija Minecrafta koja nam omogućuje interakciju s igrom koristeći smrtonosni jednostavan Python API za prilagođavanje doživljaja igre i rekvizita!
Postoji mnogo projekata koje možete raditi u svijetu Minecrafta s Raspberry Pi -om, ali posebno za nas to nije bilo dovoljno, tražili smo nešto izazovno i trepćuće u isto vrijeme. U ovom projektu koračat ćemo na više Minecraft blokova, otkriti ID bloka i otkriti boju određenog bloka na koji smo stupili, na osnovu boje koju ćemo upaliti naš RGB LED kako bismo stvorili interaktivnu igru koraka!
Koristit ću dvije metode za postizanje učinka, prva je upotreba dodatne opreme, koja može biti vrlo kaotična …; drugi koristi CrowPi2 (računalo za učenje s mnogo senzora, trenutno grupno financirano na Kickstarteru: CrowPi2)
počnimo i vidimo kako arhivirati tako nevjerojatan projekt!
Supplies
CrowPi2 je sada uživo na kickstarteru, projektom CrowPi2 je prikupljeno skoro 250.000 USD.
Pritisnite vezu:
Metoda1 Upotreba dodatne opreme
Korak 1: Materijali
● 1 x Raspberry Pi 4 model B
● 1 x TF kartica sa slikom
● 1 x napajanje Raspberry Pi
● 1 x 10,1 inčni monitor
● 1 x Napajanje za monitor
● 1 x HDMI kabl
● 1 x Tastatura i miš
● 1 x RGB LED (zajednička katoda)
● 4 x kratkospojnici (ženski na ženski)
Korak 2: Dijagram povezivanja
U RGB LED boji postoje tri svjetla, a to su crveno, zeleno i plavo svjetlo. Kontrolišite ova tri svjetla da emitiraju svjetlost različitog intenziteta, a kada se pomiješaju, mogu emitirati svjetlost različitih boja. Četiri pina na LED svjetlu su GND, R, G i B, respektivno. RGB LED koji sam koristio uobičajena je katoda, a veza s Raspberry Pi je sljedeća:
RaspberryPi 4B (u nazivu funkcije) RGB LED
GPIO0 1 CRVENO
GPIO1 3 ZELENO
GPIO2 4 PLAVA
GND 2 GND
Druga slika je hardverska veza
Korak 3: Konfigurirajte za SPI
Budući da za kontrolu RGB -a moramo koristiti SPI, prvo moramo omogućiti SPI sučelje, koje je prema zadanim postavkama onemogućeno. Da biste omogućili SPI sučelje, možete slijediti donje korake:
Prvo, možete koristiti grafički interfejs radne površine tako što ćete otići na Pi start MenupreferencesRaspberry Pi konfiguraciju, kao što je prikazano na prvoj slici.
Drugo, idite na “Interfaces” i omogućite SPI i kliknite OK (druga slika).
Na kraju, ponovo pokrenite Pi kako biste bili sigurni da će promjene stupiti na snagu. Kliknite na Pi Start MenuPreferencesShutdown. Budući da samo trebamo ponovo pokrenuti, kliknite gumb Ponovo pokreni.
Korak 4: Kôd
Započet ćemo pisanjem našeg python koda, prvo ćemo početi uvozom nekoliko biblioteka koje će nam trebati za integraciju našeg koda sa svijetom Minecraft. Zatim ćemo uvesti vremensku biblioteku, posebno funkciju koja se zove spavanje. Funkcija spavanja omogućit će nam da sačekamo određeni interval prije izvođenja funkcije. Na kraju, ali ne i najmanje važno, uvozimo biblioteku RPi. GPIO koja nam omogućava kontrolu GPIO -a na Raspberry Pi -u.
sa mcpi.minecraft uvezite Minecraft iz vremenskog uvoza spavajte uvoz RPi. GPIO kao GPIO
I to je to, završili smo s uvozom biblioteka, sada je vrijeme da ih iskoristimo! Prvo, prvo je korištenje Minecraft biblioteke, želimo povezati našu python skriptu sa svijetom Minecrafta, to možemo učiniti pozivanjem funkcije init () MCPI biblioteke, a zatim postaviti način GPIO -a i onemogućiti upozorenje.
mc = Minecraft.create () GPIO.setmode (GPIO. BCM) GPIO.setwarnings (0)
Sada definiramo neke dugine boje u heksadecimalnom obliku tako da možemo promijeniti RGB boje.
BIJELO = 0xFFFFFF CRVENO = 0xFF0000 NARANČASTO = 0xFF7F00 ŽUTO = 0xFFFF00 ZELENO = 0x00FF00 CYAN = 0x00FFFF PLAVO = 0x0000FF LJUBAVO = 0xFF00FF MAGENTA = 0xFF0090
Zatim moramo definirati neke varijable za snimanje boje vunenog bloka, koja je već definirana na listi blokova Minecraft.
W_WHITE = 0 W_RED = 14 W_ORANGE = 1 W_YELLOW = 4 W_GREEN = 5 W_CYAN = 9 W_BLUE = 11 W_PURPLE = 10 W_MAGENTA = 2
Naš ID vunenog bloka u Minecraftu je 35. Sada moramo konfigurirati pin za RGB LED diode i postaviti ih za njih.
red_pin = 17 green_pin = 18 blue_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)
Zatim postavite PWM za svaki pin, imajte na umu da je raspon PWM vrijednosti 0-100. Ovdje smo prvo postavili boju RGB -a do bijele (100, 100, 100).
crvena = GPIO. PWM (red_pin, 100)
zelena = GPIO. PWM (zelena_kosica, 100) plava = GPIO. PWM (plava_kosica, 100) crvena.pokretanje (100) zelena.pokretanje (100) plava.pokretanje (100)
Slijedi stvaranje dvije funkcije koje se mogu koristiti za dekodiranje boje i osvjetljenje RGB LED diode prema gore! Imajte na umu da funkcija map2hundred () preslikava vrijednosti od 255 do 100, kao što smo već spomenuli, PWM vrijednost bi trebala biti 0-100.
def map2hundred (vrijednost): return int (vrijednost * 100 /255)
def set_color (color_code): # Decode red_value = color_code >> 16 & 0xFF green_value = color_code >> 8 & 0xFF blue_value = color_code >> 0 & 0xFF
# Vrijednosti karte red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)
# Osvijetliti! red. ChangeDutyCycle (red_value) green. ChangeDutyCycle (green_value) blue. ChangeDutyCycle (blue_value)
Dobro urađeno! Vrijeme je za pokretanje našeg glavnog programa, pričekajte, treba definirati drugu varijablu za snimanje koda boje vunenog bloka prije glavnog programa:
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) dok je True: x, y, z = mc.player.getPos () # pozicija igrača (x, y, z) block = mc.getBlockWithData (x, y-1, z) # ID bloka # ispis (blok) ako je block.id == WOOL i last_data! = Block.data: if block.data == W_RED: print ("Red!") Set_color (RED) if block.data == W_ORANGE: print ("Orange!") Set_color (ORANGE) if block.data == W_ ŽUTO: print ("Žuto!") Set_color (YELLOW) if block.data == W_GREEN: print ("Green!") Set_color (ZELENO) ako block.data == W_CYAN: print ("Cyan!") Set_color (CIJANSKI) if block.data == W_BLUE: print ("Plavo!") set_color (PLAVO) if block.data == W_PURPLE: print ("Purple!") set_color (PURPLE) if block.data == W_MAGENTA: print (" Magenta! ") Set_color (MAGENTA) if block.data == W_WHITE: print (" White! ") Set_color (WHITE) last_data = block.data sleep (0.05) osim KeyboardInterrupt: prolaz GPIO.cleanup ()
Kako je glavni program prikazan gore, prvo moramo upotrijebiti neke naredbe za generiranje šarenih vunenih blokova, a zatim moramo saznati poziciju igrača kako bismo dobili ID blokova i njihov kod boje. Nakon što dobijemo podatke o bloku, upotrijebit ćemo izjavu da utvrdimo je li blok ispod playera vuneni blok i ima li oznaku boje. Ako je odgovor da, procijenite koje je boje vuneni blok i pozovite funkciju set_color () da promijenite boju RGB LED diode kao i vuneni blok.
Osim toga, dodajemo naredbu try/except za hvatanje izuzetka prekida korisnika kada želimo napustiti program kako bismo obrisali izlaz GPIO pinova.
U prilogu je kompletan kod.
Bravo, toliko pribora i previše komplicirano, zar ne? Ne brinite, pogledajmo drugu metodu postizanja projekta, zbog koje ćete se osjećati fleksibilnije i praktičnije, a to je korištenje našeg CrowPi2!
Korak 5: Rezultat
Otvorite igru i pokrenite skriptu, rezultat ćete vidjeti u gornjem videu
Zatim ćemo koristiti CrowPi2 za izgradnju Rainbow interaktivnog mosta
Korak 6: Korištenje CrowPi2-materijala
● 1 x CrowPi2
Korak 7: Upotreba CrowPi2- Dijagram povezivanja
Nema potrebe. Na CrowPi2 postoji mnogo korisnih senzora i komponenti (više od 20), sve je to u jednom malinu pi laptopu i STEM obrazovnoj platformi koja nam omogućava da s lakoćom i bez znojenja radimo više projekata! U ovom slučaju koristit ćemo atraktivan i šaren modul na CrowPi2, koji je 8x8 RGB matrični modul, koji nam omogućuje kontrolu u isto vrijeme 64 RGB LED!
Korak 8: Korištenje CrowPi2- Konfiguracija za SPI
Nema potrebe. CrowPi2 dolazi sa ugrađenom slikom sa sistemom za učenje! Sve je pripremljeno, što znači da možete programirati i učiti izravno. Osim toga, s našim CrowPi2 je jednostavno i već integrirano u ploču kao STEAM platforma spremna za rad.
Korak 9: Korištenje CrowPi2- koda
Sada je vrijeme za početak našeg programa! Prvo, uvezite nekoliko biblioteka, kao što je MCPI biblioteka koja je Minecraft Pi Python biblioteka koja nam omogućava da koristimo vrlo jednostavan API za integraciju sa svijetom Minecraft; biblioteka vremena koja nam omogućava da uspavamo funkciju da čekamo određeni interval prije obavljanja funkcije; Biblioteka RPi. GPIO koja nam omogućava kontrolu Raspberry Pi GPIO pinova.
iz mcpi.minecraft uvezite Minecraft iz vremenskog uvoza spavajte uvoz RPi. GPIO kao GPIO
Na kraju ćemo uvesti biblioteku pod nazivom rpi_ws281x koja je biblioteka RGB Matrix, unutar biblioteke postoji više funkcija koje ćemo koristiti kao što su PixelStrip za postavljanje objekta LED trake i Color za konfiguriranje RGB objekta u boji da svijetli naše RGB LED diode
from rpi_ws281x import PixelStrip, Color
I to je to, završili smo s uvozom biblioteka, sada je vrijeme da ih iskoristimo! Isto tako, prva stvar je korištenje Minecraft biblioteke, želimo povezati našu python skriptu sa svijetom Minecrafta, a to možemo učiniti pozivanjem init funkcije MCPI biblioteke:
mc = Minecraft.create ()
Sada, svaki put kada želimo izvesti operacije u svijetu minecrata, možemo koristiti objekt mc.
Sljedeći korak bit će definiranje klase RGB LED matrice koju ćemo koristiti za kontrolu naših RGB LED dioda, klasu inicijaliziramo osnovnom konfiguracijom kao što su broj LED dioda, pinovi, svjetlina itd …
stvaramo funkciju koja se zove clean koja će manje "čistiti" s određenom bojom, a također i funkciju koja se zove run koja će inicijalizirati stvarni RGB LED objekt kada ga prvi put želimo koristiti.
klasa RGB_Matrix:
def _init _ (samo):
# Konfiguracija LED trake:
self. LED_COUNT = 64 # Broj LED piksela.
self. LED_PIN = 12 # GPIO pin spojen na piksele (18 koristi PWM!).
self. LED_FREQ_HZ = 800000 # Frekvencija LED signala u hercima (obično 800 kHz)
self. LED_DMA = 10 # DMA kanal za generiranje signala (probajte 10)
self. LED_BRIGHTNESS = 10 # Postavite na 0 za najtamnije i 255 za najsvjetlije
self. LED_INVERT = Netačno # Tačno za invertiranje signala
self. LED_CHANNEL = 0 # postavljeno na '1' za GPIO 13, 19, 41, 45 ili 53
# Definirajte funkcije koje animiraju LED diode na različite načine. def clean (self, strip, color):
# obrišite sve LED diode odjednom
za i u dometu (strip.numPixels ()):
strip.setPixelColor (i, boja)
strip.show ()
def run (self):
# Kreirajte NeoPixel objekt odgovarajuće konfiguracije.
strip = PixelStrip (sam. LED_COUNT, self. LED_PIN, self. LED_FREQ_HZ, self. LED_DMA, self. LED_INVERT, sebe. LED_BRIGHTNESS, self. LED_CHANNEL)
probaj:
povratna traka
osim KeyboardInterrupt:
# očistite LED matricu prije prekida
self.clean (traka)
Nakon što smo završili s gore navedenim, vrijeme je da pozovemo te klase i stvorimo objekte koje možemo koristiti u svom kodu, prvo napravimo objekt RGB LED matrice koji možemo koristiti pomoću klase koju smo ranije stvorili:
matrixObject = RGB_Matrix ()
Koristimo sada ovaj objekt za kreiranje aktivnog LED trakastog objekta koji ćemo koristiti za kontrolu naših pojedinačnih LED dioda na RGB matrici:
strip = matrixObject.run ()
Konačno, da bismo aktivirali ovu traku, morat ćemo pokrenuti posljednju funkciju:
strip.begin ()
Minecraft API uključuje mnogo blokova, svaki Minecraft blok ima svoj ID. U našem primjeru uzeli smo određenu količinu Minecraft blokova i pokušali pogoditi koja je boja za njih najprikladnija.
RGB označava crvenu, zelenu i plavu boju pa će nam trebati 3 različite vrijednosti u rasponu od 0 do 255 za svaku, boje mogu biti HEX ili RGB format, za naš primjer koristimo RGB format.
U svijetu Minecraft Pi postoje normalni ID -ovi blokova i posebni ID -ovi vunenih blokova, posebna vuna dolazi pod ID brojem 35, ali s podbrojevima u rasponu od mnogo različitih ID -ova … Riješit ćemo ovaj problem stvaranjem 2 zasebne liste, jedne za normalne blokove i jedan popis za posebne vunene blokove:
Prvi popis je za normalne blokove, na primjer 0 predstavlja Air block, mi ćemo mu postaviti boju 0, 0, 0 koja je prazna ili potpuno bijela, kada će igrač skočiti ili letjeti u igri, RGB će se isključiti, 1 je drugačiji blok sa RGB bojom 128, 128, 128 i tako dalje …
#Rainbow Colors
dugine_boje = {
"0": Boja (0, 0, 0), "1": Boja (128, 128, 128), "2": Boja (0, 255, 0), "3": Boja (160, 82, 45), "4": Boja (128, 128, 128), "22": Boja (0, 0, 255)
}
Za vunene blokove radimo isto, ali važno je zapamtiti da svi blokovi imaju ID 35, na ovoj listi definiramo podvrste bloka koji je vuneni blok. Različite podvrste vune imaju različite boje, ali sve su to vuneni blokovi.
boje vune = {
"6": Boja (255, 105, 180), "5": Boja (0, 255, 0), "4": Boja (255, 255, 0), "14": Boja (255, 0, 0), "2": Boja (255, 0, 255)
}
Kad smo završili s definiranjem našeg glavnog programa, klasa i funkcija, vrijeme je za integraciju s našim CrowPi2 RGB LED senzorom na ploči.
Glavni program će uzeti parametre koje smo ranije definirali i utjecati na hardver.
Koristit ćemo CrowPi2 RGB LED kako bismo ih osvijetlili na temelju koraka koje radimo u Minecraft Pi -u na svakom bloku, počnimo!
Prva stvar koju ćemo učiniti je generirati neke vunene blokove s naredbama i stvoriti while petlju, kako bi program radio sve dok igramo igru.
Morat ćemo dobiti neke podatke od igrača, prvo koristimo naredbu player.getPos () da dobijemo poziciju igrača, a zatim koristimo getBlockWithData () da dobijemo blok na kojem trenutno stojimo (koordinata y je -1 koja znači ispod igrača)
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)
dok je True:
x, y, z = mc.player.getPos () # pozicija igrača (x, y, z)
blockType, data = mc.getBlockWithData (x, y-1, z) # ID bloka
ispis (blockType)
Zatim ćemo provjeriti je li blok vuneni blok, identifikacijski broj bloka 35, ako jest, pozvat ćemo se na vunene boje s bojom bloka na temelju ID -a rječnika i prema tome osvijetliti odgovarajuću boju.
ako je blockType == 35:
# prilagođene boje vune
matrixObject.clean (traka, boje vune [str (podaci)])
Ako to nije vuneni blok, provjerit ćemo je li blok trenutno unutar rječnika rainbow_colors kako bismo izbjegli iznimke, ako je tako, nastavit ćemo uzimanjem boje i promjenom RGB -a.
if str (blockType) u rainbow_colors:
ispis (rainbow_colors [str (blockType)])
matrixObject.clean (strip, rainbow_colors [str (blockType)])
spavanje (0,5)
Uvijek možete pokušati dodati više blokova u rainbow_color kako biste dodali više boja i podršku blokovima!
Savršeno! Raditi projekte pomoću dodatne opreme je komplicirano, ali pomoću integriranog kruga CrowPi2 stvari postaju mnogo lakše! Štoviše, na CrowPi2 postoji više od 20 senzora i komponenti, što vam omogućuje postizanje vaših idealnih projekata, pa čak i AI projekata!
Ispod je kompletan kod:
Korak 10: Korištenje CrowPi2-rezultat
Otvorite igru i pokrenite skriptu, rezultat ćete vidjeti u videu iznad:
Korak 11: Korištenje CrowPi2- Idite dalje
Sada smo završili naš šareni projekt u igri Minecraft s CrowPi2. Zašto ne biste pokušali koristiti druge senzore i komponente na CrowPi2 za igru s igrom, poput joysticka za kontrolu kretanja igrača, RFID za generiranje blokova na temelju različitih NFC kartica itd. Zabavite se s igrom na CrowPi2 i nadam se da možete još nevjerojatnijih projekata sa CrowPi2!
CrowPi2 je sada na Kickstarteru, mogli ste uživati i u atraktivnoj cijeni.
Priložite vezu stranice Kickstarter CrowPi2
Preporučuje se:
Izgradite Raspberry Pi SUPER meteorološku stanicu: 8 koraka (sa slikama)
Izgradite Raspberry Pi SUPER meteorološku stanicu: Priznajmo, mi ljudi mnogo pričamo o vremenu ⛅️. Prosječna osoba govori o vremenu četiri puta dnevno, u prosjeku 8 minuta i 21 sekundu. Izračunajte i to će vam ukupno 10 mjeseci života provesti jaukajući o
Interaktivni Minecraft Ne unosite mač/znak (ESP32-CAM): 15 koraka (sa slikama)
Interaktivni Minecraft ne unosi mač/znak (ESP32-CAM): Zaista postoji nekoliko razloga zašto je ovaj projekt nastao: 1. Kao autor zadružne biblioteke za više zadataka TaskScheduler, uvijek sam bio znatiželjan kako kombinirati prednosti kooperativne višezadaćnosti s prednostima prevencije
Raspberry Pi Enterprise Network WiFi most: 9 koraka
Raspberry Pi Enterprise Network WiFi Bridge: Autor: Riley Barrett i Dylan HallandCilj ovog projekta je omogućiti IoT uređaju, kao što je Weemo Smart Plug, Amazon Echo, Gaming Console ili bilo koji drugi uređaj s omogućenom Wi-Fi vezom WPA_EAP Enterprise Network pomoću Raspberry Pi Zero
Visuino Izgradite sustav za otkrivanje upada koristeći Arduino: 8 koraka
Visuino Izgradite sustav za otkrivanje upada pomoću Arduina: U ovom ćemo vodiču koristiti XYC-WB-DC radarski senzor za mikrovalnu pećnicu spojen na Arduino UNO i Visuino za otkrivanje bilo kakvog kretanja u radijusu od 5 m, uključujući tanke zidove. Pogledajte video demonstracije
Neopixel Ws2812 Rainbow LED sjaj sa M5stick-C - Pokretanje Rainbow -a na Neopixelu Ws2812 Korištenje M5stack M5stick C Korištenje Arduino IDE -a: 5 koraka
Neopixel Ws2812 Rainbow LED sjaj sa M5stick-C | Pokretanje Rainbow-a na Neopixel Ws2812 Korištenje M5stack M5stick C Korištenje Arduino IDE-a: Zdravo momci u ovim uputama naučit ćemo kako koristiti neopixel ws2812 LED diode ili LED traku ili LED matricu ili LED prsten s razvojnom pločom m5stack m5stick-C s Arduino IDE-om, a mi ćemo napraviti dugin uzorak sa njim