
A distributed embedded security system needs a physical presence that matches its purpose. For NetSentinel's field node — the turret that houses the MAX32630FTHR, the ESP32-CAM, and the NEMA 17 stepper motor — a custom enclosure was designed in Fusion 360 and printed on a Voxelab Aquila X2. This blog covers the design process, the mechanical concept, and the physical assembly.
Two Nodes, Two Physical Forms
The two MAX nodes have completely different physical forms reflecting their different roles.
MAX Node 1 lives on the operator's desk. It is built on the Particle Ethernet FeatherWing ProtoBoard with the MAX32630FTHR in slot 2 and the CharlieWing 15x7 LED matrix in slot 3. Its enclosure is compact and oriented so the LED matrix is always visible to the operator. This node does not move — its job is to be seen.
MAX Node 2 is the field turret. It needed a mechanical design that could rotate a camera through a surveillance arc, house a full Feather stack, and do it all with components already on hand. The solution came from an unexpected place: a lead screw from a 3D printer Z axis.

The Lead Screw Mechanism
The pan mechanism is built around a T8 lead screw — the same Tr8x8 trapezoidal ACME thread used in the Z axis of FDM printers. The NEMA 17 stepper motor (17HS19-2004S1, 200 steps/rev, 2A/phase) drives the lead screw directly through the motor's shaft coupler. Rather than using the lead screw for linear motion as it would in a printer, here it acts as a rotating vertical axis — the NEMA spins the screw and the ESP32-CAM mounted at the top of the screw rotates with it, sweeping the surveillance arc.
The base connection is minimal by design: the lead screw couples directly to the NEMA 17 shaft through the red coupler that came with the screw, with no additional printed parts at the base. This kept the mechanical design simple and the motor easily replaceable.
ESP32-CAM Mount — Fusion 360 Modification
The ESP32-CAM mount at the top of the lead screw was designed in Fusion 360. Rather than modeling from scratch, an existing ESP32-CAM case was downloaded as a base and modified directly. The key addition was a square block on the lateral face of the case with a hole sized for the T8 screw — 8.5mm diameter with a T8 ACME thread profile. This block positions the camera at the correct height on the screw and keeps it oriented with the lens facing outward through the sweep arc.
The T8 thread in the printed block acts as the mounting point — the case screws onto the lead screw at the desired height and stays fixed there while the whole assembly rotates with the NEMA.
Cable management for the ESP32-CAM was straightforward: since the ESP32-CAM communicates over WiFi, only two wires run up the screw — power and ground. These were left with enough slack to allow the full 180-degree sweep without binding, and the firmware limits rotation to prevent a full 360-degree turn that would tangle the cables.
Print Settings — Voxelab Aquila X2
All printed parts were produced on the Voxelab Aquila X2 in PLA. Layer height was 0.2mm for the main enclosure bodies and 0.15mm for the ESP32-CAM mount where the thread accuracy matters most. Infill was 20% gyroid. Print temperature was 200°C with the bed at 60°C. No supports were needed on any of the pieces.
Assembly Sequence
Assembly starts at the NEMA 17. The motor mounts to the base surface and the T8 lead screw couples to the shaft through the red coupler. The MAX32630FTHR stack — board, Ethernet FeatherWing, and DC+Stepper FeatherWing — sits in its enclosure adjacent to the motor with cables routed to the FeatherWing terminals. The ESP32-CAM case threads onto the top of the lead screw at the desired height. Power cables run up alongside the screw with a small spiral of slack to accommodate the sweep rotation.
What Comes Next
With the physical build complete, the next blog goes into the network layer — the dual-firewall DMZ topology, OSPF routing across FortiGate 90D, FortiGate 40F, and MikroTik RB3011, syslog forwarding to the Raspberry Pi, and the firewall policies that define what each segment can reach.