DIY - Soldering station made by myself on the basis of Arduino

hello! Once I spoke about the soldering station on the Arduino and immediately overwhelmed me questions (how? / Where? / When?). Given the mass of requests, I decided to write a review of simple soldering station (soldering iron only) based on Arduino.

Soldering station with his hands on the basis of Arduino

Why Arduino? After all, there are a lot of controllers, faster and cheaper. In such cases, I usually answer: — cheap, practical, fast.

Indeed, the Arduino Pro Mini is now worth $ 1.63 for 1 piece (recently sent) and atmega8 worth $ 1 (wholesale price). It turns out that the board Pro Mini with bodywork (quartz, capacitors, stabilizers) should not that expensive, plus the entire time saver. Also very time saving IDE-shell for Arduino, easy and fast it copes even a schoolboy. Given the popularity and cheapness, I decided to put it on the Arduino.

To create a soldering station, we first of all need a pen soldering station, it is often the Chinese station type 907 A1322 939.
Let's start

Features handle:

Voltage: 24V DC
Power: 50W (60W)
Temperature: 200 ℃ ~ 480 ℃

To control handle a soldering iron first thing we need to remove the data from the temperature sensor, this will help us LM358N. This scheme is already running at me almost 2 years.

Soldering station with his hands on the basis of Arduino
Next, we need to control (turn on and off) the heating element of the soldering iron, this will help to transistor switching IRFZ44. His connection is very simple:
Soldering station with his hands on the basis of Arduino

I want to draw your attention to the future operation of the heating element. We include it in three phases by PWM modulation. At the start of the program will include nearly maximum power (90% duty cycle), when approaching a predetermined temperature power is reduced (35-45% duty cycle), and the minimum difference between the current and desired temperature power kept to a minimum (30-35% duty cycle). Thus we eliminate the inertia of overheating. Again, soldering station working steadily for almost 2 years, and the fuser is not in continuous full load (which prolongs its life). All settings can be edited in the program.

Connect the soldering iron need the following scheme:

Soldering station with his hands on the basis of Arduino

Note that the connector on the panel of the station, but not on the handle.

Very insist: Check the handle before starting, unwind and check the integrity of the heating element, as well as accurate cable wires on the connector.

Next, we need a controller. To demonstrate, I chose Arduino Uno — as the most popular and convenient. Note that I am doing soldering station block and it gives the opportunity to choose the controller. Also, we need two buttons to catch up to + 5V 10k resistances and 7-segment display into three categories. Conclusions segments I connected through the resistance of 100 ohms.
ANODES:
D0 — a
D1 — b
D2 — c
D3 — d
D4 — e
D5 — f
D6 — g
D7 — dp

CATHODES:
D8 — cathode 3
D9 — cathode 2
D10 — cathode 1
I would also like to note that we put a button on the analog pins 3 and 2. And in the program, I interrogate them as analog. I did this in order not to mislead the younger generation. Not everyone knows where to find the pin 14, 15 and 16. And considering that the speed is enough memory in the controller and much, then it will be easier.
Soldering station with his hands on the basis of Arduino
Soldering station with his hands on the basis of Arduino
Soldering station with his hands on the basis of Arduino
You may notice the empty socket near the indicator is blank under LM358N, just analogue KA358 showed poor results in their work. So I took the unit of temperature sensors on the LM358N for soldering station with a hairdryer.
Soldering station with his hands on the basis of Arduino
Soldering station with his hands on the basis of Arduino

Next, you must choose a power supply. I took the power supply from some laptop at 22V 3A, it suffices to reserve. Consumption at the start of the soldering iron 1.5A and 0.5A, with the support of temperature. So choose the one most appropriate power supply, it is desirable to 24V DC 2A.

In the photo above, you can see the wires tight and it scares many. Understand, this demo version for any controller, the station can be assembled and compact, for example:
Soldering station with his hands on the basis of Arduino
Soldering station with his hands on the basis of Arduino

This is a good example for your project soldering station. Video, which clearly will help you understand how to collect himself:

VIDEO — DIY — Soldering station made by myself on the basis of Arduino
You can subscribe to my YouTube channel and see a lot of interesting
Click here

Here is a test program, wrote under the version of the IDE 1.5.2. Consider all of the above and strongly criticize (the program tries to write a simple and affordable).


/*

 // connection indicators
 ANODES:
 D0 - a
 D1 - b
 D2 - c
 D3 - d
 D4 - e
 D5 - f
 D6 - g
 D7 - dp (digital point)
 
      a
   ********
   *      *
 f *      * b
   *  g   *
   ********
   *      *
 e *      * c
   *  d   *
   ******** # dp
 
 CATHODES:
 D8 - cathode 3
 D9 - cathode 2
 D10 - cathode 1
 */

// -------------------------------------------------- - -----------------------------------------------
byte const digits[] = {
  B00111111,B00000110,B01011011,B01001111,B01100110,B01101101,B01111101,B00000111,B01111111,B01101111};

int digit_common_pins[]={8,9,10};  // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется)
int refresh_delay = 5;
int count_delay = 300; // COUNTING SECONDS IF count_delay = 1000
long actual_count_delay = 0;
long actual_refresh_delay = 0;
int increment = 0;   //Стартовое значение на сегментах
int max_digits =3;  //  Кол-во знаков
int current_digit=max_digits-1;
int increment_max = pow(10,max_digits);
// -------------------------------------------------- - -----------------------------------------------


