This post will be mostly about 3d printing air quality and especially air safety. Before starting I want to mention that I am no professional (far from it to be honest), I’m just a hobbyist focused on making my setup as safe as possible - so read the next lines with caution and do not take this as medical / health advice or anything more than a random blog post on the internet. As my two 3d printers are placed inside my “office” (it’s more a hobby room than an office, but let’s keep pretending) and I spend a significant amount of time inside this room, I wanted a way to measure air quality in my room.
The BOM can be found on Printables or MakerWorld .
How it started
This started with an air monitor from AirGradient that I flashed with an ESPHome alternative to incorporate it into my HomeAssistant dashboard. Then I thought about enclosing my i3 Mega S (once this ongoing project is finished there will be a post about it) in an IKEA Platsa cupboard. Though soon after I bought a P1S, which is why this project is currently halted. But the general idea was to implement an air scrubber inside the enclosure with an exhaust filter to have the air pressure inside the chamber lower than outside (basically “air flows in”).
Adapting for the P1S
Basically the P1S already has an exhaust fan (there is a great mod where you can put in your own carbon pellets to filter out VOCs), so I only needed the air scrubber to run while printing. For this I settled for the BentoBox . The Hepa filters are mentioned in the BOM of the project itself, for activated carbon I am using this .
But there is one major drawback (at least for me): I have no idea about the stats inside the chamber. Of course due to the AirGradient I now the “air quality” at my desk, but to really build an automation for the BentoBox to run I needed the exact values inside the chamber. After a quick search on Printables I found a project that tries to do that, but uses a RaspberryPi Pico (which I am not familiar with). Additionally this project didn’t use a particulate matter sensor, which I wanted to include as well.
Building The Add On
As you know from the title, my add on is called “BentoCore” and the idea behind it is simple: the bottom funnel of the BentoBox will be replaced by an adapted funnel with a base piece that allows to house the ESP8266 and the PM2.5 sensor. It should also allow to attach a little breakout case if you wanted to attach the VOC and Temp/Humidity sensor. This is how the final version will look like:

The biggest problem was of course the constrained space, I didn’t want the total height of the tower to be too big, so that’s why I constrained myself with around 35mm of max height (the final base is 33mm in height). Additionally the dimensions in in x and y are already set by the BentoBox itself, though with the “breakout” I cheated a little there. Nevertheless, with the PMS5003 taking up nearly half the internal space (see picture below) I was getting a bit worried that this whole project might be doomed.
While it would definitely be possible to solder the ESP8266 and the few headers for the connections on a breadboard manually I decided to learn a new thing here as well: designing a custom PCB (thanks at this point to Christian
for helping me out with that).
As you can see from the picture the PCB fills up the space neatly and while it certainly would have been possible to incorporate the two I²C sensors into this board, I decided to keep them external.
The last thing I want to mention here are the two “outward” facing ports:
Both are JST-SM panel mounts and the 4 pin version (above) is used to connect the breakout case with the I²C interface on the PCB. PSA: in my opinion (depending on if you plan to place the breakout box on the duct or not) this 4 pin connector is not needed and even rather complicates the connection of the box - nevertheless I wanted to keep the connector as it is still very much possible to just route the cables through the hole of the connector. The bottom one (2 pin) is used to power the whole thing. To ease the routing of the power cables the BentoCore base contains a cutout on the bottom, to route the cables underneath the base. There will be an update soon that will incorporate small pins that will keep the cables inside this channel, as I noticed - when installing my own - that the cables tend to fall out of the channel (if you already printed it just fix them with a piece of tape).
The PCB design
Please note that while I’ve put in effort to design this PCB, I am by no means an expert in PCB design. As such, I must emphasize that any use of this PCB is entirely at your own risk. I cannot be held responsible for any potential damage or issues that may arise from its use. By using this PCB, you acknowledge and accept that I am not liable for any consequences, including but not limited to damage to hardware, malfunctioning components, or any other related concerns. Proceed with caution and ensure you are fully aware of the risks involved.
Now that this is out of the way, let’s talk about my ideas and thoughts behind the PCB design. First of all, I wanted to buy as little parts as possible, that’s why I incorporated a glass fuse instead of an SMD fuse. While the latter would provide a smaller footprint, I tried to do the design without it, as I said to save some costs. The glass fuse is rated for 1A, as I calculated that the total amount of power draw this board and the BentoBox should have, would be around 0.75A - additionally I am using a 1A wallplug to power this thing.
The MOSFET used to regulate the speed of the two fans is an IRLZ34N, again not an SMD part, due to me having the through hole components on hand.
The remaining connectors are just either 2 pin or 4 pin JST-XH connectors and one single pin header. Though one 2 pin JST-XH connector and the single pin header are unused for the BentoCore project, they will be used when I share my Platsa enclosure build (see now it’s coming full circle here 😉).
The microcontroller powering this whole setup should have been an ESP32 at the beginning, though the ESP32s I had on hand were just to big. That’s why I settled for an ESP8266. Maybe I’ll create a future version of this whole project using an ESP32 as this microcontroller provides hardware PWM support and doesn’t need to rely on software as the 8266 does. For now though, I am quite happy with the ESP8266.
The breakout PCB technically doesn’t need to be a professionally manufactored PCB either, as it is basically just an I²C distribution plate, as seen in the picture below.
Again for this project only two of the three connections are needed, but I plan on reusing this for the Platsa enclosure as well. Additionally there might be a version where a small OLED screen will be included in the breakout box lid, as the connection is there and there is still a little bit power left to use.
Assembly
I highly recommend to print all of the files from Printables or MakerWorld but the only necessary parts for this project are the base and the fanduct. The reason behind the fan case is to have the cutout premade so you can route the wires down more easily.
Then you just need to print everything, either order the PCB using the gerber files from github or solder everything together yourself, put in the heat inserts / magnets and wire everything up. The PCBs are mounted using the M2.5 heat inserts and the base and fanduct are connected using the M3 heat inserts. Remember to flash the ESPHome Config to your ESP before inserting it into the base (config can be found on Github ).
That’s it, plug in your BentoCore powered BentoBox and you are good to go. If you want to route the cables inside the P1S/X1C chamber there is a small hole on the left side of the printer where two 22AWG wires fit through very neatly.
HomeAssistant
First of all you need ESPHome to be configured in HomeAssistant. After flashing the microcontroller and plugging everything in, HomeAssistant should detect this device, using the name you gave it (if you did not edit the config from Github it should be P1S BentoBox). Navigating to your devices and selecting this device, after a few minutes you should see something like this:

While the “Lights” switch and the “PWM Enclosure Fan” can be ignored (or entirely removed from the config - as they are only needed in the Platsa enclosure) the “Fan” control should already control your BentoBox fans, if you wired everything correctly. The sensors should give some readings as well (the VOC and PM sensor take a few minutes to fully boot and report values).
Now you can build your own dashboard around this setup (or incoroporate the BentoBox in your existing dashboard). In a future post I’ll share my whole dashboard, but due to it not being finished I’ll only share the BentoBox related stuff right now.
BentoBox “Dashboard”
Basically my dashboard follows a simple layout, I first needed a control slider for the fans then I wanted to keep track on when I changed the activated carbon / hepa filter and lastly some indication of the current air “quality” inside the chamber.

If you want to create this layout for your dashboard as well here is the configuration to achieve that:
1- type: vertical-stack
2 title: BentoBox
3 cards:
4 - type: conditional
5 card:
6 type: custom:mushroom-fan-card
7 entity: fan.p1s_bentobox_fan
8 name: BentoBox
9 icon_animation: true
10 show_percentage_control: true
11 fill_container: false
12 layout: horizontal
13 conditions:
14 - condition: state
15 entity: fan.p1s_bentobox_fan
16 state_not: unavailable
17 - condition: state
18 entity: sensor.p1s_bentobox_fan
19 state_not: unknown
20 - type: custom:decluttering-card
21 template: filter_card
22 variables:
23 - name: Activated Carbon
24 - change_date: input_datetime.p1s_bento_box_carbon
25 - lifecycle_in_months: 1
26 - type: custom:decluttering-card
27 template: filter_card
28 variables:
29 - name: Hepa
30 - change_date: input_datetime.p1s_bento_box_hepa
31 - lifecycle_in_months: 2
32 - type: horizontal-stack
33 cards:
34 - type: sensor
35 graph: line
36 entity: sensor.p1s_bentobox_voc_index
37 detail: 1
38 icon: mdi:air-filter
39 name: P1S VOC
40 - type: sensor
41 graph: line
42 entity: sensor.p1s_bentobox_temperature
43 detail: 1
44 name: P1S ChamberTemp
45 - type: horizontal-stack
46 cards:
47 - type: sensor
48 graph: line
49 entity: sensor.p1s_bentobox_pm_10_0
50 detail: 1
51 icon: mdi:air-filter
52 name: P1S PM10
53 - type: sensor
54 graph: line
55 entity: sensor.p1s_bentobox_pm_2_5
56 detail: 1
57 icon: mdi:air-filter
58 name: P1S PM2.5
59 - type: horizontal-stack
60 cards:
61 - type: sensor
62 graph: line
63 entity: sensor.p1s_bentobox_pm_1_0
64 detail: 1
65 icon: mdi:air-filter
66 name: P1S PM1.0
67 - type: sensor
68 graph: line
69 entity: sensor.p1s_bentobox_pm_0_3
70 detail: 1
71 icon: mdi:air-filter
72 name: P1S PM0.3The filter replacement card is a custom decluttering card (figuring out how this works was mostly due to this HA forum post ):
1filter_card:
2 default:
3 - lifecycle_in_months: 1
4 card:
5 type: custom:button-card
6 entity: "[[change_date]]"
7 name: "[[name]]"
8 tap_action:
9 action: call-service
10 confirmation:
11 text: Did you change the activated carbon?
12 service: script.set_date_to_now
13 service_data:
14 entity_id: "[[change_date]]"
15 custom_fields:
16 lc: >
17 [[[ return (new Date(Date.parse(entity.state))).toLocaleDateString("de-DE") ]]]
18 nct: "Next change: "
19 ncd: >
20 [[[
21 let last_change = (new Date(Date.parse(entity.state)));
22 let next_change = new Date(last_change);
23 next_change.setMonth(next_change.getMonth() + [[lifecycle_in_months]]);
24 return next_change.toLocaleDateString("de-DE");
25 ]]]
26 styles:
27 grid:
28 - grid-template-areas: '"i n lc" "i nct ncd"'
29 - grid-template-columns: 15% 50% 35%
30 - grid-template-rows: min-content min-content
31 icon:
32 - width: 35px
33 name:
34 - font-size: 16px
35 state:
36 - text-wrap: balance
37 - font-size: 0.75em
38 custom_fields:
39 lc:
40 - font-size: 16px
41 ncd:
42 - font-size: 12px
43 nct:
44 - font-size: 12pxConclusion
So far this whole mod has been working great, though I have only been printing PETG / PLA. I definitely look more often at the “air stats” inside the printer (especially before opening). In combination with the AirGradient air monitor this also gives a great indication of when to open the window etc. While I do not claim that this is a bullet proof solution I think it makes a difference just measuring the air around you especially when it comes to 3d printing. I definitely feel a lot safer already, with just printing PLA / PETG. This will definitely become a useful addition once I start printing ABS or other more advanced materials.

Comments