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

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

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

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

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

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

Читайте также:  4 g антенну на базовую станцию с помощью модема huawei e 3372 h

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Было решено, вся логика регулирования мощности нагрева будет реализована на ПК. 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%». Таким набором условий реализуется требуемый термопрофиль — скорость нагрева, температура удержания и т. п.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да! Материнская плата запустилась. Я перепаял первый в жизни 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 градусов.

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

Скетч для паяльной станции.

#define Gerkon 1 // 1 вкл. геркон 0 выкл
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//LiquidCrystal_I2C lcd(0x3F, 16, 2); //Адрес экрана
LiquidCrystal_I2C lcd(0x27, 16, 2);

int pinSolderOut = 5;  // Выход для паяльника
int pinSolderIn = A0;  // Потенциометр паяльника
int pinSolderTCouple = A7;  // Термопара паяльника
int pinSolderButton = 13;  // Кнопка вкл. и выкл. паяльника

int pinHotAirOut = 6;  // Выход для фена
int pinHotAirIn = A1;  // Потенциометр фена
int pinHotAirTCouple = A6;  // Термопара фена
int pinHotAirCoolerOut = 9;  // Выход для вентилятора фена ( PWM )
int pinHotAirCoolerIn = A2;  // Потенциометр вентилятора фена
int pinHotAirButton = 2;  // Кнопка вкл.и выкл. фена
int pinGerkon = A3; // Геркон фена 28ая нога
int pinRele = 3; //На управление реле(13я нога меги)
int work_fen = 0; //правление феном
int SolderInAverage[10] = {0,0,0,0,0,0,0,0,0,0};
int HotAirInAverage[10] = {0,0,0,0,0,0,0,0,0,0};
int SolderTCoupleAverage[10] = {0,0,0,0,0,0,0,0,0,0};
int HotAirTCoupleAverage[10] = {0,0,0,0,0,0,0,0,0,0};
int count_aver=10; //Количество значений для среднего
int Cooler = 1;
int Cooler_ON = 2;

byte f0[8] = { 0b00000, 0b00000, 0b11001, 0b01011, 0b00100, 0b11010, 0b10011, 0b00000 }; //вентилятор
byte f1[8] = { 0b00000, 0b00000, 0b11000, 0b01000, 0b00100, 0b00010, 0b00011, 0b00000 };
byte f2[8] = { 0b00000, 0b00000, 0b00100, 0b00110, 0b00100, 0b01100, 0b00100, 0b00000 };
byte f3[8] = { 0b00000, 0b00000, 0b00001, 0b00011, 0b00100, 0b11000, 0b10000, 0b00000 };
byte f4[8] = { 0b00000, 0b00000, 0b00000, 0b01000, 0b11111, 0b00010, 0b00000, 0b00000 };
byte fy[8] = { 0b10001, 0b10001, 0b11001, 0b10101, 0b10101, 0b10101, 0b11001, 0b00000 }; //ы
byte fd[8] = { 0b00001, 0b00010, 0b00100, 0b01111, 0b00010, 0b00100, 0b01000, 0b10000 }; // молния

void setup()
{
  TCCR1B = TCCR1B & 0b11111000 | 0x02; //кулер фена 24v. Частота ШИМ 11 и 3
  pinMode(pinSolderOut, OUTPUT);
  pinMode(pinSolderButton, INPUT);
  pinMode(pinHotAirOut, OUTPUT);
  pinMode(pinHotAirButton, INPUT);
  pinMode(pinGerkon, INPUT);
  pinMode(pinRele, OUTPUT);

  lcd.begin(16, 2);
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, f0);
  lcd.createChar(1, f1);
  lcd.createChar(2, f2);
  lcd.createChar(3, f3);
  lcd.createChar(4, f4);
  lcd.createChar(5, fd);
  lcd.createChar(6, fy);

  String SOLDERING = "               SOLDERING                 ";
  String STATION =   "                STATION 2                ";
  byte i;

for (i=0;i<16;i  ) {
  lcd.setCursor(0, 0);
  lcd.print(SOLDERING.substring(i,i 16)); //SOLDERING 
  lcd.setCursor(0, 1);
  lcd.print(STATION.substring(24-i,24-i 16)); //STATION
   delay(200);
 }

  delay(1000);
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Especially for");//для
  lcd.setCursor(3, 1);
  lcd.print("TEXHOKPAT"); //Технократ
  lcd.print(char(6));     //ы
  delay(1000);
  lcd.clear();

}

void loop()
{

  if (Gerkon == 1) //проверка геркона
  {
    digitalRead(pinGerkon);
  }
  else {
    pinGerkon = HIGH; //откл геркон
  }

  // Преобразовываем значения
  int setSolderTemp = map(analogRead(pinSolderIn), 0, 1023, 0, 480);             //регулировка паяльника
  int solderTCouple = map(analogRead(pinSolderTCouple), 0, 750, 0, 480);         //показания
  int setHotAirTemp = map(analogRead(pinHotAirIn), 0, 1023, 0, 480);             //регулировка фена
  int hotAirTCouple = map(analogRead(pinHotAirTCouple), 0, 750, 0, 480);         //показания
  int setHotAirCooler = map(analogRead(pinHotAirCoolerIn), 0, 1023, 130, 255);
  int displayHotAirCooler = map(analogRead(pinHotAirCoolerIn), 0, 1023, 0, 99);

  // Защита, если не работает термопара
  if (solderTCouple > 481) {
    setSolderTemp = 0;
  }
  if (hotAirTCouple > 481) {
    setHotAirTemp = 0;
  }

// расчет десяти последних средних показателей дя сглаживания показателей
// если разница в показанияъ меньше 10 
// определение вращение потенциометра 
  for (int i=0; i < count_aver-1; i  ){
    if (abs(SolderInAverage[i]-setSolderTemp) >10) {SolderInAverage[i]=setSolderTemp;}
        else {SolderInAverage[i] = SolderInAverage[i 1];}
    if (abs(HotAirInAverage[i]-setHotAirTemp) >10) {HotAirInAverage[i]=setHotAirTemp;}
        else {HotAirInAverage[i] = HotAirInAverage[i 1];}
    SolderTCoupleAverage[i] = SolderTCoupleAverage[i 1];
    HotAirTCoupleAverage[i] = HotAirTCoupleAverage[i 1];
    }

  SolderInAverage[count_aver-1] = setSolderTemp; 
  HotAirInAverage[count_aver-1] = setHotAirTemp; 
  SolderTCoupleAverage[count_aver-1] = solderTCouple;
  HotAirTCoupleAverage[count_aver-1] = hotAirTCouple;

  int SolderInWork = 0;
  int HotAirInWork = 0;
  int SolderTCoupleWork = 0;
  int HotAirTCoupleWork = 0;

  for (int i=0; i < count_aver; i  ){
    SolderInWork = SolderInWork   SolderInAverage[i];
    HotAirInWork = HotAirInWork   HotAirInAverage[i];
    SolderTCoupleWork = SolderTCoupleWork   SolderTCoupleAverage[i];
    HotAirTCoupleWork = HotAirTCoupleWork   HotAirTCoupleAverage[i];
   }
    SolderInWork = SolderInWork / count_aver;
    HotAirInWork = HotAirInWork / count_aver; 
    SolderTCoupleWork = SolderTCoupleWork / count_aver;
    HotAirTCoupleWork = HotAirTCoupleWork / count_aver;

  // Поддержка установленной температуры паяльника (средние показатели)
  if (SolderInWork >= solderTCouple && digitalRead(pinSolderButton) == HIGH)
  {
    digitalWrite(pinSolderOut, HIGH);
  }
  else {
    digitalWrite(pinSolderOut, LOW);
  }

  //Защита от пробоя симистора/замыкания термопары (замыкаем реле)
  if (digitalRead(pinHotAirButton) == HIGH && setHotAirTemp   100 > pinHotAirTCouple && pinHotAirTCouple < 480) {
    digitalWrite(pinRele, HIGH);
  }
  else {
    digitalWrite(pinRele, LOW);
  }

  //проверить Фен выключен или на подставке 0, в работе 1
  if (digitalRead(pinHotAirButton) == LOW || digitalRead(pinGerkon) == LOW) {
   work_fen = 0; 
   }
   else {
   work_fen = 1;
   }

  //Установка оборотов вентилятора фена с изображением вентилятора (средние показатели)
  if (HotAirTCoupleWork <= 50 && work_fen==0) {  //При температуре < 50 отключить
    analogWrite(pinHotAirCoolerOut, 0);
    Cooler_ON=0;
  } else 
    if (HotAirTCoupleWork > 75 || work_fen ==1) { //При температуре от 75 или включеном фене 
    analogWrite(pinHotAirCoolerOut, setHotAirCooler);
    if (HotAirTCoupleWork < 481) {
       Cooler_ON=1;
      } else {   //Если фен не подключен, вывести молнию
       Cooler_ON=2;
       lcd.setCursor(14, 1);
       lcd.print(char(5));
       lcd.print(char(5));
      }
    } else
  if (HotAirTCoupleWork >60  && work_fen==0) { //При температуре от 50, подождать до 60 и продуть на максимуме
    analogWrite(pinHotAirCoolerOut, 255);
    Cooler_ON=1;
  }

  //Вывод изображения кулера
  lcd.setCursor(14, 0);
  if (Cooler_ON == 0) {
    lcd.print(char(0));
    lcd.print(char(0));
  } else if (Cooler_ON == 1) {
       lcd.print(char(Cooler));
       lcd.print(char(Cooler));
       Cooler  ; if (Cooler == 5) {Cooler=1;}
   } else {
       lcd.print("  ");
   }

 
  // Поддержка установленной температуры фена (реальные показатели)
  if (setHotAirTemp >= hotAirTCouple && work_fen == 1)
  {
    digitalWrite(pinHotAirOut, HIGH);
    delay(setHotAirTemp-hotAirTCouple 60);  //Изменяемое время включение термопары
    digitalWrite(pinHotAirOut, LOW);
  }
  else {
    digitalWrite(pinHotAirOut, LOW);
    delay(90);
  }


//Расположение значений на экране
//0123456789012345
//Sol: 300 200  **
//Fen: 300  60  99

  // Данные паяльника на дисплей
  lcd.setCursor(0, 0);
  lcd.print("Sol: ");
  if (solderTCouple > 500) {
      lcd.print("Not found"); //Паяльник не подключен в разъем. 
  } else
  if (solderTCouple > 480) {
      lcd.print("Error   "); //Паяльник перегрет. 
  } else
  if (digitalRead(pinSolderButton) == HIGH) { //Паяльник подключен в разъем и включен. 
      lcd.print(myprint(SolderInWork));
      lcd.print(" ");
      lcd.print(myprint(SolderTCoupleWork));
      lcd.print("  ");
    } else {            //Паяльник подключен в разъем и выключен. 
      lcd.print("Off ");
      if (SolderTCoupleWork > 50) {
        lcd.print(myprint(SolderTCoupleWork));
        lcd.print("  ");
      } else {
       lcd.print("    ");
      }
    }

  // Данные фена на дисплей
  lcd.setCursor(0, 1);
  lcd.print("Fen: ");
  if (hotAirTCouple > 500) {
      lcd.print("Not found  "); //Фен не подключен в разъем. 
   } else
  if (hotAirTCouple > 480) {
      lcd.print("Error      "); //Фен перегрет 
   } else
  if (digitalRead(pinHotAirButton) == HIGH) { //Фен подключен в разъем, и включен
      lcd.print(myprint(HotAirInWork));
      lcd.print(" ");
      lcd.print(myprint(HotAirTCoupleWork));
      lcd.print("  ");
      lcd.setCursor(14, 1);
      if (displayHotAirCooler<10) {lcd.print("0");}
      lcd.print(displayHotAirCooler);
      if (digitalRead(pinGerkon) == LOW ) //геркон замкнут, мигаем уст. температурой (ловим по земле)
      {
        delay(150);
        lcd.setCursor(5, 1);
        lcd.print("    ");
       }
    } else { //Фен подключен в разъем, и выключен
      lcd.print("Off ");
      lcd.setCursor(9, 1);
      if (HotAirTCoupleWork > 50) {  //Вывод температуры фена >50
        lcd.print(myprint(HotAirTCoupleWork));
      } else {
        lcd.print("    ");
      }
      lcd.print("     ");
    }

  delay(60);
}

//Функция вывода форматированного значения
String myprint(int arg){
 String result;
  result = String(arg); 
  if (arg<10) {result=String(" " result);}
  if (arg<100) {result=String(" " result);}
 return result;
}


ArduinoПрограммирование

Пожалуйста, оцените и ВЫ эту статью:

Список радиоэлементов

ОбозначениеТипНоминалКоличествоПримечаниеМагазинМой блокнот
Плата индикации
HG1, HG2Семисегментный индикаторFYT-3631BD2Поиск в магазине ОтронВ блокнот
Плата основная
DA1DC/DC импульсный конвертер

LM2596

1Поиск в магазине ОтронВ блокнот
DA2Операционный усилитель

LM358

1Поиск в магазине ОтронВ блокнот
DD1МК AVR 8-бит

ATmega8

1Поиск в магазине ОтронВ блокнот
DD2ИС шинного приемника, трансмиттера

SN74HC245

1Поиск в магазине ОтронВ блокнот
U1Оптопара

MOC3063M

1Поиск в магазине ОтронВ блокнот
VS1Симистор

BTA25

1Поиск в магазине ОтронВ блокнот
VDS1Диодный мост

W04M

1Поиск в магазине ОтронВ блокнот
VD1Выпрямительный диод

FR103

1Поиск в магазине ОтронВ блокнот
VD2Выпрямительный диод

1N4007

1Поиск в магазине ОтронВ блокнот
VD3Выпрямительный диод

BAV99

1Поиск в магазине ОтронВ блокнот
ZD1Защитный диод

SMBJ5V0CA

1Поиск в магазине ОтронВ блокнот
VT1, VT2Биполярный транзистор

C945

2Поиск в магазине ОтронВ блокнот
HA1Звуковой излучательDBX05A1Поиск в магазине ОтронВ блокнот
FU1Предохранитель5A1Поиск в магазине ОтронВ блокнот
FU2Предохранитель1A1Поиск в магазине ОтронВ блокнот
K1РелеJW1FH-DC12V1Поиск в магазине ОтронВ блокнот
L1Катушка индуктивности120 мкГн1Поиск в магазине ОтронВ блокнот
L2Катушка индуктивностиФерритовая бусинка 08051Поиск в магазине ОтронВ блокнот
R1Резистор

680 Ом

12 ВаттПоиск в магазине ОтронВ блокнот
R2Резистор

3.01 кОм

11%Поиск в магазине ОтронВ блокнот
R3Резистор

1 кОм

11%Поиск в магазине ОтронВ блокнот
R4РезисторПеремычка 12061Поиск в магазине ОтронВ блокнот
R5, R6Резистор

360 Ом

2Поиск в магазине ОтронВ блокнот
R7, R18, R19, R21, R22, R24, R25, R26, R27, R28Резистор

330 Ом

10Поиск в магазине ОтронВ блокнот
R8, R20Резистор

100 кОм

2Поиск в магазине ОтронВ блокнот
R10, R11, R12, R13, R14, R15Резистор

10 кОм

6Поиск в магазине ОтронВ блокнот
R17, R29Резистор

1 МОм

2Поиск в магазине ОтронВ блокнот
R16, R23Резистор

1 кОм

2Поиск в магазине ОтронВ блокнот
R30, R31, R32, R33, R34, R35Резистор

100 Ом

6Поиск в магазине ОтронВ блокнот
R9Подстроечный резистор50 кОм1Поиск в магазине ОтронВ блокнот
C1Конденсатор керамический10 мкФ 10В1Поиск в магазине ОтронВ блокнот
C2Электролитический конденсатор220 мкФ 50В1Поиск в магазине ОтронВ блокнот
C3Конденсатор керамический100 нФ 50В1Поиск в магазине ОтронВ блокнот
C4Электролитический конденсатор1000 мкФ 10В1Поиск в магазине ОтронВ блокнот
C5, C8-C13Конденсатор керамический1 мкФ 10В7Поиск в магазине ОтронВ блокнот
C6, C7Конденсатор керамический10 нФ 10В2Поиск в магазине ОтронВ блокнот
Прочее
T1ТрансформаторТТП-60 (2×12В 2.2А)1Поиск в магазине ОтронВ блокнот
S1…S6КнопкаСиловая, без фиксации6Поиск в магазине ОтронВ блокнот
Добавить все
Оцените статью
Про пайку
Добавить комментарий