RSS блога
Подписка
Soldering Station v5.0 - Hakko 936 "на стероидах"
Есть у меня «рабочая лошадка» — Hakko 936. Работает исправно уже больше 2х лет.
Но мне хотелось большей информативности и возможности менять некоторые характеристики станции.
Решил сделать «с нуля» свою станцию(без фена, т.к. хотелось некой мобильности) на основе atmega328 на «китайдуино nano».
Давно заказывал для Хакко запасной паяльник, но китайцы прислали паяльник с термопарой(сопр. терм. — 2.1Ом, сопр. нагр. — 15.5Ом), решил его использовать.
Скетч честно пытался писать сам, но не осилил, и заказал его. Потом дорабатывал под себя(символы, заставка, мелкие штрихи, доп. функции).
Корпус решил взять в магазине электротоваров. Подошла по габаритам коробка распаячная Tyco 200х140х75 IP55.
Блок питания взял с запасом: XK-2412-24 (220В.->24В.\6a)
Экран решил использовать двухстрочный:LCD1602 с зелёной подсветкой.
Адаптер I2C к экрану на PCF8574AT
Пошла мелочевка: Разъем для паяльника GX12 5 Pin
Энкодер с кнопкой EC11
«Степ-даун» конвертер gw1584 для питания ардуинки и экрана.
Двухканальный операционный усилитель LM358P для снятия даных с датчика температуры паяльника.
Полевой транзистор — IRFZ44N для управления нагревательным элементом паяльника путем ШИМ-модуляции.
Кнопка включения, разъем для питающего шнура, держатель плавких вставок(Fuse), резисторы, керамические конденсаторы, светодиод, провода итд — все это было в наличии у меня, покупать не пришлось.
Схема была скопирована и доработана из «схемы паяльной станции Aleks Link для ардуино NANO». Изменена под управление инкрементным энкодером с защитой от «дребезга».
Вот оригинальная схема:
Почти все в схеме осталось нетронутым — заменил только экран.
Приступаю к сборке — высверлил все нужные отверстия и пропилил прямоугольник для экрана:
Платка операционника — коряво, из того что было…
Полевик — все контакты залил изолятором потом.
Энкодер с припаянным делителем на резисторах:
Проверка работоспособности скетча:
Готовый вид — невзрачно, но работоспособно:
По итогу: Вышло не плохо, набор температуры от комнатной до 300гр. за ~20-25сек.
Поддержание заданной температуры(но паять массивные детали не стоит.)
Есть режим «сон», который вырубает поддержку температуры(жало перестает нагреваться)через 10минут(в моем случае), при этом, станция работает, но на экране справа будет знак «S» — sleep. Для выхода из режима сна, нужно повернуть энкодер в любую сторону, и тогда знак поменяется на «W» — work, и начнется набор температуры до выставленной.
Скетч, по понятным причинам, не публикую, но покажу скетч от первоисточника — там нужно подправить вывод на экран(семисегментник) и всё.
И обновленный скетч от первоисточника:
Видео работы:
Если есть вопросы, задавайте. По возможности буду отвечать.
Но мне хотелось большей информативности и возможности менять некоторые характеристики станции.
Решил сделать «с нуля» свою станцию(без фена, т.к. хотелось некой мобильности) на основе atmega328 на «китайдуино nano».
Давно заказывал для Хакко запасной паяльник, но китайцы прислали паяльник с термопарой(сопр. терм. — 2.1Ом, сопр. нагр. — 15.5Ом), решил его использовать.
Скетч честно пытался писать сам, но не осилил, и заказал его. Потом дорабатывал под себя(символы, заставка, мелкие штрихи, доп. функции).
Корпус решил взять в магазине электротоваров. Подошла по габаритам коробка распаячная Tyco 200х140х75 IP55.
Блок питания взял с запасом: XK-2412-24 (220В.->24В.\6a)
Экран решил использовать двухстрочный:LCD1602 с зелёной подсветкой.
Адаптер I2C к экрану на PCF8574AT
Пошла мелочевка: Разъем для паяльника GX12 5 Pin
Энкодер с кнопкой EC11
«Степ-даун» конвертер gw1584 для питания ардуинки и экрана.
Двухканальный операционный усилитель LM358P для снятия даных с датчика температуры паяльника.
Полевой транзистор — IRFZ44N для управления нагревательным элементом паяльника путем ШИМ-модуляции.
Кнопка включения, разъем для питающего шнура, держатель плавких вставок(Fuse), резисторы, керамические конденсаторы, светодиод, провода итд — все это было в наличии у меня, покупать не пришлось.
Схема была скопирована и доработана из «схемы паяльной станции Aleks Link для ардуино NANO». Изменена под управление инкрементным энкодером с защитой от «дребезга».
Вот оригинальная схема:
Почти все в схеме осталось нетронутым — заменил только экран.
Приступаю к сборке — высверлил все нужные отверстия и пропилил прямоугольник для экрана:
Этапы установки элементов
Платка операционника — коряво, из того что было…
Полевик — все контакты залил изолятором потом.
Энкодер с припаянным делителем на резисторах:
Проверка работоспособности скетча:
Готовый вид — невзрачно, но работоспособно:
С разных ракурсов но еще не собран окончательно
По итогу: Вышло не плохо, набор температуры от комнатной до 300гр. за ~20-25сек.
Поддержание заданной температуры(но паять массивные детали не стоит.)
Есть режим «сон», который вырубает поддержку температуры(жало перестает нагреваться)через 10минут(в моем случае), при этом, станция работает, но на экране справа будет знак «S» — sleep. Для выхода из режима сна, нужно повернуть энкодер в любую сторону, и тогда знак поменяется на «W» — work, и начнется набор температуры до выставленной.
Скетч, по понятным причинам, не публикую, но покажу скетч от первоисточника — там нужно подправить вывод на экран(семисегментник) и всё.
Скетч первоисточника
/*
Arduino IDE 1.5.4
Паяльник на Arduino Pro Mini v0.4
Alex link
http://www.youtube.com/c/AlexLink-Free
http://vk.com/linklife
http://www.facebook.com/groups/Arduno.life/
// Пины еодключения индикаторов
ANODES(CATHODES):
D1 — a
D2 — b
D4 — c
D6 — d
D7 — e
D5 — f
D3 — g
D0 — dp (digital point) Я НЕ подключал — резерв… индикатора :)))
a1
********
* *
f * * b2
5 * g3 *
********
* *
e * * c4
7 * d6 *
******** # dp0
CATHODES(ANODES):
D16 — cathode 3
D15 — cathode 2
D12 — cathode 1
*/
// ————————————————————————————————
int indicator = 1; // 0 = Катод 1 = Анод — Выбрать под Ваш индикатора !!!!
byte digits[] = {
B00001001,B11101011,B00110001,B10100001,B11000011,B10000101,B00000101,B11101001,B00000001,B10000001};
int digit_common_pins[]={16,15,12}; // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется)
int refresh_delay = 5;
int count_delay = 1000; // COUNTING SECONDS IF count_delay = 1000
long actual_count_delay = 0;
long actual_refresh_delay = 0;
int increment = 0; //Стартовое значение на сегментах
int max_digits =3; // Кол-во знакомест
int current_digit=max_digits-1;
int increment_max = pow(10,max_digits);
// ————————————————— не изменять, это для Сегментов ————————————————
//——————— переменные паяльника ——————————
int knopka = 3; //Пин кнопки
int tin = 0; // Пин Датчика температуры IN Analog через LM358N
int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM
int tempust = 230; // установленная температура
int tempmin = 200; // минимальная температура
int tempmax = 480; // максимальная температура
int tempreal = 250; // переменная датчика текущей температуры
int temppwmmin = 40; // минимальное значение PWM нагревателя
int temppwmmax = 180; // максимальное значение PWM нагревателя
int temppwmreal = 0; // текущее значение PWM нагревателя
int airreal = 100; // стартовое значение PWM вентилятора(если нужно)
int temperror = -50; // разница температур(установленная — реальная)
int temprazn = 0; // переменная разницы температуры(установленная — текущая)
void setup(){
if(indicator == 0){ //Если вначале был выбран общий Катод
for(int i=0; i<10;i++){
digits[i] = ~ digits[i];
}
}
pinMode(pinpwm,OUTPUT); // Порт нагрузки(паяльника) настраиваем на выход
analogWrite(pinpwm, temppwmreal); //Вывод шим в нагрузку паяльника (выводим 0 — старт с выключеным паяльником- пока не опредилим состояние температуры)
// ————————————————— не изменять, это для Сегментов ————————————————
DDRD = B11111111;
for (int y=0;y<max_digits;y++)
{
pinMode(digit_common_pins[y],OUTPUT);
digitalWrite(digit_common_pins[y], LOW);
}
// ————————————————— не изменять, это для Сегментов ————————————————
}
void loop() {
show(increment); // Вывести значение переменной на экран(LED)
if (tempreal < tempust ){ // Если температура паяльника ниже установленной температуры то:
if ((tempust — tempreal) < 16 & (tempust — tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника,
// Если разница меньше 10 градусов то
{
temppwmreal = 99; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева
}
else if ((tempust — tempreal) < 7 & (tempust — tempreal) > 3)
{
temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева
}
else if ((tempust — tempreal) < 4 ) { temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) — таким образом мы убираем инерцию перегрева } else { temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры } analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } else { //Иначе (если температура паяльника равняется или выше установленной) temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) — таким образом мы отключаем паяльник analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности } if(millis() — actual_count_delay > count_delay) // это для сегментов
{
actual_count_delay = millis();
// Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчк не будет тормозить вывод на сегменты)
tempreal = analogRead(0);// считываем текущую температуру
tempreal=map(tempreal,-50,700,0,500); // нужно вычислить
increment=tempreal;
//———————————————————- Кнопки ————————————————————————-
if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5
{
if( tempust <= tempmin || (tempust-5) <= tempmin ) { tempust= tempmin; increment = tempust; } else { tempust=tempust-5; increment = tempust; show(increment); // Вывести значение переменной на экран(LED) } } else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 ) // Если нажата вверх кнопка то повысить температуру на 5 { tempust=tempust+5; if( tempust >=tempmax)
{
tempust= tempmax;
}
increment = tempust;
show(increment); // Вывести значение переменной на экран(LED)
}
}
}
void show(int value) { //——————————- подпрограмма для вывода на сегменты — лучше не изменять ———————————————
int digits_array[]={};
int y=0;
boolean empty_most_significant = true;
if(millis() — actual_refresh_delay >= refresh_delay)
{
for (int z=max_digits-1;z>=0;z—)
{
digits_array[z] = value / pow(10,z); //rounding down by converting from float to int
if(digits_array[z] != 0 ) empty_most_significant = false; // DON’T SHOW LEADING ZEROS
value = value — digits_array[z] * pow(10,z);
if(z==current_digit)
{
if(!empty_most_significant || z==0){ // DON’T SHOW LEADING ZEROS EXCEPT FOR THE LEAST SIGNIFICANT
PORTD = digits[digits_array[z]];
}
else
{
if(indicator == 0){ //Если вначале был выбран общий Катод
PORTD = B00000000;
}
else{
PORTD = B11111111;
}
}
if(indicator == 0){
digitalWrite(digit_common_pins[z], LOW);
}
else{
digitalWrite(digit_common_pins[z], HIGH);
}
}
else{
if(indicator == 0){
digitalWrite(digit_common_pins[z], HIGH);
}
else{
digitalWrite(digit_common_pins[z], LOW);
}
}
}
current_digit—;
if(current_digit < 0)
{
current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS
}
actual_refresh_delay = millis();
}
}
И обновленный скетч от первоисточника:
/*
Arduino IDE 1.5.4
Паяльник на Arduino Pro Mini v0.4
Alex link
http://www.youtube.com/c/AlexLink-Free
http://vk.com/linklife
http://www.facebook.com/groups/Arduno.life/
// Пины еодключения индикаторов
ANODES(CATHODES):
D1 - a
D2 - b
D4 - c
D6 - d
D7 - e
D5 - f
D3 - g
D0 - dp (digital point) Я НЕ подключал - резерв... индикатора :)))
a1
********
* *
f * * b2
5 * g3 *
********
* *
e * * c4
7 * d6 *
******** # dp0
CATHODES(ANODES):
D16 - cathode 3
D15 - cathode 2
D12 - cathode 1
*/
// ------------------------------------------------------------------------------------------------
int indicator = 1; // 0 = Катод 1 = Анод Выбрать под Ваш индикатор !!!!
byte digits[] = {
B00001001,B11101011,B00110001,B10100001,B11000011,B10000101,B00000101,B11101001,B00000001,B10000001};
int digit_common_pins[]={16,15,12}; // пины для разрядов сегментов(при изменении убедитесь что Ваш порт не используется)
int refresh_delay = 5;
int count_delay = 1000; // COUNTING SECONDS IF count_delay = 1000
long actual_count_delay = 0;
long actual_refresh_delay = 0;
int increment = 0; //Стартовое значение на сегментах
int max_digits =3; // Кол-во знакомест
int current_digit=max_digits-1;
int increment_max = pow(10,max_digits);
// -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
//--------------------- переменные паяльника -----------------------------
int knopka = 3; //Пин кнопок
int tin = 0; // Пин Датчика температуры IN Analog через LM358N
int pinpwm = 11;// порт нагревательного элемента(через транзистор)PWM
int tempust = 230; // установленная температура
int tempmin = 200; // минимальная температура
int tempmax = 480; // максимальная температура
int tempreal = 250; // переменная датчика текущей температуры
int temppwmmin = 40; // минимальное значение PWM нагревателя
int temppwmmax = 180; // максимальное значение PWM нагревателя
int temppwmreal = 0; // текущее значение PWM нагревателя
int airreal = 100; // стартовое значение PWM вентилятора(если нужно)
int temperror = -50; // разница температур(установленная - реальная)
int temprazn = 0; // переменная разницы температуры(установленная - текущая)
void setup(){
if(indicator == 0){ //Если вначале был выбран общий Катод
for(int i=0; i<10;i++){
digits[i] = ~ digits[i];
}
}
pinMode(pinpwm,OUTPUT); // Порт нагрузки(паяльника) настраиваем на выход
analogWrite(pinpwm, temppwmreal); //Вывод шим в нагрузку паяльника (выводим 0 - старт с выключеным паяльником- пока не опредилим состояние температуры)
// -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
DDRD = B11111111;
for (int y=0;y<max_digits;y++)
{
pinMode(digit_common_pins[y],OUTPUT);
digitalWrite(digit_common_pins[y], LOW);
}
// -------------------------------------------------- не изменять, это для Сегментов -----------------------------------------------
}
void loop() {
show(increment); // Вывести значение переменной на экран(LED)
if (tempreal < tempust ){ // Если температура паяльника ниже установленной температуры то:
if ((tempust - tempreal) < 16 & (tempust - tempreal) > 6 ) // Проверяем разницу между у становленной температурой и текущей паяльника,
// Если разница меньше 10 градусов то
{
temppwmreal = 99; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
}
else if ((tempust - tempreal) < 7 & (tempust - tempreal) > 3)
{
temppwmreal = 80; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
}
else if ((tempust - tempreal) < 4 )
{
temppwmreal = 45; // Понижаем мощность нагрева (шим 0-255 мы делаем 99) - таким образом мы убираем инерцию перегрева
}
else {
temppwmreal = 230; // Иначе Подымаем мощность нагрева(шим 0-255 мы делаем 230) на максимум для быстрого нагрева до нужной температуры
}
analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности
}
else { //Иначе (если температура паяльника равняется или выше установленной)
temppwmreal = 0; // Выключаем мощность нагрева (шим 0-255 мы делаем 0) - таким образом мы отключаем паяльник
analogWrite(pinpwm, temppwmreal); //Вывод в шим порт (на транзистор) значение мощности
}
if(millis() - actual_count_delay > count_delay) // это для сегментов
{
actual_count_delay = millis();
// Здесь мы пишем нашу прогу по считыванию состояния кнопок (это место в счетчк не будет тормозить вывод на сегменты)
tempreal = analogRead(0);// считываем текущую температуру
tempreal=map(tempreal,-50,700,0,500); // нужно вычислить
increment=tempreal;
//---------------------------------------------------------- Кнопки -------------------------------------------------------------------------
if (analogRead(knopka) == 0) // Если нажата вниз кнопка то понизить температуру на 5
{
if( tempust <= tempmin || (tempust-5) <= tempmin )
{
tempust= tempmin;
increment = tempust;
}
else {
tempust=tempust-5;
increment = tempust;
show(increment); // Вывести значение переменной на экран(LED)
}
}
else if (analogRead(knopka) > 500 && analogRead(knopka) < 524 ) // Если нажата вверх кнопка то повысить температуру на 5
{
tempust=tempust+5;
if( tempust >=tempmax)
{
tempust= tempmax;
}
increment = tempust;
show(increment); // Вывести значение переменной на экран(LED)
}
}
}
void show(int value) { //------------------------------- подпрограмма для вывода на сегменты - лучше не изменять ---------------------------------------------
int digits_array[]={};
int y=0;
boolean empty_most_significant = true;
if(millis() - actual_refresh_delay >= refresh_delay)
{
for (int z=max_digits-1;z>=0;z--)
{
digits_array[z] = value / pow(10,z); //rounding down by converting from float to int
if(digits_array[z] != 0 ) empty_most_significant = false; // DON'T SHOW LEADING ZEROS
value = value - digits_array[z] * pow(10,z);
if(z==current_digit)
{
if(!empty_most_significant || z==0){ // DON'T SHOW LEADING ZEROS EXCEPT FOR THE LEAST SIGNIFICANT
PORTD = digits[digits_array[z]];
}
else
{
if(indicator == 0){ //Если вначале был выбран общий Катод
PORTD = B00000000;
}
else{
PORTD = B11111111;
}
}
if(indicator == 0){
digitalWrite(digit_common_pins[z], LOW);
}
else{
digitalWrite(digit_common_pins[z], HIGH);
}
}
else{
if(indicator == 0){
digitalWrite(digit_common_pins[z], HIGH);
}
else{
digitalWrite(digit_common_pins[z], LOW);
}
}
}
current_digit--;
if(current_digit < 0)
{
current_digit= max_digits; // NEED AN EXTRA REFRESH CYCLE TO CLEAR ALL DIGITS
}
actual_refresh_delay = millis();
}
}
Видео работы:
Если есть вопросы, задавайте. По возможности буду отвечать.
Самые обсуждаемые обзоры
+80 |
4450
153
|
+63 |
4636
75
|
Я в свое время пытался управлять нагревателем подобным образом. Но выходило очень не очень ))) Пока не перешел на пид. 3 попытки калибровки и шикарнейше. Да стало на 2-3% дольше выходить на температуру, но именно выйдя на нее не было проблем с пролетами и просадками.
Или кондер из матринки выпаять…
Сильно прыгает температура: прислонил — вниз, начинает греть — вверх, ветер дунул — в неизвестную сторону…
А мое право сделать свой выбор, и при этом не проводить анализа множества сценариев использования паяльника с привлечением теории систем автоматического регулирования, в которых я не силен.
Мне вполне хватает впечатлений.
Разницу между термодатчиком (любого типа) непосредственно в жале и в нагревателе, который практически всегда отделен от жала воздушным зазором мне вообще сказать нечего — тут у меня точно знаний не хватит, что бы все это теоретически посчитать.
А практика Вам не интересна, как я вижу…
Я задал вопрос который мне интересен, вдруг я не прав и пид тут действительно нужен.
Вы ведь просили теорию? А теории САР я не силен, мягко говоря.
То, что жало Т12 в отличии от жала 900М, не прилипает к плате при попытке выпаять что то массивное и почему это происходит, знают, по моему, все — кто по собственному опыту, кто сначала по прочитанному в инете, а потом уже по собственному опыту…
Но это практика, а объяснить теоретически я не могу.
Только на пальцах — но снимать видео мне как то влом…
Вот и будет ПИД поддерживать правильную температуру на термодатчики, не обращая внимания на температуру точки пайки — нет у него про это сведений.
900М, в китайском варианте, когда воздушный зазор по миллиметру — хоть какой ПИД строй, ничего не поможет.
В этом случае ПСН-40 и вправду получше будет…
Правда, педагог из меня так себе, и теоретик не очень…
надо было учиться читать как то не так?
А что
я с вами согласен.
Сначала научитесь внятно излагать мысли, потом, глядишь, и думать начнете…
Что из этого вы не поняли?)))
И если вы все таки не поняли вопроса, то зачем что-то отвечаете то?)))))) Могли бы уточнить непонятные моменты, а вы сразу отвечать))) а потом начинаете жаловаться))
ПИД:
А дальше думайте сами, что произойдет при дополнительном внешнем воздействии, в данном случае — большом теплосъеме с рабочей части жала паяльника, при большом тепловом сопротивлении от термодатчика до этой рабочей части паяльника.
Тут даже думать особо не надо…
А читать лекцию по теории САР я не способен — мне ее не особо и давали, так, зачатки.
Да и слишком давно это было…
Слово «никак» может быть ответом на вопрос «как»))) В моем предыдущем сообщении такого вопроса нет)))
Второе у вас получается, первое — не очень…
разве что пид чуть раньше греть начнет при остывании, за счёт интегрирования
но для паяльника пропорциональный регулятор совершенно достаточен, пользователю от пид никакой радости не будет, кроме фапа на точность до градуса
Если сравнить пид и просто тупое сравнение с чуть завышенной уставкой? Не будет ли тут такая же скорость?
если без шим, то п в пид это тупое сравнение и есть и его доля настраивается от 0 до 100%
Это много?
Уже довольно продолжительное время испотльзую паяльник с ПИД-регулятором. Работать паяльником без него противно.
По поводу быстрого нагрева — у меня паяльник выходит на режим около 7 секунд, с перелетом в 15/20 градусов. Это достаточно быстро?
Допустим для жала которое нагревается очень быстро и для массивного — чтобы все максимально быстро нагревалось и не перескакивало нужную температуру нужны свои пиды
так и реализовано в контроллерах на STM32
Это как раз и дает приемлемую точность измерения и поддержания заданной температуры
Нефтяные компании тоже непонятно зачем кучу бабла вбухивают на настройку техпроцесса, в виде как раз этих ПИД коэффициентов для работы клапанов. А тут оказывается всё само подстраивается)))) Надо же)))
Нагрев жала можно включать и отключать сотни раз в секунду. Нагрев процесс инертный, он сам по себе сглаживает температуру. Так какой тут смысл в пиде? Это же не клапан и не задвижка которая не может сотни раз в секунду понемногу двигаться.
Да и в работе удобно, ПИД будет всеми правдами удерживать температуру, вне зависимости от того, паяете вы 0603 резистор или тот же конденсатор на 16-слойной материнке на огромном земляном полигоне.
Смысл инструмента (особенно фена) не в том чтобы максимально выйти на заданную температуру, а сделать это максимально быстро не вылетая максимально точно за установленные пределы.
Еще более точнее. Выпаять я могу много что и много от куда даже 20Вт паяльником. но что при этом будет во круг и с тем что я выпаиваю…
А вот про достоинства ПИД применительно к 900-й серии не надо рассказывать сказки. Тем более что речь идет вообще о нихромовом нагревателе с термопарой. Никакой алгоритм не позволит установить и поддерживать температуру на кончике жала. Потому что есть тепловое сопротивление между нагревателем и кончиком (тем более что основная масса ширпотребных жал — просто хлам). Его можно учесть в статике, но никак нельзя в процессе работы. Никак, просто в принципе (нет датчика в точке пайки). С этим столкнулся, например, автор DSS-90 Леонид Ридико (см. на том же Радиокоте). Да, ПИД. Да, идеально выходит на режим и поддерживает. На сенсоре. А на кончике жала при работе — хоть застрелитесь, не будет. Оно и с Т12-то (по крайней мере китайскими клонами) идеально не получается, а на нихромовой подделке под 900 — и не мечтайте. И даже на керамике не получится.
С феном — другая песня. Опять же можно быстро подогнать и идеально удержать температуру на термопаре, но там, где поток соприкасается с нагреваемым объектом картина будет совсем иной.
А, да, и для теоретиков — Вы с ума сошли, если предполагаете паять компонент с предельной температурой 200 градусов ПОС-61. У которого рабочая температура примерно 250 (никто не паяет при температуре начала плавления припоя).
Простейший пример.
Ну при 180 я не паяю, но 230 легко.
Элементрано Ватсон.Или таки Карл?
Даём 200-300% мощности и набираем вдвое быстрее.Главное вовремя остановится, дать по тормозам а потом реверс турбины, это и делает ПИД.ЛОЛ
Не путать с массой меди жала и теплоёмкостью.
Не зависимо от инертности жала.
КО- чем менее инертно жало и термодатчик тем быстрее будет закачка и комфортнее пайка.
А вообще объяснять школоло без того что прежде они выучат что такое теплопроводность, темлоёмкость и ПИД-БЕСПОЛЕЗНО.
Запихнуть горсть компонентов в распаечную коробку?
Даже не потрудились показать людям что отображает 1602.
Бесполезная статья с тэгом «сделай сам».
ИМХО.
2. Если там только вывод на экран поправлен, ну глупо же скрывать. Тем более что был бесплатно использован чужой труд.
2- глобально — да, но ещё сделано много мелочей, которые почти полностью меняют скетч(нетронутым остался принцип ШИМ)
И что-то не соображу — у оригинальной 936 ведь резистивный сенсор, а на схеме явно под термопару, т.е. под дешевую китайскую подделку с нихромовым нагревателем?
Да, я давно заказывал прозапас на свой Хакко паяльник, но мне прислали с термопарой… забыл указать в обзоре, исправлюсь
А можно ссылку на грамотную реализацию? Спасибо.
достаточно 8-и состояний (4-е инкремент, 4-е декремент). засада в том analogRead() у arduino фреймворка для AVR настолько ме-е-дленый, что не могу прочитать оба сигнала по одному прерыванию. на arduino esp8266 и arduino STM32 такой проблемы нет — работает как часики. даже приходится еще 0.1мФ допаивать — процы такие быстрые, что все равно умудряются дребезг нахватать.
функцию readAB() вешаю на обработчик прерывания по — «CHANGE»
А таймеры — не важно как настраиваются, все равно они почти всегда используются, а подсунуть в таймер библиотечную функцию чтения энкодера не сложно
Когда ресурсов много, то каждый сможет сделать шедевр. Но когда ресурсы ограничены, то приходится идти по сокращённому варианту, чем-то жертвовать. Время — это, к стати, тоже ресурс.
У одних изделий основное предназначение выглядеть красиво. Бутафория не обязана работать. Другие — созданы чтобы надёжно работать и обеспечивать вполне конкретную функциональность. И совсем не важно, как они выглядят.
Это не важно как покрашена лопата, главное в том, что она позволяет (не ломаясь) вскопать огород.
Говорят, ездит…
Отличная патина)))
Еще раз. Следите за руками… «при НЕДОСТАТКЕ РЕССУРСОВ...»
А Вы представьте себе ситуацию, когда жахнул реактор Чернобыльской АЭС, а других средств передвижения у вас нет. У Вас нет ни времени, ни денег, чтобы найти другой автомобиль. А этот — как Вы говорите — способен выполнять свою основную задачу — надёжно перемещать вас в пространстве. И я не думаю, что Вы будете надувать губы, чтобы покинуть зону поражения только на комфортабельном авто.
А если Вы считаете, что эта ржавая халабуда не способна надёжно выполнять свою задачу (ехать не ломаясь и везти груз), то зачем Вы её тогда привели в качестве антипримера?
При совсем уж недостатке ресурсов идут в фикспрайс и покупают десяток паяльников.
На пяток паек их должно хватить…
а это плохо?)
Читайте кнопки по таймеру и никаких проблем не будет.
а если на ближайшие пару лет у вас только 20мач электричества?
и прерывание можно выключить на время дребезга, ещё можно только флаг в нём ставить, зачем себя ограничивать только таймером, его даже просто может не быть в распоряжении
костыль тоже словечко от тех же хабравчан, любое решение можно костылем обозвать
Нарушать правила — можно и даже нужно, но только в том случае, когда есть понимание того, что делается и для чего. А с пониманием у ардуино-коммунити все очень и очень плохо.
Мотив может быть только один — я хочу на основе этого кода сделать коммерческий продукт и зарабатывать деньги.
Вы хотите сделать партию таких паяльников и продавать? Или может продаете эту модифицированную прошивку?
Почему не использовали вместо lm платку mAX6675 с компенсацией холодного спая термопары? Были бы точнее показания температуры.
https://aliexpress.com/item/item/5Set-lot-ENC28J60-Ethernet-LAN-Network-Module-Schematic-51-AVR-LPC-for-arduino-SD-Card-Module/1607942167.html
Вместо вашего паяльника взять этот
https://aliexpress.com/item/item/SHEVCHENKO-T12-950-Handle-Digital-Soldering-Station-FX-9501-Handle-Soldering-Iron-For-HAKKO-912-Handle/32835065313.html
Этот маленький корпус
https://aliexpress.com/item/item/Electric-Unit-Digital-Soldering-Iron-Station-Temperature-Controller-Kits-for-HAKKO-T12-Handle-DIY-kits-w/32740527077.html
Этот контролер
https://aliexpress.com/item/item/-/32836534258.html
10 секунд нагрева до 300 градусов при 24 вольтах питания
Возможно ваш вариант и лучше, но на тот момент, когда я собирал свой, таких недорогих контроллеров еще не существовало.
Не, это конечно дело автора, но DIY это не "почерпни часть знаний, а дальше уже сам". Зачастую это "Повтори за мной если хочешь". В этом ценность данного раздела. Если есть руки ты повторишь, если не нравится — переделаешь по-своему.
нормальной схемы нет, прошивка отсутствует
А на самом деле оказалось пришивку за вас допиливал другой человек…
А элементы схемы срисованы с подобных разработок с кота и паяльника. И что тут вашего???
Фото-хваст — типа «я смог!»
взяли бы IRLZ44N у него Rds(on) = 22mOhm при Vgs = 4.5v
подробности — elchupanibrei.livejournal.com/40487.html