Hakko 907 based Soldering Station

A soldering station based on the easy to source Hakko 907 soldering iron, which is a 24V 50W soldering iron with integrated thermistor.

Similar projects worth following
After using a 110V 40W soldering iron based on the Hakko 907, I've noticed how a soldering iron makes a difference. I'm not saying these 110V clones are good, but they were certainly better than the traditional soldering irons around here.

There are lots of tips, cheap and easy to source from China, and these make difference when soldering.

Now, I want to make a soldering station, with a better quality than those 110V irons and with easy to replace soldering iron.

Project files: soldering station files

  • 1 × 10K Potentiometer Standard panel potentiometer
  • 1 × 0R3 1W Resistor
  • 1 × 100R Resistor
  • 1 × 150R Resistor
  • 1 × 1K Resistor

View all 26 components

  • Code update

    Kuro05/02/2015 at 06:46 4 comments

    I've updated the code in the soldering station files. There's new content and an attempt to fix a problem with the PID controlling the temperature around 10C above the setpoint.

    Other features:

    1. Auto turn-off with default time set to 45 minutes;
    2. If you reburn the frimware, it will use the Kp, Ki and Kd defined in the code instead of trying to load them from EEPROM, unless you run the autotune. This makes it possible to use the soldering station without autotuning.

    That's it.

  • Revising the amplifier

    Kuro04/02/2015 at 10:06 0 comments

    I've noticed that the temperature sensor amplification could be improved.

    Just follow these instructions:

    1. R3 of 10kohm
    2. R4 of 47kohm
    3. R5 of 1kohm

    If you want an explanation, keep reading.

    The equation for the op. amp. output voltage is given by:

    \color{White} \large Vo = GAIN * 5V * \frac{Rsens}{R3 + Rsens}The ideal value for Vo is just below 5V when Rsens is at it's greatest value. Assuming Rsens of 200ohm when hot, calculating for 48x gain and R3 of 10kohm:

    That means the max value at the output of the operational amplifier is 4.71V. We could increase this value and that would increase the precision in the temperature readings.

  • 3D printed case and finishing it off

    Kuro02/17/2015 at 17:26 0 comments

    The last project log guys, sorry for the delay.

    I've modeled a case and 3D printed it to house the electronics. The case was modeled in OpenSCAD.





    Button caps, for the tactile switches:

    With everything printed, I went to assembly. It became a real mess of wires. One thing to note is that the center cylinder with the bolt hole was too close to the LCD pins.

    I drilled a 5mm hole on both sides of the top part and fitted a M5 threaded rod to fix the rest for the iron.

    That's about it. All files are now available. If anyone feels like improving the project, please do it.

    Thanks for the ones who followed the (slow) progress of this project and I hope it can be of some use to someone out there.

    Files are in the projects main page.

  • Software!

    Kuro01/10/2015 at 07:21 0 comments

    It's been a long time since the last update, sorry guys. I've got rather busy, then came end year and I went to visit my family, without any contact with the project.

    Anyway, I was able to finish the project just before leaving, but had no time to post about it. In this post I'll talk about the software development and I'll try to finish the project as soon as possible.

    There were some problems, mainly with the PCB, as I noticed later. I didn't feel the problems were big enough to make me redo the PCB, so I'll just leave it as it is right now.

    The first problem was related to the LCD data bus. I didn't know that A6 and A7 pins on Arduino Nano were input only, and these two pins were used as D6 and D7 data lines to the LCD. This was fixed rather easily by using other available pins on the side of the board. I didn't even swap that vertical pin header to a right angle one after discovering that.

    Now, I had to do the software. I prepared a breadboard with the LCD, some tactile switches and a potentiometer. I also connected the soldering iron and attached a thermocouple to the heating element.

    As I had noticed before that the PTC resistance was almost linear over a wide temperature range, I chose to use a linear function to calculate the temperature. I measured two different temperatures and the corresponding analog value to calculate the equation.

    In the code you can uncomment the following lines to show the analog value read by the Arduino:

    lcd.setCursor(13, 1);
    uint16_t temp_analog = 0;
    temp_analog += analogRead(TEMP_PIN);
    temp_analog += analogRead(TEMP_PIN);
    temp_analog += analogRead(TEMP_PIN);

    I got the analog values with the iron at 30C and 450C, as measured in the thermocouple. These values were 228 and 590 respectively.

    The equation will look like:

    \color{White} \large Y = a \times X + b

    where Y is the temperature and X is the analog value read from the sensor. You will need the two analog values and the two temperatures to calculate "a" and "b".

    To find "a", subtract your higher value temperature from your lower value temperature and divide by the subtraction of their correspondent analog values. Using the values I got: (30C, 228) and (450C, 590) where 30C is 30 degree Celsius and 228 is the analog value.

    \color{White} \large a = \frac{450 - 30}{590 - 228}

    \color{White} \large a = 1.16

    Now, to find "b" use the the linear equation with "Y" as one of the values you found and X is it's analog value. The value of "a" is the one found just before. Using (30C, 228):

    \color{White} \large 30 = 1.16 \times 228 + b

    \color{White} \large b = 30 - 1.16 \times 228 = -234.48

    The values of "a" and "b" should then be set in the firmware:

    #define EQUATION_A    1.16
    #define EQUATION_B    -234.48

    Next in the code, I used PID to control the heating element and the code has a PID autotune that should be ran when turning the soldering station for the first time.

    To run the autotune, hold the autotune button and turn on the soldering station. The autotune will then save the values to the EEPROM and these will be loaded every time you use the soldering station. The values can be checked by pressing the autotune button while the soldering station is on.

    The only thing I think is still lacking is an auto turn off function.

    To finish this post, have some more pictures of the development setup:

    The code is available here.

  • Board assembly

    Kuro11/29/2014 at 04:01 0 comments

    I started the assembly with the jumpers, resistors and diodes first:

    Then, I went to finish the switching power supply. Power jack, power switch connections and capacitor.

    Notice that I soldered pins instead of the screw terminal to the power switch. Didn't want any wires going through the back of the board.

    Continuing with the power supply, I soldered the rest of the components necessary, and tested it.

    Everything working alright. I set the output voltage to 12V with the potentiometer. You want to set the output voltage now, because if you connect your Arduino without setting the voltage first, you could fry it.

    With the power supply working, I soldered the rest of the parts.

    The USB connector is over the LCD pin header. I was going to use 90 degree pin headers, but I had none right now. I'll swap the pin header later.

    With the power on:

    Everything seems to be working as expected. Next thing now is the program, but I'm rather tired after soldering the board.

    I'll do it next time.

  • Board etched

    Kuro11/29/2014 at 01:07 0 comments

    Went to college today and the projects room heat press was dead. Asked a professor and he let me use the heat press on his lab.

    Transferred the toner and etched it at college:

    At home, I applied kind of a solder mask. It's actually a UV paint for purposes other than protecting PCBs.

    I have already drilled it, and will start assembling it soon.

  • Schematics, board and resistance table

    Kuro11/27/2014 at 18:16 6 comments

    Made some tests during the week on a breadboard. Tested PWM on a MOSFET, the LCD, made a table with the PTC resistance in the 30C ~ 450C range, etc.

    After I decided how to build the hardware, went to Eagle and created the schematics and board.

    The chosen MCU is an Arduino Nano, and the operational amplifier a MCP6002, cause I have some laying around. Any op. amp. that works with 5V power supply, is rail-to-rail, and have the same pinout should work.



    The board fits in a 5x10cm copper board. As I made it to be easily toner transferred it was rather hard to route it after all the time doing two-sided boards with 8mil tracks.

    I'll probably etch one of these tomorrow at college. They have a good heat press I can use to transfer boards there.

  • Heater Resistance and Power

    Kuro11/27/2014 at 13:18 3 comments

    I've measured the heater resistance and noticed that it's smaller than the resistance for the rated Voltage/Wattage.

    The measured value is around 4Ohms. As the soldering iron is rated at 24V:

    P = U² / R

    P = 24² / 4 = 144W

    There it is. The soldering iron is rated at 24V 50W, but if you just connect a 24V supply, it will probably kill itself. You need to control the power delivered to the iron.

    There's no need, then, to use a 24V power supply. The unmodified 19V notebook power supply should do the trick.

    I've measured the resistance of the heater while hot, to how much it changes with temperature, but it raised to 7Ohms only at 450C.

    That said, I've moved the power supply project logs to a new project, and will move a little faster on this project, as I have some other projects on my backlog.

