Паяльная станция на Arduino своими руками | Пикабу

Паяльная станция на Arduino своими руками | Пикабу Инструменты

Soldering station v5.0 — hakko 936 "на стероидах"

Паяльная станция на Arduino своими руками | Пикабу

Есть у меня «рабочая лошадка» — Hakko 936. Работает исправно уже больше 2х лет.

Но мне хотелось большей информативности и возможности менять некоторые характеристики станции.

Решил сделать «с нуля» свою станцию(без фена, т.к. хотелось некой мобильности) на основе atmega328 на «китайдуино nano».

Давно заказывал для Хакко запасной паяльник, но китайцы прислали паяльник с термопарой(сопр. терм. — 2.1Ом, сопр. нагр. — 15.5Ом), решил его использовать.

Скетч честно пытался писать сам, но не осилил, и заказал его. Потом дорабатывал под себя(символы, заставка, мелкие штрихи, доп. функции).

Корпус решил взять в магазине электротоваров. Подошла по габаритам коробка распаячная Tyco 200х140х75 IP55.
Паяльная станция на Arduino своими руками | Пикабу

Блок питания взял с запасом: XK-2412-24 (220В.->24В.6a)
Паяльная станция на Arduino своими руками | Пикабу

Экран решил использовать двухстрочный:LCD1602 с зелёной подсветкой.

Адаптер I2C к экрану на PCF8574AT
Паяльная станция на Arduino своими руками | Пикабу

Пошла мелочевка: Разъем для паяльника GX12 5 Pin
Паяльная станция на Arduino своими руками | Пикабу

Энкодер с кнопкой EC11

«Степ-даун» конвертер gw1584 для питания ардуинки и экрана.

Двухканальный операционный усилитель LM358P для снятия даных с датчика температуры паяльника.
Паяльная станция на Arduino своими руками | Пикабу

Полевой транзистор — IRFZ44N для управления нагревательным элементом паяльника путем ШИМ-модуляции.
Паяльная станция на Arduino своими руками | Пикабу

Кнопка включения, разъем для питающего шнура, держатель плавких вставок(Fuse), резисторы, керамические конденсаторы, светодиод, провода итд — все это было в наличии у меня, покупать не пришлось.

Схема была скопирована и доработана из «схемы паяльной станции Aleks Link для ардуино NANO». Изменена под управление инкрементным энкодером с защитой от «дребезга».
Вот оригинальная схема:
Паяльная станция на Arduino своими руками | Пикабу

Почти все в схеме осталось нетронутым — заменил только экран.

Приступаю к сборке — высверлил все нужные отверстия и пропилил прямоугольник для экрана:
Паяльная станция на Arduino своими руками | Пикабу

Готовый вид — невзрачно, но работоспособно:
Паяльная станция на Arduino своими руками | Пикабу

По итогу: Вышло не плохо, набор температуры от комнатной до 300гр. за ~20-25сек.
Поддержание заданной температуры(но паять массивные детали не стоит.)
Есть режим «сон», который вырубает поддержку температуры(жало перестает нагреваться)через 10минут(в моем случае), при этом, станция работает, но на экране справа будет знак «S» — sleep. Для выхода из режима сна, нужно повернуть энкодер в любую сторону, и тогда знак поменяется на «W» — work, и начнется набор температуры до выставленной.

Скетч, по понятным причинам, не публикую, но покажу скетч от первоисточника — там нужно подправить вывод на экран(семисегментник) и всё.

Скетч первоисточника

/*
Arduino IDE 1.5.4
Паяльник на Arduino Pro Mini v0.4

Alex link
http://www.youtube.com/c/AlexLink-Free
http://vk.com/linklife
http://www.facebook.com/groups/Arduno.life/
// Пины еодключения индикаторов
ANODES(CATHODES):
D1 — a
D2 — b
D4 — c
D6 — d
D7 — e
D5 — f
D3 — g
D0 — dp (digital point) Я НЕ подключал — резерв… индикатора :)))

a1
********
* *
f * * b2
5 * g3 *
********
* *
e * * c4
7 * d6 *
******** # dp0

CATHODES(ANODES):
D16 — cathode 3
D15 — cathode 2
D12 — cathode 1
*/

// ————————————————————————————————
int indicator = 1; // 0 = Катод  1 = Анод  — Выбрать под Ваш индикатора !!!!

byte digits[] = {
B00001001,B11101011,B00110001,B10100001,B11000011,B10000101,B00000101,B11101001,B00000001,B10000001};

int digit_common_pins[]={16,15,12}; // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется)
int refresh_delay = 5;
int count_delay = 1000; // 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);
// ————————————————— не изменять, это для Сегментов ————————————————

//——————— переменные паяльника ——————————
int knopka = 3; //Пин кнопки

int tin = 0; // Пин Датчика температуры IN Analog через LM358N
int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM

int tempust = 230; // установленная температура
int tempmin = 200; // минимальная температура
int tempmax = 480; // максимальная температура
int tempreal = 250; // переменная датчика текущей температуры
int temppwmmin = 40; // минимальное значение PWM нагревателя
int temppwmmax = 180; // максимальное значение PWM нагревателя
int temppwmreal = 0; // текущее значение PWM нагревателя
int airreal = 100; // стартовое значение PWM вентилятора(если нужно)

int temperror = -50; // разница температур(установленная — реальная)

int temprazn = 0; // переменная разницы температуры(установленная — текущая)

