Arduino software

DIY Soldering Station with Hakko FX-888 Iron – Part 3

SS_FinalIn Part 1 and Part 2 we looked at the implementation of the Soldering Station. This part covers the tuning carried out to improve reliability of the temperature control.

Tuning should not be required for repeat applications as the parameters are now built into the controller software. However, I will describe the process as it was interesting how additional performance could be obtained from the same hardware by tuning the software.


I noticed during debugging that the sensor readings were very unstable and jittery. Consecutive values were often far apart – something I would not expect given that temperature changes slowly – and this was causing the PID algorithm to behave poorly.

One solution to this was to dampen the analog values read using filtering software. A search led me to the ResponsiveAnalogRead library (and the explanatory blog) which was designed exactly for this purpose, and allows the amount of dampening to be tuned to the application.

In order to obtain tuning parameters as a CSV formatted dump of the control output (CO), current value (CV) and setpoint (SP) against time, I implemented the PID_PROFILE #define in the debug header file to allow the functionality to be turned on and off.


As a baseline, the first run was for a minimally damped CV reading. With the setpoint unchanging, the CV shows a high degree of variation and causes the CO to be very active.


It took a few runs to get to a much more stable CV. However even with this level of dampening there is still considerable fluctuation in the CO. I noticed that the spikes in CV roughly corresponded to the spikes in CO. This was potentially the frequency in the heating wires affecting the sensor wires, as they were running side by side.


Once the separation was increased, performance improved yet again. Note that, for comparison purposes, the time scale in the chart above is double that in the previous chart.

Finally, a test with the SP changing verified that the performance was good enough for my purposes.


3 replies on “DIY Soldering Station with Hakko FX-888 Iron – Part 3”

I think it is normal for the program to make it so that when the set temperature is reached it will be displayed on the display. Let’s continue to maintain the set temperature. But the display will only show the set temperature.


Hello! First of all, great job on an awesome project, it rocks.
I would very much like to build my own but I’m new to coding/arduino in general and I’m encountering a couple, probably laughable, issues.

First of all, I have gone ahead and gotten the wrong Arduino. I got a Pro Mini with an ATMega168 so I don’t have quite enough space to fit the program on it.
My second issue is: My LCD has a I2C interface board on it, I have tested it with the example sketch of hello world so I’ve figured out which 2 pins on the arduino I need to use but here’s where I got stuck, I have no idea how to modify the code to use the library the example sketch is using or how to adapt the current program to work with my I2C LCD.

Is there anything that can be done or do I absolutely have to buy a new LCD and Arduino?

Thanks in advance.


All the LCD libraries have the same methods for running the displays (clear(), cursor(), etc). The only read difference is the class that is instantiated (eg, LiquidCrystal_I2C instead of LiquidCrystal) and consequently any parameters that are needed to initialise the hardware interface, which may also propagate through to other function calls that use the ‘old’ compared to the ‘new’ hardware parameters. All the rest of the code to run the LCD should remain unchanged.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s