Электрификация

Справочник домашнего мастера

Паяльник на ардуино

Паяльная станция на базе Ардуино

В этой статье я хочу рассказать о своей версии паяльной станции выполненной на базе микросхемы ATmega328p, которая используется в arduino UNO. За основу был взят проект с сайта http://d-serviss.lv. В отличии от оригинала дисплей подключил по протоколу i2c: во-первых он у меня был, заказывал несколько штук на AliExpress для других проектов, во-вторых осталось больше свободных ножек МК, которые можно использовать для каких-либо других функций. Фото дисплея с переходником на протокол i2c ниже.

Температура паяльника, фена и обороты куллера регулируются энкодерами:

Включение и выключение паяльника и фена происходит нажатием на энкодер, причём после выключения в память МК сохраняются температура паяльника, фена и обороты куллера.

После выключения паяльника или фена в соответствующей строке отображаются температура, вплоть до остывания до 500С. После выключения фена, кулер охлаждает его до 500С на 10% оборотах, что делает его почти бесшумным в выключенном состоянии.

Для питания схемы на aliexpress был приобретён импульсный блок питания на 24в и 9А, как в последствии понял, слишком мощный. Стоит поискать с выходным током 2-3 А – этого более чем достаточно, он будет дешевле, да и места в корпусе будет занимать меньше.

Для питания схемы использовал DC-DC преобразователь на LM2596S, подключаем его к 24в и выставляем построечным резистором 5 вольт.

Паяльник и фен также приобрёл на aliexpress, ВАЖНО выбрать их на термопаре, а не на терморезисторе. Фен выбрал от станций 858, 858D, 878A, 878D и 878D, паяльник от станций 852D +, 853D, 878AD, 898D, 936B, 937D. Если брать на терморезисторе то схему и прошивку необходимо доработать. К паяльнику прикупил комплект из 5 жал. Паяльник попался бракованный, был перебит где-то внутри провод. Пришлось менять, хорошо подошел провод от USB удлинителя.

Так же понадобятся дополнительно разъёмы GX16-5 и GX16-8, для подключения паяльника и фена к корпусу прибора.

Теперь корпус: с проблемой выбора корпуса я провёл много времени, сначала использовал от компьютерного блока питания металлический, но в последствии отказался от него, т.к. были помехи от ИБП, из-за которых зависал МК и LCD. Пробовал экранировать БП, основную плату и дисплей. МК перестал зависать а вот дисплей так и показывал периодически непонятные иероглифы. Решил использовать корпус из пластмассы, все проблемы с помехами сразу прошли, ничего не экранировал. Корпус решил так же приобрести у китайцев. Немного погорячился с размерами и взял как оказался очень маленький (150 мм x 120 мм x 40 мм), туда я конечно всё уместил, сделал специально плату под него, но вот на лицевой панели всё оказалось слишком компактно, и регулировать особенно фен не очень удобно.

Доработанная схема и печатная плата ниже на картинке, от оригинала она отличается подключением дисплея, заменой переменных резисторов и кнопок включения на энкодеры. Так же на схеме я убрал стабилизатор на 12 вольт, т.к. фен у меня работает от 24в, и убрал стабилизатор на 5 вольт, заменив его DC-DC преобразователем.

Печатная плата делалась классическом способом – ЛУТ’ом, лудил сплавом розе в растворе лимонной кислоты.

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

Микроконтроллер прошивал через Arduino UNO, МК подключаем по классической схеме: 1 вывод МК к 10 выводу Arduino, 11 вывод МК к 11 выводу Arduino, 12 вывод МК к 12 выводу Arduino, 13 вывод МК к 13 выводу Arduino, 7 и 20 выводы к +5 вольтам, 8 и 22 к GND, к 9 и 10 подключаем кварц на 16 МГц. Схема подключения ниже.

Схема подключения

Arduino UNO

Осталось запрограммировать МК.

2) После установки необходимо добавить библиотеки из архива, для этого в программе выбираем Скетч – Подключить библиотеку – Добавить .ZIP библиотеку. И подключаем по очереди все библиотеки.