View all 8 project logs

Enjoy this project?



almo_01 wrote 10/06/2015 at 15:15 point

i will ask what power supply did you used ? 
24v AC ?

  Are you sure? yes | no

Kuro wrote 10/07/2015 at 16:14 point

I used a 24V DC power supply.

Have a look:

  Are you sure? yes | no

almo_01 wrote 10/18/2015 at 11:16 point

thanks :)

  Are you sure? yes | no

John wrote 09/22/2015 at 21:08 point

Hello, I have designed a PCB based on your project. I added 2 more buttons so I could use them for menu navigation. I wil write a new sketch as soon as I understand how PID works.

I measured the resistance between the sensor cables and the heater cables on my iron and I'm sure they don't match with yours. I have read that they vary on chinese clones and I should edit the sketch to be able to read the temperature from my iron. The resistance I measured is 5.5Ω between white-blue cables and 47Ω between red-green cables. I assume the red-green are connected to the sensor and the white-blue are the heater's. Does the polarity matter?

Also what are the changes I should make on hardware  and software? According to the equation for Vout, if I want a 101 gain and my Rsens is 50Ω, the R3 should be 6.8K so Vout would be 3.68V (below 5V). Is that correct? Where did you find this equation for the op-amp?

What type of filament do you use? The yellow/green front panel looks pretty.

Thank you

  Are you sure? yes | no

Kuro wrote 09/22/2015 at 21:44 point

Hello, John.

Reading your comment I noticed I got things mixed up. The Rsens should be around 50Ω.

Polarity does not matter. Both the heater and sensor are just resistors.

