Saturday, October 1, 2022

DIY Soldering Fume Extractor from a PC Fan

 


In a previous blog post and YouTube video, I repurposed a desktop power supply into a fixed and variable benchtop power source.  In this post I'm going to continue to repurpose components from that same PC, this time taking the CPU fan and creating a soldering station fume extractor with LED lighting.

As I covered in those prior posts, there are lots of components that can be reused for DIY projects.


As mentioned above, I've already covered reusing the power supply.  Now, I'm going to use the CPU fan.  As I find myself soldering more and more in my projects, I needed to find a way to move the toxic fumes (primarily from the flux) away from my face and to prevent breathing them when working in close proximity to the parts being soldered.  A CPU fan would work perfectly for this.  And I could add some additional task lighting along the way.

Most PC fans run off of 12V DC, so the simple solution would be to just extract the fan, hook it up to a 12V source and plug it in each time soldering was happening.  But what fun is that?  I'm going to add LED lighting to assist with soldering those small parts.  And both the fan and LED lighting will have independent switches, so one can be used without the other.  To control all of this, ESPHome will be used on an ESP8266.  While the system will be fully functional without any sort of automation hub (or even wifi), the use of ESPHome will technically allow us to bring the LED lighting into Home Assistant.

If you prefer, you can watch a YouTube video of this project build.

Parts List


As always, I like to start out with the parts I used.  Note that there is a lot of optional components and a lot of different ways that this could be put together.  The parts I list here are just what I used to build mine as covered in the rest of this article.  In some cases, I used what I already had on hand (like the toggle and push buttons), so lower cost alternatives could be substituted.

Qty

Items

Notes

1

12V 5A Power Supply

 

1 / 2

Adjustable Buck Converter

One if using the PWM controller

0 / 1

PWM Motor Controller

Substitute for one buck converter

1

Wemos D1 Mini (ESP8266)

 

1

1m WS2812b pixels 100/m

60/m for less light, 144/m for more light

1

ElectroCookie Solderable Breadboard

 

1

Logic Level Shifter

 

1

1000 µF Capacitor

Optional

2

Wago Lever Nuts – 3 conductor

 

1

12V Toggle Switch

 

1

Normally Open Push Button

 

1

Speaker Mesh Fabric

Not a true filter!  Just used to cover fan.

1

Pk Aluminum LED channel

See note*

1

Roll 3M Double sided Mounting Tape

 

 

Misc. wire 18-24 gauge

 

 

 

 


Some of these links may be Amazon affiliate links.  Use of these links will not affect your pricing, but this blogl may earn a small commission if you make a purchase.  Use of these Amazon links is one the best ways to show your support for the blog... at absolutely no cost to you!

*Note on aluminum channel.  This is a great product for mounting your LED strips, although it can be a bit pricey.  I only used it for this project because I had extra already on hand.  You could just as easily use the double-sided tape and the LED strips, or just the LED strips alone (although the LED strip adhesive tends to come loose over time).

Obviously, you need basic small electronics tools... such as wire strippers, soldering iron and solder (although you could probably make a version without soldering with wiring nuts, spade connectors, etc.).  I also used hot glue and a glue gun in my project.  And you'll want some scrap wood or other material to act as a mount for the fan, lights and other components.

Removing the Fan from the PC


The exact steps to remove the fan will vary based on the particular computer, but it is pretty straight forward.  Disconnect any wires connecting the fan to the motherboard (this will usually be a single molex connector, but again, yours may vary) and unscrew any shrouds or screws holding the fan in place.


For my fan, I just needed to remove two screws holding the CPU heat sink in place.  Pressing a small tab at the bottom allowed the whole fan unit to simply slide up and out of the cabinet.  After removal, I took the fan outside and cleaned out all the old dust with some compressed air.




Note that the label on this fan states 1.6A at 12V.  This info will become important later, so check your particular fan and make note of its ratings.  Cut off any connectors, leaving the wires that connect to the fan.  You may have multiple wires and colors connecting your fan, but we are primarily interested in the voltage and ground lines... normally red and black.  The other wires are normally used to control and/or monitor the speed of the fan by the main motherboard.  We won't be using those wires in this project... but don't cut off any wires off from the fan until you are sure you have identified the primary voltage and ground wires.


Building the Controller


This controller is needed for the LED lighting.  LED light strips will not light up without a controlling signal... in other words, you cannot just apply power alone.  The actual controller itself is very similar in layout to the controller I've built for other LED projects and covered in more detail in this blog article.

Click image for larger view

This deviates from the standard LED controller in a couple of ways.  The biggest difference is the addition of the buck converter (leftmost component in above picture).  Since the power supply is 12V, but the Wemos D1 Mini and LEDs requires 5V, the voltage has to be stepped down.  The particular buck converter that I used will accept an input voltage from 4.5V - 28V, and can step that down to anywhere from 0.8V - 20V.  This is adjusted by a small screw on the board.  You should hook this up to your 12V supply and adjust this set screw to get an output of 5V before connecting to the controller board.

The middle component is a logic level shifter.  It will take the LED output signal from the Wemos D1 Mini (which is 3.3V) and boost it to the 5V expected by the LED strip.  Now, it is possible that you can skip the shifter and run the 3.3V signal to the LED strip.  This will generally work if the wiring distance is kept short, but I prefer to spend the ~$1 for the shifter to assure a good strong signal.  If the lights flicker, fail to respond or show the incorrect color, this is almost always a sign of insufficient voltage on the data line.  To see an example of what happens when you have too little voltage on the signal wire, see this video on Logic Level Shifter with WS2812b LEDs.

The logic level shifter connects to 3.3V and ground on one side of the board (powered by the 3.3V pin on the D1 Mini) and to 5V and ground on the other.  The data signal from the D1 Mini is then connected to one of the four channels on the low voltage side (LVx) and the shifted 5V signal is connected to the same channel (HVx) on the high voltage side.  This shifted signal then runs out to the LED strip.


Here is the completed controller, mounted in a 3D printed enclosure.

The Controller and Maximum Current


As I've mentioned in numerous other videos and blog articles on LEDs and LED controllers, you normally should not run the power for more than just a few LEDs through the controller or controller board.  Neither of these components are rated for high current.  In addition, the particular buck converter I'm using is rated at 3 amps max.  I have a total of 48 LEDs, as I am using WS2812b pixel strips with 100 pixels/m.  At a maximum 100% bright white, each pixel can draw up to 0.06A:

48 pixels x 0.06A = 2.88A

While this is still slightly under the max rating for the buck converter, it is probably more than should really be run through the ElectroCookie board with its small traces.  I'm going to do a couple of things to help mitigate this:


On the underside of the board, I'm going to add wire and bridge the connections where the incoming power comes in from the buck converter and goes out to the LED strip.  The wire can safely carry more current than the small traces.

In addition, I'm going to limit the maximum brightness using ESPHome to about 85%.  This should drop the max amps to under 2.5A... which should be OK with the additional wiring.  But again, don't attempt to run larger LED installations through either the controller board or the Wemos D1 Mini (or any microcontroller for that matter).

ESPHome Code


As opposed to WLED, which has hundreds of lighting effects and a ton of features, I will be using ESPHome for this controller.  First, since the primary purpose here is to provide additional light while soldering, a plethora of colors and effects really aren't needed.  But more importantly, ESPHome has the ability to run automations and respond to events locally on the microprocessor.  This means that no external system, such as Home Assistant or NodeRed are needed for its functionality.  Everything will run locally on the controller.  In fact, it can even run and function fully without a wifi connection (see note below however about watchdog reboots).

Of course, with ESPHome's native integration in Home Assistant, the entities created can be accessed and used in Home Assistant if desired.

While ESPHome does have some support for fans, it's not really for the type of fan I'm using, so the controller will only deal with the LED lights.

I'll skip the 'standard' part of the ESPHome code that is created automatically when you create a new node.  This includes wifi credentials, password or encryption key for the API, OTA password, etc.  You can find more information on these items if desired, from the official ESPHome web site.

The following code is what needs to be added to the standard template for the LED lights and the push button controls*:

light:
  - platform: neopixelbus
    type: GRB
    variant: WS2812X
    pin: GPIO2
    num_leds: 48
    id: fanlights
    name: "Solder Fan"
    on_turn_on:
      then: 
        - light.control:
            id: fanlights
            brightness: 85%
    
binary_sensor:
  - platform: gpio
    pin: 
      number: D5
      inverted: true
      mode: 
        input: true
        pullup: true
    name: "Solder Fan Button"
    id: solder_button
    filters:
      - delayed_on: 50ms
    on_click:
      - min_length: 80ms
        max_length: 800ms
        then:
          - light.toggle: fanlights
      - min_length: 1000ms
        max_length: 2000ms
        then:
          - light.dim_relative:
              id: fanlights
              relative_brightness: -20%
              transition_length: 0.1s
          - delay: 0.1s
 
 # Switch enables remote reboot from Home Assistant
 switch:
  - platform: restart
    name: "Solder Fan LED Restart"

*This code was current as of the time this article was published (ESPHome version 2022.6.3).  But like Home Assistant, ESPHome is regularly updated.  Subsequent versions of ESPHome may require changes to the above.  You should always check the official ESPHome web site for latest changes.  

To describe a bit of this code:

Light:
This is the LED light entity.  I'm using the NeoPixelBus instead of FastLED because at the time of this article, FastLED had issues with the latest Arduino framework.  But from a functional standpoint for this project, the two libraries are interchangable.

