Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1 Флюс и припой

Основы пайки феном

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

Самодельная паяльная станция 5 в 1
Чертеж паяльного фена.

Термофен для пайки, как правило, может понадобиться в таких случаях:

  1. Пайка очень маленьких деталей в SMD корпусах. Большинство мелких радиодеталей не поддаются пайке паяльником. Для монтажа подобных компонентов необходимо залудить место посадки, смазать его флюсом и расположить микросхему. После этого можно смело начать нагрев монтажных контактов при помощи фена, до того момента пока припой под компонентом не расплавится, и он не сядет на печатную плату.
  2. Отсутствие свободного места для использования паяльника. При очень плотной компоновке элементов на печатной плате использование паяльника существенно затруднено. В этом случае термофен – это лучший вариант для радиолюбителя.
  3. Ремонтные работы, связанные с мобильными телефонами или планшетными компьютерами. Большинство современный гаджетов практически невозможно разобрать без использования термофена. Например, замена экрана на любом телефоне требует предварительного прогрева старой матрицы при помощи термофена. Серьезный нагрев нейтрализует клей и позволяет отделить экран от корпуса устройства.
  4. Снятие BGA чипов с посадочных площадок. Работы по реболу и прогреву современных видеочипов производятся при помощи паяльного термофена.

Управление температурой и плотностью потока воздуха, как правило, осуществляется при помощи кнопок на термофене.

Процесс пайки при помощи паяльного термофена подразумевает следующие шаги:

  • нанесение припоя или паяльной пасты на место предполагаемого монтажа;
  • установка микросхемы на посадочное место;
  • прогрев монтажных контактов при помощи паяльного термофена.
Читайте также:  Жало для паяльника металлокерамическое

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

После проведения работ следует проверить качество пропая всех контактов при помощи иголки.

Демонтаж элемента при помощи фена еще проще. Для снятие неисправной микросхемы необходимо:

  • равномерно прогреть все контакты;
  • аккуратно снять элемент при помощи пинцета или присоски.

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

Основные детали и материалы

Давненько у меня валялся без дела этот вентилятор. Такие 40-миллиметровые вентиляторы раньше широко использовались в PC 486 и видеокартах.

Для данного узла потребуется минимальная доработка. Нужно будет повторно просунуть провод в узел крепления.

Для воздуховода нагревателя у меня не нашлось трубки подходящего диаметра, и я её позаимствовал у десятиваттного резистора типа С-5-5. Чтобы освободить трубку от внутренностей, спилил напильником один из её закатанных краёв.

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

Для того чтобы не возиться с изготовлением слюдяного каркаса, я использовал проволоку диаметром 1,2мм от какого-то реостата. Думаю, подойдёт проволока диаметром 0,5-1,5мм. Если выбрать более тонкий провод, он не будет надёжно фиксироваться в корпусе, а если более толстый, то придётся увеличивать сечение кабеля, что сделает последний слишком жёстким.

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

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

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

Много раз использовал эти чудесные изделия для решения совершенно нетипичных задач. В данном случае, электротехнические клеммники будут передавать ток от кабеля к спирали и фиксировать положение спирали относительно переднего края трубки (для предотвращения замыкания спирали на корпус).

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

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

Из цилиндра пятиграммового шприца изготовим ручку фена.

Обзор паяльных станций: краткая характеристика моделей

Самое безопасное устройство – паяльная станция 858d компании Mypovos. Большинство покупателей отмечают замечательное качество сборки и отличную работу термофена и паяльника. А также пользователи указывают, что температура на индикаторе и реальная не отличаются.

Максимальная температура прибором достигается быстро и составляет от 100 до 500 градусов Цельсия. Кроме того, прибор оснащен спящим режимом паяльного фена. Безопасность паяльной станции обеспечивается благодаря автоматическому охлаждению, который срабатывает, если поставить фен в держатель. Это также предотвращает появление пожара. Ориентировочная стоимость – от 1285 рублей.

Оригинальным, стильным и удобным дизайном отличается паяльная станция 8586 производителя Newacalox. Черный корпус и модный светодиодный индикатор способны украсить рабочее место паяльщика. Кроме того, инструмент отличается компактными габаритами. Внешний дизайн – это лишь приятный бонус к техническим характеристикам прибора.

