Affordable electrode polishing machine

Polishing electrodes is a daily occurrence in electrochemistry laboratories, and possibly others. Although there good comercial alternatives for buying polishing machines, a widespread and affordable alternative is to repurpose old computer hard drives (HD) as they have a very balanced and sturdy motor/bearing assembly and a flat plater/disc where sandpaper or other polishing material can be attached to for polishing. 

A lot of electrochemistry labs have their on “flavour” of this homemade polishing machine, but there is little documentation on how to build one, and no easy way new labs, or labs without an inclination towards instrumentation, can make one. 

With that in mind we decided to make the instructions, 3D printing and pcb (optional) files, and electronic schemes available for our take on the homemade polishing machine. We call it the “FuNIITriz” which is an amalgamation of our lab name (FuNIILab) and “politriz”, the portuguese word for polishing machine. We made a custom PCB layout (free to download!) to make assembly even easier. Even if you want to make your own polishing machine and not a FuNIITriz, the instruction might be useful. 

The construction relays, obviously, on Arduino microcontrollers. Bellow you will find detailed instruction and info on how to make your own FuNIITriz!

What you will need

- Old computer har drive (HDD): Computer HDD have brushless DC motors which are usually (maybe always?) connected in a “Y” configuration, meaning they will have 4 wires coming out of it, 1 will be a common ground and the other each one of the motor winding. You will only need this 3 motor winding connector to control the motor.  

- Electronic Speed Controller (ESC): This is a electronic equipment used in radio controlled cars/planes/boats and other toys to control the speed of brushless DC motors. They are very affordable and can be found on the obvious only vendors. It will be used to control the HDD motor. Brushless DC motors cannot be direct driven by DC power.

- A microcontroller: This could be done in a different way, but we opted to use an Arduino microcontroller as they are affordable and there is ample support online. The Arduino microcontroller will interface with the ESC, sending the appropriated signal to speed the motor up and down. We use an Arduino nano due to its small footprint. Our custom PCB board was designed around it

- A 10K potentiometer: This will be used as an interface so the user can set thew speed of the HDD motor. The potentiometer is connected to the Arduino microcontroller, which reads the potentiometer position and converts it to a signal that the ECS understands as a motor speed request. For there, the ESC controls the motor to set the motor speed.

- A 10 bar LED display: Used to display what is the motor speed is. This is in arbitrary units, there is no speed feedback, but should provide a means to standardize polishing; “polish on level 4”. The Arduino is used to control the LED bar.

- A 12 V, 3 A power supply: To power the entire system.

- A barrel jack: To connect the power supply to the circuit.

- A 3 Ampere capable switch: To turn the machine on and off.

- A female USB A connector: To power a USB light that can assist the polishing procedure.

- 10 220 Ohms resistor: To power up the LED bar.

- Wiring thingies: Wires, soldering iron and solder, heat shrink tubbing. Alternative, a custom PCB that we designed and will facilitate massively things. 

Electronics block diagram

The block diagram bellow might be useful for assembling your FuNIITriz. Almost all of this is done by the our custom PCB, so we highly recommend you manufacture a few in the user overseas vendors, this is very affordable now a days! With the PCB you just have to drop the components on the board and solder it, well, with the exception of the barrel jack, power switch, USB plug and potentiometer, this are connected to the board using wires.

PCB assembly

As mentioned, using the PCB is a much simpler and elegant solution. Is it an overkill here? For sure, but it makes things cleaner and easier, and make designing a custom 3D printed enclosure muck easier, more on that later. The pictures here on the side illustrate how much cleaner this is. The files for the PCB can be downloaded here and uploaded direct to any of the many overseas PCB manufacturers. We opted to use an Arduino nano board, due to its small size. It fits perfectly in the PCB.

There will be still some wiring needed between the barrel jack and switch, and from those to the PCB. The PCB power connectors are to be supplied with 12 V, this will be used to power the Arduino nano board. This 12 V also need to be spliced to power the ESC, so 12 V needs to go to the PCB and also to the ESC! This can be done using all sort of wire connectors. 

It is important to add the power switch before the connection to either the PCB or ESC.

The USB power comes from the PCB as ground and + 5 V. They should be wired to the correct USB A pins. This can be found very easily over the internet, just be mindful of the orientation of the images you find!