I'm using WS2812b RGB pixel strips, so I indicate the type as 'GRB' and the variant as 'WS2812X'.

Next, you must indicate the GPIO pin number for the data signal to the LEDs.  I used D4, which is GPIO2.  You must also indicate the total number of LED pixels to be controlled.  This is 48 in my case.

I then give the entity an 'id'.  This can be used in local automations to control the entity.  The 'Name' is the entity name that will be assigned in Home Assistant as part of the native integration.

Next comes one of the advantages of ESPHome over WLED... a local automation.  In this case, when the lights are turned on, the brightness is automatically set at 85% (the max for my install).  This occurs each time the lights go from an 'off' state to an 'on' state... all locally... no Home Assistant needed!

Binary Sensor:
This is the push button that will be used to control the LED lights.  First, the platform in this case is GPIO, since our button is hooked up to a GPIO pin.

Next, we must indicate which GPIO pin the button is using.  Whether the button presses should be inverted and whether a pull up resistor is necessary depends upon a number of factors, including the pin you are using.  If you look at the ESPHome logs for your device and, like mine, it shows "off" when you press the button and "on" when you release it, you need to specify the inverted: true flag.  If you are using a pin that isn't already pulled high (or low), you may need to pull up that pin to prevent floating values.  You can see the values for my button and the D5 pin on the Wemos D1 Mini above.  You may need to experiment and/or use the logs if your build is different.  What you want is to see binary sensor "on" when you press the button and "off" when you release it.

Like the light entity, the button has an 'id' for use in local automations and a 'name' for the Home Assistant integration.

I added a short 50ms delayed_on filter to debounce the button.  This prevents the button from reporting multiple on/off values during a single press.

Finally, there are the local automations.  I am using the 'on_click' event, but ESPHome also has multiple other event types for a binary button, such as on_double_click and on_multiple_click.  I'm using 'on_click' because it allows you to define multiple actions based on the length of time the button is held down. I've basically created the equivalent of a single click and a long-press.

If the button is pressed and released within 800ms (just under 1 second), then the light just toggles from on to off, or from off to on.  Essentially, this is the on-off switch.  If the button is pressed and held for between 1 and 2 seconds (long press), then the brightness of the lights are decreased by 20%... until they are eventually off.  And since the light automation sets the brightness to max (85% in this case), the brightness can be reset at any time by just toggling the light off and back on again.

There are many different ways to create the above automation.. or to even enhance it for other features.  Again, refer to the ESPHome web site for more details on using automations. The key here is that the automations are running locally on the microprocessor and not via a third party system.

Switch
This is just something I add to all my ESPHome devices.  It just provides me a switch to remotely reboot the device if needed.  Not too important here, but in some cases, the ESPHome device isn't readily accessible, so I can reboot it remotely.  You can include or omit this entity as you see fit.

Home Assistant
Just because the automations are running locally doesn't mean that you can't also use Home Assistant.  After you load the code and power up the controller for the first time, you will be prompted to integrate it into Home Assistant.  If you do so, a Home Assistant entity will be created for each entity defined in the ESPHome code:


You can use these entities in any automations or scripts lust like any others.  In addition, if you wish to control the LEDs manually (e.g set brightness or color), you can do that with the light entity:

Lights set to 60% brightness and blue


Assembling the Station


Now it's time to wire everything together.

Click on image to enlarge

Everything here is pretty self-explanatory, but I'll hit the highlights.  

The 12V 5A power supply is split off into two separate feeds.  One runs to the 'IN' side of the buck converter on the controller board.  The controller board wiring is covered above, but the LED light strip and a normally open push button are also connected to the controller.

The second 12V feed from the power supply runs to a toggle switch that will control the fan.  

Fan Speed Control - "Fixed"

