Customisable Back Horn Speaker Enclosure

A fully customisable design for a back horn speaker, based on the horn geometry created by guppyk2.
432
1800
11
9966
updated May 4, 2023

Description

PDF

An OpenSCAD script to generate a customisable back horn speaker enclosure.  It can be customised to suit different overall dimensions, different drivers (up to two), and different side fixings.  It also has a customisable space for electronics and batteries, allowing you to create a stand-alone bluetooth/Airplay/Squeezebox speaker.

Most customisations are achieved by modifying individual parameters within the script, but some changes might require you to get deeper into the code, e.g. to change the shape of the screw heads for the side panels.  I hope that it's clear how to do this within the code, but I welcome any questions about specific customisations.

The shape of the waveguide is a close copy of guppyk2's 4" back horn V2 design (https://www.thingiverse.com/thing:4750820).

I reproduced that basic profile by reducing it to its essential coordinates and corner radii and using Kurt Hutten's excellent 'round anything' OpenSCAD library to extrude the profile.  This allowed me to make the design completely parametric, so that the overall enclosure dimensions can be specified, and the waveguide shape will then be scaled in the X and Y directions to match the given width and depth.  The height of extrusion will be reduced by the thickness of the side panels so that the overall Z dimension of the enclosure matches the specified height.

The driver cutout(s) and the mounting holes are also fully customisable, so you can use any driver(s) you like, provided that you can measure or find a spec. sheet that gives the cutout radius and the mounting hole geometry.

The profile was tweaked somewhat compared to guppyk2's original, principally to increase slightly the dimensions of the cavity for the electronics at the back of the enclosure.  This is to provide a little more flexibility to include different electronics modules and battery packs.  I have personally built a version to suit a 3" driver (a Dayton DMA80 - see dimensions in the script), using an ESP32-based board (SqueezeAMP) for bluetooth/Airplay/Squeezebox functionality, powered by a 3-pack of 18650 Li-ion batteries.

The script allows for one or two drivers to be fitted into the front panel.  For instance, with a single driver the enclosure could be used for a mono full-range speaker.  With two drivers, it could be used for a stereo pair of small full-range drivers or a mono 2-way arrangement. Examples of some options are included in the script.

As a result of making the enclosure customisable in this way, it should be clear that the profile is in no way tuned to match the characteristics of any given driver.  It is simply a geometrical customisation.

The suggested customisation steps are as follows:- 

  1. choose your driver(s), and identify the basic driver dimensions
  2. for each driver, specify the cutout diameter, and the mounting hole geometry (number of holes and orientation, pitch circle diameter (PCD), mounting hole radius).  If you want a single driver, specify only the driver_1 parameters and set num_drivers to 1.  If you want two drivers, specify the driver parameters for both driver_1 and driver_2 (see the examples in the script), and set num_drivers to 2.  For each driver, you can specify how far along (down? - see the note about the coordinate system at the end) the front face of the waveguide to position the centre of the driver, using the driver1_fraction and driver2_fraction parameters - these represent a fraction of the flat part of the front face, increasing in the x-direction.
  3. Make an educated guess at the enclosure's overall outer dimensions, then preview the waveguide to verify whether the driver geometry will fit the enclosure.  Adjust the width, depth and height, as well as the driver_fraction values, until you are happy.  In the console output there are a couple of ECHO statements that report the resulting driver cavity and electronics cavity approximate dimensions.  Check, for instance, that the driver cavity is deep enough for your chosen driver(s), and that the electronics cavity has room for your chosen circuit boards and batteries.

The script includes several sections illustrating example settings for some different enclosure configurations, such as:

(1) a 3" mono driver.  This is sized to suit a Dayton DMA80 driver, and uses M3x12 bolts for the sides and back plate, with hex nut slots in the waveguide. The electronics cavity is 44.8mm x 70.8mm x 90mm (WxDxH), big enough to take a SqueezeAMP board and a 3-pack of 18650 Li-ion cells, or a Muse Proto board and a battery.

(2) a 40mm mono driver.  Sized to suit this driver from Pimoroni, and using 2.2x6.5 (No. 2) self-tapping countersunk screws for the sides.  The electronics cavity is minimised, since it would be unlikely to be big enough for anything useful in such a small enclosure.

(3) a stereo pair of 1.5" drivers.  Sized to suit a pair of  Dayton DMA45 drivers, and using 2.9x9.5 (No. 4) self-tapping countersunk screws for the sides and M3x12 screws for the back plate. The electronics cavity is 41.2mm x 45.6mm x 60mm (WxDxH), big enough to take a SqueezeAMP board and a 2-pack of 18500 Li-ion cells.

(4) a mono 2-way arrangement.  Sized to suit a Dayton ND25FA-4 tweeter and a 4" Dayton DSA115-8 bass driver, and using M3x12 bolts for the sides and back plate, with hex nut slots in the waveguide. The electronics cavity is 58.9mm x 90.9mm x 120mm (WxDxH), which should be big enough to take a range of circuit boards and cell packs.

Each of these examples has a set of STL files to download.  The back plates for these examples have only the two holes for securing them to the main waveguide, but the script has some code (commented out) to show how to add holes for, for example, a power jack and a switch.

There is also an example to show the ‘natural’ size of the waveguide as defined by the raw coordinates (i.e. not scaled).  This would suit a 4" driver.  The example shows a driver that uses 6 mounting screws, and demonstrates how to rotate the hole pattern around the speaker aperture.  The STL files for this example are not included, but they can easily be produced by the script.  If you are unfamiliar with OpenSCAD, note that you can block out (or ‘comment out’) a section of code by surrounding it with ‘/*’ and  '*/' (see the examples in the code).  So to generate this full size ‘natural’ waveguide, remove the /* and */ from around that section of the code, and make sure that unused speaker definition examples are commented out.  Use the same approach to create your own speaker definition - perhaps start with an existing definition and copy-and-paste it to start your own. 

The above are only examples - please use the script to generate an enclosure to suit your own driver(s) and electronics, and please post the results for all to see.

There are many other customisable parameters, which are described in the comments in the script.  Of note is the fact that, unlike guppyk2's original, the waveguide profile is not braced until the sides of the enclosure are fitted, so it will be quite flexible when it comes off the printer.  The rigidity of the whole assembly is ensured by recessing the side panels with the shape of the waveguide, so that they grip it.  The depth of this recess is customisable with the side_recess parameter.  I found that any inaccuracy in printing the sides, e.g. a stray filament or any lifting at the corners during printing, would make the sides difficult to fit unless the edges of the waveguide are rounded ('filleted') slightly.  Setting the fillet size (the wave_fillet parameter) to less than or equal to the amount of recess ensures that the waveguide is firmly gripped by the sides.  No fillet is applied when generating the sides so as to leave a little room in the corners of the recess to cope with some printing inaccuracy.

The extra_elec_depth parameter allows you to move the wall between the electronics cavity and the driver cavity.  A positive value will increase the depth of the electronics cavity by stealing this amount from the driver cavity - useful if you have a particular PCB you need to fit into the cavity.  A negative value will increase the driver cavity on that side at the expense of the electronics cavity.  Compare the images above of the 40mm example and the 2-way example, for instance, to see this in action.

The sides are intended to be screwed to the waveguide. Slots are provided in the waveguide to accommodate trapped nuts.  In an attempt to ensure that these nut slots print cleanly without stray filament blocking the holes, I have placed a small conical gap 'above' each horizontal nut slot (hidden within the side walls).  The image below shows the solid that is ‘subtracted’ from the waveguide to create a nut slot.

When printing the waveguide it is therefore important that you don't change the Z-orientation of the STL file, i.e. don't flip it over, since these conical gaps should remain 'above' the nut slots.  The two nut slots for the back plate are printed vertically, so don't have these conical gaps.

The screw holes in the sides are intended to take socket cap head screws, but button head screws would probably work well too with the cap head settings.  Or you could tweak the make_left_side/make_right_side routines to replace the cap head recesses with conical countersink recesses.  There is code within those routines to do this - just uncomment it and comment out the cap head lines.  Conical countersink recesses tend to print more cleanly than the cap head recesses, given that both sides should be printed 'outer face down' (i.e. if you use the script to generate a separate STL for the right side, perhaps to include a display aperture, it needs to be flipped).  For my 3" driver enclosure, M3 nuts and bolts work well - I specified a screw_diam_sides of 3.3mm to ensure that the holes are clearance holes but remain 'snug'.

It's tricky to ensure that the nut slots are tight enough to hold the nuts gently during assembly, but not so tight that the nuts are difficult to insert.  There is an option to print a small test piece so that you can tweak the screw_diam_sides, screw_diam_back and nut slot dimensions to suit your printer and filament settings.  The nut slot dimensions are specified with the nut_thickness and nut_AF parameters.

Note that the nut slots for the front of the bottom of the waveguide will always be visible (unless omitted).  The nut_slot module generates nut slots such that they point along the x-axis (see above), and they are then rotated so that they point in the desired direction.  Use a 135 degree rotation to put these two slots 'inside' the waveguide.  Use a 45 degree rotation to put them on the outer face, e.g. if the speaker will always be placed 'upright' and the slots can be covered with rubber feet.  This rotation angle is not a customisable parameter, but see the nut_slots module for details of where to apply the desired angle.

I haven't attempted to make sure that only sensible, workable values of all the customisable parameters can be selected.  It's quite possible, for instance, to select nut and bolt sizes that would be too big for the specified enclosure, leading to thin walls or even break-through of the nut slots, for instance.  I'd recommend that you design your enclosure iteratively, before attempting to print it.  A visual sense-check in the renderer will tell you if the overall design is about right.  When you slice the model for your printer, check a few crucial layers to make sure that the bolt holes and nut slots leave enough wall thickness everywhere.

A note about the coordinate system:  The enclosure is modelled on it's left side, with its top-left-front corner at the origin.  Throughout the script, I have referred to width, depth and height - these correspond to the X, Y and Z directions respectively, NOT the enclosure's width, depth and height when it is stood up on its base.  Of course, if you choose to lie the enclosure on its side, as you might for the stereo 1.5" example for instance (see cover photo), then they DO refer to the same width, depth and height, but I think it is more natural for the enclosure to stand up such that the driver is above the waveguide exit.  So, confusingly, the ‘left’ side is the one that is generated below the waveguide, and the ‘right’ side sits on top of the waveguide.  

Print Settings

I printed the larger waveguides using 3 perimeters and 20% Gyroid infill.  I've printed some at 10% infill and they work fine - they also shave an hour or so off the printing time!  For the examples in the photos I've used the awesome Tecbears Shiny Silk Copper PLA (at the time of writing this now appears to be available only as part of a 3-pack, but hopefully it'll be available singly again), with 235° first layer, 220° other layers, 60° bed temperature, outside perimeters first.  I turned the model 35° anticlockwise, then set the seam position to ‘rear’.  The texture on the side panels comes from this textured bed plate, and I used the Tecbears black PLA.

Model origin

The author remixed this model.

License