Greetings, everyone, and welcome back. Here’s something practical and exciting—a DIY fume extractor powered by the Raspberry Pi Pico.
This project was built entirely from scratch, starting with a repurposed CPU fan and a custom driver board to control it. We designed a compact enclosure that neatly houses all the components, making it both functional and visually clean.
The aim was simple: to create a reliable soldering aid for my new desk setup. I didn’t have a fume extractor, and rather than buying one, I decided to build my own, something tailored to my workspace, with the features I actually needed.
To enhance usability, we added a built-in light source that illuminates the soldering area, which is a huge help during precision tasks. Both the fan and the light are controlled via individual push buttons, each offering a four-step dimming cycle:
• The first press activates at 50% power
• The second press boosts to 75%
• The third press reaches full 100%
• The fourth press turns the output off
The entire system runs on an external 12V power supply, connected through a DC barrel jack mounted on the rear of the unit. For the exhaust, we’re using a 12V 0.18A PC fan salvaged from an old computer. We’ve also included a DIY smoke filter that’s easy to swap out, keeping the air clean while you work.
This article walks you through the full build, from concept to final assembly, so let’s dive in and start building!
Materials RequiredThese were the components required during the build.
- Custom PCBs (Provided by PCBWAY)
- Raspberry Pi PICO 2
- AO4406 N Channel Mosfet IC SOIC8 Package
- 10K Resistors
- 8205S Mosfet SOT23-6 Package
- AMS1117 3.3V
- 10 uF 1206 Package Capacitor
- 1 uF 1206 Package Capacitor
- M7 Diode SMA
- 12V PC FAN
- Barrel DC Jack
- 4x4 Tactile Push Buttons
- 2835 Warm White 3.3V LED
- 3-Ohm 1206 Package Resistor
- Connecting wires
- 3D-printed parts
- M2 Screws
We began the main design of this project by importing a 3D model of a DC fan into Fusion 360. From there, we built a cuboid-shaped enclosure around it. One half of the enclosure houses the fan, while the other half contains the light source, two push buttons, and the Pico Driver circuit.
The second half features a switch PCB with two 4x4 tactile push buttons, each topped with a custom switch actuator. We also added a circular LED PCB fitted with four warm white LEDs to serve as the light source. To soften and spread the light, a diffuser was placed over the LED PCB.
To control the entire setup, we designed a long Pico Driver PCB that includes the Raspberry Pi Pico and supporting components. A rear lid was added to the enclosure, which holds a DC barrel jack for powering the system via an external 12V supply.
Above the fan, we created a circular opening in the enclosure and designed a custom grill that pressure-fits into place. This grill allows the fan to draw in smoke from the front. On the rear lid, we added another circular section with grills and a top-side opening. This area is intended to hold smoke-absorbing material, allowing the fan to pull air from the front and pass it through the filter section at the back.
Finally, we designed a base stand with a holder that securely attaches the upper body of the fume extractor to the stand. For the enclosure body and lid, we used transparent PLA. The stand and holder were printed in white PLA, while the switch actuators, front fan grill, and grill cover were printed in orange PLA to create a clean, dual-tone aesthetic.
CIRCUIT DESIGNThe circuit schematic is divided into three main sections: the Pico setup, the AMS1117 voltage regulator, and the MOSFET switch configuration.
At the heart of the project is the Raspberry Pi Pico, which serves as the main microcontroller. To power it from a 12V source, we’ve added an AMS1117 voltage regulator circuit that steps down the voltage to 3.3V, suitable for the Pico’s operation.
To control the DC fan and LED, we use MOSFETs configured as electronic switches. In this setup, the load’s positive terminal is connected to VCC, while the negative terminal is connected to the MOSFET’s drain. When a control signal is applied to the gate, the MOSFET conducts, completing the circuit and powering the load. This allows the Pico to switch high-current devices like fans and LEDs using low-voltage GPIO signals.
We used an AO4406 MOSFET to drive the DC fan and an 8205S MOSFET for the LED. The LED PCB consists of four SMD LEDs connected in series along with a current-limiting resistor.
Both the driver and LED PCBs were designed by tracing the board outlines from the 3D model, ensuring a perfect fit within the enclosure
PCBWAY SERVICEOnce the board design was finalized, we placed three orders for three different PCBs. The PICO DRIVER Board PCB and LED PCB were both ordered in white solder mask and black silkscreen. For the Switch PCB, I opted for a purple solder mask with white silkscreen and uploaded the Gerber files to PCBWay’s quote page for fabrication.
The quality was excellent—clean finish, sharp silkscreen, and everything matched the design perfectly.
Over the past ten years, PCBWay has distinguished themselves by providing outstanding PCB manufacturing and assembly services, becoming a trusted partner for countless engineers and designers worldwide.
Also, PCBWay is organizing the PCBWay 8th Project Design Contest, a global event that invites makers, engineers, and innovators to showcase their most creative builds. With categories in Electronics, Mechanical, and AIoT, it’s a great opportunity to share your work, connect with the community, and compete for exciting prizes.
You guys can check out PCBWAY if you want great PCB service at an affordable rate.
LED PCB ASSEMBLY- We begin with the LED PCB assembly process, which starts by adding solder paste to each LED footprint using a soldering dispensing syringe. Here, we are using 63/37 Sn/Pb solder paste.
- Next, we pick and place all SMD components, which include four LEDs and a single resistor, onto the LED PCB.
- We then lift the PCB and place it on our reflow hotplate, which heats the board from below up to the solder paste’s melting temperature. When the PCB reaches 200°C, the solder paste melts, and all components are securely connected to their pads.
- Next comes the switch PCB assembly, which was super simple. We just pick and place both 4x4 tactile push buttons into their designated positions.
- Then, we flip the board over and solder all the push button pads using a soldering iron.
- Now comes the Pico Driver PCB assembly process, which begins by adding solder paste to all the SMD component pads. This driver board doesn’t include any through-hole components, so we only need to carry out SMD assembly.
- We pick and place all the SMD components one by one, starting with the Raspberry Pi Pico, followed by smaller components like MOSFET ICs, resistors, and capacitors.
- Once everything is in place, the board is transferred to a reflow hotplate, which heats the PCB up to the solder paste’s melting temperature. As it reaches around 200°C, the solder paste melts and securely bonds all components to their pads.
- We begin the wiring process by referring to the provided wiring diagram. First, the positive and negative wires from the DC fan are connected to the designated FAN terminals on the driver circuit.
- Next, we connect the LED PCB’s positive and negative leads to the LED terminals.
- Following that, three wires are attached to the A, B, and GND terminals of the switch PCB.
- These are then routed to the Pico Driver circuit with wire A connected to GPIO4, wire B to GPIO5, and the GND wire connected to the GND pin.
This is the code we prepared for this project and it's a simple one!
// Pin assignments
const int FAN_PIN = 0;
const int LED_PIN = 1;
const int BUTTON_FAN = 4;
const int BUTTON_LED = 5;
// State trackers
int fanState = 0;
int ledState = 0;
// Debounce
unsigned long lastFanPress = 0;
unsigned long lastLedPress = 0;
const unsigned long debounceDelay = 200;
void setup() {
pinMode(FAN_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_FAN, INPUT_PULLUP);
pinMode(BUTTON_LED, INPUT_PULLUP);
}
void loop() {
unsigned long now = millis();
// FAN button logic
if (digitalRead(BUTTON_FAN) == LOW && now - lastFanPress > debounceDelay) {
fanState = (fanState + 1) % 4;
applyPWM(FAN_PIN, fanState);
lastFanPress = now;
}
// LED button logic
if (digitalRead(BUTTON_LED) == LOW && now - lastLedPress > debounceDelay) {
ledState = (ledState + 1) % 4;
applyPWM(LED_PIN, ledState);
lastLedPress = now;
}
}
void applyPWM(int pin, int state) {
switch (state) {
case 0: analogWrite(pin, 128); break; // 50%
case 1: analogWrite(pin, 204); break; // 80%
case 2: analogWrite(pin, 255); break; // 100%
case 3: analogWrite(pin, 0); break; // OFF
}
}
We started by defining the pin assignments for each component:
• FAN_PIN (GPIO0) is used to control the fan using PWM.
• LED_PIN (GPIO1) handles PWM control for the LED.
• BUTTON_FAN (GPIO4) is assigned as the input for the fan control button.
• BUTTON_LED (GPIO5) serves as the input for the LED control button.
int fanState = 0;
int ledState = 0;
Next is the State Tracking. These variables track the current state (0 to 3) for each output.
unsigned long lastFanPress = 0;
unsigned long lastLedPress = 0;
const unsigned long debounceDelay = 200;
We added a Debounce Logic that Prevents false triggers from button bounce by enforcing a 200ms delay between valid presses.
void setup() {
pinMode(FAN_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_FAN, INPUT_PULLUP);
pinMode(BUTTON_LED, INPUT_PULLUP);
}
In Setup Function we set output pins for PWM and input pins with internal pull-up resistors for buttons.
if (digitalRead(BUTTON_FAN) == LOW && now - lastFanPress > debounceDelay) {
fanState = (fanState + 1) % 4;
applyPWM(FAN_PIN, fanState);
lastFanPress = now;
}
This is the Fan Button Logic, Each button press cycles the fan through 50%, 80%, 100%, and OFF.
if (digitalRead(BUTTON_LED) == LOW && now - lastLedPress > debounceDelay) {
ledState = (ledState + 1) % 4;
applyPWM(LED_PIN, ledState);
lastLedPress = now;
}
Similarly, we have set up LED button Logic that works the same as the fan.
void applyPWM(int pin, int state) {
switch (state) {
case 0: analogWrite(pin, 128); break; // 50%
case 1: analogWrite(pin, 204); break; // 80%
case 2: analogWrite(pin, 255); break; // 100%
case 3: analogWrite(pin, 0); break; // OFF
}
}
We added the PWM Control Function (applyPWM) here the state values are converted into PWM duty cycles, where a value of 128 corresponds to approximately 50% power, 204 represents around 80%, 255 delivers full power, and 0 turns the output off completely.
FAN ENCLOSURE ASSEMBLYAfter positioning the fan inside the front enclosure, we put the PICO DRIVER in its proper location to start the Front Enclosure Assembly process.
ENCLOSURE SWITCH ASSEMBLYUsing hot glue, we secure the Switch PCB in place after placing the two 3D-printed Switch actuators in their respective positions on the front enclosure.
LIGHT SECTION ASSEMBLY- We begin by passing the LED PCB into the slot located in the light section of the enclosure. Once aligned, it’s secured in place using two M2 screws.
- Next, we install the LED diffuser from the front; it’s designed to be push-fitted snugly over the PCB, ensuring a clean and even light spread.
- A DC barrel jack is mounted on the rear lid of the enclosure. We’ve added a circular opening where the jack is secured using the included nut.
- The positive and negative terminals of the DC jack are soldered to the VCC and GND pads of the Pico Driver circuit.
- Next, the lid is positioned on the backside of the enclosure and fastened using four M2 screws.
- Finally, we install the front grill onto the circular opening above the fan; it’s designed to be pressure-fitted securely in place.
- For the smoke filter, we’re using a folded piece of cotton cloth, which is placed inside the smoke filter holder located on the back lid.
- A filter grill is then positioned on top of the holder and secured using three M2 screws. This setup locks the cotton filter firmly in place.
When the fan draws air from the front, it passes through this filter section. Smoke particles get trapped in the cotton cloth, helping to purify the air and make the workspace safer.
While the cotton cloth works well for basic filtration, the setup can be improved by replacing it with a carbon filter, which offers more effective smoke absorption and better overall performance.
FINAL ASSEMBLY- We now begin the final assembly process by attaching the base holder to the front enclosure using an M6 nut and bolt. This joint allows the fume extractor to tilt and adjust its angle as needed.
- Next, we secure the base holder to the base stand using two additional M6 nuts and bolts. With this step completed, the full assembly of the fume extractor is finished and ready for use
This compact yet powerful build delivers a fully functional DIY fume extractor with an integrated light source. Despite its small size, it’s packed with smart features—including adjustable fan speed, dimmable lighting, a custom-designed enclosure, and a replaceable smoke filter.
At the heart of the system is the Raspberry Pi Pico, which handles control duties with ease. It manages two MOSFETs to drive two separate 12V loads—the fan and the light—all through a simple two-button interface.
Whether you're soldering fine components or working in dim conditions, this extractor keeps your workspace clean, safe, and well-lit.
Overall this project has been completed and all the files are attached, which you can download and make your own fume extractor!
Thanks for reaching this far and I will be back with a new project real soon.
Peace
Comments