void setup(){

if(indicator == 0){ //Если вначале был выбран общий Катод
for(int i=0; i<10;i  ){
digits[i] = ~ digits[i];
}
}

pinMode(pinpwm,OUTPUT); // Порт нагрузки(паяльника) настраиваем на выход
analogWrite(pinpwm, temppwmreal); //Вывод шим в нагрузку паяльника (выводим 0 — старт с выключеным паяльником- пока не опредилим состояние температуры)

// ————————————————— не изменять, это для Сегментов ————————————————
DDRD = B11111111;
for (int y=0;y<max_digits;y  )
{
pinMode(digit_common_pins[y],OUTPUT);
digitalWrite(digit_common_pins[y], LOW);
}
// ————————————————— не изменять, это для Сегментов ————————————————

}

void loop() {

show(increment); // Вывести значение переменной на экран(LED)

if (tempreal < tempust ){ // Если температура паяльника ниже установленной температуры то:

if ((tempust — tempreal) < 16 & (tempust — tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника,
// Если разница меньше 10 градусов то
{
temppwmreal = 99; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева
}
else if ((tempust — tempreal) < 7 & (tempust — tempreal) > 3)
{
temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева
}

else if ((tempust — tempreal) < 4 ) { temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева } else { temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры } analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } else { //Иначе (если температура паяльника равняется или выше установленной) temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) — таким образом мы отключаем паяльник analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } if(millis() — actual_count_delay > count_delay) // это для сегментов

{
actual_count_delay = millis();
// Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчк не будет тормозить вывод на сегменты)

tempreal = analogRead(0);// считываем текущую температуру

tempreal=map(tempreal,-50,700,0,500); // нужно вычислить
increment=tempreal;

//———————————————————- Кнопки ————————————————————————-
if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5
{
if( tempust <= tempmin || (tempust-5) <= tempmin ) { tempust= tempmin; increment = tempust; } else { tempust=tempust-5; increment = tempust; show(increment); // Вывести значение переменной на экран(LED) } } else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 ) // Если нажата вверх кнопка то повысить температуру на 5 { tempust=tempust 5; if( tempust >=tempmax)
{
tempust= tempmax;
}
increment = tempust;
show(increment); // Вывести значение переменной на экран(LED)

}

}
}

void show(int value) { //——————————- подпрограмма для вывода на сегменты — лучше не изменять ———————————————
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
{
if(indicator == 0){ //Если вначале был выбран общий Катод
PORTD = B00000000;
}
else{
PORTD = B11111111;
}
}

if(indicator == 0){
digitalWrite(digit_common_pins[z], LOW);
}
else{
digitalWrite(digit_common_pins[z], HIGH);
}
}
else{

if(indicator == 0){
digitalWrite(digit_common_pins[z], HIGH);
}
else{
digitalWrite(digit_common_pins[z], LOW);
}
}

}

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

actual_refresh_delay = millis();
}

}

И обновленный скетч от первоисточника:

/*
Arduino IDE 1.5.4
Паяльник на Arduino Pro Mini  v0.4

Alex link
http://www.youtube.com/c/AlexLink-Free
http://vk.com/linklife
http://www.facebook.com/groups/Arduno.life/
 // Пины еодключения индикаторов
 ANODES(CATHODES):
 D1 - a
 D2 - b
 D4 - c
 D6 - d
 D7 - e
 D5 - f
 D3 - g
 D0 - dp (digital point) Я НЕ подключал - резерв... индикатора :)))
 
      a1
   ********
   *      *
 f *      * b2
 5 *  g3  *
   ********
   *      *
 e *      * c4
 7 *  d6  *
   ******** # dp0
 
 CATHODES(ANODES):
 D16 - cathode 3
 D15 - cathode 2
 D12 - cathode 1
 */

// ------------------------------------------------------------------------------------------------
int indicator = 1; // 0 = Катод  1 = Анод  Выбрать под Ваш индикатор !!!!

byte  digits[] = {
  B00001001,B11101011,B00110001,B10100001,B11000011,B10000101,B00000101,B11101001,B00000001,B10000001};

int digit_common_pins[]={16,15,12};  // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется)
int refresh_delay = 5;
int count_delay = 1000; // 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);
// -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------


//--------------------- переменные паяльника -----------------------------
int knopka = 3; //Пин кнопок


int tin = 0; // Пин Датчика температуры IN Analog через LM358N
int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM

int tempust = 230; // установленная температура
int tempmin = 200; // минимальная температура
int tempmax = 480; // максимальная температура
int tempreal = 250; // переменная датчика текущей температуры
int temppwmmin = 40; // минимальное значение PWM нагревателя  
int temppwmmax = 180; // максимальное значение PWM нагревателя
int temppwmreal = 0; // текущее значение PWM нагревателя
int airreal = 100; // стартовое значение PWM вентилятора(если нужно)

int temperror = -50; // разница температур(установленная - реальная)

int temprazn = 0; // переменная разницы температуры(установленная - текущая)

void setup(){
  
 if(indicator == 0){   //Если вначале был выбран общий Катод
                    for(int i=0; i<10;i  ){
                                           digits[i] = ~ digits[i];
                                           }
                   }
  
  pinMode(pinpwm,OUTPUT);     // Порт нагрузки(паяльника) настраиваем на выход
  analogWrite(pinpwm, temppwmreal);     //Вывод  шим в нагрузку паяльника (выводим 0 - старт с выключеным паяльником- пока не опредилим состояние температуры)
  
 
  // -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
  DDRD = B11111111;
  for (int y=0;y<max_digits;y  )
          {
           pinMode(digit_common_pins[y],OUTPUT);
           digitalWrite(digit_common_pins[y], LOW);    
          }
  // -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------

}

void loop() {
    
  show(increment);   // Вывести значение переменной на экран(LED)
   
    
   if (tempreal < tempust ){   // Если температура паяльника ниже установленной температуры то:
      
            if ((tempust - tempreal) < 16 & (tempust - tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника,
                                     // Если разница меньше 10 градусов то 
                             { 
                              temppwmreal = 99;  // Понижаем мощность нагрева (шим 0-255  мы делаем 99)  - таким образом мы убираем инерцию перегрева
                              }
             else  if ((tempust - tempreal) < 7 & (tempust - tempreal) > 3)
                                                                {              
                                                                  temppwmreal = 80;  // Понижаем мощность нагрева (шим 0-255  мы делаем 99)  - таким образом мы убираем инерцию перегрева
                                                                 }
                              
                         else if ((tempust - tempreal) < 4 )
                                                      {              
                                                       temppwmreal = 45;  // Понижаем мощность нагрева (шим 0-255  мы делаем 99)  - таким образом мы убираем инерцию перегрева
                                                       }  
                                                     
                                                     
                            else {
                                  temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255  мы делаем 230) на максимум для быстрого нагрева до нужной температуры
                                 }
                        
                              
      analogWrite(pinpwm, temppwmreal);     //Вывод в шим порт (на транзистор) значение мощности
    }
 else { //Иначе (если температура паяльника равняется или выше установленной) 
            
            temppwmreal = 0;  // Выключаем мощность нагрева (шим 0-255  мы делаем 0)  - таким образом мы отключаем паяльник
            analogWrite(pinpwm, temppwmreal);   //Вывод в шим порт (на транзистор) значение мощности
          } 
 
  
  if(millis() - actual_count_delay > count_delay) // это для сегментов 

  {  
    actual_count_delay = millis();
     // Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчк не будет тормозить вывод на сегменты)
   
    tempreal = analogRead(0);// считываем текущую температуру
    
    tempreal=map(tempreal,-50,700,0,500);   // нужно вычислить
    increment=tempreal;
  
  //---------------------------------------------------------- Кнопки -------------------------------------------------------------------------  
          if (analogRead(knopka) == 0)  // Если нажата вниз кнопка то понизить температуру на 5
                               {
                               if( tempust <= tempmin || (tempust-5) <= tempmin )
                                                          {
                                                            tempust= tempmin;
                                                            increment = tempust;
                                                          }
                                       else { 
                                             tempust=tempust-5;
                                             increment = tempust;
                                             show(increment);   // Вывести значение переменной на экран(LED)
                                            
                                              } 
                                 
                                 
                              
                               }
  
          else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 )  // Если нажата вверх кнопка то повысить температуру на 5
                                       {
                                       tempust=tempust 5;
                                       if( tempust >=tempmax)
                                                          {
                                                            tempust= tempmax;
                                                          }
                                       increment = tempust;
                                       show(increment);   // Вывести значение переменной на экран(LED)
                                      
                                       } 
 
    
  }
}

void show(int value) { //------------------------------- подпрограмма для вывода на сегменты   - лучше не изменять ---------------------------------------------
  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
                                            {
                                             if(indicator == 0){   //Если вначале был выбран общий Катод
                                                                PORTD = B00000000;  
                                                                }
                                                     else{
                                                           PORTD = B11111111;
                                                          }  
                                            }

       if(indicator == 0){ 
                         digitalWrite(digit_common_pins[z], LOW);
                         }
             else{
                  digitalWrite(digit_common_pins[z], HIGH);
                 }
      }
 else{
     
     if(indicator == 0){ 
                         digitalWrite(digit_common_pins[z], HIGH);
                         }
             else{
                  digitalWrite(digit_common_pins[z], LOW);
                 }
   }

}
  

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

}

