Skip to main content

← All posts

Build Log

Borealis Hardware Hits the Bench

· 4 min read

The Borealis parts landed this week. The firmware has been written and building clean for a while, waiting on something to actually talk to. Now there is real hardware on the bench, and the next phase is the unglamorous one: wire it up, prove every sensor reads, then start cutting the case.

Borealis is the environmental and safety sensor node for the inside of the rig. Temperature, humidity, real CO2, VOC trending, carbon monoxide, and propane. One CAN node, one ribbon to the sensors, and a steady stream of frames to Headwaters so the dashboards have something to draw and the alarm logic has something to fire on.

What showed up in the box

The bill of materials is short on purpose. Four sensors, one carrier board, a handful of passives.

  • Waveshare ESP32-S3-RS485-CAN. The carrier. ESP32-S3 with 8 MB PSRAM and a built-in isolated CAN transceiver on GPIO 15 and 16. Wide-range 7 to 36 V DC in, or 5 V over USB-C for bench work. The same board pattern we are using on Reservoir and Switchback, which means the firmware skeleton, the OTA path, the WiFi-over-CAN provisioning, and the discovery handshake are all already proven on this silicon.
  • DFRobot SEN0536 (Sensirion SCD41). Photoacoustic NDIR for real CO2, plus temperature and humidity. This is the one that tells you whether the rig is actually getting fresh air or just recycling what is already inside it.
  • DFRobot SEN0394 (Sensirion SGP40). VOC trending. Not absolute ppm of anything in particular, but a 1 to 500 index that rises when something has changed in the air. Cooking, off-gassing from a new piece of foam, somebody opening a tube of solvent. The kind of thing you want a number for, even if the number is not in any particular unit.
  • DFRobot SEN0466. Factory-calibrated electrochemical CO sensor, 0 to 1000 ppm. This is the one that matters when somebody runs a generator too close to the slide-out.
  • DFRobot SEN0131 (MQ-6). Propane and LPG. The hot wire heats a tin oxide bead, and the resistance drops when combustible gas hits it. Cheap, noisy, slow, and exactly the right tool for a leak detector that sits low to the floor and watches a tank line.

What gets done first

The wiring is the next milestone, not the case. Until the four sensors are talking and Headwaters is logging frames, there is nothing for the enclosure to wrap around.

The first pass is a ribbon to a small breakout, not a PCB. The SCD41, SGP40, and SEN0466 all sit on the same I2C bus on GPIO 5 and 6. The MQ-6 is the one analog sensor and gets its own GPIO 3 line through a 10 k and 15 k resistor divider, because its raw output swings to 5 V and the ESP32-S3 ADC pin is a 3.3 V part. A 100 nF cap from the divider midpoint to ground keeps the heater hash out of the reading.

That divider is the one thing that has to be right on the first try. If the MQ-6 signal hits the ADC pin at 5 V, the pin is done, and so is that GPIO. So the bench checkout starts with a multimeter on the breakout header before the carrier is ever powered up with the MQ-6 in circuit. 3.3 V on pin 1, 5 V on pin 2, and the ADC line sitting below 3 V with the divider in place. Anything else and we stop and fix it.

The slow parts of bringing a sensor online

Two of the sensors need time before their readings mean anything, and there is no shortcut.

The MQ-6 needs 24 to 48 hours of continuous power in clean air before its baseline resistance settles. That is not a quirk of this part, it is how every metal-oxide gas sensor behaves. The heater drives moisture and contaminants off the bead, the surface chemistry stabilizes, and only then does an Rs/R0 ratio of around 1.0 in clean air actually mean clean air. Trigger the calibration too early and every reading after that is wrong, because R0 itself is wrong.

The SEN0466 carbon monoxide cell needs about an hour on first power-up after it leaves the factory to settle to a true 0 ppm baseline. Electrochemical cells are stable once they are warm, but they do not start warm.

So the bench plan is to wire everything, power it on, let it run quietly overnight, and only then start running the validation checklist that lives in the repo. The first day is mostly waiting, which is fine. The firmware is already publishing frames the whole time, so we will know within the first ten minutes whether anything is wrong with the wiring even if the numbers themselves are not trustworthy yet.

Then the case

Once the sensors are talking and the thresholds are firing the right alarm bits in the safety frame, the work shifts into FreeCAD. Borealis has constraints the other modules do not.

The MQ-6 wants to sit low, 10 to 30 cm off the floor, because propane is heavier than air and pools downward. The SCD41 wants to sit at sleeping-zone height, roughly a meter and a half up, because the CO2 you care about is the CO2 you are actually breathing. Those are two very different mounting heights, which means the case design has to either accept a separate sensor pod on a longer cable, or live with one of the two sensors being in a sub-optimal position.

Current thinking is a main enclosure at sleeping-zone height for the carrier, CO, CO2, and VOC sensors, with the MQ-6 broken out on a longer lead to a slim low-profile housing that sits on the floor near the propane line. Two pieces, one CAN node, one set of frames going up to Headwaters. We will see how that survives contact with the bench.

The enclosures themselves will follow the same conventions as the rest of the platform. Interior module, so the body prints in ABS. STL files in the repo when they are settled. Hero render and assembly animation when the design is locked.

Where to follow along

The full arrival checklist, the wiring diagram, and the ribbon-cable pinout are already in the Borealis repo under DOCS/. The firmware source, the CAN protocol, and the threshold tables are in the README. If you want to build one alongside us, the parts list above is the whole shopping list. Everything else is documented and open.

Next post on Borealis will be after the burn-in finishes and the first real CO2 reading lines up with a reference outside the front door. The one after that should have a case.