nettips.ru

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

На главную Cisco Systems VoIP маршрутизатор Беларусь Asterisk коммутатор Arduino Nateks Alcatel MTS Gigaset Velcom ZTE Grandstream Android Huawei админы шутят о сайте Zelax Allied Telesis D-Link Штрихкоды HP
Телефонные номера доступа sip операторов Телефонные коды городов и стран мира.

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

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

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

Предистория

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

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

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

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

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

soldering iron arduino

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

soldering iron arduino

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

soldering iron arduino

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

soldering iron arduino

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

soldering iron arduino

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

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

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

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

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

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

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

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

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

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

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

}

void loop()
{

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

  delay(60);
}

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Ваши отзывы и предложения по работе сайта направляйте на форму обратной связи.

Яндекс.Метрика