3) Подключаем Arduino UNO и присоединённый к ней МК к компьютеру через USB, при первом включении установятся необходимые драйвера.

4) Заходим в программе Файл – Примеры – ArduinoISP – ArduinoISP, в пункте Инструменты выбираем нашу плату и виртуальный порт, к которому подключилась ардуино, затем нажимаем загрузить. Этими действиями мы превращаем нашу ардуино в полноценный программатор.

5) После загрузки скетча в ардуино открываем скетч из архива, выбираем пункт Инструменты – записать загрузчик. Сам загрузчик в МК нам конечно не нужен, но этимы действиями в МК прошьются фьюзы и наша микроконтроллер будет работать от внешнего кварца на частоте 16МГц.

6) После загрузки загрузчика выбираем Скетч-Загрузка через программатор.

Осталось всё собрать и настроить температуру фена и паяльника, я делал при помощи термопары мультиметра. Также незабываем настроить контрастность дисплея. Регулируется переменным резистором на переходнике дисплея.

Прикрепленные файлы:

Прошивка для паяльной станции на arduino

Рейтинг статьи: 0.000/5 (0 голосов).

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

Спонсор этой страницы:

Предистория

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

Список изменений

Упорядочен вывод информации на экран. Правда при этом пришлось сокращать названия:
sol: — Паяльник
fen: — фен
первое значение — установка температуры
второе значение — температура с термопары
третье значение — обороты вентилятора фена до 99%
Добавлена сигнализация вращения фентилятора фена, и сигнализация высокого напряжения при отключеном фене.
Определение подключили или нет фен и паяльник к станции.
Уменьшение «дребезга» при снятии данных с потенциометров путем организации массива.
Отключение вентилятора выключенного фена или фена на подставке при температуре меньше 50
От 50 до 75 продув выключеного фена (на подставке) на максимальных оборотах (от 50 до 60 режим «последнего состояния»)

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

Фен и паяльник не подключены к разъемам.

Фен и паяльник подключены к разъемам, выключены.

Фен и паяльник подключены к разъемам, выключены после работы.
температура термопар больше 50 C

Фен и паяльник включены.

Паяльник включен. Фен выставлен на максимальную температуру, обороты вентилятора фена на минимум.
Сработка защиты фена

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

#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 = {0,0,0,0,0,0,0,0,0,0}; int HotAirInAverage = {0,0,0,0,0,0,0,0,0,0}; int SolderTCoupleAverage = {0,0,0,0,0,0,0,0,0,0}; int HotAirTCoupleAverage = {0,0,0,0,0,0,0,0,0,0}; int count_aver=10; //Количество значений для среднего int Cooler = 1; int Cooler_ON = 2; byte f0 = { 0b00000, 0b00000, 0b11001, 0b01011, 0b00100, 0b11010, 0b10011, 0b00000 }; //вентилятор byte f1 = { 0b00000, 0b00000, 0b11000, 0b01000, 0b00100, 0b00010, 0b00011, 0b00000 }; byte f2 = { 0b00000, 0b00000, 0b00100, 0b00110, 0b00100, 0b01100, 0b00100, 0b00000 }; byte f3 = { 0b00000, 0b00000, 0b00001, 0b00011, 0b00100, 0b11000, 0b10000, 0b00000 }; byte f4 = { 0b00000, 0b00000, 0b00000, 0b01000, 0b11111, 0b00010, 0b00000, 0b00000 }; byte fy = { 0b10001, 0b10001, 0b11001, 0b10101, 0b10101, 0b10101, 0b11001, 0b00000 }; //ы byte fd = { 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 481) { setSolderTemp = 0; } if (hotAirTCouple > 481) { setHotAirTemp = 0; } // расчет десяти последних средних показателей дя сглаживания показателей // если разница в показанияъ меньше 10 // определение вращение потенциометра for (int i=0; i 10) {SolderInAverage=setSolderTemp;} else {SolderInAverage = SolderInAverage;} if (abs(HotAirInAverage-setHotAirTemp) >10) {HotAirInAverage=setHotAirTemp;} else {HotAirInAverage = HotAirInAverage;} SolderTCoupleAverage = SolderTCoupleAverage; HotAirTCoupleAverage = HotAirTCoupleAverage; } SolderInAverage = setSolderTemp; HotAirInAverage = setHotAirTemp; SolderTCoupleAverage = solderTCouple; HotAirTCoupleAverage = hotAirTCouple; int SolderInWork = 0; int HotAirInWork = 0; int SolderTCoupleWork = 0; int HotAirTCoupleWork = 0; for (int i=0; i = solderTCouple && digitalRead(pinSolderButton) == HIGH) { digitalWrite(pinSolderOut, HIGH); } else { digitalWrite(pinSolderOut, LOW); } //Защита от пробоя симистора/замыкания термопары (замыкаем реле) if (digitalRead(pinHotAirButton) == HIGH && setHotAirTemp + 100 > pinHotAirTCouple && pinHotAirTCouple 75 || work_fen ==1) { //При температуре от 75 или включеном фене analogWrite(pinHotAirCoolerOut, setHotAirCooler); 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 50) { //Вывод температуры фена >50 lcd.print(myprint(HotAirTCoupleWork)); } else { lcd.print(» «); } lcd.print(» «); } delay(60); } //Функция вывода форматированного значения String myprint(int arg){ String result; result = String(arg); if (arg

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

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

