Building a Shop Air Filter with Box Fans

Over the years, I’ve seen many versions of a shop air filter, made from box fans and 20×20 inch furnace filters. A few years ago I picked up some old box fans on Facebook Marketplace and bought a pack of filters from Sam’s Club. They’ve been stacked in the corner.

It was finally time to build my air filter. I removed the back covers, feet, handles, and knobs from the fans. I got my first look at the switches inside, which are nearly identical.

I’d easily be able to wire the fans together, so I removed the switches and power cords.

I put together a frame from OSB, cut slots to feed the wires through, and screwed the box fans in.

Then I grabbed wood that had been salvaged from a pallet to construct a door.

On the back side, I used glue and brad nails to attach plywood rails. I also made tabs to hold the filters secure.

I attached the door with a couple hinges and made some notched tabs to hold the door shut.

Then it was time to work on the wiring and electronics. I had recently watched a YouTube video showing how to make an old fan smart and his code with ESPHome and Home Assistant gave my a great start. I bought a 4 channel relay board to use with a an ESP8266 development board, a button, and some LEDs. I tore open an old USB power plug and was originally going to tie in the 120 volt line, but decided against it. First, I tested out the circuit and code on a breadboard and then soldering things up more permanently.

A plastic screw container was a good side, so I used hot glue to secure the boards and then wired up all of the fan connections.

I’m not sure if I’ll ever use the button, but it allows me to cycle between the three speeds and turn it off. The three LEDs show which speed is currently running. The only thing I got wrong was reversing the low and high speeds, which was a quick fix in the ESPHome code. Speaking of the code, here’s mine.

esphome:
  name: shop-air-filter
  friendly_name: Shop Air Filter

esp8266:
  board: d1_mini

logger:
  level: WARN

api:
  encryption:
    key: "input_yours"

ota:
  - platform: esphome
    password: "input_yours"

wifi:
  min_auth_mode: WPA2
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.2
    gateway: 192.168.1.1
    subnet: 255.255.255.0

time:
  - platform: homeassistant
    id: home_time

binary_sensor:
  - platform: gpio
    pin: {number: D5, mode: INPUT_PULLUP, inverted: true}
    name: "Speed Button"
    on_press:
      then:
        - script.execute: cycle_fan_speed

  - platform: template
    id: active
    lambda: 'return id( fan_speed ).state > 0;'

switch:
  # Relays
  - platform: gpio
    pin: D3
    id: speed_1
    inverted: true
    interlock: &fan_interlock [speed_1, speed_2, speed_3]
    internal: true
  - platform: gpio
    pin: D2
    id: speed_2
    inverted: true
    interlock: *fan_interlock
    internal: true
  - platform: gpio
    pin: D1
    id: speed_3
    inverted: true
    interlock: *fan_interlock
    internal: true

  # LEDs
  - platform: gpio
    pin: D6
    id: led_1
    internal: true
  - platform: gpio
    pin: D7
    id: led_2
    internal: true
  - platform: gpio
    pin: D8
    id: led_3
    internal: true

number:
  - platform: template
    name: "Fan Speed"
    id: fan_speed
    min_value: 0
    max_value: 3
    step: 1
    optimistic: true
    restore_value: true
    on_value:
      then:
        - script.execute: set_shop_filter_speed

text_sensor:
  - platform: template
    name: "Current State"
    id: current_state

sensor:
  - platform: duty_time
    name: "Filter Runtime"
    id: shop_filter_usage
    sensor: active
    restore: true
    unit_of_measurement: h
    accuracy_decimals: 1
    filters:
      - multiply: 0.000277778 # Convert seconds to hours

button:
  - platform: template
    name: "Reset Filter Timer"
    icon: "mdi:timer-off"
    on_press:
      then:
        - sensor.duty_time.reset: shop_filter_usage

script:
  - id: set_shop_filter_speed
    mode: restart
    then:
      - switch.turn_off: speed_1
      - switch.turn_off: speed_2
      - switch.turn_off: speed_3
      - switch.turn_off: led_1 
      - switch.turn_off: led_2
      - switch.turn_off: led_3
      - delay: 300ms 
      - lambda: |-
          if ( id( fan_speed ).state == 0 ) {
            id( current_state ).publish_state( "Off" );
          } else if ( id( fan_speed ).state == 1 ) {
            id( speed_1 ).turn_on();
            id( led_1 ).turn_on();
            id( current_state ).publish_state( "Low" );
          } else if ( id( fan_speed ).state == 2 ) {
            id( speed_2 ).turn_on();
            id( led_1 ).turn_on(); id( led_2 ).turn_on();
            id( current_state ).publish_state( "Medium" );
          } else if ( id( fan_speed ).state == 3 ) {
            id( speed_3 ).turn_on();
            id( led_1 ).turn_on(); id( led_2 ).turn_on(); id( led_3 ).turn_on();
            id( current_state ).publish_state( "High" );
          }
  - id: cycle_fan_speed
    then:
      - lambda: |-
          int next_speed = id( fan_speed ).state + 1;
          if ( next_speed > 3 ) next_speed = 0;
          id( fan_speed ).publish_state( next_speed );

I used Google Gemini to help and it had a great suggestion to track the run time and add a maintenance reminder when it was time to replace the filters.

In Home Assistant I created some automations. My dust collector uses a smart plug, so when it draws electricity, the air filter automatically turns on at high speed. When the dust collector turns off, the air filter continues to run for 15 minutes before turning off. If I had to remember to turn on the air filter all the time, it would rarely happen, so this is amazing.

I’m still on lifting restrictions for several weeks so Brandi helped me install the air filter on the ceiling.

I wish I hadn’t waited so long to build this!

DIY Shop Towel Bar

With my big shop table done and a lot of storage space to fill, I finally started to tackle the boxes and piles of things that have been sitting in the corner for nearly a year and a half. First up was towels, rags, cleaning supplies, and first aid. We had an unused plastic shelving unit, so I put it to use. It went between my Ryobi cordless tool wall and the utility sink.

Finally trying to pick things up!

I’ve been draping a hand towel over the edge of the sink since moving in and now I had a place to mount a towel bar. I quickly cut some 2×4 to size, so it would fit between the edges on the side of the top shelf.

Truss head screws, so they’re less likely to pull through the plastic.

Then I drilled four holes in the edge of that shelf and mounted the piece of wood. I drilled two more holes in a piece of PVC and mounted it to the wood.

Ignore the sand marks.

This was a quick project and it’s extremely useful. I love simple shop builds where functionality is the most important requirement.

Several years ago my aunt made me Lions and Red Wings towels that I use in the shop.

If you’re looking for a much nicer towel bar/rack, check out the rustic ones with hooks I made for Brandi’s old house or the combo of black walnut and railroad ties for our old previous house.

Outfeed Assembly Table – Part 3

Time to finish this table. While part 1 and part 2 were quite involved, the rest was all about drawers. I needed to make use of the rest of the space inside the table.

First, I got to work on a cabinet next to the router station, on the front of the table. I wanted to use five sets of cheap drawer slides I salvaged from an old dresser. I had enough room for four deeper drawers, using 22″ slides. I took measurements and sketched out a plan. I had to design around the vice, which hung down below the frame of the table.

I cut a full bottom panel and some 2x4s for extra bracing. I wanted to make good use of space and have the most room for drawers on the right side of the table, so the vertical supports were made in the odd L shape again. The one on the left was cut to match up with the one from the router station.

In the middle, I needed something up top to connect to, so I cut a piece of 2×4 and would secure it in place after determining the exact width of the left drawer column. The vertical on the right needed some cut away around the vice.

Then I was able to cut all of the drawer sides, with two different depths for the different types of slides I was using. Or so I thought.

As I was going over some of my notes I realized I didn’t cut the back part of the middle and right verticals tall enough. To fix the mistake, I glued and pocket screwed on some patch pieces. I also had to recut longer sides for two drawers. From there I figured out the width of the left drawers based on the foam router bit storage tray I was using. Then I cut the fronts, backs, and bottoms for the five left drawers.