Видео работы:

Если есть вопросы, задавайте. По возможности буду отвечать.

Propaiku.ru — простая цифровая паяльная станция

Предлагаю простую в повторении цифровую паяльную станцию, постройка которой обойдётся примерно в 7$ (без учёта источника питания). 

Паяльная станция построена на Arduino Nano, поэтому для повторения не потребуется программатор и различные переходники для него. Схема имеет минимум деталей и не требует наладки. 

4186067885.jpg3303176733.jpg

Технические характеристики:

  • Разработано для паяльников Hakko 907;
  • Диапазон температур: 27°C–525°C;
  • Время разогрева: 25–37с (325°C);
  • Рекомендуемый источник питания: 24В, 3А;
  • Мощность: 50Вт (средняя).

За и против цифровых паяльных станций

1992467981.jpg1268944829.jpg

Как и любой другой радиолюбитель, я начал с обычного паяльника. Они хороши, но у них есть несколько минусов:

  • Паяльнику, прежде чем им можно будет паять, требуется 7-15 минут для нагрева;
  • После прогрева эти паяльники будут продолжать работать с максимальной температурой;
  • В некоторых случаях, при продолжительном контакте, эти паяльники могут повредить электронные компоненты.

Обычные паяльники с диммерами:

Существует простой и распространенный способ регулировать температуру у обычных паяльников — это подключить их через диммер, чтобы ограничить мощность, поступающую на нагревательный элемент. Паяльники со встроенным диммером легко купить в магазине. Единственный недостаток — отсутствие обратной связи по температуре. При пайке массивных элементов таким паяльником, температура жала будет падать, что потребует увеличения температуры регулятором диммера. Как только пайка прекращена, жало начнёт перегреваться, и потребуется уменьшить температуру соответствующим регулятором.

Цифровая паяльная станция:

Паяльник очень похож на паяльник с диммером, но все автоматизировано с помощью системы ПИД. Проще говоря, автоматизированная электронная система управления паяльной станцией постоянно настраивает «ручку диммера» за вас. Когда система обнаруживает, что температура жала паяльника ниже заданной температуры, система увеличивает мощность, необходимую для нагрева жала. Когда температура паяльника выше установленной, его питание отключается, что приводит к падению температуры. Система делает этот процесс очень быстро, постоянно включая и выключая нагревательный элемент паяльника, чтобы поддерживать постоянную температуру на жале. Вот почему с цифровыми паяльными станциями время прогрева значительно сокращается.

202220493.jpg828562653.jpg

3006417676.jpg

Необходимые материалы:

Внутри паяльника Hakko 907 находится нагревательный элемент с датчиком температуры. Оба заключены в керамический материал. Нагревательный элемент — это просто змеевик, который выделяет тепло при подаче электроэнергии. С другой стороны, датчик температуры представляет собой термистор. Термистор похож на резистор: при изменении температуры изменяется его сопротивление.

К сожалению, Hakko не предоставляет данных о термисторе внутри своих нагревательных элементов. Поэтому я нагревая термистор записывал его сопротивление, получив тем самым график зависимости сопротивления от температуры.

1268939717.png

Чтобы получить полезный выходной сигнал от датчика температуры термистора, пришлось подключить его в плечо делителя напряжения. Сопротивление верхнего резистора делителя напряжения я выбрал исходя из того, чтобы ограничить максимальную мощность, рассеиваемую на датчике (установив его на максимум 50 мВт). Максимальное выходное напряжение делителя в условиях максимальной рабочей температуры при этом составило около 1,6 В. Для более точного измерения температуры жала паяльника требуется усилить этот сигнал перед подачей его на АЦП Ардуино.

2381236753.png

Для усиления сигнала от датчика температуры в устройстве применён не инвертирующий усилитель на операционном усилителе, коэффициент усиления которого составляет 2,22. Усилитель имеет запас по напряжению, что позволит применять другие модели паяльника.

1971256024.jpg

В проекте, в качестве коммутирующего элемента, применён простой N-канальный MOSFET управляемый логическим уровнем IRFZL44. Он служит цифровым переключателем для подачи питания на нагревательный элемент. Неинвертирующий операционный усилитель (LM358) используется для усиления и масштабирования крошечных напряжений, которые создает комбинированный термистор делителя напряжения. Потенциометр 10k используется в качестве ручки управления температурой, а светодиод — это просто индикатор, который я подключил и запрограммировал в проекте, чтобы отображать, активен ли нагревательный элемент. Для этого конкретного проекта я использую ЖК-дисплей 16X2 с драйвером I2C, так как он более удобен для новичков в электронике.

4147026289.png

Поскольку на большинство клонов Arduino Nano можно подавать напряжение не более 15 В, не перегружая регулятор AMS1117 5 В, а на нагревательный элемент требуется подать 24 В, для оптимальной работы я использую понижающий преобразователь. Регулятор AMS1117 5V, который есть в большинстве клонов Arduino Nano, имеет падение напряжения 1,5 В, это означает, что входное напряжение с вывода VIN Arduino Nano должно быть 6,5 В (5 В 1,5 В).

264153528.jpg

2020502737.png1158563169.png

Перед установкой понижающего преобразователя на плату, требуется подстроечным резистором установить выходное напряжение в районе 6,5-7В.

3344836296.jpg4198371192.jpg

2020513961.jpg1158590745.jpg

3465191878.jpg

Устройство можно собрать в любой подходящий корпус. Если есть возможность распечатать корпус на 3D принтере, в конце статьи можно скачать соответствующие файлы.

4092233846.jpg3024810662.jpg

2301287190.jpg990512902.jpg

107622070.jpg1103778918.jpg

2091548118.jpg4277856775.jpg

3281699767.jpg97940067.jpg

951475155.jpg2132156675.jpg

1115031731.jpg4032222371.jpg

Перед компиляцией и загрузке кода в Ардуино убедитесь, что библиотеки Wire.h и LiquidCrystal_I2C.h установлены.

147252330.png

При первом включении паяльной станции не забудьте подстроечным резистором настроить контрастность ЖК-дисплея.

2325120963.jpg3086397043.jpg

900086178.jpg147197970.jpg

416498395.jpg632515435.jpg

Паяльную станцию можно запитать от любого блока питания с выходным напряжением 24В и током 3А. Можно применить блок питания от ноутбука с выходным напряжением 18В и током 2,5А, но время прогрева паяльника увеличиться до 37 с.

Для улучшения теплопроводности рекомендую в паяльное жало Hakko 907 добавить термопасту. Только не забудьте выпустить воздух в течение первых 30 минут работы, так как смазка начнет кипеть и выделять пары. По прошествии 30 минут паста твердеет и становиться похожей на мел. Когда придет время замены наконечника, постукивая молотком по наконечнику, следует аккуратно вытаскивать нагревательный элемент изнутри.

1645416891.jpg1601386507.jpg

