Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Contrôleur DIY pour fer à souder 862D+ — Précision et fiabilité

Composants et fournitures

Arduino Nano R3 × 1
Diode de roue libre standard × 1
MOSFET canal N IRF540N × 1
Régulateur linéaire 5 V × 1
Résistance 330 Ω × 1
Connecteurs mâles (pin headers) × 2
Écran OLED 0,96 pouce × 1

Outils et machines nécessaires

À propos de ce projet

Mise à jour (21/10/2019) : Mise à jour majeure du code. Lisez ci-dessous, quelques choses ont changé.

Mon fer à souder 862D+ est tombé en panne, alors au lieu d'en acheter un nouveau, j'en ai pris un second et je l'ai réparé. La partie la plus difficile est qu'il n'y avait aucune solution ailleurs en ligne. Le circuit imprimé était cassé car après avoir remplacé le fer, il affichait encore « S-E » ou erreur de capteur.

Contrôleur DIY pour fer à souder 862D+ — Précision et fiabilité

J'ai donc décidé de créer mon propre circuit de contrôle et de l'insérer à l'intérieur. Cela a nécessité un second transformateur, mais comme c'est bon marché, il y avait beaucoup de place à l'intérieur.

Contrôleur DIY pour fer à souder 862D+ — Précision et fiabilité
Contrôleur DIY pour fer à souder 862D+ — Précision et fiabilité

Ce n'est peut-être pas beau, mais ça marche comme un charme. En bonus, j'ai retiré le bouton d'alimentation du fer à souder et l'ai mis entre le 5 V et l'Arduino.

Conseils de construction

Maintenant vous connaissez les bases de votre fer. Cela peut être une alternative bon marché à l'achat d'un fer à souder de qualité. Bien qu'il existe des fers de meilleure qualité, celui-ci est très bon marché et DIY.

Code

Code de contrôle (version initiale)

Collez ceci dans l'Arduino et téléversez. Ne fonctionne qu'avec le circuit fourni.

int output = 0;
int temp = 0;
int settemp = 630;
String inputString = "";
boolean rap = false;
boolean stringComplete = false;
int t = 0;

void setup() {
  Serial.begin(9600);
  inputString.reserve(200);
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);
}

void loop() {
  serialEvent();
  if (stringComplete) {
    Serial.println(inputString);
    t = inputString.toInt();
    // settemp = t // définit la température de consigne à l'entrée série
    inputString = "";
    stringComplete = false;
  }
  rapid();
  pid();
}

void rapid() {
  // Contrôle le fer en le chauffant rapidement au début.
  if (rap == false) {
    digitalWrite(6, HIGH);
    do {
      temp = analogRead(0);
      Serial.print("rapid");
      Serial.println(temp);
    } while (temp - settemp > 10);
    digitalWrite(6, LOW);
    rap = true;
  }
}

void pid() {
  // Contrôle le fer avec un chauffage lent et actif.
  temp = analogRead(0);
  output = temp - settemp;
  if (output < 0) output = 0;
  if (output > 255) output = 255;
  Serial.print("pid");
  Serial.print(temp);
  Serial.print(", ");
  Serial.println(output);
  analogWrite(6, output);
}