Assembly was quick with glue and brad nails.

I modified the old drawer slides with an angle grinder to remove tabs that were in the way for my use case.

I mounted the slides to the verticals for both columns of drawers. Then I was able to secure the left and right verticals to the table frame, attach slides to the left drawers, and put them in to guide the placement of the middle vertical. It got screwed in, along with the upper 2×4.

With the left column of drawers in, I figured out how wide the remaining parts needed to be for the right column of drawers and got them done. Then it was time for some drawer fronts and a false front, since the vice prevented a drawer from being installed there. This gave me a place for a recessed power strip with USB. I didn’t have enough matching handles, so I used two different styles I’ve bought at estate sales.

I filled in a few drawers.

I will never combine different drawer slides in a cabinet like this again. It was a major pain in the ass and too much to keep track of with the different mounting methods, widths, depths, and clearances. I had to adjust the placement of the old slides many times and alter some drawers. Wasn’t worth it.

The drawers for the right side of the table was much of the same and went together a lot faster. The table frame is slightly out of square, so the bottom drawer was a touch too tight and the top too loose. I had to route a recess on one and add some spacer material on the other. The handles were cut out of a test piece from the nightstands I made.

I cut a piece of shiplap paneling and closed off the back of the shelf. This leaves a little unused area in the middle back of the table. If I took out the drawers I could hide something back there. Shhh!

The saw outfeed and the huge work area are already amazing to have. This is really going to improve my processes in the shop. Here are some final photos.

DIY Bird Spikes

We noticed a robin trying to build a nest on top of our back patio’s security camera. I wasn’t going to let that fly, but after seeing how much is costs to by 20x the amount of bird spike I needed, I made my own. I cut a scrap piece of aluminum, drilled holes in it, added nails, and held them in place with double-sided tape. I wasn’t confident it would hold, so I used zip ties.

Network Rack Cart

Part of our plan for the house included Cat6 Ethernet ports all over so I can wire in as many devices as possible and keep Wi-Fi for devices that need it. My original plan for the network rack was to build a cabinet on the wall, but the space between the hot water heater and the wall is pretty tight.

I decided to build a cart instead, especially since there is enough slack on the Ethernet cables that’ll allow me to pull the cart out and turn it to get at the sides of the rack. When we moved I took apart my old work table, which left me with three plywood panels and pieces of 2×4 glued to them. I thought they would make a good top, bottom, and shelf for this cart and I was tired of moving them around the shop.

I pulled out castors, washers and nuts.

Then drilled recesses and holes in the base so I could attach the castors right away.

I cut notches out of the middle panel and squared up the edges on all of the panels.

I cut 2x4s for the vertical supports, assembled the frame, and put OSB on the back. I learned my lesson with the old work table and didn’t use any glue here since I’m treating this as a shop project and would like to have the option of taking it all apart if/when I want to change the design.

To blend the cart in to the wall, I cut and attached shiplap panels.

I made corner trim from 2x4s and painted it.

I didn’t want to make doors, so I had the idea to make a hidden siding door. I was going to have it slide up out of the top. Thankfully my wife suggested it slide to the side, which is much better.

I made a hole in the back for the power cable and a hole in the top to line up with the bottom of my network rack.

Then I screwed the rack down, wheeled it in place, and loaded it up.

Now I can start wiring up the Ethernet and configuring all of the network hardware.

Doubling My Spray Can Storage

A little over a year and a half ago I made a box with dividers for storing spray paint.

It was built to slide in a shelf at the old house. I was able to get it out and moved to the new house. The 16″ depth was wasted space though. Look at how deep the cans were when laying with the back on the ground (those higher ones are actually a tall can on top of a standard can).

It turns out, a great size for spray cans is about eight inches, so I split it down the middle and wrestled out all of the dividers, which were partially glued in place.

Stack ’em, screw ’em together, and nail a back on the new half.

It was very tippy, so I rounded the corners on a larger piece of plywood to make a more stable base and pulled out office chair casters. The casters wouldn’t be great for any heavy shop furniture, so this was the perfect project to use them.