Я использую эту паяльную станцию ​​уже почти 5 лет и очень ей доволен!

Дополнительные файлы к статье тут

Изготовление

Обратите внимание, что паяльная станция является прибором долговременного пользования. Поэтому, конструируя самодельный аппарат, не спешите и предпочитайте проверенные годами решения. Например, изготавливая своими руками паяльную станцию широкого применения, имейте в виду, что самодельный аппарат должен быть собран на базе самых надёжных компонентов.

Профессиональные паяльные станции обладают возможностью ИК-нагрева. Это означает, что для обеспечения должной температуры в области пайки вовсе не используются способы контактного нагрева.

Задача переноса тепла перекладывается на бесконтактные приборы, излучающие ИК-лучи.

В качестве источников нагрева в бесконтактных станциях часто используют мощные галогеновые лампы накаливания, тогда как контактные паяльники обладают простым прибором нагрева в виде нихромовой спирали вокруг массивного медного жала.

Задавшись целью создать паяльную станцию на базе Arduino, надо в первую очередь присмотреться к аккуратности изготовления готовых комплектов. Обратите внимание, что в некоторых дешёвых наборах для сборки не только нет высоковольтных проводов, но порой даже отсутствует схема соединения.

Значительное внимание следует уделить корпусу прибора. Самодельная паяльная станция должна быть одновременно компактной, аккуратной и удобной.

При проектировании паяльной станции на базе Arduino приходится учитывать стандартные размеры печатных плат производителей электроники.

В качестве примера паяльной станции на основе Arduino можно взять конструкцию, неоднократно опробованную мастерами.

  1. Сперва нужно определиться с конструкцией отражателя нижнего нагревателя. Вполне подойдёт рефлектор обычного плафона освещения, рассчитанный на размещение четырёх ламп.
  2. Вторым этапом будет подбор галогеновых ламп нужной мощности. Лампочки баллонной конструкции для системы нижнего подогрева на Arduino не подходят. Нужно найти длинные линейные лампы.
  3. Важным моментом является выбор конструкции монтажного стола. Для пайки с нижним подогревом требуется прочно закрепить монтажную плату на определённом удалении от нагревательных ламп. Для этого используются монтажные «крокодильчики», закреплённые на точно отмеренном расстоянии от ламп.
  4. Сам блок управления аппаратом можно разместить в любом подходящем корпусе. Например, многие мастера используют для своих самоделок старые блоки питания от компьютеров.

Особенности

Схемотехника микроконтроллерных устройств на базе платформы Arduino долгое время была полностью открыта. В последнее время уже невозможно остановить распространение микроэлектронных устройств на базе Arduino по системе удалённых почтовых продаж. Более того, в рамках этой платформы активно распространяются микроконтроллеры конкурентов – SM32 м ESP.

Такое богатство выбора резонно вызывает интерес домашних мастеров — как на базе готового набора собрать что-нибудь полезное в быту. Учитывая, что интерес проявляют радиомастера, неудивительно, что большинство самоделок касается технологий монтажа радиоэлектронных компонентов.

Если пытаться сделать паяльную станцию на базе Arduino, то первое, с чем сталкивается конструктор, это выбор платформы паяльника.

Внутри паяльной станции находится полноценный «мозг», умеющий управлять температурой инструмента, но ему требуется сигнал от датчика температуры.

Существует три принципиально отличающиеся технологии паяльников с датчиками:

  • с терморезистором;
  • с термопарой;
  • инфракрасная.

Первые недороги и широко распространены. Терморезистор, как правило, представляет собой всего лишь кусочек проволоки, изготовленной из особого материала. Это дёшево, но не обеспечивает должного качества измерения температуры.

Термопара, наоборот, обеспечивает крайне точное измерение. Но для этого в комплекте с термопарой нужно использовать специальный усилитель сигнала, калибрующий выходной сигнал согласно стандартам.

При возможности выбора всегда рекомендуется вариант с термопарой. Контроллеры, управляющие такими устройствами, не только технически сложнее, они точно отображают температуру жала паяльника. У них обычно есть цифровой индикатор, ориентируясь на который можно дозировать нагрев паяльника.

Паяльный фен на ардуино. часть первая.

Самодельная инфракрасная паяльная станция. бюджетный ремонт ноутбука своими руками.

Инфракрасная паяльная станция — это устройство для пайки микросхем в корпусе BGA. Если прочитанное ничего вам не говорит, вряд-ли вам стоит заходить под кат. Там ардуины, графики, программирование, амперметры, саморезы и синяя изолента.

Предыстория первая.

Моя профессиональная деятельность некоторым образом связана с электроникой. Поэтому родственники и знакомые постоянно норовят притащить мне какую-нибудь не совсем исправную электронную штуку со словами «ну посмотри, может тут какой проводок отпаялся».
В тот раз такой штукой оказался 17″ ноутбук eMachines G630. При нажатии на кнопку питания зажигался индикатор, шумел вентилятор, но дисплей был безжизненным, не было звуковых сигналов и активности жесткого диска. Вскрытие показало, что ноутбук построен на платформе AMD, а северный мост имеет маркировку 216-0752001. Беглое гугление показало, что у чипа весьма плохая репутация в части надежности, зато проблемы с ним легко диагностируются. Нужно лишь его прогреть. Выставил на паяльном фене 400 градусов и подул на чип секунд 20. Ноутбук запустился и показал картинку.
Диагноз поставлен. Казалось бы, дело за малым — перепаять чип. Вот тут меня ожидало первое откровение. После обзвона сервис-центров выяснилось, что минимальная сумма, за которую в Минске можно поменять чип — 80 долларов. 40 долларов за чип и 40 долларов за работу. Для ноутбука общей стоимостью хорошо если 150 долларов это было весьма не бюджетно. Дружественный сервис по знакомству предложил перепаять чип по себестоимости — за 20 долларов. Итоговый ценник снизился до 60 долларов. Верхняя граница психологически приемлемой цены. Чип был благополучно перепаян, ноутбук собран, отдан и я о нем благополучно забыл.