Потребляемая мощность инструмента – 700 Вт, максимальная температура составляет 500 °С. Есть несколько незначительных минусов: прибор нуждается в калибровке, так как иногда температура на индикаторе отличается от реальной, а также нет спящего режима, что повышает вероятность возгорания. Стоимость прибора – от 4478 рублей.

Инструмент Qsunrun 858D – середнячок по техническим характеристикам. Имеет блок питания мощностью 700 Вт, отличается наиболее выгодной стоимостью – от 942 рублей. Прибор обладает всеми стандартными преимуществами, а именно:

  • компактными размерами (вес – 1,6 кг);
  • отличной комплектацией;
  • способностью быстрого нагрева до рабочей температуры;
  • бесшумной работой.

Из недостатков стоит отметить перегрев ручки, но цена инструмента полностью перекрывает данный минус.

Самый компактный и функциональный прибор – YOUYUE 8586. Габариты данной паяльной станции небольшие, но инструмент по характеристикам не уступает подобным моделям. Мощность паяльника составляет от 50 до 700 Вт, соответственно, температура варьируется от 200 до 450 и от 100 до 500 °С.

Статья по теме:

Самодельная паяльная станция 5 в 1

Горелка газовая для кровельных работ: разновидности, характеристики и особенности
Горелка газовая для кровельных работ: особенности и характеристики инструмента. Инструкция по самостоятельному изготовлению конструкции.

Модель Mypovos 8586. Данная конструкция характеризуется особенно точной регулировкой температуры. Инструмент имеет погрешность всего 5 °С. Кроме этого, паяльная станция, благодаря компактным размерам и прорезиненным ручкам, очень удобна в управлении.

Паяльная станция Aoyue int 2738A отличается отменным качеством. Кроме того, модель нагревается до рабочей температуры за 3-5 секунд, что считается хорошим показателем. Конструкция оснащена дымоуловителями, сменными фильтрами, держателями для катушки с припоем.

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

Паяльная станция с феном / блог им. ghostpvv / сообщество

Самодельная паяльная станция 5 в 1

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

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

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

Но в итоге остановил свой выбор на схеме от alexeypa, но в редакции ssh , о чем и хочу рассказать немного подробнее.

Здесь располагается схема, печатные платы, прошивка и обсуждение данной конструкции:
http://forum.easyelectronics.ru/viewtopic.php?f=16&t=4644&sid=6fc423831f77abf1a7b8e1a4db475f2e

Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1

Как на мой взгляд, это простой и остроумный, а потому — привлекательный вариант исполнения паяльной станции.

1) Паяльник — с нихромовым нагревателем (~12-13 Ом) и термопарой (~1,9-2,4 Ом). Под паяльник с японским керамическим нагревателем и терморезистором скорее всего необходимо подбирать обвязку операционного усилителя (подробности на 13-й странице форума), пока этим занимался только пользователь bmwxmiha .

2) Фен — также с нихромовым нагревателем (~78-79 Ом) и термопарой (~1,9-2,4 Ом). Обращайте внимание, бывают с терморезистором, такой вариант на форуме ещё не рассматривался.

3) Питание схемы — от любого блока питания напряжением 12-24В, с током от 2А и выше. Здесь полет фантазии ограничивается только бюджетом и тем, что есть под рукой — первоначально я использовал блок питания от ноутбука, но в итоге перешел на трансформаторный БП.

4) Феном и паяльником управляет один микроконтроллер ATmega8.

Прошивка универсальна, я брал редакцию SS_15022022_1700 от cabat, со страницы 15 форума.
http://forum.easyelectronics.ru/viewtopic.php?f=16&t=4644&start=350

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

Фьюзы выставлял как указано на картинке udginb, со страницы 12 форума.
Самодельная паяльная станция 5 в 1

5) Усиление сигнала с термопар — на сдвоенном операционном усилителе, можно использовать LM2904 или LM358.
Калибровка — резисторами 75 Ом и 6,8 кОм в обвязке ОУ.

6) Регулировка мощности нихромового нагревателя паяльника с термопарой и скорости вращения вентилятора фена — два полевых транзистора:
— в варианте от alexeypa — P-канальные транзисторы (например IRF4905) в паре с биполярными NPN транзисторами (например 2N3859A);
— в редакции ssh — транзисторы N-канальные типа IRL (транзисторы с управлением от логического уровня), и без использования биполярных транзисторов. Я использовал два обычных IRLZ44N, номинал резисторов на затворах не менял.

7) Регулирование мощности нагревателя фена — оптотиристор и тиристор.

Я использовал MOC3043 с системой переключения в нуле и резисторы 360 Ом на 4-й и 6-й ногах оптотиристора. В моем случае можно использовать прямые аналоги MOC3041, MOC3042, MOC3043. Подключение нагрузки к Т1 тиристора.

Самодельная паяльная станция 5 в 1

Близкие номиналы в схеме с MOC3061, MOC3062, MOC3063

Самодельная паяльная станция 5 в 1

Если будете использовать MOC3031, MOC3032, MOC3033 — по даташиту 6-я нога оптотиристора подключается к Т2 тиристора через резистор 180 Ом, 4-я нога оптотиристора подключается к G тиристора, и между 4-й ногой оптотиристора и Т1 тиристора должен быть резистор 1 кОм. Подключение нагрузки к Т1 тиристора.

Самодельная паяльная станция 5 в 1

В оригинальной схеме используется MOC3020, MOC3021, MOC3022, MOC3023, без системы переключения в нуле — в этом случае по даташиту 6-я нога оптотиристора подключается к Т2 тиристора через резистор 180 Ом, 4-я нога оптотиристора подключается к G тиристора, и между 4-й ногой оптотиристора и Т1 тиристора резистор не нужен. Подключение нагрузки нарисовано к Т2 тиристора, но в этом моменте я очень сомневаюсь, пробовать советую с подключенной лампой накаливания вместо тэна нагревателя.

Самодельная паяльная станция 5 в 1

8) Тиристор можно использовать типа BT136-BT139. Использовал BT139, чтобы не городить дополнительное охлаждение.

9) Индикатор — 7-ми сегментный, 3-х разрядный, с общим катодом. Для платы от ssh нужен крупный индикатор, отлично подошел SP420561N2/24

Транзисторы в обвязку индикатора поставил BC817, номиналы резисторов не менял.

Вместо светодиодного индикатора на 7 светодиодов для индикации скорости вентилятора фена можно использовать 7 отдельных светодиодов.

10) Энкодер нужен с кнопкой, модель своего не знаю, брал как «энкодер к ардуино». Работает, но управление обратное. Пока дорожки не резал, ножки не перебрасывал, так как особых неудобств не испытываю.

По режимам работы:

— при включении индикатор показывает «—«;

— после нажатия кнопки энкодера на 2-3 секунды включается режим паяльника, здесь при первом включении необходимо выставить энкодером температуру и сохранить в EEPROM кнопками памяти M1, M2;

— повторное нажатие кнопки энкодера — переключение в режим фена, начинают работать кнопки увеличения и уменьшения потока воздуха, и теперь возможно включить фен коротким нажатием кнопки фена (которая подключена от 25-й ноги микроконтроллера на землю через кнопку), повторное нажатие переводит фен в ждущий режим (отключение нагревателя и продувка холодным воздухом);

— длительное нажатие кнопки энкодера — выключение станции (на индикаторе горит «—«).

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

Если при включении на индикаторах горит «505», значит нет сигнала от термопары.

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

Ниже мой вариант, собранный «на коленке».

Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1

Самодельная паяльная станция 5 в 1

В итоге все будет собрано в уже купленный корпус от автоматического выключателя электричества.

Красиво не будет, уж я себя знаю, но будет компактно 🙂

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

Для тех, кто заинтересовался — в приложении подборка файлов и фото с форума, с разбивкой по пользователям, а также в хронологическом порядке повторений станции.

Всем удачи. Спасибо alexeypa за удачную разработку.

Update:
Общий вид станции в корпусе ниже:
Самодельная паяльная станция 5 в 1

Рукоятка паяльного фена и постройка станции на ее базе

Обзор ручки фена, подходящей к огромному количеству станций (858D, 8586, 8858, 852, 878, 952, 853), а так же постройка простой самодельной станции на ее основе.

Порой, монтаж без фена весьма затруднен или вообще невозможен и, столкнувшись в очередной раз с корпусом TQFP, я решился. За приобретение готового изделия говорила экономия времени, за постройку самодела – интерес и возможность полной кастомизации под свои нужды. Вопрос экономии тут весьма спорный, впрочем, в конце постараемся посчитать.
На AliExpress была выбрана и заказана ручка с набором из 5 сопел по принципу дешевле – лучше. Также, был заказан разъем GX16-8. Стоило сразу заказать и рукоятку, но она была заказана уже после постройки фена и все еще прорывается ко мне сквозь дебри нашей почты. Итак, что же мы получили:
Самодельная паяльная станция 5 в 1
Самодельная паяльная станция 5 в 1
Ручка выполнена из достаточно крепкого пластика, все провода выведены через переходную планку. Качество насадок спорное – сами по себе они вполне пригодны, но держатся на рукоятке не слишком крепко. Нужно накернить чуть сильнее уже имеющиеся углубления в насадках и проблема решена.
Самодельная паяльная станция 5 в 1
Турбина рассчитана на напряжение 24 В, потребляет ток 0.25 А.
Самодельная паяльная станция 5 в 1
Сам нагреватель обернут в стеклоткань (очень жесткую на изгиб) и вставлен в металлический наконечник ручки.
Самодельная паяльная станция 5 в 1
На конце нагревателя размещена термопара, тип скорее всего K (возможно, J). Сопротивление нагревателя в холодном виде 76 Ом, что дает нам мощность меньше 700 Вт. От наконечника выведен провод корпуса. На одной из половин корпуса находятся щели для забора воздуха турбиной. Я не знаю, конструктивная это особенность и задумка или просто косяк, но ребра жесткости на внутренней поверхности ручек закрывают эти щели почти наполовину.
Самодельная паяльная станция 5 в 1
Самодельная паяльная станция 5 в 1
Я не стал ломать голову и убрал лишний пластик.
Самодельная паяльная станция 5 в 1
Длина кабеля от рукоятки до части, где общая изоляция уже снята – ровно 100 см. Схема рукоятки:
Самодельная паяльная станция 5 в 1
Для создания контроллера станции первоначально я планировал использовать готовую Arduino Nano, но затем жадность и отсутствие лишнего места в будущем корпусе натолкнули на мысль поставить внутрь устройства МК Atmega328P-PU с минимальной обвязкой.
Самодельная паяльная станция 5 в 1
В качестве элемента индикации был взят популярный дисплей от Nokia 5110, в качестве элемента управления – роторный энкодер с кнопкой. Для питания турбины из закромов был взят старый импульсный блок питания от сканера, который имеет дежурный режим (около 7 В) и рабочий (24 В). Он же питает и контроллер через простой линейный стабилизатор LM7805 в корпусе TO-220. Потребляемый МК и дисплеем ток незначителен, и после установки небольшого алюминиевого радиатора на стабилизатор его нагрев не превысил 40 градусов. Питание нагревателя осуществляется симистором BTA12-600 (замечу, что он тут явно избыточен), который управляется МК через оптопару MOC3041M со встроенной схемой детекции перехода через ноль. Это, в совокупности со снабберной цепью, позволяет минимизировать уровень помех от переключения симистора. Выход термопары усиливается крайне простым и популярным ОУ LM358. Управление потоком воздуха осуществляется посредством мосфета IRLZ44N и ШИМ сигнала с МК. Такой же мосфет управляет переключением блока питания из дежурного режима в рабочий. Когда рукоятка фена снята с подставки, осуществляется нагрев потока воздуха до установленной температуры, турбина работает в соответствии с установленным потоком воздуха. После установки рукоятки в подставку нагрев прекращается, а турбина работает в режиме 50% в течении двух минут, после чего отключается и МК переводит блок питания в дежурный режим, выход из которого осуществляется при поднятии рукоятки с подставки. Режим работы станции отображается на дисплее рядом со значением установленной температуры латинской буквой (H – в данный момент осуществляемся нагрев, B – рукоятка в подставке, S — станция перешла в дежурный режим). Если использовать блок питания без дежурного режима, то транзистор T1, резисторы R8 и R9 можно исключить.

Скетч


#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Encoder.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 8);                            // Определяем пины для подключения дисплея
Encoder myEnc(2, 3);                                                                   // Определяем пины для подключения энкодера
int encButton = 9;                                                                     // Определяем пин для подключения кнопки энкодера
int pinPWM = 10;                                                                       // Определяем пин для управления скорость вращения турбины
int pinSSR = 13;                                                                       // Определяем пин для управления коммутацией нагревателя
int pinOn = 12;                                                                        // Определяем пин для управления включением блока питания из дежурного режима
int pinBase = 11;                                                                      // Определяем пин для подключения геркона
static const unsigned char PROGMEM logo_bmp[] =                                        // Рисуем каркас меню
{ B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B10000000, B00000000, B10000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00010000,
  B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000
};

static const unsigned char PROGMEM cursor_bmp[] =                                      // Рисуем курсор
{ B11111111, B11111111,
  B10000000, B00000000,
  B10000000, B00000000,
  B10000000, B00000000,
  B10000000, B10000000,
  B10000000, B11100000,
  B10000000, B11111000,
  B10111111, B11111110,
  B10000000, B11111000,
  B10000000, B11100000,
  B10000000, B10000000,
  B10000000, B00000000,
  B10000000, B00000000,
  B11111111, B11111111
};

float realTemp = 0;                                                                    // Реальное значение температуры
int setTemp = 100;                                                                     // Установленное значение температуры
byte realPWM = 0;                                                                      // Реальное значение оборотов турбины
byte setPWM = 50;                                                                      // Установленное значение оборотов турбины
byte indexPWM = 0;                                                                     // Индекс для выбора правильных коэффициентов пересчета температуры
int realTempArray[100];                                                                // Массив для усреднения значения температуры при измерениях
unsigned long summTemp  = 0;                                                           // Сумма данных массива
int averTemp  = 0;                                                                     // Усредненная температура
int minTemp = 0;                                                                       // Минимальное значение температуры для станции
int maxTemp = 500;                                                                     // Максимальное значение температуры для станции
byte minPWM = 30;                                                                      // Минимальное значение оборотов турбины
byte maxPWM = 100;                                                                     // Максимальное значение оборотов турбины
long timeCurrent = 0;                                                                  // Таймер для хранения текущего времени
long timeMenu = 0;                                                                     // Таймер для управления меню
long timeMeasurement = 0;                                                              // Таймер для управления циклами измерений
long timeSleep = 0;                                                                    // Таймер для управления уходом в сон
long oldPosition  = 0;                                                                 // Переменная для чтения данных с энкодера
long newPosition = 0;                                                                  // Переменная для чтения данных с энкодера
bool selectMenu = LOW;                                                                 // Выбранное меню
bool flagEnc = LOW;                                                                    // Флаг для устранения дребезга при вращении энкодера
bool flagEncButton = LOW;                                                              // Флаг для устранения дребезга при нажатии энкодера
bool flagBase = HIGH;                                                                  // Флаг положения ручки в подставке
bool flagSleep = HIGH;                                                                 // Флаг состояния сна
bool heat = LOW;                                                                       // Флаг нагрева
int hysteresis = 3;                                                                    // Температурный гистерезис
float K[8] = {0.500, 0.528, 0.528, 0.535, 0.535, 0.522, 0.505, 0.492};                 // Мультипликативный коэффициент подсчета температуры
int A[8] = {36, 31, 32, 28, 23, 22, 22, 15};                                           // Аддитивный коэффициент подсчета температуры

void setup() {
  TCCR1B = TCCR1B & 0b11111000 | 0x02;                                                 // Устанавливаем частоту ШИМ на 10 выводе как 3906.25 Гц
  pinMode(A1, INPUT);                                                                  // Определяем аналоговый пин A1 на ввод (выход ОУ)
  pinMode(encButton, INPUT);                                                           // Определяем пин encButton на ввод
  pinMode(pinBase, INPUT);                                                             // Определяем пин pinBase на ввод
  pinMode(pinPWM, OUTPUT);                                                             // Определяем пин pinPWM на вывод
  pinMode(pinSSR, OUTPUT);                                                             // Определяем пин pinSSR на вывод
  pinMode(pinOn, OUTPUT);                                                              // Определяем пин pinOn на вывод
  digitalWrite(pinOn, HIGH);                                                           // Подаем на пин включения высокий уровень TTL (переводим блок питания из дежурного режима в рабочий)
  display.begin();
  display.setContrast(50);
  display.display();
}

void loop() {
  flagBase = !digitalRead(pinBase);                                                    // Получаем состояния пина pinBase
  timeCurrent = millis();                                                              // Получаем текущее время
  if ((timeCurrent - timeMeasurement) >= 100) {                                        // Если с прошлого измерения прошло больше 100 мсек
    heat = LOW;                                                                           // Выключаем нагрев
    digitalWrite(pinSSR, heat);                                                           // Отправляем на вывод состояние нагрева
    delay(50);                                                                            // Ждем 50 мсек (для исключения влияния помех от симистора)
    summTemp = 0;                                                                           // Обнуляем сумму
    for (byte i = 0; i <= 99; i  ) {                                                      // И повторяем 100 раз цикл
      realTemp = analogRead(A1);                                                             // Считываем значение на A1
      realTempArray[i] = realTemp;                                                           // Записываем в массив показаний
      summTemp = summTemp   realTempArray[i];                                                // Складываем все элементы массива
    }
    averTemp = round(summTemp / 100);                                                     // Подсчитываем среднее арифметическое
    indexPWM = realPWM / 10 - 3;                                                          // Вычисляем индекс коэффициентов пересчета показаний в температуру
    realTemp = round(K[indexPWM] * averTemp   A[indexPWM]);                               // Вычисляем реальное значение температуры
    timeMeasurement = millis();                                                           // Записываем время проведения измерения
  }
  if (flagBase == LOW) {                                                               // Если ручка не в подставке
    digitalWrite(pinOn, HIGH);                                                            // Включаем блок питания из дежурного режима в рабочий
    flagSleep = LOW;                                                                      // Устанавливаем флаг сна в низкий уровень
    analogWrite(pinPWM, map(setPWM, 30, 100, 76, 255));                                   // Выводим ШИМ на pinPWM
    realPWM = setPWM;                                                                     // Приравниваем реальное значение PWM установленному
    if (setTemp > realTemp   hysteresis ) {                                               // Если установленная температуры выше чем сумма реальной и гистерезиса
      heat = HIGH;                                                                           // Включаем нагрев
    }
    if (setTemp < realTemp) {                                                             // Если установленная температура меньше реальной
      heat = LOW;                                                                            // Выключаем нагрев
    }
    digitalWrite(pinSSR, heat);                                                           // Отправляем на вывод состояние нагрева
    timeSleep = millis();                                                                 // Записываем последнее время, когда ручка не в подставке
  }
  else {                                                                               // Если ручка в подставке
    heat = LOW;                                                                           // Выключаем нагрев
    digitalWrite(pinSSR, heat);                                                           // Отправляем на вывод состояние нагрева
    if (((timeCurrent - timeSleep) <= 120000) && (flagSleep == LOW)) {                    // Если прошло меньше 120 секунд с последнего раза, когда ручка была не в подставке и станция не в режиме сна
      analogWrite(pinPWM, 128);                                                              // Выводим ШИМ с заполнением 50% на pinPWM
      realPWM = 50;                                                                          // Записываем в реальное значение ШИМ 50
    }
    else {                                                                             // Иначе
      digitalWrite(pinPWM, LOW);                                                          // Отключаем турбину
      realPWM = 0;                                                                        // Записываем в реальное значение ШИМ 0
      digitalWrite(pinOn, LOW);                                                           // Переводим блок питания в дежурный режим
      flagSleep = HIGH;                                                                   // Записываем в флаг сна высокое значение TTL
    }
  }
  display.clearDisplay();                                                              // Очищаем дисплей
  display.drawBitmap(0, 0,  logo_bmp, 84, 48, BLACK);                                  // Рисуем каркас меню
  display.setTextColor(BLACK);                                                         // Устанавливаем цвет текста
  display.setTextSize(2);                                                              // Устанавливаем размер текста
  display.setCursor(13, 3);                                                            // Устанавливаем координаты курсора
  display.println(realTemp, 0);                                                        // Выводим значение реальной температуры
  display.setCursor(56, 0);                                                            // Устанавливаем координаты курсора
  display.println("o");                                                                // Отрисовываем знак градуса
  display.setCursor(67, 3);                                                            // Устанавливаем координаты курсора
  display.println("C");                                                                // Отрисовываем "C"
  display.setTextSize(1);                                                              // Устанавливаем размер текста
  display.setCursor(22, 24);                                                           // Устанавливаем координаты курсора
  display.println(setTemp);                                                            // Выводим значение установленной температуры
  display.setCursor(46, 21);                                                           // Устанавливаем координаты курсора
  display.println("o");                                                                // Отрисовываем знак градуса
  display.setCursor(52, 24);                                                           // Устанавливаем координаты курсора
  display.println("C");                                                                // Отрисовываем "C"
  display.setCursor(70, 24);                                                           // Устанавливаем координаты курсора
  if (heat == HIGH) {                                                                  // Если нагрев включен
    display.println("H");                                                                 // Отрисовываем "H"
  }
  if (flagBase == HIGH) {                                                              // Если ручка в подставке
    if (flagSleep == LOW) {                                                               // Если станция не в режиме сна
      display.println("B");                                                                  // Отрисовываем "B"
    }
    else {                                                                                // Если станция в режиме сна
      display.println("S");                                                                  // Отрисовываем "S"
    }
  }
  display.setCursor(20, 37);                                                           // Устанавливаем координаты курсора
  display.print(realPWM);                                                              // Выводим значение реальных оборотов турбины
  display.print("/");                                                                  // Отрисовываем "/"
  display.print(setPWM);                                                               // Выводим значение установленных оборотов турбины
  display.print(" %");                                                                 // Отрисовываем " %"
  if (selectMenu == 0) {                                                               // Если выбран 0-ой пункт меню
    display.drawBitmap(0, 21, cursor_bmp, 16, 14, BLACK);                                 // Отрисовываем курсор напротив значения установленной температуры
  }
  else {                                                                               // Иначе
    display.drawBitmap(0, 34, cursor_bmp, 16, 14, BLACK);                                 // Отрисовываем курсор напротив значения оборотов турбины
  }
  display.display();                                                                   // Отображаем все на дисплее
  newPosition = myEnc.read();                                                          // Читаем позицию энкодера
  if (flagEnc == LOW) {                                                                  // Если флаг энкодера в низком уровне
    bool buttonState = digitalRead(encButton);                                              // Читаем в переменную buttonState значение с кнопки энкодера
    if (buttonState == 0) {                                                                 // Если это низкий уровень (кнопка нажата)
      if (flagEncButton == HIGH) {                                                             // Если флаг кнопки энкодера в высоком уровне
        selectMenu = !selectMenu;                                                                 // Выбираем следующий пункт меню
        flagEnc = HIGH;                                                                           // Устанавливаем флаг энкодера в высокий уровень
        timeMenu = millis();                                                                      // Записываем время, когда трогали меню
        flagEncButton = LOW;                                                                      // Устанавливаем флаг кнопки энкодера в низкий уровень
      }
      else {                                                                                   // Если флаг кнопки энкодера в низком уровне
        flagEncButton = HIGH;                                                                     // Устанавливаем его в высокий уровень
      }
    }
    else {                                                                                  // Если это высокий уровень (кнопка не нажата)
      flagEncButton = LOW;                                                                     // Устанавливаем флаг кнопки энкодера в низкий уровень
    }
    if (newPosition != oldPosition) {                                                       // Если позиция энкодера изменилась
      flagEnc = HIGH;                                                                          // Устанавливаем флаг энкодера в высокий уровень
      timeMenu = millis();                                                                     // Записываем время, когда трогали меню
      if (newPosition > oldPosition) {                                                            // Если новая позиция энкодера больше предыдущей
        if (selectMenu == 0 && setTemp < maxTemp) {                                                  // Если выбран пункт меню 0 и температура меньше максимальной
          setTemp = setTemp   10;                                                                       // Увеличиваем температуру на 10
        }
        if (selectMenu == 1 && setPWM < maxPWM) {                                                    //  Если выбран пункт меню 1 и обороты меньше максимальных
          setPWM = setPWM   10;                                                                          // Увеличиваем обороты на 10
        }
      }
      if (newPosition < oldPosition) {                                                            // Если новая позиция меньше предыдущей
        if (selectMenu == 0 && setTemp > minTemp) {                                                  // Если выбран пункт меню 0 и температура больше минимальной
          setTemp = setTemp - 10;                                                                       // Уменьшаем температуру на 10
        }
        if (selectMenu == 1 && setPWM > minPWM) {                                                    // Если выбран пункт меню 1 и обороты больше минимальных
          setPWM = setPWM - 10;                                                                         // Уменьшаем обороты на 10
        }
      }
    }
  }
  if ((timeCurrent - timeMenu) >= 250) {                                               // Если прошло больше 250 мсек с момента, как трогали меню
    flagEnc = LOW;                                                                        // Устанавливаем флаг энкодера в низкий уровень
    oldPosition = newPosition;                                                            // Сохраняем позицию энкодера
  }
}

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

Самодельная паяльная станция 5 в 1
Самодельная паяльная станция 5 в 1

В качестве корпуса был использован пластиковый корпус Gainta G1034B с внешними размерами 151х90х53.2 мм. В передней части были изготовлены отверстия под дисплей, энкодер и разъем GX16-8, в задней под сетевой кабель и тумблер. Дисплей, энкодер и плата коммутации сетевого напряжения подключаются к основной через цанговые PLS разъемы с шагом 2.54 мм.

Самодельная паяльная станция 5 в 1
Самодельная паяльная станция 5 в 1
Самодельная паяльная станция 5 в 1

Сразу после постройки станция показывает нам значения напряжения на АЦП МК вместо температуры горячего воздуха, и ее нужно откалибровать. Для этого собираем «стенд» из собственно станции и прибора, которым будем измерять температуру.

Самодельная паяльная станция 5 в 1

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

Самодельная паяльная станция 5 в 1

По результатам измерений мы получаем графики зависимости реальной температуры от показаний. Для каждого значения потока воздуха – свой график, то есть 8 графиков (от 30 до 100 % с интервалом в 10 %). Дело в том, что на такой длине провода на вход LM358 поступает существенная наводка от питания турбины, и ее значение нелинейно зависит от коэффициента заполнения ШИМ. Удобно результаты заносить сразу в Excel и использовать построение диаграмм с отображением формулы. Для каждого значения ШИМ мы получим формулу вида Y=K*X A, где K — мультипликативный коэффициент, который записывается в массив значений K (для 30% это 0-ой член массива, для 40% 1-ый и так далее), а A — аддитивный коэффициент, записывающийся в скетч по тому же принципу с округлением до целого числа. Так мы сразу получаем два массива по 8 значений, которые и заносим в скетч с последующей загрузкой обновленной прошивки.