Cutting more dividers and then redoing all of the slots was the worst part of this project. It took well over 250 cuts on the table saw.

A handful of the new hardboard pieces were too long and needed to be trimmed. Other than that, the assembly went much smoother than I expected, with a little persuasion from a dead blow hammer. I have no idea why I used glue on that first iteration. Maybe it was needed with the deeper box, but this one is very stable without a drop of glue.

This is another great upgrade to the shop. After adding all of my spray paint, lubricants, spray adhesives, and other oddball cans there is plenty of room for more.

Saw Blade Holder

Before I make the outfeed table for my table saw I figured I would work on things to organize everything for the saw. There is a big open space under the right wing, so I’ll be making a cabinet to hold the sled, jigs, blades, and accessories. I had an idea for a saw blade holder, so I took a chunk off an old 6×6″ post, cut some slots, and trimmed the height and length.

I’ll give the holder some sanding around the edges, but otherwise this is done. It’s nice when a build goes according to plan, especially a quick shop project.

Home Gym Weight Plate Storage v3

During the move, version 2 of our weight plate storage was tossed in the trash because we sold our 55 pound plates and wanted to evenly split the plates on either side of the rack in our new gym.

I took some measurements and did a little math for a general idea of how much wood I’d need.

Grabbed some old oak flooring and started processing it on the miter saw, planer, and table saw.

I realized I had measured the full width of the plates, which I don’t need since the storage racks are only at the bottom. After recalculating, I cut a bunch of the dividers and did a mockup, when I realized I could add another slot to hold the barbell collars. The extra spacing on the sides of the plates ended up being less than my original guess as well.

Then I to cut everything to size, and drilled a lot of holes.

The assembly process was complicated, since I had to individually square up and attach eight dividers. Then the other side needed to have glue applied to all eight dividers before getting 16 holes to line up.

The second one is always easier and I was able to use the assembled rack as my 90° to clamp to.

More sanding and then black paint. Brushing on the paint with the oak’s grain pattern was a challenge, especially in some of the small gaps between dividers, so it took many coats.

The area looks a lot cleaner and the weights will be a lot easier to use.

Here are the final dimensions for anyone who wants to build their own:

  • All wood: 5/8″ thick and 3-11/16″ tall
  • Front and Back: 27-3/8″ long
  • Dividers: 15-1/4″ long
  • Gaps between dividers:
    • 2×45#: 5″
    • 2×35#: 3-7/8″
    • 2×25#: 2-15/16″
    • 15# + 2×10#: 5-5/8″
    • Metal 10#: 1-1/8″
    • Metal 2×5#: 1-1/4″
    • Collars: 2-5/8″

Everything will depend on the size of your plates though. I measured the thickness of our plates and ended up adding a half inch for the gaps, which feels good for moving the plates in and out.

A Shop Safety Cabinet for PPE

I’ve wanted some type of cabinet in my workshop for PPE and earlier this year I saw a cool cabinet that I thought might be perfect. Fast forward to the new house, the wall, and a new shop (post coming soon), so when I saw the Facebook Marketplace listing again I jumped on it.

Aren’t the graphics great on those green stickers? I only paid $25 for this Sellstrom Model 2000 Germicidal Cabinet. A new one is currently 51% off on Amazon, which brings it down to $599 and replacement UV light bulbs cost over $100! This unit had some rust, like it had been sitting in a puddle, but otherwise it barely seemed used. The light bulb still works and so does the timer pictured below, which can be set to run for up to 5 minutes. You can also see the UV light bulb on inside the cabinet, through that tiny window.

I used a razor blade to scrape as much of the rust off as I could and then used a sanding block. I cleaned the areas with mineral spirits and masked them off with painter’s tape. The bare metal got a coat of rusty metal primer.

The few inside corners were painted with a non-matching white, which nobody will see. I painted the bottom exterior area with some black, which turned out great. I hung the cabinet near the door and surrounded it with my glove dispenser and other safety stuff.