Предыстория вторая.

Через несколько месяцев после окончания первой предыстории мне позвонил родственник со словами «Ты же любишь разную электронику. Забери ноутбук на запчасти. Бесплатно. Или просто выкину в мусор. Сказали, вроде материнская плата. Отвал чипа. Ремонтировать экономически нецелесообразно». Так я стал обладателем ноутбука Lenovo G555 без жесткого диска, но со всем остальным, включая блок питания. Включение показало те же симптомы, что и в первой предыстории: кулер крутится, лампочки горят, больше признаков жизни нет. Вскрытие показало старого знакомого 216-0752001 со следами манипуляций.

Паяльная станция на Arduino своими руками | Пикабу

После прогрева чипа ноутбук запустился как ни в чем не бывало, как и в первом случае.

Размышления.

Так я оказался владельцем ноутбука с неисправным северным мостом. Разобрать его на запчасти или попытаться починить? Если второе, то снова паять его на стороне, пусть даже за 60 долларов, а не за 80? Или купить собственную инфракрасную паяльную станцию? А может собрать своими руками? Хватит ли у меня сил и знаний?
После некоторых размышлений было решено попытаться починить, причем починить самостоятельно. Даже если попытка не увенчается успехом, разобрать его на запчасти это никак не помешает. А инфракрасная станция будет полезным подспорьем во многих работах, требующих предварительного подогрева.

Техническое задание.

Изучив цены на готовые промышленные инфракрасные станции (от $1000 до плюс бесконечности), перелопатив кучу топиков на профильных форумах и роликов на Youtube, окончательно сформировал техническое задание:

1. Буду изготавливать собственную паяльную станцию.

2. Бюджет конструкции — не более 80 долларов (две перепайки в сервис-центре без материалов).

3. Это будет не газовая плита и не прожектор, а устройство, хотя бы минимально умеющее поддерживать термопрофили согласно графика, найденного в сети:

Паяльная станция на Arduino своими руками | Пикабу

4. Управляющим устройством будет персональный компьютер. Во-первых, автономные контроллеры нагревателей не укладываются в бюджет. Во-вторых, компьютер уже есть на рабочем столе и всегда включен во время ремонтов, ибо он и осциллограф и микроскоп и читалка схем-даташитов.

Материалы и компоненты

Для этого в онлайне были куплены:
Термопара К-типа — 2 шт.
Интерфейс термопары К-типа на микросхеме MAX6675 — 2 шт.
Безымянные твердотельные реле на 40 китайских ампер — 2 шт.

Дополнительно в оффлайне были куплены:

Линейные галогенные лампы R7S J254 1500W — 9 шт.

Паяльная станция на Arduino своими руками | Пикабу

Линейные галогенные лампы R7S J118 500W- 3 шт.

Паяльная станция на Arduino своими руками | Пикабу

Патроны R7S — 12 шт.

Паяльная станция на Arduino своими руками | Пикабу

Из хлама в гараже на свет божий были извлечены:

Док-станция от какого-то допотопного лэптопа Compaq — 1 шт.

Паяльная станция на Arduino своими руками | Пикабу

Штатив от советского фотоувеличителя — 1 шт.

Паяльная станция на Arduino своими руками | Пикабу

В домашнем складе были найдены силовые и сигнальные провода, Arduino Nano, клемники WAGO.

Нижний нагреватель.

Вооружаемся болгаркой и отрезаем от док-станции все лишнее.

Паяльная станция на Arduino своими руками | Пикабу

К листу металла прикрепляем патроны.

Паяльная станция на Arduino своими руками | Пикабу

Соединяем патроны по три штуки последовательно, получившиеся три цепочки в параллель. Устанавливаем лампы, прячем в корпус.

Паяльная станция на Arduino своими руками | Пикабу

Поиск материала для отражателя занял продолжительное время. Использовать фольгу не хотелось из-за подозрения в ее недолговечности. Использовать более толстый листовой металл не получалось из-за сложностей с его обработкой. Опрос знакомых сотрудников промышленных предприятий и обход пунктов скупки цветмета результатов не дал.

В конце концов удалось найти листовой алюминий чуть толще фольги, идеально подходящий для меня.

Паяльная станция на Arduino своими руками | Пикабу

Теперь я точно знаю, где такие листы искать — у полиграфистов. Они их крепят к барабанам в своих машинах, то ли для переноса краски, то ли еще для чего-то. Если кто в курсе, расскажите в комментариях.

Нижний нагреватель с установленным отражателем и решеткой. Вместо решетки правильнее использовать специальный столик, но стоит он совершенно не бюджетно, как и все с наклейкой «Professional».

Паяльная станция на Arduino своими руками | Пикабу

Светит красивым оранжевым светом. Глаза при этом не выжигает, смотреть на свет можно совершенно спокойно.

Паяльная станция на Arduino своими руками | Пикабу