I went to revise the amplifier when I noticed I got the gain wrong (100 instead of 101), but I mixed the Rsens with the heating resistance.

Leave R3 at 10k. The Rsens is around 50Ω at room temperature, but as the soldering iron heats up, Rsens should go up too.

With R3 at 10k, at room temp Vout should be around 2.5V. I would even advise against using 101 gain and using something around 10 to 50 gain. If Rsens doubles when hot, with 101 gain and R3 as 10k, Vout would cap at ~5V. I'm using 48 gain on my build (R4 = 47k and R5 = 1k).

You should be able to understand the amplifier if you search for non-inverting amplifier.

About the filament, it's ABS. I got the green one from a local supplier.

Thanks a lot. I'll fix that project log.

  Are you sure? yes | no

John wrote 09/23/2015 at 14:28 point

Thanks for clearing things out. Now I realize that R3 and Rsense are actually a voltage divider. I had missed that because on my schematic R3 and R1 have different annotation and I was confused with your equation. Everything makes sense now.

Is this better to use a small R3 with a small gain or a bigger R3 with a bigger gain? If I leave the 10K I think I will be ok with a 69 gain (68K + 1K). Are we sure that Rsense won't exceed the 100Ω? Have you take measurements for the Rsense while heating the iron to verify the linear relationship between Rsense and actual temp?

  Are you sure? yes | no

Kuro wrote 09/23/2015 at 15:03 point

Rsens WILL exceed 100Ω. I measured the output of the amplifier (with
10k R3 and 48 gain) and it making the reverse calculation, Rsens was
about 175Ω.

It's your choice to decrease R3 and decrease gain or
not. Decreasing R3 will increase the current flow on Rsens, making it
self-heat, but I don't think that really matters even with a 1.5k R3, as
it would be only 1mW.

And yes, I checked against a thermocouple from around 30C to 450C in 10C steps and it was pretty much linear.

Here's a plot of the measurements:

Y axis is the temperature in Celsius, the X axis was the output of the AD conversion if I'm not mistaken, but I don't remember the measuring circuit at the time.

  Are you sure? yes | no

Andrew wrote 09/02/2015 at 10:51 point

Hi, this is a great project.  I was going to build one I saw on instructables but the author had not posted any code.  I have built yours but on my own PCB design and using a graphics LCD instead of a character LCD and using a rotary encoder for the temp adjustment.  The only changes I have made to the code are the components for the different LCD and the encoder.

I have the general platform working but I made a substitution of the op-amp for an LM358.  I'm hoping this is the source of my problem (in a way) but I find that the temperature is all over the place and although it does try to hold a temp, it is nowhere near the set point.  i.e Set 105 retains around 195 deg and it's not a consistent offset.  2 things I have observed - When the heater is switched on, it does not seem to be PWM, it seems on or off.  The led 'flickers' randomly rather than 'dims' as i would expect with the PWM control - Is this right?

The other observation I have is that when the heater is on, it seems to dip the voltage on the analog input briefly and i think that is why it is overshooting and all over the place.  I am powering the arduino with a separate USB power than from the heater itself (common ground though) and it is calibrated as per the instructions.

I've persevered with this for 2 days and I'm out of ideas - Can you offer any suggestions as to what might be wrong? Any help would be greatly appreciated.

  Are you sure? yes | no

Kuro wrote 09/02/2015 at 10:58 point

Hi, you can find all the files for this project on the left side of the page or in Project Details section.

About your problem, you may be using a low frequency PWM or it may not even be PWM at all. I can't really tell which from what you've said.

As for problems with temperature readings, I suggest you turn off the PWM before making a temperature measurement, then enable it again. I didn't need to do it on my project, but it's always a good idea to do so.

  Are you sure? yes | no

Andrew wrote 09/02/2015 at 12:39 point

Hi Kuro, Thanks for the fast reply. I have your files already - It is mostly what I am using already (just with the mods for the different LCD). Here is a video of what I mean.  Temps are all over the place and nowhere near the setpoint.  I don't expect you to fix it, just give me some ideas on what might be wrong perhaps.  Mostly with the PWM as it does not seem to be working properly.  I stuck a meter  on pin 8 of the op amp and it is fluctuating a bit which I expect is the cause of the fluctuations in the temp readings.  I just don't understand why it is because the whole 5v side is only about 90ma of power.

  Are you sure? yes | no

Kuro wrote 09/22/2015 at 21:55 point

Andrew, sorry for the late reply. If you are using 101x gain on the amplifier, try lowering it to 48x gain. This might help with the wrong temperature.

  Are you sure? yes | no

dimitris wrote 04/27/2015 at 17:49 point

Finally yesterday i finished the project. Assembled everything, inside an old unused analog tv signal amplifier box, made holes and all ok.

Everything worked perfectly on breadboard, and temperature met setpoint easily. However now temperature stays higher than setpoint at about +10C systematically. Made several autotunes which last forever  (thats strange...) however autotunes are completed after 5 to 10 minutes. But autotune keeps maintaining the temperature too high however precisely for unknown reason. It looks that autotune works but for a temperature +10C of setpoint. When adjusting setpoint to various temperatures while heater ON works, PID works and sets temperature to about +10 of new temps..

