a DIY ventilation cabinet for resin printing (with ESPHome)


Posted

in

by

introduction

To keep myself sane as I write my PhD thesis, I have been allocating short periods of free-time to work on a few hands-on projects here and there; this is one of them. Anyway, I have recently acquired a resin 3D-printer and am putting together an enclosure to exhaust the apparently carcinogenic fumes out of my office. The rough plan was to buy a cheap laminex cabinet and duct it outside through the window with a fan.

design

the enclosure

The printer and curing station sit inside an IKEA TONSTAD Cabinet that I bought from the pre-loved section for a healthy discount. It has some dents and scratches on a couple of the panels, but they’re honestly pretty minor. I will not be detailing the assembly here. You can see one of the corner holes below.

Figure 1. Photo of the back of the TONSTAD cabinet, showing one of the holes.

This thing is heavy and it feels pretty solid. Anyway, the first stage of the project was to design some flange-adaptor-thingys to attach a 100 mm aluminium ventilation duct (from Bunnings) to, as well as route in the power cables for the printer and the wash-and-cure station. The TONSTAD has these rectangular holes conveniently placed at the top corners of the cabinet; I used one for the duct and one for the power. The outer panels of the cabinet have a bit of a lip, so I included some raised sections on the parts shown below to keep the panel flat against the back.

Figure 2. CAD screenshots of the panels, cabinet-side (left), outside (right).

I printed them out of orange eSUN PLA+ on my Creality K1C, and used copious amounts of duct tape to seal them against the back of the cabinet. This will be back against the wall so I don’t have to look at my hideous work. The duct seems to sit on there fine with the help of a few zip-ties but I might revise the interface to have a groove for them to sit in if I encounter any problems.

Figure 3. Photo of wire cover for the printer and cure station.
Figure 4. Photo of 100 mm duct cover.

the fan

Fortunately my hoarding tendencies have blessed me with a NMB 4715KL-04W-B86 12V 2.5A cooling fan from an old Dell server I looted for parts a long time ago. This thing is cool, it hovers on my desk at max speed. I decided to place a carbon filter on the intake, so I designed a frame to sandwich in-between the duct adaptor and the fan. The parts I printed used M3 holes, but the version uploaded to Printables (soon) should have M4. I just didn’t have any M4 bolts at the time.

Figure 5. CAD screenshots of the frame to hold a carbon filter and the duct adaptor.

the plank

Armed with the cheapest hole-saw kit that I could find in Bunnings and a plank of pine, I created the masterpiece of carpentry you see below. I painted on a coat of white primer and what could best be described as hellish white goop at the bottom of a paint can in the shed. I’m pretty sure this is what’s on the walls inside. You can see the consistency on the end of the Paint Mixing Stick ™. I was tempted to paint it bright orange to match the 3D-printed parts, but thought that might be a bit too function over form, even for me.

Figure 6. Photo of a roughly cut piece of pine, primed and painted white.

The idea is to sandwich the plank between the other side of the fan and a vent to keep any direct rain from entering the fan. I thought about just putting some flyscreen over the outside but I couldn’t find any to spare, so I designed/printed a custom vent cover.

Figure 7. CAD screenshot of the outside vent, featuring a reference to Bottom Gear.

I printed this out of black Overture PLA Pro, but I will likely reprint it with a material more suitable to outdoor exposure. The window colour doesn’t quite match, but it’s better than orange. I also put a strip of self-adhesive door sealing foam around the edge of the plank to squish up against the window; it isn’t perfect but it definitely helps. I’ve included a photo of the foam I used at the end of the project to avoid it looking like an ad.

Figure 8. Photo of outside the window showing the plank and vent.

the controller

Arguably the most fun part of the project, the bit that involves ESPHome. There isn’t much to this as I couldn’t be bothered to implement any physical user interface. Besides, it’s probably going to be difficult to reach. The fan controller just sends a PWM signal to the fan, and reads the tachometer signal coming from the fan to measure the RPM. I’ve included the relevant ESPHome config stuff at the end of the post. There’s a generic DC-DC stepdown converter to drop the 12 V input to 5 V for the board. The 4 wires on the fan are connected via terminal blocks because the fan didn’t have a connector on it and I couldn’t be bothered putting one on.

Figure 9. Photo of controller electronics in 3D-printed enclosure, mounted on the plank.

The enclosure isn’t anything fancy, it has some cool hexagons on the lid. I included some countersunk holes on the bottom so I could mount it directly onto the plank with some wood screws (as shown above).

Figure 10. CAD screenshot of the enclosure for the fan controller.

conclusion

The fan works well with home assistant picking it up straight away. Although I haven’t verified the RPM readout, it seems in the ballpark. I also sealed some gaps in the back of the cabinet with duct tape as you can see below, as ideally I want the air to be coming from the gaps around the doors, past the boxes spewing VOCs and out the window. I haven’t tested out how well it keeps the smell of resin out, since I wanted to have at least some form of ventilation setup before I started printing. Thankyou for reading 🙂

Figure 11. Photo of the completed vented cabinet and extraction fan.

appendix

some ESPHome config stuff

With reference to this forum post, this is the relevant config for the fan control and tachometer readout.

output:                                                                                                                                                                         
  - platform: esp8266_pwm
    id: fan_speed
    pin: D2
                                                                                                                                                                  
    frequency: "25000 Hz"
                                                                                                                                                                  
    min_power: 0%
    max_power: 100%

sensor:
  - platform: pulse_counter
    pin:
      number: D1
      mode:
        input: true
        pullup: true
    name: Fan Speed
    id: d1_fan_pulse
    unit_of_measurement: 'RPM'
    filters:
      - multiply: 0.5
    count_mode:
      rising_edge: INCREMENT
      falling_edge: DISABLE
    update_interval: 5s

fan:
  - platform: speed
    output: fan_speed
    name: fan speed
    id: fan_toggle

door/window seal

Figure 12. Photo of the door seal stuff I stuck on around the edge of the plank to contact the window/frame.

comments

Leave a Reply

Your email address will not be published. Required fields are marked *