Потребляет порядка 2.3 кВт.

Паяльная станция на Arduino своими руками | Пикабу

Верхний нагреватель

Идея конструкции та же самая. Патроны привернуты саморезами к крышке от компьютерного блока питания. К ней же прикреплен согнутый из алюминиевого листа отражатель. Три пятисотваттные галогенки соединены последовательно.

Паяльная станция на Arduino своими руками | Пикабу

Тоже светит оранжевым.

Паяльная станция на Arduino своими руками | Пикабу

Потребляет порядка 250 ватт.

Паяльная станция на Arduino своими руками | Пикабу

Схема управления

Инфракрасная станция — суть автомат с двумя датчиками (термопара платы и термопара чипа) и двумя исполнительными механизмами (реле нижнего нагревателя и реле верхнего нагревателя).

Паяльная станция на Arduino своими руками | Пикабу

Было решено, вся логика регулирования мощности нагрева будет реализована на ПК. Arduino будет только мостом между станцией и ПК. Получил с ПК параметры ШИМ-регулирования нагревателей — выставил их — отдал температуру термопар в ПК, и так по кругу.

Arduino ожидает на последовательном порту сообщения типа SETxxx*yyy*, где xxx — мощность верхнего нагревателя в процентах, yyy — мощность нижнего нагревателя в процентах. Если полученное сообщение соответствует шаблону, выставляются ШИМ-коэффициенты для нагревателей и возвращается сообщение OKaaabbbcccddd, где aaa и bbb — установленная мощность верхнего и нижнего нагревателей, ccc и ddd — температура, полученная с верхней и нижней термопары.

«Настоящий» аппаратный ШИМ микроконтроллера с частотой дискретизации несколько килогерц в нашем случае неприменим, так как твердотельное реле не может отключиться в произвольный момент времени, а только при прохождении переменного напряжения через 0. Было решено реализовать собственный алгоритм ШИМ с частотой порядка 5 герц. Лампы при этом полностью гаснуть не успевают, хоть и заметно мерцают. При этом минимальным коэффициентом заполнения, при котором еще есть шансы захватить один период сетевого напряжения, оказывается 10%, чего вполне достаточно.

При написании скетча была поставлена задача отказаться от задания задержек фунцией delay(), так как есть подозрение, что в момент задержек возможна потеря данных с последовательного порта. Алгоритм получился следующий: в бесконечном цикле проверяется наличие данных из последовательного порта и значение счетчиков времени программного ШИМ. Если есть данные из последовательного порта, обрабатываем их, если счетчик времени достиг значений переключения ШИМ, проводим действия по включению-выключению нагревателей.

Скетч

#include <max6675.h>

int b1=0;
int b2=0;
int b3=0;
int p_top, p_bottom;
int t_top, t_bottom;
int state_top, state_bottom;

char buf[32];
unsigned long prev_top, prev_bottom;
int pin_bottom = 11;
int pin_top = 13;
int tick = 200;

unsigned long prev_t;

int thermoDO = 4;
int thermoCLK = 5;
int thermoCS_b = 6;
int thermoCS_t = 7;
MAX6675 thermocouple_b(thermoCLK, thermoCS_b, thermoDO);
MAX6675 thermocouple_t(thermoCLK, thermoCS_t, thermoDO);

void setup()
{
  Serial.begin(9600);
  pinMode(pin_top, OUTPUT);
  digitalWrite(pin_top, 0);
  pinMode(pin_bottom, OUTPUT);
  digitalWrite(pin_bottom, 0);
  t_top = 10;
  t_bottom = 10;
  p_top = 0;
  p_bottom = 0;

  state_top = LOW;
  state_bottom = LOW;
  prev_top = millis();
  prev_bottom = millis();
}

void loop()
{
  if (Serial.available() > 0) {
    b3 = b2; b2 = b1;
    b1 = Serial.read();
    if ((b1 == 'T') && (b2 == 'E') && (b3 == 'S')) {
      p_top = Serial.parseInt(); 
      if (p_top < 0) p_top = 0;
      if (p_top > 100) p_top = 100;
      p_bottom = Serial.parseInt(); 
      if (p_bottom < 0) p_bottom = 0;
      if (p_bottom > 100) p_bottom = 100;
      t_bottom = thermocouple_b.readCelsius();
      t_top = thermocouple_t.readCelsius();
      sprintf (buf, "OKddddrn", p_top, p_bottom, t_top, t_bottom);
      Serial.print(buf);
    } 
  }

  if ((state_top == LOW) && ((millis()-prev_top) >= tick * (100-p_top) / 100)) {
    state_top = HIGH;
    prev_top = millis();  
  }
  if ((state_top == HIGH) && ((millis()-prev_top) >= tick * p_top / 100)) {
    state_top = LOW;
    prev_top = millis();
  }
  digitalWrite(pin_top, state_top);

  if ((state_bottom == LOW) && ((millis()-prev_bottom) >= tick * (100-p_bottom) / 100)) {
    state_bottom = HIGH;
    prev_bottom = millis();  
  }
  if ((state_bottom == HIGH) && ((millis()-prev_bottom) >= tick * p_bottom / 100)) {
    state_bottom = LOW;
    prev_bottom = millis();
  }
  digitalWrite(pin_bottom, state_bottom);
}

Приложение для компьютера.