I opted to use a second buck converter between the toggle switch and the fan itself.  I did this so that I could reduce the voltage to slow the fan down a bit (and in turn lower the noise).  At a full 12 volts, the fan was extremely powerful... in fact, it would walk itself across the desk before it was mounted... but it was also pretty loud.  I reduced the voltage to around 7.5V, which made the fan significantly quieter, yet still had enough suction to remove fumes when soldering.  You mileage may vary based on the particular fan you are using.  If you do opt to use the buck converter, assure it is rated for the amps the fan might pull (see the note above about knowing the fan's ratings) and test it before final mounting.  


I used a variable bench power supply (actually the one that I built from the power supply from the same computer that supplied the fan).  I could then vary the voltage to find the right combination of speed/power vs. noise.  I then used this value to set the buck converter.

Note that while a fan might run at a lower voltage (say 5V) if it has already started spinning, a lower voltage might not be enough to start the fan when stopped.  So be sure to test the selected voltage to assure it will start the fan spinning when turned on.  You could also add something like a pwm controller if you want the make the fan adjustable (see below).  I initially opted to skip this, as I was pretty much happy with the single consistent speed-to-noise ratio.  I could adjust the buck converter if I really want to change the speed, but this wasn't convenient due to the location and access to the tiny screw used to set the voltage.  But eventually I upgraded this to a variable speed controller.

Fan Speed Control - Variable

As I mentioned above, if you want to be able to easily adjust the speed of the fan, the buck converter can be replaced with something like a PWM (pulse width modulation) DC motor controller.


Again, assure that the PWM controller is rated for the max amps that the fan might draw.  Earlier I noted that my fan will draw 1.6A at 12V.  This particular controller is rated for a max 2A.


The motor controller is wired just like the buck converter.  The 12V supply is wired to the power side and the output to the fan is wired to the motor outputs.  So, if you opt to use the PWM controller, simply swap it out for the buck converter in the above wiring diagram.

You could also theoretically use a PWM pin on the ESP8266 to control the fan speed.  But as I mentioned earlier, my goal is that the entire station functions 'stand-alone' with the need to use an app or browser to control any of the functions.  Using a GPIO pin for fan control would either require external control of the addition of yet another button, switch or knob... and the associated wiring that goes with it.  For this reason, I opted to use the external PWM controller.

Side noteDon't make the beginner's mistake that I did and think that you can just use a basic potentiometer for speed control.


These types of potentiometers are generally rated for very low maximum power, like 1/8 of a watt (0.125W).  The fan could pull up to 19W of power (12V x 1.6A) when the resistance is lowered to near zero... 150x the rating for the potentiometer!  I ignored Ohm's Law and generated some magic blue smoke from my potentiometers... not once, not twice, but three times before I thought maybe I ought to think about voltage, amperage and resistance.  Remember, Ohm's Law is a law... not just a suggestion!

Mounting the components

I mounted the fan so that fumes were pulled "into" the fan and away from the parts being soldered, as opposed to having the fan blow across the parts.  This also means the fan can be placed in any position near the soldering and the fumes will be pulled away.  If the fan were to 'blow' the fumes, it would have to be positioned so as not to blow the fumes into your face!

As far as mounting the components, that it totally up to you!  I had some scrap lumber laying around and opted to repurpose that scrap.


I used 1/2" MDF for the base, and 1"x2" pine for the front frame.  The front frame acts as a handle for carrying or moving the station, provides a place to mount the toggle and push button and as the mounting surface for the front LEDs.


I used my normal aluminum LED channel to mount the LEDs.  This is just because I had some left over from previous projects, but you could just as easily mount the LEDs directly to the frame (or use the 3M double-sided tape for more adhesion). 


Short jumpers are used to connect the corners.  Remember that the data signal only flows in one direction, so pay special attention to the arrows on the LED strip that indicates this direction.


This is a closer look at the toggle button and buck converter for controlling the fan.  I just used a drill and router to make the mounting holes for the components... and liberal amounts of hot glue to hold everything in place.  I was going for function over appearance for this project!  If using the variable speed PWM controller, just modify the design, removing the buck converter and mounting the PWM controller so that the speed control knob is accessible.


Here you can see that the fan is mounted to the base with a couple of 3D-printed brackets that line up with the mounting holes already in the fan.  Similarly, a 3D-printed bracket was designed to hold the speaker mesh in place over the back of the fan.  The speaker mesh is not truly a filter... you could substitute something like a carbon-activated filter if desired... but in my case, it was just to prevent fingers or parts from contacting the spinning fan blade while still allowing adequate airflow.

And lots of hot glue was used just to keep wiring and other components in place (e.g. the Wago lever clips, the power supply, etc.).

Final Results



Using an old PC fan and a lot of other spare or leftover parts from other projects, I only needed to spend less than $20 to buy two buck converters and a 12V power supply.  The result is that I have an easily portable and storable 'solder fume extractor' station with dimmable task lighting.  It might not be the prettiest or fanciest device I've every made, but it does the trick!  And it runs completely locally, without the need to fire up Home Assistant or a mobile app to control it.



So far I've repurposed parts from a 16 year old server that had been sitting in a closet to create a benchtop power supply and now a soldering station fume extractor.  While the case may be starting to look a little 'empty', I think there are still some usable components left that can be repurposed and given a new life.  Stay tuned for more!

Links


Supporting this blog and related YouTube channel


If you'd like to support future content on this blog and the related YouTube channel, or just say thanks for something that helped you out, you can use any of my Amazon links to make a purchase at absolutely no cost to you.  Or if you prefer to say thanks directly, you can buy me a one-off cup of coffee at:


No comments:

Post a Comment

To help eliminate spam and to keep all conversations civil, submitted comments are moderated. Therefore your post may not show up immediately. Please be patient as most reviews are completed within a few hours.