This project began at Duke University in collaboration with Dr. Tyler Bletsch.
Let’s start with the basics. If you’re unfamiliar, electroplating is the process of coating a surface with a metal—typically zinc, copper, or nickel—using an electrochemical reaction. You’ve seen the results in your local hardware store: many steel bolts and fasteners are zinc-plated for corrosion resistance. Electroplating is also common in jewelry finishing. Compared to other coating methods like galvanizing, electroplating is highly customizable and uniform, offering micron-level control over thickness.
But what if we don’t want uniform plating?
There are masking techniques like tape or wax, but those are only practical for simple, binary designs: a surface is either plated or not. I wanted to explore something more nuanced—variable plating where some regions are subtly plated, allowing gradients or even fully recognizable images to be formed in metal. This opens the door to both manufacturing and artistic applications. But I wanted to start simple, and see if I could take any image and "print" it with metal onto metal.
The mechanics behind electroplating works by running an electric current through a solution (called an electrolyte) that contains dissolved metal ions. The setup typically involves two electrodes: the anode — the donor metal that provides ions for plating — and the cathode — the object you want to coat (the workpiece). Both electrodes are submerged in the electrolyte bath, and a DC power supply drives current through the system. The anode is connected to the positive terminal, and the cathode to the negative terminal. As current flows, metal atoms from the anode oxidize into positively charged ions and dissolve into the solution. These ions then migrate toward the negatively charged cathode, where they gain electrons and deposit as solid metal, bonding to the surface.
To build this system, I used a 3018 benchtop CNC router for precise three-axis motion. A plastic basin filled with the electrolyte bath sits on the machine bed with the cathode workpiece fixed inside. A custom 3D-printed nozzle, holding the anode, is mounted in the spindle position of the CNC. The anode and cathode are connected to a constant-current power supply. The CNC router is controlled by a desktop computer running Candle, which serves as the G-code sender.
I wrote a custom Python script that converts images into G-code instructions for the CNC. The script processes an input image, applies a gamma correction function to translate greyscale pixel brightness into dwell time, and then generates G-code that moves the nozzle across the cathode. For each pixel, the nozzle pauses for a specific amount of time, allowing metal to deposit proportionally to the pixel’s darkness. This dwell-time-controlled plating creates a physical representation of the image in metal, with brighter areas receiving less plating and darker areas receiving more.
However, mapping image intensity to dwell time isn’t universal. The relationship changes depending on factors like the metal used, the surface material, electrolyte concentration, and electrical parameters. To manage this, I used a nonlinear gamma correction function, adjusting values like the minimum and maximum dwell time and the gamma coefficient. Calibration was necessary for each plating setup. I would generate a series of test gradient lines, each using different gamma values but the same brightness inputs, and then evaluate the results to find the most visually linear gradient.
I also experimented with more analytical methods for calibration. I photographed test pieces under consistent lighting, analyzed the relative brightness across the gradient using image processing, and plotted the results to identify linear regions. This method could pinpoint the most effective gamma value and appropriate endpoints. But in practice, I found that eyeballing the results was often just as effective, especially because multiple gamma values...
Read more »