Написано на языке Object Pascal в среде Delphi. Отображает состояние нагревателей, рисует график температуры и имеет встроенный примитивный язык моделирования, больше по философии напоминающий какой-нибудь Verilog, нежели к примеру Pascal. «Программа» состоит из набора пар «условие — действие». К примеру «при достижении нижней термопарой температуры 120 градусов установить мощность нижнего нагревателя 10%, а верхнего — 80%». Таким набором условий реализуется требуемый термопрофиль — скорость нагрева, температура удержания и т. п.

Паяльная станция на Arduino своими руками | Пикабу

В приложении раз в секунду тикает таймер. По тику таймера функция отправляет в контроллер текущие установки мощности, назад получает текущие значения температур, отрисовывает их в окне параметров и на графике, вызывает процедуру проверки логических состояний, после чего засыпает до следующего тика.

Исходный код: drive.google.com/open?id=1ybs_o17qxBp1C3WeMLrRBQr2mTUntQIp

Сборка и пробный запуск.

Схему управления собрал на макетке. Не эстетично, зато дешево, быстро и практично.

Паяльная станция на Arduino своими руками | Пикабу

Окончательно собранное и готовое к запуску устройство.

Паяльная станция на Arduino своими руками | Пикабу

Прогон на тестовой плате выявил следующие наблюдения:

1. Мощь нижнего нагревателя невероятна. График температуры тонкой ноутбучной платы свечой взлетает вверх. Даже при 10% мощности плата уверенно греется до требуемых 140-160 градусов.

2. С мощностью верхнего нагревателя похуже. Догреть чип даже до температуры «низ 50 градусов» получается только на 100% мощности. То ли придется впоследствии переделывать, то ли пускай остается как защита от соблазна недогревать низ.

Покупка чипа на Aliexpress.

В продаже есть два вида мостов 216-0752001. Одни заявлены как новые и стоят от 20 долларов за штуку. Другие указаны как «бывшие в употреблении» и стоят 5-10 долларов за штуку.
Среди ремонтников много мнений относительно б/у чипов. От категорически отрицательных («бугага, приходи ко мне, у меня как раз под столом горка бэушных мостов насобиралась после перепайки, я тебе их недорого продам») до осторожно нейтральных («сажаю иногда, вроде нормально работают, возвраты если и бывают, то не намного чаще новых»).
Поскольку ремонт у меня ультрабюждетный, то было решено сажать чип бывший в употреблении. А чтобы перестраховаться на случай дрогнувшей руки или неисправного экземпляра, был найден лот «2 штуки за 14 долларов».

Паяльная станция на Arduino своими руками | Пикабу

Демонтаж чипа

Устанавливаем плату на нижний подогрев, крепим одну термопару к чипу, вторую к плате подальше от чипа. Для уменьшения теплопотерь накрываем плату фольгой, за исключением окошка под чип. Ставим верхний нагреватель над чипом. Так как чип уже пересаживался, загружаем самостоятельно придуманный профиль для свинцового припоя (нагрев платы до 150 градусов, догрев чипа до 190 градусов).

Все готово для старта.

Паяльная станция на Arduino своими руками | Пикабу

После достижения платой температуры 150 градусов автоматически включился верхний нагреватель. Внизу под платой видна разогретая нить накаливания нижней галогенки.

Паяльная станция на Arduino своими руками | Пикабу

В районе 190 градусов чип «поплыл». Поскольку вакуумный пинцет в бюджет не уместился, цепляем его тонкой отверткой и переворачиваем.

Паяльная станция на Arduino своими руками | Пикабу

График температур в процессе демонтажа:

Паяльная станция на Arduino своими руками | Пикабу

На графике хорошо виден момент включения верхнего нагревателя, качество стабилизации температуры платы (желтая крупно волнистая линия) и температуры чипа (красная мелкая рябь). Красный длинный «зубец» вниз — падение термопары с чипа после его переворота.

Запаивание нового чипа

Ввиду ответственности процесса было не до фотосъемки и изготовления скриншотов. В принципе все то же самое: проходимся по пятакам паяльником, мажем флюсом, устанавливаем чип, устанавливаем термопары, отрабатываем профиль пайки, легким пошатыванием убеждаемся, что чип «поплыл».

Чип после установки:

Паяльная станция на Arduino своими руками | Пикабу

Видно, что сел более-менее ровно, цвет не поменялся, текстолит не погнуло. Прогноз на жизнь — благоприятный.

Затаив дыхание включаем:

Паяльная станция на Arduino своими руками | Пикабу

Да! Материнская плата запустилась. Я перепаял первый в жизни BGA. К тому же с первого раза успешно.

Ориентировочно смета затрат:

Лампа J254: $1.5*9=$13.5
Лампа J118: $1.5*3=$4.5
Патрон r7s: $1.0*12=$12.0
Термопара: $1.5*2=$3.0
MAX6675: $2.5*2=5.0
Реле: $4*2=$8.0
Чипы: $7*2=$14.0

Итого: $60 минус оставшийся запасной чип.

Ноутбук был собран, в него добавлен найденный в столе жесткий диск на 40 гигабайт, установлена операционная система. Для предотвращения в будущем подобных инцидентов с помощью k10stat напряжение питания ядра процессора понижено до 0.9В. Теперь при самом жестком использовании температура процессора не поднимается выше 55 градусов.

Ноутбук был установлен в столовой в качестве фильмотеки для самого младшего члена семьи, который отказывается принимать пищу без любимых мультиков.

Читайте также:  Разъемы mini jack
Оцените статью
Про пайку
Добавить комментарий