//--------------------- variables soldering -----------------------------
int knup = 3; // Pin the up in (red LED)
int kndn = 2; // Pin button down in (blue LED)

int nagr = 11; // Output pin of the heating element (via transistor)
int tin = 0; // Pin temperature sensor IN Analog via LM358N
int tdat =  0; // Variable temperature sensor
int ustt =  210; // Default Exposed temperature (+ increase and decrease when pressing)
int mintemp = 140; // Minimum temperature
int maxtemp = 310; // Maximum temperature
int nshim = 0; // The initial value for the PWM load 

void setup(){
  
  pinMode(nagr,OUTPUT);     // Load Port (soldering iron) set up on the way out
  analogWrite(nagr, nshim);     // PWM outputs to the load of the soldering iron (output 0 - start off with a soldering iron - not yet determine the status of the temperature)
  
 
  // -------------------------------------------------- - -----------------------------------------------
  DDRD = B11111111;
  for (int y=0;y<max_digits;y++)
          {
           pinMode(digit_common_pins[y],OUTPUT);
           digitalWrite(digit_common_pins[y], HIGH);    
          }
  // -------------------------------------------------- - -----------------------------------------------

}

void loop() {
    show(increment);   // Display the value of the variable to the screen (LED)
   
   if (tdat < ustt ){   // If the temperature is below the set temperature of the soldering iron is:
      
            if ((ustt - tdat) < 16 & (ustt - tdat) > 6 ) // Check the difference between the set temperature and current soldering iron,
                                     // If the difference is less than 10 degrees, 
                             { 
                              nshim = 99;  // Lower the heating power (PWM 0-255, we do 99) - so we remove the inertia of overheating
                              }
             else  if ((ustt - tdat) < 7 & (ustt - tdat) > 3)
                                                                {              
                                                                  nshim = 80; // Lower the heating power (PWM 0-255, we do 80) - so we remove the inertia of overheating
                                                                 }
                              
                         else if ((ustt - tdat) < 4 )
                                                      {              
                                                       nshim = 45;  // Lower the heating power (PWM 0-255, we do 45) - so we remove the inertia of overheating
                                                       }  
                                                     
                                                     
                            else {
                                  nshim = 230; // Otherwise, raise the heating power (PWM 0-255, we do 230) at the maximum for rapid heating to the desired temperature
                                 }
                        
                              
      analogWrite(nagr, nshim);    // Output to the PWM port (transistor) power value
    }
   else { // Otherwise (if the temperature of the soldering iron is equal to or higher than the set)
            
            nshim = 0;  // Turn off the heating power (PWM 0-255 we do 0) - so we disable soldering
            analogWrite(nagr, nshim);   // Output to the PWM port (transistor) power value
          } 
  
    
  if(millis() - actual_count_delay > count_delay) // This is for segments 

  {  
    actual_count_delay = millis();
     // Here we write our prog to read the state of the buttons (this place will not slow down the counter output to segments)
   
    tdat = analogRead(tin); // Read the state of the temperature sensor and assign tdat
    tdat =map(tdat,0,430,25,310); // The default calibration 0,430,25,310
    increment = tdat; // Assign the current value of the temperature variable segment
     
    if (analogRead(kndn) < 1)  // If the blue button is pressed, the lower the temperature by 5
                               {
                               if( ustt <= mintemp || (ustt-5) <= mintemp )
                                                          {
                                                            ustt= mintemp;
                                                            increment = ustt;
                                                          }
                                       else { 
                                             ustt=ustt-5;
                                             increment = ustt;
                                              } 
                                 
                                 
                              
                               }
  
          else if (analogRead(knup) < 1)  // If the red button is pressed, then increase the temperature by 5
                                       {
                                       ustt=ustt+5;
                                       if( ustt >=maxtemp)
                                                          {
                                                            ustt= maxtemp;
                                                          }
                                       increment = ustt;
                                       } 
  
} 



}

void show(int value) { //------------------------------- subroutine to display the segments - it is better not to change ---------------------------------------------
  int digits_array[]={};  
  int y=0;
  boolean empty_most_significant = true; 
  

  
  if(millis() - actual_refresh_delay >= refresh_delay)
  {  

  for (int z=max_digits-1;z>=0;z--)
  {


    digits_array[z] = value / pow(10,z); //rounding down by converting from float to int
    
    if(digits_array[z] != 0 ) empty_most_significant = false;  // DON'T SHOW LEADING ZEROS
    
    value = value - digits_array[z] * pow(10,z);




 
   if(z==current_digit)
   {
    if(!empty_most_significant || z==0){ // DON'T SHOW LEADING ZEROS EXCEPT FOR THE LEAST SIGNIFICANT
            
                        PORTD = digits[digits_array[z]];
               }
    else
    {
      PORTD = B00000000;  
    }

  
     digitalWrite(digit_common_pins[z], LOW);
   }else{
     digitalWrite(digit_common_pins[z], HIGH);
    }

}
  

      current_digit--;
      if(current_digit < 0) 
      {
        current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS
      }
 
 actual_refresh_delay =  millis();     
 }

}



I really hope that you it somehow help in the creation of your project.

1 comment

Alex_Link
Video Click here

Add comment