Also tried several pid values by changing the software, forcing it to write mine PID values on eeprom. Problem persists.

I would like your suggestions or i give up. Thank you anyway.

  Are you sure? yes | no

Kuro wrote 04/27/2015 at 18:01 point

Yep, I've noticed this problem and I am just dealing with it for now.

As the temperature stays a constant value over the target, I just lower my target temperature a bit.

Might have a look at the software one day and see if I fix it.

  Are you sure? yes | no

dimitris wrote 04/27/2015 at 19:02 point

thank you for the reply kuro. Hope you fix it soon.

Meanwhile i will continue to make some tests trying to isolate the problem. Since everything worked perfectly on breadboard makes me pessimistic that a hardware issue (on my pcb or mosfet) may contribute to problem as well as a software minor bug.

  Are you sure? yes | no

dimitris wrote 04/30/2015 at 06:01 point

Kuro i am sure now that the problem is the values autotune sets. Well at least now im not worried about my board or software modifications i did. The reason im sure is because while trying some PID values (i no more mess with autotune cause i lasts forever)  if found that values P:40 I:10 D:40 works perfect for me. Keep in mind that i use 1023 max PWM and 24 Volt so my pid might not work perfect for you.

While trying to spot the problem i also found that the old PID values worked perfectly for temps over 250C. But for temps lower than 250 there was the +10C error! 

To set yours pid values and bypass autotune (i know you know kuro :D. i write it for all your viewers!)

add the EEPROM Lines after void loop.

void loop() { //

// Get the current time
uint32_t update_time = millis();

EEPROM.writeDouble(kp_address, 40); //change 40 to your preferred P value
EEPROM.writeDouble(ki_address, 10); //change 10 to what you prefer for I
EEPROM.writeDouble(kd_address, 40); // same here. changes D

upload to board. 

Then delete the three EEPROM lines and reupload to arduino or else firmware will keep rewriting the pid values forever while loop runs thats not so good for normal operation. you only need to flash eeprom once.

By the way this is my final soldering station with its eclosure:)

Doesnt look so nit and professional as yours kuro but i like it:p

Used an old TV signal amplifier eclosure box. Cracked it a bit when making holes with dremel unfortunately. 

Thank you Kuro!Im happy i met your project on internet

  Are you sure? yes | no

Kuro wrote 05/02/2015 at 06:32 point

I was fiddling with the code yesterday, but saw your post only now.

I've modified a couple of things, one of them being a way to bypass the autotune values.

For me, the autotune seems to be working alright now, it takes 2 to 3 minutes to finish and the results seems to be ok, with some overshoot. One thing to note is that I've modified the PID computation delay from 200ms to 50ms, so it changes the PWM value 4 times faster.

Another addition was the auto turn-off. It should turn-off automatically after 45 minutes on. There's a define to change this value to your desired time.

I will post the new code soon.

About the final station, at least yours has a proper stand for the soldering iron. I've just drilled some holes in the case and stuck a (bad) stand there.

  Are you sure? yes | no

dimitris wrote 05/02/2015 at 09:52 point

i bought this stand i think for 8-10 euros from lidl with a soldering iron of course, which was forgotten powered on and was destroyed...

So im a lot happy for the new feature, auto power off!

In case you want to test i have slightly modified your code and have added a software noise-spike low pass filter  that i was inspired, that smoothes a lot possible temperature sensor spikes. I had a lot of spikes on breadboard, very few now. But anyway i think it works great discarding the bad and keep only the actual temp readings.

// Read Iron temperature
uint16_t readTemp() {
uint16_t temp = 0;

t1 = analogRead(TEMP_PIN);
t2 = analogRead(TEMP_PIN);

while ( (t1/t2) < 0.99 || (t1/t2) > 1.01){
t1 = analogRead(TEMP_PIN);
t2 = analogRead(TEMP_PIN); 

temp = (t1+t2)/2;

temp = (EQUATION_A*temp) + EQUATION_B;

return temp;

This filter tottaly discards bad reading out of equation while computing and average of three or more readings of sensor is not adequate when a spike with erro of 10 or more C' is in equation. Works the same way as to compute median which is far more efficient on filtering than average of  a certain number of a sensor readings.

Im now working on impoving the fluctuation of setpoint temperature, +-1C that i think confuses the pid function a bit. Im trying to modify potread in order to compare the previous temp vs current and if variation is only +-1 keep the previous temp and discard the new.

Of course this adds bugs when we normally want to change setpoint temperature. im working now on how it could be done. especially when heater is on.

  Are you sure? yes | no

John wrote 03/29/2015 at 21:35 point

Hello again,

as I can see on your schematic, the PTC is connected with the soldering iron. What's the purpose of the TEMP_REG and JP1? What have you connected on JP5?

I will try to use a LM358. Do I need the pins 5,6,7 of the op-amp? What is CONT on OUTPUT B of your op-amp? Should I connect only the pins 1,2,3,4,8 the same way you have connected them on MCP6002?

  Are you sure? yes | no

dimitris wrote 03/29/2015 at 23:32 point

read the answers on the comments before. What you ask is already answered by kuro.

Anyway let me answer you instead of kuro for now. Temp reg is the pins where you connect a 10K potentiometer to adjust the desired temperature.

Mid pin of potentiometer is connected to A1 analog pin. the outer pins are connected to 5V and GND.

LM358 is not the best for this project. it didnt work well on my tests, readings were incosistent, the error was not systematic so i couldnt tune-calibrate the equation Analog read-temperature. Finally i gave up ungry and frustrated. Maby my copies of LM358 were bad (clones chinese etc...) Since i have already ordered MCP6002 of ebay i stopped trying to figure out what was wrong. Maby you will be luckier BUT....keep in mind that chinese HAKKO 907s are not consistent on the sensor resistance. That means that other sensor follow one equation but another clone needs calibrating from the begining. If you are interested while testing LM358 i found an equation that worked for LM358 but not perfectly. it was accurate until 150C but when temp rise higher readings were inaccurate

Y=3,8X-166 (test it because chinese hakko carry different sensors that means different calibration equations)

On schematic you see two MCP6002 but in fact its one chip but is able to amplify two signals.  Cont on the second part of the op-amp is the contrast adjustment and is connected to pin V0 of your display. By adjusting the 10k pot you adjust contrast. 

The important part of the connection for this project is pins 1,2,3 where the analog read from thermistor sensor is amplified. 

jp5 is just an output for futere use i think. for this specific project nothing is connected. im not sure for this answer though

  Are you sure? yes | no

Kuro wrote 04/02/2015 at 09:33 point

What you said is correct, although the pot is connected to analog pin A6 (the pin names in the part stands for Arduino Nano 2.X, which had inverse order in analog pin definitions compared to Arduino Nano 3.0).

Since some time ago I've been using only single supply rail-to-rail op. amps. in most of my projects. Usually I use MCP6002 as it's really easy to source around here. In this project, the LM358 should work with a single supply of 5V and have it's output go all the way to ground, so there should be no problem using it unless your output voltage is reaching ~4V I think. I didn't even bother using it as I had the MCP6002 around.

Yes, the CONT in the Output B of the amplifier is used the adjust the LCD contrast. The potentiometer wiper could be connected directly to the LCD's contrast pin, but the second amplifier was not being used and I was planning to use the contrast adjustment to power the filament of a VFD if I used one as the display for the station, as I have some VFDs laying around here.

About JP5, JP6, etc. I've broken out all unused pins of the Arduino and left some power connections to make it easier to modify or add anything in the station. The important connections are the screw terminals, JP1 for the temperature adjustment potentiometer, JP3 for the LCD connection and part of JP4 for button connection.

  Are you sure? yes | no

dimitris wrote 04/02/2015 at 12:57 point

what do you mean by ''have it's output go all the way to ground''. isnt the output connected to arduino A7 pin for measuring the voltage? and gain resistors from output to -input and ground?

i tested LM358 connected exactly the way MCP6002 is connected. I used a 30 X gain. 30K and 1K gain resistors. but the noise on temperature measuring made it useless. i think that noise was due to the second part of op amp not being used that caused the electrical noise or my copy was bad. 

anyway expecting the MCP6002 of ebay.

i already etched the board (but unfortunately i cant tin it so after 20 days i think it starts to oxidize...)

by the way i have made a minor change on software. I added a simple but useful feature

-a red led connected to digital pin 7 , lights when temperatures reached near the setpoint temperature.  The red led lights when temperature is near set point temperature by a range of -2 to +7 near setpoint. This is usefull since we know the temperature is near the setpoint without really having to look screen while soldering. So our attention when doing a sensitive job is not destructed. 

a buzzer would be ideal, i tried it but i dont know why, when is buzzes and we try to turn off heater...due to a bug or a hardware limitation, its difficult to turn heater off. i dont know why. 

  Are you sure? yes | no

Kuro wrote 04/05/2015 at 03:29 point

Most of old op. amps couldn't reach 0V in it's output when they weren't fed with a negative supply. LM358 can go very near 0V even with a positive only power supply.

The change you made to the software is a nice addition. Usually, I just turn on the soldering iron when I'm still organizing things to start soldering, so it reaches the temperature long before soldering.

About the buzzer, try using a 12V one and driving it with a transistor.

Something like this:

  Are you sure? yes | no

dimitris wrote 03/18/2015 at 12:42 point

Good morning again.

For those you use negative photosensitive film and have difficulties with eagle extracting image feature ( the image looks strange and bad quality and no option for negative on pdf option) the file above is the negative ready to print pcb.

The pdf was edited on gimp, and a bit smoothened for better results on copper and finally negative was extracted.

Kuro i wanted to ask you somefinal (i hope :D) questions. On some experiments with thermistor and arduino some months ago i didnt have to use an op-amp for thermistor output.  Hakko 907 uses a thermistor not thermocouple. i thought that an op-amp was only necessary for thermocouple.  And how come this 907 ptc thermistor is mostly linear while ptc thermistor are mostly non linear following the steinhart hart equation. (i know it is linear though, i hope you know how they did it)

And finally on your description previously you describe the linear equation parameters (a and b) you use on the software to obtaine temperature results through voltage sense on analog pin.

#define EQUATION_A 1.16
#define EQUATION_B -234.48

but you then use different a and b in the final firmware. specifically

#define EQUATION_A 0.907
#define EQUATION_B -177.81

i believe this was the final coefficients after all tests?

Using different op-amp gain would change this equation? What gain resistor did you use?

Thats all!Thank you!

Yesterday i received the iron, the op-amp and all of the components, unfortunately i cant find the exact trimmers you use. Im searching ebay now.

And another comment!  I really want to thank you for your knowledge. By your tutorials for switching power supply i managed to change the output voltage on my laptop supply from 19 to 12 volts that i need for another project. I believe this was the most complex modification i did (soldered a parallel resistor on the voltage divider on sense circuit chip as you describe on another thread)

Finally as you have already said, use a 19 volt supply for the hakko iron. No need for 24 volts. Tested by me as well. Iron heats very fast and current it draws is about 2.4 to 2.5 A.

  Are you sure? yes | no

Kuro wrote 03/18/2015 at 18:16 point


The PTC is really linear over the temperature range (25~400C). I don't know how they did it, but they must have manufactured these in a very linear temperature vs resistance region on the working temperature.

The operational amplifier is not necessary, but is a very good addition. It helps the Arduino analog converter by increasing the gain and not loading the voltage divider with the ADC input current, thus increasing resolution and precision. It also enables the use of a higher value pull up resistor, reducing the current though the divider, thus reducing the self-heating of the PTC.

About the linear equation parameters, I've changed my readings after writing the text, so my values changed compared to the ones in the comments.

Using a different gain WILL CHANGE the parameters. If I remember correctly, I've used a 10x gain, as said in the schematics.

These trimpots are really common around here. Try searching for "trimpot 3386" at Ebay.

Nice to see the tutorials are helping. I usually just don't have the patience to document my projects, but maybe I'll do it more now.

PS: Looking at the schematics again, I noticed I wrote 10x gain, but it's actually a 11x gain. The 100x gain is actually 101x gain.

It won't make much difference in this project, as we do the value vs temperature table after the gain, but that's something I missed.

  Are you sure? yes | no

John wrote 03/13/2015 at 18:25 point

Awesome project, exactly what I was looking for. I have a HAKKO 907 clone from ebay and I was thinking to build something like that using an Arduino pro mini.

My HAKKO 907 has 5 pins, 2 for heater, 2 for PTC and 1 for ground. Have you connected the ground on the PSU ground? Where are the heater and the PTC connected on the PCB?

Could I use an lm358 instead of the MCP602 and an IRLB8721PBF instead of the IRLZ44?

Thank you,


  Are you sure? yes | no

Kuro wrote 03/13/2015 at 22:56 point

The ground pin is connected directly do PSU ground. The PSU ground should be earthed, if possible.

The thermistor is connected to the 3 way screw connector, together with the ground pin. The heater is connected to the 2 way screw connector.

About the LM358, it may work, but I recommend using a rail-to-rail op. amp.

It's ok to use the IRLB8721PBF.

  Are you sure? yes | no

roma wrote 03/13/2015 at 15:37 point

hello! Do you have a printed circuit board format LAY?

  Are you sure? yes | no

Kuro wrote 03/13/2015 at 15:45 point

Sorry, I just have the EAGLE BRD file.

I don't even know which programs use the LAY format.

  Are you sure? yes | no

roma wrote 03/15/2015 at 10:12 point

hello! I had in mind for the seal Sprint-Layout!

  Are you sure? yes | no

dimitris wrote 03/05/2015 at 13:11 point

Hi again. I would like some help with schematic. Im trying to follow your main schematic as i think there is no meaning in making a DIY device that you dont really understant the way it works. I have read the software code and studied schematic but i think nothing can help me understand two things. 

1. Please inform me what is the uses of  JP6 and JP2 pins

2. what is the use of the second part of the operational amplifier MCP602 (pins 5-8) and what is the meaning of the CONT pin that is not connected anywhere, not connected to arduino just connected on a pin3 of JP3. What are we adjusting with the 2nd pot on pin 5 of amplifier. 

where is the PID autotuning switch connected. Photos are not so clear nor schematic or software explaines.

I studied a lot before my questions. The software code is really really well written, informative and explaines almost everything. I even studied other schematics for soldering stations (mainly ATmega8 and attiny projects) but nothing helped me for undestanding before asking for your help.

Thank you.

  Are you sure? yes | no

Kuro wrote 03/05/2015 at 13:40 point

Alright. I was going to use a VFD display on my unit, but wanted to make it compatible with the common 1602 LCD displays. I've never made the VFD version, but the hardware to do it is there.

1. JP6 was going to be used as the power supply to the VFD board. It's actually just the switching regulator output (12V). You don't need to solder it if you are going to use the LCD.

JP2 is a serial output header. It contains the Arduino Nano RX and TX, and 5V and GND.

2. The second part of the Op. Amp. sets the output voltage for the LCD contrast (CONTrast). The contrast could be set using only a voltage divider (trimpot), but this was made like that to be able to drive the VFD display filament. It's just a buffer to the trimpot voltage divider.

3. The PID autotune switch and the Heater On/Off switch can be connected to any digital pin that's not being used (JP4). Firmware modifications are necessary if you don't connect them to the same pins as I did (D3 for Autotune pin and D2 for Heater On/Off pin). The switches are connected from the Arduino pin to GND.

If you have any more questions, I'll be glad to answer.

PS: there are two jumpers to be soldered under the Arduino Nano on the board. DO NOT jumper the one connecting to JP6 to JP3. You can jump the JP3 to the ground via just below JP6 if you want. This jumper was there to use the VFD display.

If you jump that JP6 to JP3 and connect your LCD display pins to JP3, you'll fry the display.

  Are you sure? yes | no

dimitris wrote 03/05/2015 at 20:51 point

Thank you for the reply!

So lets add one more question. I copy paste from the firmware code

#define LCD_RS 14
#define LCD_EN 15
#define LCD_D4 16
#define LCD_D5 17
#define LCD_D6 18
#define LCD_D7 19

Those pins that LCD is connected (14-19) are the analog pins (A0=19 A5=14) of arduino nano used as digital outputs?  If not what is the exact ld connection. RW is not connected?

  Are you sure? yes | no

Kuro wrote 03/05/2015 at 21:12 point

A0 = 14 ~ A5 = 19. And yes, these pins are used as digital outputs to control the LCD. The RW pin is connected directly to GND, as we are not going to read from the LCD, just write to it.

In the schematic, the Arduino Nano shows A0~A7 in reverse order. That's the old version of Arduino Nano (v2.3). In v3.0, the analog pins have the order reversed.

Notice how A0 to A7 are reversed.

Arduino Nano v2.3:

Arduino Nano v3.0:

  Are you sure? yes | no

roma wrote 02/28/2015 at 21:11 point

Hello Friend! draft class! tell me why the program swears on the code? the code will not compile! Prompt please! thank you !!!

  Are you sure? yes | no

Kuro wrote 02/28/2015 at 21:37 point

Do you have the required libraries installed? This project uses Timer1, PID, PID Autotune, EEPROMex and Button libraries.

I've updated the design files to have the required libraries. Download them again and retry compiling.

  Are you sure? yes | no

roma wrote 02/28/2015 at 21:58 point


  Are you sure? yes | no

goranmrkonja wrote 02/23/2015 at 20:59 point

interesting. just what i need. canyou give a copy for board you create(pdf). i cant doit in eagle. thankls in advance. sorry for bad english

  Are you sure? yes | no

Kuro wrote 02/25/2015 at 20:15 point

There is a schematic image in the project files. Or do you want a printable board file to transfer it?

  Are you sure? yes | no

goranmrkonja wrote 02/26/2015 at 14:13 point

yes. if you can. i want printable board file. thanks

  Are you sure? yes | no

Kuro wrote 02/26/2015 at 15:42 point

Here it is. It's a 600dpi PNG sized to an A4 page. Print it in actual size to transfer.

Check the spacing between the pins with a pin header after printing to avoid etching it if the print was not made in real size.

Right click and view image to get the original one (not the resized version by

  Are you sure? yes | no

goranmrkonja wrote 02/26/2015 at 17:38 point

thanks bro. i can try to make this now. il inform you in progres. 

  Are you sure? yes | no

Hacker404 wrote 02/18/2015 at 01:37 point

Wow, This unit looks so professional. Congrats. Maybe 3D print a new pot knob, the bought one looks a bit big. Good to see the finished project. 

  Are you sure? yes | no

dimitris wrote 02/17/2015 at 17:54 point

Very nice project! I registered on hackaday to congrats you

I kindly would like to ask please if ypu can give a link for the schematic. i cant see the one embedded on the description. it is too small, and cant download it as file so i have to guess what is the exact parts i see.

I think i found my answer for my second question on another comment. The female hakko plug used is 6 pin Din. we just as i read use just 5 of the 6 pins.

The page acts a bit weird while viewing. Its like it trys to hide part of the project description.

Anyway i dont know if there is another way to see full resolution schematic but if in any way you dont want to post it, my email is cant wait to do it my self.

Nice work and Thank you!

Dimitris -Greece

  Are you sure? yes | no

Kuro wrote 02/17/2015 at 17:58 point

Dimitris, I'm wrapping up this project. I've posted all of the files of the project. You can find them on the left side of the project page, just below the project's images.

About the 6 pin DIN, you are correct. We use a 6 pin female connector, but only 5 of its pins.

  Are you sure? yes | no

dimitris wrote 02/17/2015 at 18:29 point

Thank you for the fast responce Kuro. Evererything ok. Im now trying to understand the ways schematic operates. Maby i will try to simulate it

  Are you sure? yes | no

dziustas1 wrote 02/11/2015 at 19:17 point

Hi, I found your project it's great but I thought of making hakko T12 controller with arduino. FM-2028 or FX-951 handles wih T12 tips much better than 907 because heater integrated in the tip and there are no gaps between them and it's easy to change if they broke. Price from china sellers about $3 a piece. We made a project with atmega 8 and it works but it has software bugs and programmer who made it can't fix it. I think it would be better to make an open software with arduino and use something for reading PC100. What do you think and maybe you can make a software for it? It would be like a proffesional soldering station.

  Are you sure? yes | no

Hacker404 wrote 11/27/2014 at 22:42 point
I can't quite follow the PCB or schematic. It looks like you fixed or re did the schematic but didn't update it here.
In the schematic you have 12 Volts going to the LCD on DB0-DB3 and also to the micro.

On the PCB you are not using DB0-DB2 so you must be using 4 bit mode, why then is DB3 used? and why is it selectable between 12 Volts and ground?

I would be interested to know what the micro is, that it has a 12 Volt input and where is the 5 Volt rail coming from?

OK, I zoomed the PCB and see DB0-DB3 are connected together. You probably intended for these to be selectable between GND and 5 Volt rather than GND and 12 Volt but they need to go to GND anyway from memory. I am now assuming the micro has on chip 12 Volt to 5 Volt regulation. I have never seen that before.

  Are you sure? yes | no

Kuro wrote 11/27/2014 at 23:33 point
This MCU is actually an Arduino Nano, as I have some of these laying around here. The 12V power supply enters the Vin pin, which goes through the regulator and outputs 5V for the MCU and the rest of the circuit.

The usual display will be a normal 1602 LCD, but there is the optional jumper to the 12V to have an output for the other display that I intend to use on my final build, which needs a 12V power supply. Otherwise, leave that jumper open or jump it to ground.

I'll leave the other display as a surprise for now, but it's not hard to imagine what it is.

  Are you sure? yes | no

Hacker404 wrote 11/22/2014 at 07:46 point
I found some of the correct connectors on ebay. There about $10 - $12 for the socket for metal ones. I can't find plastic ones. They are different from the normal DIN as the earth shield on the plug is shorter and probably wont go far enough into a normal DIN. I can send links if you want. I don't have the iron yet so I am just going by pics.

The iron is on order with some aviation style connectors and a dozen different tips. The aviation connectors are similar but not the same. They're not interchangeable with DIN but are made for higher currents. DIN was intended for audio.

I have also ordered a color graphic LCD display as I am going to use a micro-controller create power profiles by analyzing temperature changes while I am using the iron so it can preemptively compensate for thermal drain according to a recognized profile.

Sure I don't need a color graphic LCD for this but it will help to debug when I am developing the code ... and what's cooler than having a colored temperature graph on your soldering station.

  Are you sure? yes | no

Kuro wrote 11/22/2014 at 07:57 point
You mean this metal shield is short, right?

I was able to easily remove the plastic piece around it:

I'm aiming for something simple. I'll just use a 16x02 display, with a MOSFET to drive the soldering iron and a simple voltage divider on the analog port of an Arduino.

Then, I'll set up a PID and some controls to turn on/off and set up the temperature.

But I'm rather interested in the color display station. Sounds fun.

  Are you sure? yes | no

Hacker404 wrote 11/22/2014 at 09:34 point
Ah!, so that's what it is - a standard DIN connector with a removable thread lock.

That will make it much easier to buy a socket even if it is just for prototyping.

Yes, the standard 6 pin DIN is 240 degrees and will match and is easy to find. Just ignore the middle pin. Most 5 pin DIN's are 180 degrees.

You saved me some time.

Thanks, very much for that.

  Are you sure? yes | no

Kuro wrote 11/23/2014 at 05:38 point
Went to buy the socket and got a 6 pin one. It really match alright.
Will continue the project when I have the time.

Thanks a lot for the tip on the 6 pin socket.

  Are you sure? yes | no

wagwagon wrote 10/05/2015 at 22:28 point

Hello, Kuro. I am not that smart. I joined this site just to ask you how to remove that plastic piece around the connector that you removed. How did you do it?  Please, help.

  Are you sure? yes | no

Kuro wrote 10/06/2015 at 01:05 point

Hello. I don't really remember how I removed it, but in my case it was pretty simple.

I think I just pulled it off.

  Are you sure? yes | no

Kuro wrote 11/22/2014 at 04:24 point
I'll try sourcing a 6 pin DIN connector, but I'm yet to reach this part of the project.

If I can't easily source one, I'll probably use other connector. I wish to avoid doing this, though.

  Are you sure? yes | no

Hacker404 wrote 11/22/2014 at 02:37 point
I was intending to do much the same thing. I have bought a toroidal transformer for it but not the iron.

What's holding me up is finding a socket for the plug fitted to the iron. I though of using the aviation style threaded connector but it would be so much better to have a socket that fits the plug on the iron.

It looks like the iron would plug into a 6 pin din socket (ignoring the center pin) but a din socket doesn't have a thread.

I would be very interested to here how you will be connecting the iron.


  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates