IRL Sculk Shrieker
The Minecraft sculk shrieker... In real life! (warden sold seperately)
promised myself that i'd make a slot machine for my next custom project but yet again another idea got the better of me 🥀
huge inspiration from @aron huang's Minecraft Compass and @danieliscrazy's Minecraft Jukebox
(dates are in mm/dd/yy again because 🦅)
Total Time: 30 hours
6/28/25 - Figuring out electronics and design (a.k.a. da plan)
Today I made the repo for this project, and started to plan out the internals of this sculk shrieker.
The sculk shrieker is a block in Minecraft that shrieks when activated by a sculk sensor, which essentially is a microphone in our case since they are activated by sound.
I plan to recreate this effect by having a microcontroller receive input via a microphone module, then play the game audio from a speaker + SD card. I could also add some extra lighting via LEDs or electroluminescent wire to mimic the emmissive textures/animations found on the sides and top of the sculk shrieker.
Once I got the general idea down, I started to do research on the parts. I found a blog page by DroneBot Workshop which detailed much of the electronics and theory for the project, covering i2c and how to use the INMP441 microphone module and MAX98357A amp. I will be basing most of my research around this, but also making my own code for the sound detection and shrieker sound.
From the blog post, I made up a quick BOM and looked on Aliexpress to find the parts I needed. As usual, the parts were relatively cheap, with most of the modules totaling to about 13 USD.
time spent: 2 hours
7/1/25 - more planning (the looks and internals)
locking in imminent
While I have most of the parts planned out, I still need to plan out how the shrieker will look like.
The shrieker is a block with emmisive (glowing) textures, with an animated topside of two souls
orbiting around the center. The block is made up of a half block (8 pixels tall) and four jaws that extend upwards.
I could place the speaker in the middle of the block, with a circular PCB of RGB lights or neopixels to simulate the souls moving around in the shrieker. All of the other components could be stored inside of the block and out of sight, while the microphone can be tucked away under or near one of the jaws to allow it to listen but also to be hidden.
Since most of the parts are on different breakout boards/modules, a pcb to hold everything may be overkill. I could instead try to design the 3D printed case to fit the modules, with the only PCB being to hold the animated RGB lights.
For the CAD, I plan to keep with the 16 x 16 pixel style of Minecraft, making the dimensions of my sculk shrieker 64mm xx 64mm with each pixel being 4mm wide. In game, the jaws actually have no thickness, so to keep consistency, I will also be making them a pixel thick (4mm thick).
To help with painting, I will 3D print the white sections separately from the dark blue/black sections and gluing them together after coloring. In all, this should result in the bottom half, four white corners, and the jaws.
I could also design the jaws to socket
into the rest of the build for ease of assembly by making an indent inside the half-block portion and extending the jaws by a small amount, similar to how I designed the shells in my Engipad.
I also thought about some extra features to really set in the details of the sculk shrieker, for example: * An integrated accelerometer to play the place/break sounds when it is picked up or put down * A button or some type of sensor to detect if something has touched the black part of the top of the shrieker, since shriekers can also be activated if the player walks on top of it * Engravings in the jaws/block that follow the texture of the in-game shrieker, such as the darker lines in the jaws standing in for grooves in them * Additional functionality as an alarm system by having the esp32 send out a message if the microphone is activated
time spent: 2 hours
7/3/25 - cadding and cool colors wow
Today I started work on making the CAD for the shrieker.
I started off making the half block of the shrieker and then the jaws, but soon ran into the issue of trying to extrude the jaws since Minecraft actually doesn't have any thickness for them.
To save myself on the hassle of going back into sketches and changing dimensions, I made a custom parameter in Fusion to automatically adjust the thickness of the jaws named JawThickness and set it to multiple thicknesses.
I at first wanted to go 2.5mm thick to stay as true to the game as possible (thin), but I also found 4mm to be appealing due to pixel consistency + making the jaws seem slightly taller.
I was pretty stuck on this decision, so I asked on the Slack and some friends and they all answered 4mm so I'll be doing that for the thickness.
After that, I went around the block, adding in extra details found on the texture of the sculk shrieker. I could have painted these in after printing, but I suck at painting and found the surface in Fusion to be really flat and boring without the details or coloring.
Furthermore, as far as I know, you can't get picture textures onto surfaces in Fusion without abusing the Decal tool a bunch, which would make the renders look incredibly bad lmao
forgot to take pictures while modeling but you get the idea
Once I did that, I had to split the main half-block into two parts in order to fit the components inside of the block. While I could've gone with a basic cut across the middle, I figured that I should make the two lids in the shape of the sculk that grows on top of the block.
This was done because:
1. The two halves can interlock more easily, allowing for better alignment
2. The shaped halves make painting much easier since I can isolate the darker colors of the block to the lighter blue of the sculk
3. The corners of the top half being lower allows me to use shorter screws through the bottom
4. The halves can be colored differently when rendering
it also looks REALLY cool when i split the block into two
After that, it was finally time to color.
I found the texture for the block on the Minecraft Wiki, and quickly realized that this specific block had the one of the most EGREGIOUS and EVIL gradients in the ENTIRETY of Minecraft, going from the ivory white of the jaws to a dark blue and black, making the whole model hard to color accurately
remember when i said that i made the extra details and textures because you can't get picture textures in Fusion? this is why lmfao
if i made the entire half block as one, it would look like a singular color (and thus look like shit)
Anyways, I went back into drawing software, getting the colors I wanted and copying the hex codes to Fusion's appearance tool. I had to make another color for the sculk on the spot when coloring the two sculk halves, but we got there
I also changed the wall thickness from 3mm to 7mm in order to support M3 screws to assemble the case
time spent: 7 hours cadding and coloring
7/4/25 - more cadding
america day wowee
Today I didn't have as much time as normal due to my family going out to celebrate July 4th, but I managed to figure out the internals of the sculk shrieker, trying to pack in everything into the already very small space of 64mm x 64mm x 32mm.
I started with importing all of the components from my Aliexpress list to Fusion by finding them on GrabCAD. I didn't find any for the specific speaker I found on Aliexpress, so in order to import it into my model, I had to reconstruct it with external documents and schematics from Alibaba and other internet images.
the speaker controller module also didn't come with the appropriate headers/connectors so I had to import and model those in as well
Once I had the parts in, I inserted them into the shrieker model and started to move and position them around. To improve on the ease of printing/building and to cut costs on screws, I decided to not create any screw holes to mount the modules, and instead I opted to create slots for the modules to fit inside and gluing/taping them once in.
I also plan on handwiring everything for this project, since a pcb to fit everything in this build is gonna be way out of size.
This was also the time that I realized that the speaker I am using is fucking massive
Everything fit inside nicely, but I had some issue finding where to place the microphone. I originally said that I could place it on or near the jaws, but turns out that the microphone is significantly bigger than the scale of the jaws.
The quality of the sound needed doesn't have to be incredible since we're only picking up generally loud sounds, but for now I am placing it next to the speaker in one of the corners of the jaws. When assembling and testing the build, I may pack it inside to make it look more complete, but this will do for now (plus when looking at certain angles, the microphone is hidden from sight)
All this leaves now is creating the PCB to animate the souls circling in the shrieker and the software to accompany it.
Considering the space left on the model, I may have to place the PCB on top of the block and cover it up with a separate plate similarly to the OLED on my previous Engipad to preserve the printability of the shells.
considering time constraints on pcb shipping and the deadline of august 7, the pcb may not be included (but that's a last resort honestly)
time spent: 3 hours
7/5/25 - LED and PCB designing
Today I woke up and started working on how to make the souls on top of the shrieker function.
My mind instantly went to Neopixels, similar to the RGB lights on the Hackpad. I thought of repeating that same wiring for this, essentially extending it into a circle around the block, but realized that it would be time consuming to hand solder. Additionally, Adafruit and many other sources recommend adding a 0.1 μF capacitor for each light and a resistor, which would make me more inclined to pick PCBA which would also drive up costs for this part of the build.
However, RGB lights often have more configurable colors and premade examples or libraries, which would make the coding process for this part much easier.
I could also try using regular old blue LEDs, but come with the cost of less direct control over the color and code. I can wire the PCB to have multiple rings of LEDs to simulate the size of the souls and connect each row
to a singular GPIO pin. This comes with the obvious drawback of needing lots of GPIO, but the esp32 already has lots of pins even after accounting for the modules for the shrieker's function.
There's most likely a much cleaner and smarter solution, but that'll require more research later in the day.
I also found a seller on Aliexpress that sells tiny 3mm blue LEDs for much cheaper than the RGB SMD lights.
TLDR;
pros | cons | |
---|---|---|
3mm tiny leds | cheaper, easier to solder, simple | more GPIO or research needed |
RGB SMD leds | configurable, easy to setup, cleaner | may need expensive PCBA or lots of tricky smd soldering, part sourcing may be hard/expensive as well |
I decided that I will go with the 3mm tiny LEDs to progress, leading me to start working out the PCB and wiring diagram in KiCad.
I found a neat ESP32 symbol by this post on the KiCad forums, and used the handy symbol guide by @espcaa to make all of the components.
I also found out that the Micro SD card module I was using is incompatable with the ESP32, since it operates at 5V, while the ESP32 can only supply 3.3V and would otherwise damage the microcontroller 💔
I tried finding alternatives on Aliexpress, but found most of the sellers to be relatively shabby (<100 sold + new stores) or lacking proper datasheets/documentation, which makes buying from Aliexpress more so a *gamble* on whether or not the module will fry my ESP32. In the end, I ended up using a breakout board from [Adafruit](https://www.adafruit.com/product/4682) for $3.50, which operates at 3.3V.
After a good while of making custom footprints, I ended up with the following schematic.
After that was to design the actual pcb part of the build, or the RGB ring.
After considering, I chose the SMD leds due to their customizability and their need for only one GPIO pin. I also chose the regular and larger SK6812 LEDs over the SK6812-MINI since they're easier to solder on SMD and would cost less to fill up the board.
Speaking of cost, I'm also ordering these RGB lights off of Adafruit to package the shipping cost with the previously mentioned Micro SD card. Adafruit also has a decent price compared to Amazon or Aliexpress for the amount I'm ordering.
I wired the SMD leds similarly to the ones on my Hackpad, chaining them together from DIN to DOUT.
Once I had the schematic, I started work on the PCB. I measured the dimensions from Fusion for the space around the speaker and inside the jaws and ported them into KiCad as Edge Cuts, making a square shaped ring to place my lights on.
I then spaced out the LEDs on the ring. To connect the PCB to the ESP32, I added copper pads to the backside of the PCB to solder and wire to the inside, using @espcaa's custom symbol guide once again.
I also used copper filling to route the GND and 3.3V, making the topside of the PCB 3.3V to connect the pads and GND to the backside, connecting them through vias.
this was also my first time working with ground fill :3
This left me with a pretty nice looking Neopixel ring in the shape of a square. The RGB lights I'm ordering come in a black case rather than white, which will make the neopixels blend in much better with the rest of the build.
Once I had that sorted out, I started work on some silkscreen on the back for fun (this side will be hidden in the final product)
figma has suddenly became my favorite drawing software
got a lil carried away with the sikscreen on the back lol
I drew up some custom silkscreen decoration on Figma and imported them into KiCad, as well as some Highway branding and the cerberus sticker by @bunnyguy on slack. I aimed to make some form of business/information card
, as well as a piece of Highway memorabilia.
btw the cerberus is really cute thank you bunnyguy
i also sealed kendrick lamar under a neopixel for eternity
After I finished the PCB, I exported it as a STEP file and put it into Fusion.
I placed it over the top of the shrieker and extruded a quick plate to cover up small imperfections (plate is optional).
Since I replaced the SD card module with the one from Adafruit, I also have to replace that part of the CAD. I couldn't find any models for it on GrabCAD, so I had to recreate it like the speaker.
I found the general dimensions on the store page, and used a top down view and a micro sd card model from GrabCAD to reconstruct the features of the breakout board.
I also spent some time completing the first draft of my BOM
All this leaves now is to polish up the case with tolerances, finish the code and BOM, and to finish up the GitHub for submission!
time spent: 9 hours!! (started work at 8 am, ending here at 10 pm lol)
7/6/25 - cad but for the last time frfr
Today I finished up the last of the CAD and started to code the software to make the shrieker shriek
I first added some test and decoration to my Adafruit SD card module to help it stand out, as well as actually inserting it into the main assembly file. Once I had that, I made up a quick sketch and designed a slot for the module to slide into.
I also decided to rework the slots for the speaker amp, turning onto its side and making a more secure design for it (idk how to describe it just look at it ok)
While I was looking around for the part links for my BOM, I ran into a sound sensor
(KY-037) module on sale for only $1.04. I dismissed it at first, since I already had my audio receiving system figured out, but after I looked into it more, it seemed to be better than what I had previously.
* While the microphone I previously had in mind used up 4 GPIO and a custom library off of the internet, the module I found seemed to function as both a regular analog and digital sensor, requiring only 1 GPIO at minimum, and 2 for both analog and digital.
* The sound module I found also has an integrated potentiometer, which allows me to easily adjust the sensitivity of the shrieker
* The sound module was a tiny bit cheaper than the microphone I previously had, standing at $1.04 compared to $2.92
* The sound module functions as a simple analog/digital sensor (as detailed here), while the microphone requires a i2s library, along with additional code to detect whether or not the sound is above the threshold
In the end I decided to replace the microphone with this module, which also meant that I had to redo all of the spacing for the parts inside of the block.
The KY-037 was relatively large compared to everything else, which led me to move the speaker amp and sd card module to the same side and to remake the slots.
Once I had the CAD down (for the last time i hope), I had to update the wiring diagram. Since I replaced two of the modules, I have to replace their symbols in KiCad with the new ones and rewire the wiring diagram.
I also did further research on the RGB chain and added a 470 ohm resistor between the ESP32 and the RGB chain to help the signals not get scrambled
time spent: 3 hours
7/7/25 - software time
double 7 day wowowow
Today I started work on the software side of the project.
Since this project uses an ESP32, I can use the Arduino IDE to code my sculk shrieker, which has numerous libraries to support the modules I am using.
I used this section of the blog by DronebotWorkshop as reference to set up the SD card and i2s library, combining the void loop() {}
section with my own code to work with the KY-037 module I found.
To make the sound, I took the audio files from the Minecraft Wiki for the shrieking sound and for the Warden's heartbeat, combining them in Audacity to form a more cohesive and game accurate sound effect.
After that, I had to configure the Neopixel PCB with my ESP32. I found an article by Adafruit that details a bunch of functions I can use to display and work the neopixels in the chain.
The RGB will be animated, such that there will only be two lights on at once on opposite sides of the ring and moving around the ring to simulate orbiting. Since there are 20 neopixels in the PCB, there will have to be 9 neopixels between the lit up ones, or 10 if we're counting the lit up one like the firmware is.
To do this effect, I set up a for loop to increment a variable, as well as another function inside to select the pixels to be lit up. After a small delay (~250 to 500 milliseconds), the outer for loop will increment by 1 and move
the pixels by making the inner function move up by that 1 increment, quickly refreshing the neopixels to display the moved pixels.
In order to make sure my idea worked, I moved the code and setup to TinkerCad, where I could test the code with virtual Neopixels in their circuit builder. I put in my code and arranged the pre-made neopixel strips to resemble my PCB and repeatedly changed the code until it worked the way I wanted it to.
now that the firmware is done, the first iteration of the sculk shrieker is done!
yippee! :D
All that leaves now between me and submitting is to finish up the BOM, this GitHub repo, and the README
...starting with the BOM!
but first some cool renders
anyways back to the BOM
I updated some of the prices since some of them changed by a few cents, as well as replacing the microphone with the new KY-037 sound sensor. Once I had the subtotal down, I went into each of the stores and got the total price for each source (tax + shipping), resulting in a total price of $42.66
Most of the important parts are sourced from Aliexpress, which I worry will not ship the parts in time for the August 7th deadline due to customs (my angelic keyboard parts got held in customs for two fucking weeks for some mysterious reason which is why I worry they'll come too late)
With the BOM now done, I now have to flush out the rest of the GitHub repo!
time spent: 4 hours
7/8/25 - submitting!!
Today I finished the Github Repo and the README.md
yeah idk what else to put here you can go look around the repo and stuff
7/9/25 - BOM revision (sadge)
revised the BOM to be cheaper since adafruit is overpriced
...BUT WE GOT AN EXTRA POINT WOOOOOOO
anyways i replaced those parts and reduced the cost for components by a lot (now $25.03)
time spent: like 5 minutes