Building the Void Core: A Hardware Build Log
A behind-the-scenes look at assembling the Void Core prototype -- from 3D printing geodesic panels to first boot.
From CAD to Reality
Building the Void Core prototype was a journey through every discipline of hardware engineering -- mechanical design, electronics, firmware, and a healthy dose of problem-solving. Here is how it came together.
3D Printing the Dome
The Void's geodesic dome is made up of interlocking panels designed in OpenSCAD. For the prototype, we printed every panel on a consumer FDM printer using ABS filament.
Why ABS? Because the dome needs to withstand sustained high-humidity environments. PLA absorbs moisture over time and warps. PETG is an option, but ABS gives us better heat resistance for the UV-C sterilization chamber and better long-term dimensional stability.
Print settings that worked for us:
- Layer height: 0.2mm for a good balance of speed and surface quality
- Infill: 15% gyroid -- enough strength without wasting material
- Wall count: 3 perimeters for water resistance
- Temperature: 240C nozzle, 100C bed with an enclosure
- Support: Tree supports for the panel clips, easily removed
Each panel takes about 3-4 hours to print. The full dome is 12 panels plus the base ring, so budget about two days of continuous printing. We recommend printing a test panel first to verify fitment before committing to the full set.
Electronics Assembly
The Void Core's brain is an ESP32-S3 development board. It is powerful enough to run PID control loops, serve a WiFi dashboard, and handle multiple sensor inputs simultaneously -- all for under $10.
The sensor suite includes:
- BME280 -- Temperature, humidity, and barometric pressure on a single I2C breakout. This is the primary environmental sensor that drives the control loops.
- Reed switch -- Detects whether the dome lid is seated. When the lid is removed, the UV-C system is hardware-interlocked off, regardless of firmware state.
- MOSFET driver circuits -- Two N-channel MOSFETs control the humidifier (ultrasonic disc) and the FAE fan. PWM-capable for variable speed control.
The wiring is straightforward but attention to detail matters. The MOSFET gates need pull-down resistors to prevent floating states during boot. The BME280's I2C lines need 4.7k pull-ups. The reed switch connects to a GPIO with an internal pull-up enabled in firmware.
The UV-C Safety Interlock
This is the most important design decision in the Void Core: UV-C safety is enforced in hardware, not software.
UV-C light (254nm) is effective at sterilizing air and surfaces, but it is also dangerous to skin and eyes. Software can have bugs. Firmware can crash. So we designed a hardware interlock that physically cannot be bypassed by code.
The reed switch on the dome lid connects in series with the UV-C power supply. When the lid is lifted, the circuit breaks. The UV-C LED cannot receive power regardless of what the firmware is doing. This is a fundamental safety principle: never rely solely on software for physical safety.
In firmware, we also check the reed switch state and refuse to activate the UV-C cycle if the lid is not detected as closed. But this is a secondary safeguard. The hardware interlock is the primary safety mechanism.
First Boot
Uploading the firmware for the first time is always a moment of truth. We flashed the ESP32 via USB-C, opened the serial monitor, and watched the boot sequence:
The BME280 initialized on the first try. Temperature: 72.4 degrees Fahrenheit. Humidity: 45% RH. Exactly what we expected for an open room environment.
Next, we closed the dome and triggered the humidifier. Watching the humidity climb from 45% to 85% in under three minutes was deeply satisfying. The PID controller kicked in at 85% and held it steady within plus or minus 2% -- good enough for any species in our library.
The FAE fan cycles on a configurable schedule. For the initial test, we set it to 30 seconds every 15 minutes. The brief humidity dip during fan cycles recovers within a minute.
Lessons Learned
Wire management matters. The inside of the dome is humid. Loose wires collect condensation droplets that can bridge connections. We added cable channels to the base ring in v2 of the design and potted the MOSFET board with conformal coating.
Sensor placement is critical. The BME280 needs to be positioned where it reads representative conditions, not right next to the humidifier output or the FAE fan inlet. We mounted it on the dome wall at substrate-block height, with a small shield to prevent direct mist contact.
ABS warping is real. Our first batch of panels had minor warping on the larger pieces. Adding mouse-ear brim pads to the corners and using an enclosure with controlled temperature solved it completely.
What is Next
The prototype works. The control system is stable. Now we are focused on:
- PID tuning optimization -- Getting humidity hold even tighter, especially during FAE cycles
- WiFi dashboard -- A local web interface served by the ESP32 for monitoring and configuration
- Companion app -- Push notifications for harvest readiness, humidity alerts, and growth tracking
- Community firmware features -- Species profile library, data logging, and OTA updates
Want to build your own? All the files, firmware, and documentation are available on our build page. The build takes about a weekend with basic soldering skills and a 3D printer.
This is an open-source project. Every design file, every line of firmware, every build guide is freely available under CERN-OHL-P-2.0.
Share this post