The Arduino sketch is the program that runs in the Arduino microcontroller, in our case, the Nano. The sketch is very simple and can be uploaded to the board using the Arduino IDE. The sketch is bellow and can be copy and past to the the Arduino IDE. There is plenty of information on how to upload sketches to Arduino boards online, this is the easy part. What the sketch does is to read the potentiometer position, scale that to a value the correspond to the max and min speed of the ESC, signalling the value to the ESC. It also scales the potentiometer position, and hence the ESC speed, to the number of LEDs in the bar, which are 10, making it a visual display of the EWC and HDD motor speed. 

One other thing the sketch has is the ability to program the ESC. Sometimes ESCs need to be programmed to know what are the signals to max and min speed. This is not required all the time, but it is useful to do at least once in the ESC life. There was a version of the sketch that programmed the ESC automatically every power up, but some ESC have different timings on the program routine so this is not very convenient or feasible. To program an ESC it need to be powered with the 12 V while sending a signal of max speed. Once the ESC beeps at you, you need to send the signal for the min speed. It will beep once again and the programming is done. To avoid acidental programming, i.e. powering up the Funiitriz wile the potentiometer is at “full beans”, the code incorporates a line that sets the ESC speed to zero at every power up for a few seconds. This is the line “esc.write(0);” in the setup loop. 

To calibrate the ESC, disconnect the 12 V power (power supply from the barrel jack), comment the the lines in the setup loop as commented in the sketch. Connect the arduino to a computer and upload the sketch. Once done, disconnect the Arduino from the computer and reconnect the 12 V power supply to it, without turning the Funiitriz on on the power switch yet. Turn the potentiometer to full speed and now turn on the power switch. Once the ESC beeps at you, turn the potentiometer all the way down. The ESC will beep again. Once that is done, turn the power off. Uncomment the lines that where commented before in the sketch and upload it to the Arduino. Once that is done the Funnitriz is ready to be used with a programmed ESC. When you power it one, all the LEDs will blink 3 times, the ESC might beep some, but after the LEDs blink, it is ready to use!

#include <Servo.h>

Servo esc; // create servo object to control the ESC for the brushless motor

const int ledCount = 10; // the number of LEDs in the bar graph

int ledPins[] = {3,4,5,6,7,8,9,10,11,12}; // an array of pin numbers to which LEDs are attached

int potpin = A0; // analog pin used to connect the potentiometer

int val = 0; // variable to read the value from the analog pin

int ledLevel = 0;

void setup()

{

Serial.begin(9600);

esc.attach(13,1000,2000); // attaches the ESC

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

pinMode(ledPins[thisLed], OUTPUT);

}

//FOR CALIBRATING THE ESC COMMENT EVERYTHING BEYOND HERE UNTIL THE END OF THE SETUP LOOP (void setup)

esc.write(0);

delay(200);

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

digitalWrite(ledPins[thisLed], HIGH);

}

delay(200);

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

digitalWrite(ledPins[thisLed], LOW);

}

delay(200);

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

digitalWrite(ledPins[thisLed], HIGH);

}

delay(200);

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

digitalWrite(ledPins[thisLed], LOW);

}

delay(200);

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

digitalWrite(ledPins[thisLed], HIGH);

}

delay(200);

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

digitalWrite(ledPins[thisLed], LOW);

}

}

void loop()

{

val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)

delay(10);

val = map(val, 1023, 0, 30, 170); // scale it to use it with the servo (value between 0 and 180)

esc.write(val); // sets the servo position according to the scaled value

ledLevel = map(val, 30, 160, 0, 10);

Serial.println(val); // FOR DEBUGGING

for (int thisLed = 0; thisLed <= ledCount; thisLed++) {

if (thisLed < ledLevel) {

digitalWrite(ledPins[thisLed], HIGH);

}

else {

digitalWrite(ledPins[thisLed], LOW);

}

}

delay(100);

}

Arduino sketch

3D printed enclosure

A custom 3D printed enclosure is the final touches to the FuNIITriz. Despite the standardisation of spacing and screw hole size for HDD, the distance between the screw holes ant the top of the HDD, or the disk platter can vary a bit. You can find the .stl file to download the enclosure we use here. It has fit some of the HDD we have available, but you milage may vary. It is a 3 piece design, a bottom lid, the top part where the HDD attaches to and a 3rd part which caps the electronics and houses the potentiometer. Printing with different colors is highly recommended for style points!