void serialEvent() {
  // Communication série pour mettre à jour settemp
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

Le Code (avec écran OLED)

Collez dans l'éditeur et téléversez. Ne fonctionne qu'avec le schéma conçu.

#include 
#include 
#include 
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(-1);

int settemp = 590; // variables de consigne manuelles
int output = 0;
int temp = 0;
String inputString = "";
boolean rap = false;
boolean stringComplete = false;
int t = 0;
int mappedpower = 0;
byte powermultiply = 0;
long counter = 0;
int temp2 = 0;
byte outputoffset = 0;
byte scaleread = 0;

void setup() {
  Serial.begin(9600);
  pinMode(12, OUTPUT);
  digitalWrite(12, LOW);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();
  rapid();
}

void loop() {
  pid();
  display.clearDisplay();
  updatebar();
  updatetext();
  display.display();
}

void rapid() {
  if (rap == false) {
    digitalWrite(12, HIGH);
    output = 255;
    do {
      temp = analogRead(0);
      Serial.print("rapid");
      Serial.println(temp);
      display.clearDisplay();
      updatebar();
      updatetext();
      display.display();
    } while (temp - settemp > 1);
    digitalWrite(12, LOW);
    rap = true;
  }
}

void pid() {
  temp = analogRead(0);
  // Moyenneur de température
  temp2 = temp;
  delay(50);
  temp = analogRead(0);
  temp = temp + temp2;
  temp = temp / 2;
  zeroscale; // active la vérification sans fer
  temp = temp + outputoffset;
  output = temp - settemp;
  output = output + powermultiply;
  output = output * 4;
  if (output < 0) output = 0;
  if (output > 255) output = 255;
  counter = counter + 1;
  if (counter > 10) {
    counter = 0;
    if (temp > settemp + 3) powermultiply = powermultiply + 1;
    if (temp < settemp - 3 && powermultiply > 0) powermultiply = powermultiply - 1;
  }
  Serial.print(powermultiply);
  Serial.print(", ");
  Serial.print(temp);
  Serial.print(", ");
  Serial.println(output);
  analogWrite(12, output);
}

void updatebar() {
  // Met à jour la barre de puissance sur l'OLED
  mappedpower = map(output, 0, 255, 0, 127) - 10;
  display.fillRect(0, 0, mappedpower, 8, WHITE);
  display.fillRoundRect(mappedpower - 5, 0, 20, 8, 3, WHITE);
}

void updatetext() {
  // Met à jour le texte sur l'OLED
  display.setCursor(0, 9);
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("Set Temp: ");
  display.print(settemp);
  display.setCursor(0, 20);
  display.print("Temp: ");
  display.print(temp);
}

void zeroscale() {
  // Si fer débranché, ajuste la valeur de la broche d'entrée pour la mettre à zéro
  if (output < 200) {
    display.clearDisplay();
    display.setCursor(0, 9);
    display.setTextColor(WHITE);
    display.setTextSize(1);
    display.print("No soldering iron, or defective");
    display.setCursor(0, 15);
    display.print("iron.");
    display.setCursor(0, 20);
    display.print("Testing in 5 seconds.");
    display.display();
    delay(5000);
    if (output < 200) {
      outputoffset = temp;
    }
    display.clearDisplay();
    display.setCursor(0, 9);
    display.setTextColor(WHITE);
    display.setTextSize(1);
    display.print("Output offset set.");
    display.setCursor(0, 20);
    display.print("Please plug in the iron.");
    display.display();
    do {
      scaleread = analogRead(0);
    } while (scaleread < 200);
  }
}

Code mis à jour 21/10/2019 (version finale)

Collez dans l'IDE et téléversez. Ne fonctionne qu'avec le schéma.

#include 
#include 
#include 
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(-1);

int settemp = 590;
int output = 0;
int temp = 0;
String inputString = "";
boolean rap = false;
boolean stringComplete = false;
int t = 0;
int mappedpower = 0;
byte powermultiply = 0;
long counter = 0;
int temp2 = 0;
byte outputoffset = 0;
byte scaleread = 0;

void setup() {
  Serial.begin(9600);
  pinMode(12, OUTPUT);
  digitalWrite(12, LOW);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();
  rapid();
}

void loop() {
  pid();
  display.clearDisplay();
  updatebar();
  updatetext();
  display.display();
}

void rapid() {
  if (rap == false) {
    digitalWrite(12, HIGH);
    output = 255;
    do {
      temp = analogRead(0);
      Serial.print("rapid");
      Serial.println(temp);
      display.clearDisplay();
      updatebar();
      updatetext();
      display.display();
    } while (temp - settemp > 1);
    digitalWrite(12, LOW);
    rap = true;
  }
}

void pid() {
  temp = analogRead(0);
  // Moyenneur de température
  temp2 = temp;
  delay(50);
  temp = analogRead(0);
  temp = temp + temp2;
  temp = temp / 2;
  zeroscale(); // active la vérification sans fer
  temp = temp + outputoffset;
  output = temp - settemp;
  output = output + powermultiply;
  output = output * 4;
  if (output < 0) output = 0;
  if (output > 255) output = 255;
  counter = counter + 1;
  if (counter > 10) {
    counter = 0;
    if (temp > settemp + 3) powermultiply = powermultiply + 1;
    if (temp < settemp - 3 && powermultiply > 0) powermultiply = powermultiply - 1;
  }
  Serial.print(powermultiply);
  Serial.print(", ");
  Serial.print(temp);
  Serial.print(", ");
  Serial.println(output);
  analogWrite(12, output);
}

void updatebar() {
  mappedpower = map(output, 0, 255, 0, 127) - 10;
  display.fillRect(0, 0, mappedpower, 8, WHITE);
  display.fillRoundRect(mappedpower - 5, 0, 20, 8, 3, WHITE);
}

void updatetext() {
  display.setCursor(0, 9);
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("Set Temp: ");
  display.print(settemp);
  display.setCursor(0, 20);
  display.print("Temp: ");
  display.print(temp);
}

void zeroscale() {
  // Si fer débranché, ajuste la valeur de la broche d'entrée pour la mettre à zéro
  if (temp < 200) {
    display.clearDisplay();
    display.setCursor(0, 20);
    display.setTextColor(WHITE);
    display.setTextSize(1);
    display.print("No soldering iron.");
    display.display();
    delay(10000);
    display.setCursor(0, 0);
    display.print("Testing in 5 seconds.");
    display.display();
    delay(5000);
    if (temp < 200) {
      outputoffset = temp;
    }
    display.clearDisplay();
    display.setCursor(0, 20);
    display.setTextColor(WHITE);
    display.setTextSize(1);
    display.print("Output offset set.");
    display.setCursor(0, 0);
    display.print("Connect the iron.");
    display.display();
    do {
      scaleread = analogRead(0);
    } while (scaleread < 200);
  }
}

Schémas

Utilisez ce schéma pour créer un circuit pour le fer :

Contrôleur DIY pour fer à souder 862D+ — Précision et fiabilité

Processus de fabrication

  1. Système de Capteur de Température Multi-Position pour Intégration Domotique
  2. Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
  3. MotionSense : Détection d'intrusion intelligente avec Arduino et ESP8266
  4. Prévention incendie imprimante 3D : Système de sécurité à capteur intelligent
  5. Intégration MIDI pour Orgues Numériques : Composants et Guide de Configuration
  6. Lévitation magnétique répulsive avec Arduino : circuit simple et guide DIY
  7. Robot préhenseur télécommandé avancé pour manipulation de précision
  8. Laboratoire avancé de microcontrôleurs : ESP32, Arduino, PIC et modules capteurs
  9. CoroFence : Détecteur Thermique Avancé PIR + Capteur Grid-EYE & IoT