Комментарии к статье:

  • 2018-08-17 17:24:41, Гость :

    zdrastvuite ne mogu zashit etot skech. mojet ktonibud podskajet, kakie biblioteki trebuetsia ili kakoi versiei programi polzavatsia

    Ответить на это

  • 2018-08-21 16:46:04, Гость :

    В место голосования нажал на 2 думал вторая страница а тут голосование ошибочка получилась, задумка и реализация отлично. Почему никто не делает фен с паяльником на HAKKO T12

    Ответить на это

  • 2018-11-03 02:45:49, Гость :

    Подскажите пожалуйста скетч не компилируется,выдает ошибку для arduino nano

    Ответить на это

    • 2019-01-03 14:46:22, Гость :

      Доброй ночи! скетч победили ?

      Ответить на это

  • 2019-02-15 12:36:18, Гость15 :

    скетч тоже не компилировался, помогло удаление папки arduino15 по адресу
    C:UsersAdminSi2AppDataLocalArduino15 и по новой загрузил библиотеку LiquidCrystal_I2C

    Ответить на это

  • 2019-06-03 04:49:09, Виталий :

    Повторил Вашу станцию.
    Всё отлично работает, Зачётный проект! Спасибо!

    Ответить на это

  • 2019-06-03 05:17:43, Виталий :

    Повторил Вашу станцию.
    Всё отлично работает, Зачётный проект! Спасибо!

    Ответить на это

  • 2019-06-03 11:51:54, Николай :

    Прошу помогите. Повторил паяльную станцию на arduino. Схему взял форума, вот ссылка http://arduino.ru/sites/default/files/u43674/pcb_v.3.1.0_20190218124601.png. Залил Ваш скречь паяльник работает а фен включатся не хочет . Прописал порта все правильно. Когда поменял в программе «#define Gerkon 1» на 0 то фен начал работать. Прошу помогите разобраться с програмой.

    Ответить на это

    • 2019-10-10 10:29:05, Гость :

      на A3 подайте +5в через сопротивление 10к согласно схеме

      Ответить на это

  • 2019-06-03 11:52:26, Николай :

    Прошу помогите. Повторил паяльную станцию на arduino. Схему взял форума, вот ссылка http://arduino.ru/sites/default/files/u43674/pcb_v.3.1.0_20190218124601.png. Залил Ваш скречь паяльник работает а фен включатся не хочет . Прописал порта все правильно. Когда поменял в программе «#define Gerkon 1» на 0 то фен начал работать. Прошу помогите разобраться с програмой.

    Ответить на это

    • 2020-01-14 15:43:48, 123 :

      для проверки перепиши кусок кода.
      Вместо
      //проверить Фен выключен или на подставке 0, в работе 1
      if (digitalRead(pinHotAirButton) == LOW || digitalRead(pinGerkon) == LOW) {
      напиши
      //проверить Фен выключен включен
      if (digitalRead(pinHotAirButton) == LOW) {

      Ответить на это

  • 2020-01-08 20:43:55, дмитрий :

    как и к чему подключается реле в какой цепи оно стоит?

    Ответить на это

Самодельная паяльная станция на Arduino. DIY Soldering station Arduino


Давно хотел себе термовоздушную паяльную станцию но все душила жаба и удручала портативность, потому как старый советский паяльник на 40 ват легко умещался в рюкзаке, да и паял я им вполне неплохо, последней каплей стало то что закончился припой и я купил в ближайшем ларьке катушку другого припоя, и он почему-то не стал плавится от слова вообще, просто отказался, я предявил претензию продавцу на что тот сказал «У меня все норм, это твой паяльник гавно», я конечно обиделся, как это 25 лет работал нормально а тут перестал, ну ладно паять то все равно нужно, купил в другом ларьке другой припой, и опять нифига, просто не плавится, подумал и пошел покупать новодельный паяльник, прямо в магазине включил и проверил, второй припой плавит аж капли летят, думаю за многие годы нагреватель в моем любимом паяльнике пришел в негодность, но что интересно припой что я купил в первом ларьке все равно не плавился, как потом я выяснил он начинает плавится при 300 градусах.
Но вылез другой момент жало новодельного паяльника обгорает за 10-15 минут, толи из за того что температура там выше толи жало из хренового метала, но суть в том что старый паяльник я залудил один раз и проблем при многочасовой работе не было, а тут пайка из приятного времяприпровождения превратилась в муку, постоянно приходилось чистить жало стальной губкой.

В общем пришло время искать нормальный паяльник, но опять же под натиском жабы, и раз уже начал выбирать паяльник то и фен было бы хорошо, ато выпаивать микросхемы сплавом розе не очень удобно, да и ремонт телефона даже хорошо заточеным жалом работа муторная и кропотливая.
Смотрел разные варианты но то слишком дорого, то не очень гибко, а потом я набрел на вот это видео — Паяльная станция на ардуино за 10$ (и тут мой внутренний еврей заликовал) хоть реальная стоимость получилась дороже 25$ на компоненты, это все еще дещшево и я получил кучу опыта по работе с arduino и микроэлектроникой.

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




Первым делом занялся платой усиления для термопары на LM358N


Первый раз собирал что-то на макетке, старался сделать все максимально компактно, получилось не аккуратно, жутко неудобный паяльник зараза…
Далее в ускореном темпе усвоил принцыпы работы с семисегментными индикаторами, после чего понял что выводов у ардуины маловато еще пришлось освоить сдвиговые регистры.
Познав все тонкости работы с LED дисплеями (оказывается чтобы не было ghousting эффекта после каждого прогона все диоды нужно тушить) я осознал что мне нужно 2 дисплея, на паяльник и на фен, а выводы у ардуины уже на исходе, и тут или городить каскад из сдвиговых регистров или ставить их паралельно + 2 ноги ардуины, но я как подумал какую логику прийдется реализовать чтобы раздельно управляь двумя дисплеями посылая одну последовательность байтов… ну его нафиг в общем, решил подобрать готовый дисплейный модуль.
Из двух вариантов победила лень, графичесский интерфейс смотрится круче, можно шняжек всяких нарисовать, но вот морочится с этим дико лень, по тому простой как внешне так и в освоении 16X2 мне подошел больше.Часть управления паяльником представляет из себя транзистор IRFZ44 и пары резисторов.
А вот с диммером фена ситуация более интересная, есть много реализаций: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.
Я реализовал самую простую схему с детектором ноля.
Програмно управление димером основано на библиотеке CyberLib.
Для начала поэксперементировав на лампочке отловил некоторые косяки, потом и фен можно цеплять.
Схему собрал на такой же макетке (все элемены у меня на отдельных платах чтобы быть модульными) между высоковольтными дорожками срезал пятачки с макетки чтобы шанс пробоя был меньше.
Тирак от лампочки нагревался до 32 градусов, от фена до 70, по этому усадил его на радиатор от диодной сборки (донор лазерный принтер).
Для управления вентилятора просто продублировал схему управления паяльником (такого мощного транзистора там много, но разводить зоопарк было лень).
Хотел сделать активные элементы на кроватках но как на зло не было 6-ти пиновых, пришлось брать то что есть и заказывать про запас из китая.
Все нужные модули готовы, теперь пришла пора собрать их воедино, сердцем всего агрегата выступает клон Arduino Pro Mini V3, хорош он тем что на нем выведены 4 дополнительных пина (винов много не бывает).
Прикинул расположение на плате, чтобы все поместилось.
Добавил спикер (чтобы моргало и пищало) зазьемы все от тех же принтеров, резистор для подстройки контраста дисплея, и куча резисторов для кнопок.

Кнопки представляют из себя последовательно соедененные резисторы замыкаемые на аналоговый вход, читая который можно отличить какая кнопка нажата.
Минусом такого подхода является то что нормально отрабатывается только одна кнопка одновременно, ну а плюсом то что на огромное количество кнопок (в финальной версии 8 штук) задействован всего один вход ардуины.
Собрав все это дело на столе, понял что нужно думать корпус.
Первая версия собрана в картонную коробку, лишь бы не на столе.
И сразу пошел в строймаг за контейнерами.
То что получилось вырезать из пластика было ужастным…
Спустя одно падение треснул угол и тут пришлось делать более другой корпус.
Выбор пал на старый CD привод, привод старый, стенки толстые и крепкие.
Насверлил отверстий и прикрыл дно пластиком от упаковки.
Передняя панель из заглушки от того же корпуса, и побольше горячих соплей.
Передняя панель довольно маленькая, и пришлось очень плотно компоновать органы управления и разьемы, сначала я думал расположить разьемы паяльника и фена по бокам станции, но в таком случае затрудняяется доступ к одному из узлов, по этому разьемы максимально в лево, далее дисплей и потом 2 ряда управления, верх паяльник, низ фен, все програмно настраивается.
Изначально я думал сделать красивые цветные кнопки, но их мне нужно минимум 6 штук, что довольно много и места под них нет, идею с двумя енкодерами тоже откинул так как реализация кода довольно сложная (считать смену уровней) и лучше пустить время на что-то более полезное, остановился на обычных тактовых кнопках распаяв их на макетке, сами по себе кнопки короткие в качестве толкателей использовал короткие болтики с гайкой изнутри, получилось не очень ровно но щелчек нажатия достаточно отчетливый, как первая реализация пойдет.
Установленный вентилятор на 24 вольта скорее для успокоения совести, очень горячих элементов внутри почти нет, греется только тирак и диодный мост под нагрузкой, по этому вентилятор подключен паралельно турбине фена, ну и есть переключатель (джампер от того же привода) чтобы переключить вентилятор на постоянную работу либо вовсе выключить.
Когда работает фен вентилятора в корпусе не слышно.
Питание ардуины организовано на любимом мною DC-DC преобразователе (тот что помельче).
Он немного избыточен (может давать до 3-х ампер) но альтернатив ему небыло, пробовал ставить микро DC-DC но она очень грелась так как расчинана на 23 вольта максимум и работает на пределе, ну а линейный стабилизатор на 5 вольт бдет отдавать 19 вольт в тепло, что тоже многовато.
Что качается хардварной реализации пожалуй все, остальное дело прошивки, все свои наработки я залил на GitHub включая полную схему в eagle, ошибок в коде хватает, постараюсь выкроить время и привести код в более подобающий вид, но по крайней мере все на данном этапе работает, хоть и есть парочка не отловленых багов над которыми нужно поработать.
Калибровку проводил при помощи K-термопары и калибровочного скетча, все таблицы и скетчи на гитхабе, калибровка не претендует на идеальную но в рабочих диапазонах + / — точно (при калибровке паяльника спалил к чертям одно жало черезмерными температурами, будте осторожны и калибруйте с жалом которое не жалко ).

На этом пожалуй все, на момент написания статьи станция отработала часов 10 (в основном по мелочи) пока без особых нареканий.

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

Всем привет! Как-то я затронул тему паяльной станции на Arduino и сразу меня завалили вопросами (как/где/когда). Учитывая массовость запросов, я решил написать обзор простой паяльной станции (только паяльник) на базе Arduino.
Почему Arduino? Ведь существует уйма контроллеров быстрее и дешевле. В таких случаях я обычно отвечаю: — Дёшево, практично, быстро.
Действительно, ведь Arduino Pro Mini сейчас стоит 1,63$ за 1 шт (недавно прислали), а atmega8 стоит 1$ (оптовая цена). Получается, что плата Pro Mini с обвесом (кварц, конденсаторы, стабилизаторы) стоит не так-то и дорого, плюс ко всему экономит время. Также время очень сильно экономит IDE-оболочка для Arduino, легко и быстро в ней справляется даже школьник. Учитывая популярность и дешевизну я решил собрать именно на Arduino.
Для создания паяльной станции нам первым делом нужна ручка паяльной станции, зачастую это китайские станции типа 907 A1322 939.
Начнём
Характеристики ручки:
Напряжение: 24V DC
Мощность: 50W (60W)
Температура: 200℃~ 480℃
Для управления ручкой паяльника нам первым делом нужно снимать данные с датчика температуры, в этом нам поможет LM358N. Эта схема уже работает у меня почти 2 года.
Далее нам нужно управлять(включать и выключать) нагревательный элемент паяльника, в этом на поможет импульсный транзистор IRFZ44. Его подключение очень простое:
Хочу обратить Ваше внимание на будущий режим работы нагревательного элемента. Его мы будем включать в три этапа путём ШИМ-модуляции. При старте программы будет включаться почти максимальная мощность (скважность 90%), при приближении к заданной температуре мощность понижается (скважность 35-45%), и при минимальной разнице между текущей и заданной температуры мощность держится на минимуме (скважность 30-35%). Таким образом мы устраняем инерцию перегрева. Повторюсь, паяльная станция стабильно работает почти 2 года, и термоэлемент не находится в постоянной предельной нагрузке (что продлевает его жизнь). Все настройки в программе можно отредактировать.
Подключать ручку нужно по схеме:
Обратите внимание, разъём на панели станции, а не на ручке.
Очень настаиваю: проверяйте ручки перед пуском, раскрутите и проверьте целостность нагревательного элемента, а также правильность распайки проводов на разъёме.
Далее нам нужен контроллер. Для демонстрации я выбрал Arduino Uno – как самый популярный и удобный. Заметьте, что паяльную станцию я делаю блочной и это даёт возможность самому выбрать контроллер. Также нам нужны две кнопки подтянутые к +5В сопротивлениям 10кОм и 7-ми сегментный индикатор на три разряда. Выводы сегментов я подключил через сопротивления 100 Ом.
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
Хочу также заметить, что кнопки мы сажаем на аналоговые пины 3 и 2. И в программе я их опрашиваю как аналог. Сделал я это для того, чтобы не вводить в заблуждение молодое поколение. Не каждый знает где найти пин 14, 15 и 16. А учитывая, что скорости достаточно и памяти в контроллере много, то так будет проще.
Давайте посмотри что получилось:
Вы можете заметить пустую панельку возле индикатора, это заготовка под LM358N, просто аналог KA358 показал плохие результаты в работе. Поэтому я воспользовался блоком термодатчиков на LM358N для паяльной станции с феном.
Далее необходимо выбрать источник питания. Я взял блок питания от какого-то ноутбука на 22V 3А, его хватает с запасом. Потребление при старте паяльника 1,5 А а при поддержке температуры 0,5А. Поэтому выбирайте себе подходящий блок питания, желательно 24V DC 2A.
На фото выше видно жмут проводов и многих это пугает. Поймите, это демо, вариант под любой контроллер, станцию можно собрать и компактно, к примеру:
Это наглядный пример для реализации Вашего проекта паяльной станции. Видео, которое наглядно поможет понять Вам как собрать самому:

Вот тест программы, писал под версией IDE 1.5.2. Учтите всё вышесказанное и сильно не критикуйте (программу пытался написать просто и доступно).
/* // Пины подключения индикаторов 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); // ————————————————— не изменять, это для Сегментов ———————————————— //——————— переменные паяльника —————————— int knup = 3; //Пин кнопки вверх in(красный светодиод) int kndn = 2; //Пин кнопки вниз in(синий светодиод) int nagr = 11; // пин вывода нагревательного элемента(через транзистор) int tin = 0; // Пин Датчика температуры IN Analog через LM358N int tdat = 0; //Переменная Датчика температура int ustt = 210; // Выставленная температура по умолчанию (+ увеличение и уменьшение при нажатии кнопок) int mintemp = 140; // Минимальная температура int maxtemp = 310; // Максимальная температура int nshim = 0; // Начальное значение шим для нагрузки void setup(){ pinMode(nagr,OUTPUT); // Порт нагрузки (паяльника) настраиваем на выход analogWrite(nagr, nshim); //Вывод шим в нагрузку паяльника (выводим 0 — старт с выключенным паяльником — пока не определим состояние температуры) // ————————————————— не изменять, это для Сегментов ———————————————— DDRD = B11111111; for (int y=0;y<max_digits;y++) { pinMode(digit_common_pins,OUTPUT); digitalWrite(digit_common_pins, HIGH); } // ————————————————— не изменять, это для Сегментов ———————————————— } void loop() { show(increment); // Вывести значение переменной на экран (LED) if (tdat < ustt ){ // Если температура паяльника ниже установленной температуры то: if ((ustt — tdat) < 16 & (ustt — tdat) > 6 ) // Проверяем разницу между установленной температурой и текущей паяльника, // Если разница меньше 10 градусов, то { nshim = 99; // Понижаем мощность нагрева (шим 0-255, мы делаем 99) — таким образом мы убираем инерцию перегрева } else if ((ustt — tdat) < 7 & (ustt — tdat) > 3) { nshim = 80; // Понижаем мощность нагрева (шим 0-255, мы делаем 99) — таким образом мы убираем инерцию перегрева } else if ((ustt — tdat) < 4 ) { nshim = 45; // Понижаем мощность нагрева (шим 0-255, мы делаем 99) — таким образом мы убираем инерцию перегрева } else { nshim = 230; // Иначе поднимаем мощность нагрева (шим 0-255, мы делаем 230) на максимум для быстрого нагрева до нужной температуры } analogWrite(nagr, nshim); //Вывод в шим порт (на транзистор) значение мощности } else { //Иначе (если температура паяльника равняется или выше установленной) nshim = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) — таким образом мы отключаем паяльник analogWrite(nagr, nshim); //Вывод в шим порт (на транзистор) значение мощности } if(millis() — actual_count_delay > count_delay) // это для сегментов { actual_count_delay = millis(); // Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчик не будет тормозить вывод на сегменты) tdat = analogRead(tin); // Считать состояние датчика температуры и присвоить tdat tdat =map(tdat,0,430,25,310); // калибровка п умолчанию 0,430,25,310 increment = tdat; // присвоить текущее значение температуры переменной сегмента if (analogRead(kndn) < 1) // Если нажата синяя кнопка, то понизить температуру на 5 { if( ustt <= mintemp || (ustt-5) <= mintemp ) { ustt= mintemp; increment = ustt; } else { ustt=ustt-5; increment = ustt; } } else if (analogRead(knup) < 1) // Если нажата красная кнопка, то повысить температуру на 5 { ustt=ustt+5; if( ustt >=maxtemp) { ustt= maxtemp; } increment = ustt; } } } 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 = value / pow(10,z); //rounding down by converting from float to int if(digits_array != 0 ) empty_most_significant = false; // DON’T SHOW LEADING ZEROS value = value — digits_array * 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]; } else { PORTD = B00000000; } digitalWrite(digit_common_pins, LOW); }else{ digitalWrite(digit_common_pins, HIGH); } } current_digit—; if(current_digit < 0) { current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS } actual_refresh_delay = millis(); } }
Очень надеюсь, что Вам это как-то поможет в создании своего проекта.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх