Всем привет! Как-то я затронул тему паяльной станции на 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 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 = refresh_delay) { for (int z=max_digits-1;z>=0;z--) { digits_array[z] = value / pow(10,z); //rounding down by converting from float to int if(digits_array[z] != 0 ) empty_most_significant = false; // DON'T SHOW LEADING ZEROS value = value - digits_array[z] * pow(10,z); if(z==current_digit) { if(!empty_most_significant || z==0){ // DON'T SHOW LEADING ZEROS EXCEPT FOR THE LEAST SIGNIFICANT PORTD = digits[digits_array[z]]; } else { PORTD = B00000000; } digitalWrite(digit_common_pins[z], LOW); }else{ digitalWrite(digit_common_pins[z], HIGH); } } current_digit--; if(current_digit < 0) { current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS } actual_refresh_delay = millis(); } } Очень надеюсь, что Вам это как-то поможет в создании своего проекта. Метки:Зачем оно вам?
Реклама Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: [email protected] с темой «Полундра»Зачем оно вам?
Рекламаgeektimes.ru
В этой статье я хочу рассказать о своей версии паяльной станции выполненной на базе микросхемы 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
Осталось запрограммировать МК.
1) Заходим на сайт https://www.arduino.cc/en/main/software, выбрав свою ОС скачиваем программу ARDUINO IDE, после чего устанавливаем её.
2) После установки необходимо добавить библиотеки из архива, для этого в программе выбираем Скетч – Подключить библиотеку – Добавить .ZIP библиотеку. И подключаем по очереди все библиотеки.
3) Подключаем Arduino UNO и присоединённый к ней МК к компьютеру через USB, при первом включении установятся необходимые драйвера.
4) Заходим в программе Файл – Примеры – ArduinoISP – ArduinoISP, в пункте Инструменты выбираем нашу плату и виртуальный порт, к которому подключилась ардуино, затем нажимаем загрузить. Этими действиями мы превращаем нашу ардуино в полноценный программатор.
5) После загрузки скетча в ардуино открываем скетч из архива, выбираем пункт Инструменты – записать загрузчик. Сам загрузчик в МК нам конечно не нужен, но этимы действиями в МК прошьются фьюзы и наша микроконтроллер будет работать от внешнего кварца на частоте 16МГц.
6) После загрузки загрузчика выбираем Скетч-Загрузка через программатор.
Осталось всё собрать и настроить температуру фена и паяльника, я делал при помощи термопары мультиметра. Также незабываем настроить контрастность дисплея. Регулируется переменным резистором на переходнике дисплея.
cxem.net
/* Arduino IDE 1.5.4
Паяльник на Arduino Pro Mini v0.4
Alex link http://www.youtube.com/c/AlexLink-Free http://vk.com/linklife http://www.facebook.com/groups/Arduno.life/ // Пины еодключения индикаторов ANODES(CATHODES): D1 — a D2 — b D4 — c D6 — d D7 — e D5 — f D3 — g
D0 — dp (digital point) Я НЕ подключал — резерв… индикатора :)))
a1 ******** * * f * * b2 5 * g3 * ******** * * e * * c4 7 * d6 *
******** # dp0
CATHODES(ANODES): D16 — cathode 3 D15 — cathode 2 D12 — cathode 1
*/
// ———————————————————————————————— int indicator = 1; // 0 = Катод 1 = Анод — Выбрать под Ваш индикатора !!!!
byte digits[] = { B00001001,B11101011,B00110001,B10100001,B11000011,B10000101,B00000101,B11101001,B00000001,B10000001};
int digit_common_pins[]={16,15,12}; // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется) int refresh_delay = 5; int count_delay = 1000; // COUNTING SECONDS IF count_delay = 1000 long actual_count_delay = 0; long actual_refresh_delay = 0; int increment = 0; //Стартовое значение на сегментах int max_digits =3; // Кол-во знакомест int current_digit=max_digits-1; int increment_max = pow(10,max_digits);
// ————————————————— не изменять, это для Сегментов ————————————————
//——————— переменные паяльника —————————— int knopka = 3; //Пин кнопки
int tin = 0; // Пин Датчика температуры IN Analog через LM358N int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM
int tempust = 230; // установленная температура int tempmin = 200; // минимальная температура int tempmax = 480; // максимальная температура int tempreal = 250; // переменная датчика текущей температуры int temppwmmin = 40; // минимальное значение PWM нагревателя int temppwmmax = 180; // максимальное значение PWM нагревателя int temppwmreal = 0; // текущее значение PWM нагревателя
int airreal = 100; // стартовое значение PWM вентилятора(если нужно)
int temperror = -50; // разница температур(установленная — реальная)
int temprazn = 0; // переменная разницы температуры(установленная — текущая)
void setup(){
if(indicator == 0){ //Если вначале был выбран общий Катод for(int i=0; i 3) { temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева
}
else if ((tempust — tempreal) < 4 ) { temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева } else { temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры } analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } else { //Иначе (если температура паяльника равняется или выше установленной) temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) — таким образом мы отключаем паяльник analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } if(millis() — actual_count_delay > count_delay) // это для сегментов
{ actual_count_delay = millis();
// Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчк не будет тормозить вывод на сегменты)
tempreal = analogRead(0);// считываем текущую температуру
tempreal=map(tempreal,-50,700,0,500); // нужно вычислить increment=tempreal;
//———————————————————- Кнопки ————————————————————————- if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5 { if( tempust =tempmax) { tempust= tempmax; } increment = tempust;
show(increment); // Вывести значение переменной на экран(LED)
}
} }
void show(int value) { //——————————- подпрограмма для вывода на сегменты — лучше не изменять ——————————————— int digits_array[]={}; int y=0;
boolean empty_most_significant = true;
if(millis() — actual_refresh_delay >= refresh_delay) {
for (int z=max_digits-1;z>=0;z—) {
digits_array[z] = value / pow(10,z); //rounding down by converting from float to int
if(digits_array[z] != 0 ) empty_most_significant = false; // DON’T SHOW LEADING ZEROS
value = value — digits_array[z] * pow(10,z);
if(z==current_digit) {
if(!empty_most_significant || z==0){ // DON’T SHOW LEADING ZEROS EXCEPT FOR THE LEAST SIGNIFICANT
PORTD = digits[digits_array[z]]; } else { if(indicator == 0){ //Если вначале был выбран общий Катод PORTD = B00000000; } else{ PORTD = B11111111; }
}
if(indicator == 0){ digitalWrite(digit_common_pins[z], LOW); } else{ digitalWrite(digit_common_pins[z], HIGH); } }
else{
if(indicator == 0){ digitalWrite(digit_common_pins[z], HIGH); } else{ digitalWrite(digit_common_pins[z], LOW); }
}
}
current_digit—; if(current_digit < 0) { current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS
}
actual_refresh_delay = millis(); }
}
[свернуть]
my-project.link
Всем привет, собрал паяльную станцию на ардуино.
Автор проекта: Oleg A. ссылка на статью
Cебестоимость 35$ (детали покупал на али) — рекомендую к повторению, весьма бюджетно и не хуже заводских аналогов, хотя есть недостаток в отсутствии защиты, при КЗ симистора либо транзистора происходит максимальный нагрев фена либо паяльника и как следствие — небольшой пожар :-) Не стоит оставлять станцию без присмотра, когда не пользуемся — выключаем из розетки, либо обрываем фазу выключателем. Также в процессе сборки не стоит забывать о возможном наличии фазы на корпусе симистора.
Станция работает отлично, требуется лишь отстроить температуру используя термопару мультиметра
Список компонентов
Операционный усилитель LM358 (1 — шт.) ПерейтиПотенциометр 10К (3 — шт.) ПерейтиПотенциометр крутилка (3 — шт.) ПерейтиПодстроечный резистор 3362 10К (3 — шт.) ПерейтиРезистор 0805 220К (2 — шт.) ПерейтиРазъем питания IEC320 C (1 — шт.) ПерейтиРазъем PLS 40 (1 — шт.) ПерейтиГнездо GX16-8 (1 — шт.) ПерейтиГнездо GX16-5 (1 — шт.) ПерейтиБлок питания Импульсный 24В, 4А (1 — шт.) ПерейтиПаяльник 24В с К термопарой (1 — шт.) ПерейтиФен с К термопарой с вентилятором на 12 либо 24 вольта (1 — шт.) ПерейтиЭкран LCD дисплей 16х2 (1 — шт.) ПерейтиКварц 16 Мгц (1 — шт.) ПерейтиРезистор 0,5Вт 22К (1 — шт.) ПерейтиСветодиод: 3 мм красный 20мА (2 — шт.) ПерейтиРезистор 0805 10К (4 — шт.) ПерейтиМикроконтроллёр Atmega328p (1 — шт.) ПерейтиОпторазвязка MOC3063 (1 — шт.) ПерейтиМосфет N-канал IRFZ44N (2 — шт.) ПерейтиСимистор BT-138-600B (1 — шт.) ПерейтиСтабилизатор L7812CV (1 — шт.) ПерейтиСтабилизатор L7805CV (1 — шт.) ПерейтиРезистор 0805 220 (2 — шт.) ПерейтиКонденсотор 0805 1 мкф (3 — шт.) ПерейтиПереключатель SWR-45-B-B (2 — шт.) Перейти
Atmega328p прошивал через ардуино уно (Arduino as ISP) + SinaProg 2.1.1
фьюзы
Полный размер
мой программатор
Схема подключения
www.drive2.ru