Самодельная паяльная станция 5 в 1

После этого мы получаем вполне пригодный для работы фен с установкой температуры в диапазоне 0 – 500 °С с шагом в 10 °С и установкой потока воздуха в диапазоне 30-100 % с шагом в 10 %. Диапазоны и шаг можно откорректировать в скетче.

Для подсчета экономической целесообразности подсчитаем затраты:

Рукоятка — 607,89 руб.

Подставка рукоятки – 267,83 руб.

Корпус – 160 руб.

Контроллер AtMega328P-PU – 90,08 руб.

ОУ LM358 (99,27 руб. за 20 шт.) – 4,96 руб.

Оптопара MOC3041M – 24 руб.

Энкодер – 40,53 руб.

Экран – 109,70 руб.

Разъем GX16-8 — 82,23 руб.

Кварц (96,92 руб. за 10 шт.) – 9,69 руб.

Мосфет IRLZ44N (102,79 за 10 шт., понадобилось 2 шт.) – 20,56 руб.

Симистор BTA12-600 (148,02 за 10 шт.) – 14,80 руб.

Плата FR4 размером 10×7 см (211,45 руб. за 5 шт.) – 42,29 руб.

Тумблер сетевой, разъем сетевой – около 100 руб.

СМД резисторы, конденсаторы, термоусадка, провода, термоклей и прочие расходники – еще около 100 руб.

Итого: 1674,56 руб.

Цены указаны на момент покупки оффлайн или заказа с учетом стоимости доставки. С одной стороны, это снижает стоимость (ведь никто вам не продаст всего 1 кварц за 9,69 руб.), с другой стороны почти все заказы содержали не одну позицию мелочевки, и на самом деле реальная стоимость доставки для каждой конкретной мелочи получается меньше.

UPD: Действительно, в подсчете не учтена стоимость блока питания, так как я использовал доставшийся бесплатно. За дешевый блок питания на напряжение 24 В и ток около 1 А придется выложить в районе 300 рублей, и общий бюджет упрется в сумму около 2 000 рублей.

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

Файлы:
Основная плата
Плата коммутации
Библиотеки
Скетч прошивки

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

Оцените статью
Про пайку
Добавить комментарий