Project files: soldering station files
A soldering station based on the easy to source Hakko 907 soldering iron, which is a 24V 50W soldering iron with integrated thermistor.
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Project files: soldering station files
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:
That's it.
I've noticed that the temperature sensor amplification could be improved.
Just follow these instructions:
If you want an explanation, keep reading.
The equation for the op. amp. output voltage is given by:
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.
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.
Bottom:
Top:
Front:
Back:
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.
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); lcd.print(temp_analog/3);
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:
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.
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):
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.
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.
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.
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.
Schematics:
Board:
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.
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.
Create an account to leave a comment. Already have an account? Log In.
i dont have IRLZ44 or any IRL mosfet , could i use any IRF ?
hi kuro again!
I am writing to make you a question about one modification i want to make to operate your project on a zd552 air suction desoldering tool the one used on the common zd915 station. Of course only to operate the heat control since air suction is operated by a separate trigger independently. The problem is its temp sensor is k-type thermocouple. According to your schematic if i remove r3 from 5v and connect directly the thermocouple feedback positive voltage to + input of mcp602 and amplify it by say ×100 i will have a voltage output of 0-2V (0-20mV without amplification) on a range 0-400V. Will this work ok? And pid control? Of course i will make the necessary changes on your code on equations that give the temperatures from analog inputs and the mapping from analog-digital conversion that on your projects refers to a thermistor. Thank you again.
I would recommend against using the op. amp. for this application. Try using a dedicated thermocouple reader, such as MAX31855 or the old MAX6675.
Considering the heater is 24V rated and the MOSFET can handle it's rated current, the PID control should work.
Thank you for your fast answer. Heater is specified for 24V AC 80W but i have tested it manually with 20V DC and heats fast and without problems. The problem is that it draws almost 6A when cold and drops to 4-4.5A after heating up. Mosfet i used on tests is our workhorse IRLZ44 as on your project here. Runs barely warm, at about 40-45C on full load. And im almost sure its a clone one!!!
Now on the thermocouple problem. I made some tests using a simple amplifier circuit using the common LM358 X100 GAIN (run out of MCP602 currently...)and some filtering capacitors and i think that i get a good linear output that the arduino could easily read from its analog input. If 99% accuracy of temperature measurement is not needed you think that it could work even if there is a small systematic error on the measuring temperatures? Of course i will make my tests and keep this question posted and not asking you more than i can find out myself.
I want to mentione you that my original soldering station inspired from your project keeps working for a lot of years now and all i changed was once a fried mosfet. And i have made 2 more for my friends and they loved it.
The IRLZ44 should handle 6A.
If it works with the op. amp. then try it? I would rather avoid doing so, as the signal is at the level or even lower than the input offset for most of the op. amps. and it would lack cold-junction compensation. Also, modules with MAX6675 are pretty cheap too.
Glad you liked it. I use still use the one I made, just had to swap the iron, as my first one was having problems with it's thermistor.
Hi again Kuro. Unfortunately the delays in shippings from china messed my schedules. I receives a max6675 module some weeks ago and i am testing it. It seems to work ok but i have some problems implementing the reading of the thermocouple into your code that is made for reading a thermistor. I know the lines that should be changed or emmited. I should delete the thermistor equations and just include the max6675.h library that will give me directly a reading in the loop.
temp = thermocouple.readCelcius();
I am confident that i will make the correct changes since i i have read your code hundreds of times and have an deep sense of how it works
However what i cant solve is the fact that max6675 requires a delay of at least 200ms between readings or it just sticks to one measurement and does not change it. IF this delay is in the code what will happen to the rest of the code? Will the pwm work during this delay if the soldering station is on HEATER ON phase? And will it sense the buttons if it happens to be pressed during this delay?
Thank you!
1. Change the entire readTemp() function to temp = (uint16_t)thermocouple.readCelcius();
2. Change the loop() to enclose the "temperature = readTemp(); setpoint = readPot(); heaterPid.Compute();" inside an if statement similar to the one used to update the LCD. Set the interval to 200ms or more.
This should do it, unless it messes up with the PID.
Sorry for the late reply but it was a difficult week. I completed the code as per your suggestions and after many efforts finally it does compile with no error!
I changed the readTemp function to
// Read Iron temperature
double readTemp() {
double temp = 0;
temp = thermocouple.readCelsius();
delay(200); //this can now be deleted????
return temp;
}
I enclosed in the loop() the if statement with 200ms of interval stated on the beginning of the code. Together with the similar if statement of the lCD update also in the loop (i didnt made any changes there)
if(update_time - read_update > read_INTERVAL) { //READ_INTERVAL=200ms
temperature = readTemp(); // digital read for thermocouple
setpoint = readPot();
read_update = update_time;
}
Just after the loop ends i write the functions for readTemp and readPot. Shall i use a delay of 200ms in the ReadTemp function as well just before the ''return temp;''? Or now its not necessary to use a delay there and the delay used in the read_interval does the job?
THANK YOU
Dear Kuro,
I know it’s an old project but I could really use some help.
I’m trying to build a station using a nano board. I use 12V from an LM317 on the nano’s raw pin and I use the nano’s 5V regulator to supply power on the op-amp and the lcd.
I uploaded your sketch and it’s working but the iron’s temp is not consistent while it’s heating. When I stop heating the temp starts dropping gradually with no issues.
I added a 100n cap on the op-amp output and it got better but not fixed.
Also I tried to enable heating with just “digitalWrite(9,HIGH)” and the temp increases gradually and consistently.
What could be the cause of my issues when I use your algorithm to heat the iron? Have you notice any similar issue?
Sounds like a problem with the PID. Did you run the autotune?
I tried with both autotune p,i,d parameters and custom within the firmware.
I think something is messing the analog read values when the arduino is using PWM. What could that be?
I used an LM317 to supply voltage on the arduino and I tried to power it up on both raw pin(12v) and 5V pin with no difference.
I tried it many time build this project. Mosfet come very very hot and the leds always flash and instable when iron go on. I check many time all connection but i can't do any good result. I can't reach higher temp because mosfet IRLZ44N come too hot and all stop to work... Anybody with this issue. Other hand, my temp at 30C read 230C on software... I use iron 24V 65 W and i can mesure temp with external device. i get around 56ohms cold and around 200ohms @ 400C.
How can I do to decrease the analog values, since I can not measure above 200 ° C, with the calculation of the gain resistance, the maximum temperature I get 4.86V, Thanks for the help
KURO Hello, I can not, figure out how to get the values to calculate A and B, if the values that I get from the station display is type 300 ° C, and my thermometer gives me 100 ° C, the analog value refers to value of 300 ° C or not?
hello ,i am new bie in mikrokontroler,iam using atmega 328 in simulation in prosteus 8.1 but its cant work,just lcd blik2 .what that wrong? thnaks
ok... dont know if it is another mystery but i just cant get this thing to work. Calculated a and b, checked if i have lastest version of firmware and still nothing ...temp is stuck at ambient/startup temperature, setpoint is stuck at 100°C and PID values reads "nan" (autotune will get stuck every time i try it) and lastly heater just wont turn on. Do anyone have idea what else to check?
Try setting up your P, I and D manually in the code and not running the autotune.
Oki just figured it out... it was bad arduino board in combination with wery lazy op-amp at temperature measuring side.
Anyway everything is done and finished expect propper calibration and figuring out better PID values.
Yep and there is one nasty trap when using older regilated PSUs that can't react fast enough for sudden changes in load: if you loose power during autotune you vill most likely end up with "nan" PID values and your station wont even autotune out from this state... used small EEPROM eraser sketch to fix this problem. But yeah all done and seems to work well, so this is marks retirement for my old wall powered 25W Proskit iron (still works after 8 years.) :D
what is the sensor used in the hakko? is it a thermister? i am thinking that it can be used directly with a ramps 1.4 board if the sensor amplification is not required. Will that work?
Great project , i am going to build one but since i have a ramps board spare i thought i could use that instead!
also what is the power requierment of the psu required?
It's a thermistor, but not the same type as used in 3D printers. You'll need an amplification circuit to read them, so I don't think a RAMPS would be a good choice.
It uses around 50W. A laptop charging brick is enough, you don't even need to modify it (like I did).
Hello dear,
i ordered 2 clones: 50W 24V Hakko 907 irons and saw too late that your's are 110V irons. So i cannot use your project with my irons?
I can not download the code. please see the link. tks.
The links are working fine. Try going to https://github.com/kurozz/hakko907_soldering_station/ and downloading it.
I have a question about the project if it is still supported. I built a breadboard prototype of your project (wanted to try it out before building it). I used a cheap iron with thermocouple not PTC. The temperature readings are OK (after adjusting), but when i turn the heater on, nothing happens. no signal comes out the digital pin. What am I doing wrong? I'm using an arduino UNO and compiling everything with IDE 1.6.12 please help!
Sorry, but I'll need more info than that to help you.
Are you trying to use the op amp circuit to measure the thermocouple?
Did you modify the code in any way? If yes, paste it in pastebin or something like that.
Also, the current through the mosfet and iron is a little too high for a breadboard. That part of the circuit should be done at least on a perfboard or something like that.
Yes, i'm using an op-amp circuit. i removed R3, I used 200K for R4, and 1K for R5. I made no other changes in circuit. Almost nothing was changed in software. the pins were changed so the arduino uno would work and the A and B values were changed. If you want, this is my code http://pastebin.com/ptUqdnHG
It seems you need to set the heater pin to 9 or 10, as these are the only PWM supported pins for the Timer 1.
Can you test it?
It would be nice if you used a real thermocouple sensor instead of my circuit. Try a MAX6675 or a MAX31855. You'll need to modify the measurement of the temperature, but it's not hard to do it.
So now everything works, but the heater heats up very slowly, it draws around 0.5Amps when heating up, but if you turn the mosfet on by applying 5V to the gate it draws 1.1A. I think this is some kind of software problem. Do you have any idea? no software changes were made.
I can only get a temperature of 300°C. What is wrong?
Did you configure the PID? There's a PID Autotune function, try running it one time and see if it helps.
I don't know. Your build is too different from mine, so I can't really help you much.
Why can't it go over 300C? Are the temperature measurement circuit and code working?
I compared my multimeter thermocouple probe readings with arduino readings, they are almost identical. And yes, I did PID autotune. I connected an oscilloscope to heater pin when the iron was cold and started it, it seems that it does around 50% duty PWM even while the iron is cold. My PWM max is set to 1023.
Sounds like a problem with the PID library. I didn't code it, so I don't know if I can help much.
Try setting the PID values by hand and see what happens. Set I and D to 0 and change the P value.
Now turning the heater on, dims the display, but does not reset the microcontroller and the mosfet does not latch. weird. I think i have hardware problems. So I'm going to try to solve them. Thank you for your help!
Huh, sorry to bother you one more time :/
I've analyzed the schematic and as i can't find the mc34063 and the mcp602p (now you understand why i hate live here?) to solve the mc34063, I can use a 12v linear regulator with heatsink directly to arduino VIN? (an 7812 or LM317)
Really, thanks a bunch, if i can finish this (my first project) i will pay you a coffee.
Yes, you can replace the mc34063 with a 7812 or LM317.
About the MCP602, you can use any general purpose op. amp. with rail to rail output. Or you can use other op. amp. like LM324 and make sure it doesn't saturate. It's going to sacrifice some range on the AD converter of the Arduino. Also, you'll have to adapt the code accordingly.
Hi! I'm back (hehe).
I've got 90% of components but i have a problem with the transistor, 20 days waiting and doesn't come (from ebay).
There is any replacement or a separate board with a bc557 and a irf? (for example)
Thanks ^-^
Hi.
Any mosfet with low Rds with 5V gate voltage should work.
If you can't find any in Uruguay, you can use other mosfets with a transistor on the gate, like you said. You will probably need to invert the logic of the output on the code.
You could try the IRFZ44N directly, and see if the iron gets hot and the transistor doesn't overheat.
Hi!
Congrats for this excellent project!
You or anyone knows a trusted eBay seller for buying all components?
Its because here in Uruguay we have 4 buys/year :c
Sorry for my bad english.
Everything should be available on eBay or Aliexpress, but I doubt you can find everything on a single store.
I don't know about the component stores on Uruguay, but most of the components are pretty common and you should be able to find them locally.
There is two stores here, but all is overpriced, 10 (same value) resistors at 1 usd
The arduino 40usd :/
Thank you anyway...
verify error:
C:\Users\ADMINI~1\AppData\Local\Temp\buildf6a9848bd5e4007e7c2b14603983b2ca.tmp\sketch\PID_v1.cpp:14:20: fatal error: PID_v1.h: No such file or directory
#include
^
compilation terminated.
Using library LiquidCrystal at version 1.0.5 in folder: C:\arduino-1.6.9\libraries\LiquidCrystal
exit status 1
Error compiling for board Arduino Nano.
It's compiling alright here with Arduino 1.6.7.
Copy all the libraries to your libraries folder and remove them from the sketch folder.
Hi.
I found this project a few days ago and I'm so impressed that I decided to try making it myself.
When I open it in the Arduino IDE and try to upload it to an Arduino Nano V3 get me of all those errors
http://laentver.dk/Error.txt
I copied all the libraries into my library folder and see them in the Arduino IDE and the the IDE would update EEPROMEx & PID libraries.
The errors is there both before and after updating these libraries.
Can it be because I am using IDE version 1.6.7 ??
Also can you point me to a compatible iron from ebay ??
A search on ebay returs both version of the 907 that appears to have a ptc thermistor, k type thermocouple an som that don't specife what type og temperatur sensor is installed
Regards Niels
It looks like you have the libraries both in your libraries folder and the sketch folder. If so, try removing the libraries from the sketch folder.
About the 907, I bought two of them at different time from the same vendor at Aliexpress and they have different sensing resistors. You can't really expect to get the exact same one even from the same vendor. Both of them have a PTC thermistor at least, so it's just a matter of calibration.
Here's the one I bought: http://www.aliexpress.com/item/24V-50W-Soldering-Station-Iron-Handle-for-HAKKO-907-ESD-907-936-937-928-926-station/1700817892.html
Your right, Stupid me !!
After removing the libraries folders from the sketch folder it worked.
Thanks for the link.
Hi
I have did the calculations and it seems if i use a 3Kohm for R3 the reading will be around 4,71 V.
like this: Vo=48*5*60/3000+60= 4,705V
It is correct, or should i change another resistor value as well (R4, R5)???
By changing the R3 value it is possible to kill the ptc sensor??
My iron is driven by 24V AC! I think if i replace the mosfet with a solid state relay i can safely drive the heating circiut right??
Thanks :D
Changing R4 and R5 will affect the value of R3.
You won't kill the PTC by changing R3, unless it's too small, but 3kohms is alright.
About your iron being 24V AC, there should be no problem driving it with 24V DC, but yes, you could replace the MOSFET with a SSR and use a 24V transformer to power the iron.
You'll need a pretty beefy transformer (24V 3.5A). Switching supplies are cheaper.
I want to built a complete soldering station for myself, so i have a beefy transformer (24V, 10A), and two soldering irons, one of them is a DSX120 (Weller desoldering Iron 120W) and a WSP 80 (regular soldering iron 80W) and i will add a vacuum pump (24V 25W) for supply the desoldering iron.
You should have no problems, then. Just take care, as some SSRs are zero-cross switching, to check the PWM frequency to make the most use of it.
It is possible to use a different type of soldering iron ( Weller DSX80)?
It has the same PTC system for sensing the temp, and the heating element is also 24V (80W).
As far as i have noticed the only difference is the PTC's temp range. It is 23 Ohms at 25°C and it is 55 Ohms at 450°C.
How should i modify your hardware (or software) to drive this iron correctly???
Thanks in advance. :D
Yes, you should be able o modify the soldering station to use your soldering iron.
The IRLZ44N mosfet should be able to handle your heating element. You'll just need to make sure the PTC amplifier circuit has the correct values for your PTC.
I encourage you calculating the resistors values for your PTC. Have a look at https://hackaday.io/project/3417-hakko-907-based-soldering-station/log/15966-revising-the-amplifier
About the software, check if your PTC's temperature vs resistance values are linear. If not, you'll have to change the temperature measurement software. If yes, the calibration should take care of handling the temperatures.
I will check the link :D
Here is the map for the linearity :
Thank you.
That's pretty linear. You should have no problem with the software.
Just follow the calibration procedures, as described on the code.
Become a member to follow this project and never miss any updates
first of all I congratulate you on the project ...
I need advice from you ... I made the wiring as you exposed, I loaded the software as you gave it
... but all it displays are just the squares on the screen ...
I use arduino nano V.3 ... display 1602A ... and instead of irlz44z ... irfz48N ...
24V / 6A power supply
Do you have any idea what it would be like?
in the future if the problems are solved I want to replace the irlz44z ... with MOC 3021 and
BTA16 600 ... so I can use hot air .. I hope it will work ...