Design and Build *Truly* Hi-Fi Desktop Speakers Using Concrete and 3D Printing

by matdogg in Circuits > Audio

9421 Views, 120 Favorites, 0 Comments

Design and Build *Truly* Hi-Fi Desktop Speakers Using Concrete and 3D Printing

IMG_0434.jpg
IMG_0427.jpg
Speaker1.PNG
Speaker2.PNG

Like many audiophiles/music-lovers I am on a quest for better and better sounding music. Lately, with how much time I have been spending at my home office desk, this has led to the desire to upgrade from the pathetic speakers built into my computer monitors to a set approaching truly "Hi-Fi" whilst staying within the confines of my desk and my budget.

These desktop speakers measure approx 4.25 in (11 cm) tall, 6 in (15 cm) wide, and 5 in (13 cm) deep and lean heavily on 3D printing, which is turning out to be an incredible tool for custom speaker building. Not only did I make small parts like the vent tube and terminal cup with a 3D printer, but both the front and rear baffles are 3D-printed as well, using 20% wood-filled filament. Even the concrete enclosure walls were made in one piece using a 3D-printed mold!

In this Instructable I'll show you how to use some fundamental loudspeaker design principles (and some more advanced ones) to create compact and incredible-sounding Hi-Fi speakers that will fit on almost any computer desk. Let's get started!

Goals and Constraints - a Careful Balancing of Compromises

Let's understand what I want to get from these speakers. Like everything in engineering, a good speaker design is nothing but a careful balancing of compromises. Things to consider include more obvious things like size, weight, time, and cost - but also less obvious things such as bass performance, treble performance, resonance, and manufacturability. Changing any one of these factors can have an effect on every other factor at the same time. With that in mind, let's narrow down some hard constraints for this project:

  • Size - These need to fit on my desk and therefore are quite limited in the volume of the enclosures and consequently the surface area of the drivers. Sonically, this is the most limiting constraint that I'll face.
  • Cost - I am not made of money and therefore cannot afford exotic parts, materials or tools. There's no doubt that some engineering problems can be solved with more money, but at this scale diminishing returns hit pretty fast. I didn't set a hard limit for myself, but I wanted to keep the cost far below commercially available options while allowing for a bit of a "learning budget." I feel I ended up being wildly successful at this.
  • Manufacturability - Again I don't have access to expensive tools; this needs to be buildable in my apartment with little more than my budget 3D printer and hand tools. Reparability is part of this too - if something ever goes wrong internally I'd like to be able to fix it.

Under these constraints I'd like to maximize things like volume (loudness), bass extension, overall clarity and tone, and aesthetics. By understanding these constraints and goals, difficult design decisions begin to make themselves like magic, and the beginning of my project is already taking shape.

Driver Selection

264-830--tang-band-w23-1287si-spec-sheet.jpg
264-830_HR_0.default.jpg

Going into this project I was already leaning heavily towards a full-range design, where one speaker driver reproduces the entire range (or nearly so) of audible sound. This is in contrast to the very common two-way design, where one driver - the woofer - handles all the bass and a much smaller driver - the tweeter - takes care of treble.

The full-range design comes with some sonic disadvantages, most notably the potential for reduced bass extension, reduced treble extension, or both. There are some great advantages elsewhere though: full-range speakers are easier to design and build, cost less (two total drivers vs. four!) and can look sweet when done well. They actually have one acoustic advantage up their sleeves too: each speaker is a so-called "point source" where all the sound from each speaker emanates from one point, rather than two separate points in a two-way speaker. Especially in close range or "near-field" listening situations like at my desk, point-source speakers can have an amazingly cohesive and life-like quality to them.

For speaker drivers, parts-express.com is by far the best site I've found. They have a huge selection of parts and provide datasheets and frequency response charts for almost every driver they sell which is vital for designing a speaker. Without this data you're really just guessing. Luckily I didn't have to shop for long, because the engineers at Tang-Band seemingly designed a driver just for me with their tiny, quirky W23-1287 model. It's funky shape supposedly supports excellent bass extension for its size (backed up by the frequency response graph in the datasheet) and the high-tech phase plug in the center, normally seen on much more expensive drivers, helps it to play crisp treble up to 20,000 Hz. All in a tiny 2" x 3" package! Plus it looks great and doesn't cost an arm and a leg. Even if they hadn't been a great fit for this project, I wanted a pair of these to tinker with. Thus, I immediately ordered a pair and then began importing the driver's TS parameters and frequency response graph from the datasheet into my speaker simulation software.

Preliminary Design and Simulation

Concrete Speaker Sim Parameters 1.PNG
Concrete Speaker Sim Parameters 2.PNG
Crossover Network.PNG
Concrete Speaker Sim NO LPF.PNG

There are many options for speaker simulation software. VirtuixCAD is free and contains the SPLTrace tool which I use to import my drivers. My preferred simulation software is Boxsim, also free. Feel free to use any package you'd like - they're all very similar. here I'll show how to use Boxsim.

First I imported a screenshot of the frequency response and impedance graph of my driver from the datasheet into SPLTrace. Then, by clicking along the graphs in the window I converted the graphs into two long tables of values which are stored in files that the simulation software can understand.

Boxsim can be more difficult to understand initially. First I created a new project and followed the initial setup. Then, referencing the datasheet, I filled in all the TS parameters for my driver. At the bottom, I loaded the frequency and impedance response files created earlier with the SPLTrace tool. Then, as an initial guess I switch to the "Enclosure & Impedence" tab and input what I think will work well for my speakers. I selected vented enclosure and guessed a volume based on the desired size of my speakers. Remember that this is only the volume of air inside the speaker, so it will be less than the total volume of the finished speaker.

Side note about enclosure types: The two most popular of the choices shown are sealed and vented. As you might guess, a sealed enclosure has no outlet for air, and thus the speaker box is completely closed. As the speaker driver moves in and out, the air inside acts like a spring, resisting the decompression and compression forces from the cone of the speaker. This additional springiness can help some speakers, especially large ones, react a bit more quickly to fast changes in music and therefore sound a bit more crisp, but usually sacrifices bass extension and loudness. A vented speaker, conversely, allows the designer to tune the bass response with the use of a vent tube. Although this usually requires a larger enclosure, the amount of bass and loudness it gains is well worth the cost in this case. Therefore, I choose a vented enclosure. You can play around with changing this setting and see the huge difference in the simulated bass response for yourself. If you'd like to learn more, here is a great page that gives a more in-depth explanation of various types of speaker enclosures, how they work, and pros/cons of each.

Finally, I switched to the crossover network editor under the "Amplifier 1" tab and connected the driver to the amplifier with two wires. With that I hit ok and see a (less-than-perfect) frequency response! From here I'll adjust some settings and fine tune the design to get closer to the beautiful flat line from 20 Hz to 20,000 Hz that I'd like :)

Refining the Design and CAD

Speaker3.PNG
Speaker4.PNG
Vent Tube Length Calculator.PNG
Concrete Speaker Sim Parameters 3.PNG
filter snip.PNG
Concrete Speaker Sim with LPF.PNG
Walls.PNG
Mold.PNG

At this stage, my speaker design process becomes a bit of a love triangle between me, Boxsim, and my 3D CAD software. Making both of them happy at the same time is no small feat.

First, I modeled an approximation of my chosen speaker driver using the dimensions given in the datasheet plus a few good guesses. The level of detail I went to isn't remotely necessary, but the more accurate the better. What's important is understanding whether the driver will interfere with anything inside the enclosure and determining a close guess for the volume of the frame and magnet of the driver. Again, knowing the volume of air inside the speaker is really important for an accurate design, and at this scale the driver itself will subtract a significant amount from that.

Next, I designed initial guesses for all the other components as well. Vent tube, filter components (more detail on these later), speaker terminals, and of course the enclosure itself, all got the CAD treatment and were assembled together to see how it all fit, and get a more realistic number for the internal volume of the speaker. Nice thick walls ensure strength and the extra mass helps cut down on unwanted vibrations and resonance - but the more concrete I add, the less air inside the enclosure. Also, note that the images shown above are not of the first pass, but several iterations in.

Then I go back to Boxsim and use my initial CAD guesses to hone in on my enclosure parameters. First, I update the volume. Next, I fine tune the vent tube using the port tool under the "Extras" tab. Length and diameter determine the tuning frequency of the port, which is shown in the box at the bottom of the window. I adjust these until I get close to the tuning frequency I desire, then move on to adjusting the baffle and driver position in the same window I used to input TS parameters earlier. This cycle repeats approximately 10,000 times until everyone is happy and the speaker looks and sounds (in simulation) as good as I can get it.

Choosing a tuning frequency for the vent tube is more of an art than a science. If you move it way down in the frequency range and run the simulation, you'll see that it creates a sharp hump in the response, quickly falling off at both ends. The desired effect is to extend the lower reach of the speaker a bit, boosting the response just below the resonant frequency of the speaker, without causing a big bump in the frequency response. That said, if you prefer a naturally bassier sound maybe a bit of a bump is desirable.

Finally, I need to do something about the pesky treble sticking way up above everything else from about 5000 Hz and up. Physically, there isn't a whole lot that can be done without increasing the size of the speaker. I assumed that, like most speakers, this was the result of a phenomenon called baffle step, where high frequencies (with their very short wavelengths) bounce off the front surface of the speaker towards the listener while lower frequencies' much longer wavelengths miss the front baffle entirely and get a bit lost around back. This means high frequencies appear louder to the listener. Unfortunately, applying a standard baffle step filter didn't quite produce the response I wanted. Either I couldn't attenuate the treble quite enough, or the filter dipped into the midrange before rolling off completely. I decided that it was probably due to the fairly bright treble response the driver has naturally, as seen in the datasheet earlier. What I needed was a filter that came on a bit quicker, calming down treble a lot without affecting mid-range frequencies as much.

To fit the bill, I stepped up from a first-order baffle step filter to a second-order low pass filter, consisting of an inductor and a capacitor. This is called an LC low-pass filter. For a second order filter, which rolls off more quickly and therefore is a bit more sensitive in design, I find that it's best to use an online calculator for initial component values, then experiment in the simulator until you see the response you'd like. I landed on one 0.05 mH inductor and a 0.47 uF capacitor. This site has several pages with explanations and calculators for different types of low-pass, high-pass, and band-pass filters, if you're interested in learning more.

Huzzah! After all that, my simulation finally looks beautiful and I can move on to designing the mold! With the walls of the speaker enclosure cut away from the rest in CAD, I created a somewhat straight-forward mold box around it. Each wall is removable, and the entire assembly bolts together. Once the concrete has been cast inside, the bolts can be undone and each wall can be pried away. Where it gets a bit complicated is the inner sleeve bit, which I initially designed to be flexible enough to be removed easily from the concrete after casting. That didn't go as planned and that part ended up being the only sacrificial part of the mold. STLs for mold parts are available below and on Thingiverse.

Casting Concrete

IMG_3037.JPG
IMG_0343.jpg
IMG_0346.jpg
IMG_0345.jpg
IMG_0347.jpg
IMG_0351.jpg
IMG_0360.jpg

For me, this was by far the most experimental stage of the project. I had never cast concrete before and thus had no idea what to expect. I started with basic Quikrete, used as directed, but quickly found that the mixture is way too coarse and rough to accurately reproduce details like the corners of the box. Furthermore, because of the narrow passage for concrete to settle out in the mold, it was nearly impossible to remove air bubbles from the mold surfaces. This left me with weak and extremely cratered parts.

After further research about the components of concrete I discovered that portland cement, the main 'active' ingredient in concrete, contains no sediment and can be purchased by the bag at most hardware stores. I bought a 47 lb bag along with a similarly sized bag of play sand and got to mixing. Get ready to come up with more ideas for concrete projects - you're going to have a lot extra :)

I used a 50/50 ratio of sand to cement, which seems to work out really well. According to my research a bit more sand could result in stronger parts, but I wanted to make sure my speakers retained a very grey color and smooth surface finish. I have no idea how much a bit more sand like 70/30 would have changed the color though. Feel free to experiment a bit. Like I said, you'll have plenty of extra material.

Mixing and pouring the cement was simple, but laborious. I mixed up way more than I needed in fear of somehow having too little, so evenly mixing the components took a bit of muscle. Adding water only begins to help after a certain amount but be careful. You want a thick texture - maybe like a thick bowl of oatmeal or soft serve ice cream - and its very easy to overshoot it. Add more sand/cement if that happens. A mixture that is too wet can result in weak parts and shrinking which can make the somewhat thin walls crack.

I added a couple of wood dowels to brace the inside wall against the weight of the concrete and sat it on the washer/dryer while I did a few loads of laundry to shake out any bubbles. No idea if it actually helped but I doubt it hurt! A vibration table would surely have worked out the bubbles that did stay trapped but they can be filled in later with a bit of touch up cement.

After a couple days of curing, it was safe to remove the mold and let the concrete breathe a bit better. Concrete isn't completely cured for up to a month, so be careful. After three days I removed the inner mold wall with a bit of heat and gentle prying, and on the fourth day I felt it was dry enough for glue to be applied.

3D Printed Parts

IMG_0161.jpg

The 3D printed components consist of front and back baffles, vent tube, terminal cup, and the decorative bezel surrounding the driver. Parts are designed to work well on my Ender-3, but I printed most on the much faster Ender-6. Settings are as follows:

Front/Back Baffles: 3 walls, 3 top/bottom layers, 60% infill, 0.32 mm layer height. 20% wood-filled PLA with a 0.6 mm hardened steel nozzle. If you don't want to use a wood-filled filament, I recommend upping the infill and/or number of top and bottom layers a bit for rigidity.

Vent Tube and terminal cup: 3 walls, 3 top/bottom layers, 50% infill, 0.2 mm layer height. Generic black PLA with 0.4 mm nozzle.

Front Bezel: 3 walls, 3 top/bottom layers, 100% infill, 0.2 mm layer height. Any filament desired works great - I painted mine anyway.

I have uploaded two versions of the front baffle and bezel. One version has a smaller bezel and is the version I decided to use, but requires trimming the corners of the tang band drivers a small amount. The second version should require no trimming, but uses a larger bezel. I have also included an stl of the walls, in case you'd like to 100% print this speaker and skip the concrete casting.

All STL files are attached below and also available on Thingiverse! Enjoy!

Wiring

Concrete Speaker Filter Diagram.png
IMG_0367 - Copy.jpg
DSC01181.JPG
DSC01185.JPG
DSC01183.JPG

Next it's time to assemble the filter components. For packaging and ease of assembly I decided to mount the capacitor directly to the driver terminals and the inductor to the inside of the terminal cup. Location isn't crucial, but it's best practice to keep the inductor far away from the speaker magnet and with their axes offset by 90°. Otherwise it's possible for them to interfere and cause distortion in the music. The inductor is held down with some epoxy and all the joints are soldered for good electrical contact.

Note: If you're familiar with the insides of speakers, you may have seen components like these referred to as a crossover. Crossovers are used commonly in 2-way speakers to separate low from high frequencies and send them to the woofer and tweeter respectively. The point at which they meet is called the crossover point. Because this design has only one driver, there is no crossover. All the frequencies are sent to the one driver. Effectively, this filter is one half of a crossover, but instead of completely eliminating the highest frequencies, it's just turning them down a bit. Here is a great page explaining how crossovers work.

Finishing and Final Assembly

IMG_0364 - Copy.jpg
IMG_0369 - Copy.jpg
IMG_3095.JPG
IMG_3089.JPG
IMG_3073.JPG
IMG_3100.JPG
IMG_0420.jpg

Almost there - time to finish it all up and glue it shut.

To better match the color of the polypropylene-mica material of the speaker cone, I lightly sanded and stained the baffles with normal wood stain. A painted finish would be great here too. Layer lines can be filled with wood filler and sanded flat or embraced like I did for a more industrial feel.

Next, the vent tube was glued down with epoxy and a tiny bead of silicone RTV sealant was added to the driver mounting flange and the driver was bolted in with four M3 flat-head screws. Sealant may not be completely necessary but knowing there are no air leaks helps me sleep at night. After bolting it all up a few drops of thin superglue was added to the nuts on the inside so the driver can be removed and reinstalled later if needed. The terminal cup on the back baffle got the same silicone treatment but no fasteners. It fits tight and can be popped out with a screwdriver.

The concrete walls got a quick sanding job with some coarse sandpaper to level the top surface where concrete was exposed to the air in the mold. Getting it completely flat isn't needed, just to get the outside edge even with the inside edge. Glue will fill in the rest.

Four strips of polyfil padding were attached with hot glue to the inside walls and another strip on the inside of the back baffle before applying a bead of adhesive to the front and back flanges and attaching the two baffles. After lining them up, adding lots of heavy stuff on top ensures that the glue creates a good seal. Excess can be cut away easily with a razor blade once dry. Most types of glue or epoxy will work, but I used a concrete adhesive that I found at the hardware store. It comes in a grey color that blends into the concrete well.

Listening!

IMG_0417.jpg
IMG_0436.jpg
IMG_0388.jpg
IMG_0410.jpg

Done! Time to sit back and enjoy the music.

Initial impressions - Wow! Super clear highs and punchy bass. Everything sounds so controlled and clean even at high volumes thanks to the heavy and rigid concrete walls. At a volume where most computer speakers would be buzzing and vibrating their way off the desk, these are calm and collected. They could be paired with a subwoofer for deeper bass, but surprisingly I don't feel like I miss it when sitting there at the desk.

Being decently efficient and at close listening range, not much power is required at all. Combined with a basic DAC and a cheap digital amp they sound great. The "bass boost" button is a little irresistible though :)

If you like this project, vote for it in the Audio Contest, and if you make these speakers or something like them let me know! Enjoy!