Liquid Metal 3D Printer
I developed the software and control stack for a modified 3D printer that fabricates stretchable liquid-metal strain sensors. My work covered ROS 2 architecture, printer-dispenser synchronization, the operator interface, firmware changes, calibration, and automated sensor characterization.
Sensor Fabrication
The process prints gallium directly onto a cured silicone substrate, then encapsulates the trace beneath a second silicone layer. Compared with the earlier mold-based injection process, direct printing makes it much easier to change sensor geometry without building new tooling for every design.
ROS 2 Control Architecture
I separated motion, pneumatic extrusion, and the user interface into independent ROS 2 nodes. That keeps the printer’s G-code stream isolated from slower user-interface and dispenser operations during a print.
- Printer node: streams G-code to the Prusa i3 MK3S+, handles mold-alignment transforms, and reads serial responses on a dedicated thread so command writes stay non-blocking.
- Dispenser node: implements the Nordson Ultimus V serial protocol, including framing, checksums, and command handshaking.
- GUI node: handles jogging, registration, parameter tuning, and emergency-stop commands without interrupting print execution.
Interface and Registration
I built the operator interface in wxPython for manual control, calibration, and live process tuning. It can jog and home the printer, send raw G-code, control the dispenser, adjust pressure and vacuum settings, and preview transformed toolpaths before a print starts.
The registration workflow records four physical reference points and computes the transform needed to align generated paths with a mold. Saved registration profiles make repeat setups much faster; the workflow reduced setup time by about 70%.
Firmware and Calibration
The stock printer firmware was written for thermoplastic extrusion, so I modified the C/C++ firmware for the heavier syringe toolhead and external gallium heater. This included thermal limits and fault handling, lower acceleration and jerk, and updated thermistor calibration.
Repeatable deposition also required tuning the relationship between motion speed, pressure, nozzle height, and pneumatic timing. I used pressure sweeps and calibration patterns to reduce pooling, broken traces, and start/stop artifacts, and adjusted multilayer paths to avoid unnecessary repositioning moves.
Sensor Characterization
Once the printing process was repeatable, I automated the characterization workflow. Python scripts control a Dynamixel-driven test rig, run repeatable displacement profiles, and log force and resistance measurements in sync. Post-processing aligns repeated trials so changes in electrical resistance can be compared against mechanical deformation.