Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Controlador DIY para soldador 862D+ — Precisión y fiabilidad

Componentes y suministros

Componente Cantidad Notas
Arduino Nano R3 1
Diodo flyback normal 1
MOSFET canal N IRF540N 1
Regulador lineal 5 V 1
Resistencia 330 Ω 1
Pin headers (macho) 2
Pantalla OLED 0,96" 1

Herramientas necesarias

Sobre el proyecto

Actualización (21/10/2019): Gran actualización del código. Lee abajo, algunas cosas cambiaron.

Mi soldador 862D+ se rompió; en lugar de comprar uno nuevo, cogí otro y lo arreglé. Lo difícil: no había solución en línea. La PCB estaba rota porque tras cambiar el soldador seguía diciendo S-E (sensor error).

Controlador DIY para soldador 862D+ — Precisión y fiabilidad

Decidí crear mi propio circuito controlador y meterlo dentro. Requería un segundo transformador, pero al ser barato había espacio de sobra.

Controlador DIY para soldador 862D+ — Precisión y fiabilidad
Controlador DIY para soldador 862D+ — Precisión y fiabilidad

Puede que no luzca bonito, pero funciona de maravilla. Como extra, quité el botón de encendido del soldador y lo puse entre 5 V y el Arduino.

Consejos de construcción

Ahora conoces lo básico de tu soldador. Esta es una alternativa barata a comprar uno de calidad. Aunque hay soldadores mejores, este es muy barato y DIY.

Código

Control Code (C/C++)

Pégalo en Arduino y sube. Solo funciona con el circuito indicado.

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  // descomenta para ajustar temp por serie
    inputString = "";
    stringComplete = false;
  }
  rapid();
  pid();
}

void rapid() {
  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() {
  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() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

The Code (C/C++) — Con OLED

Pégalo en el editor y sube. Solo funciona con el esquema diseñado.

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#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);
  // Promediado de temperatura
  temp2 = temp;
  delay(50);
  temp = analogRead(0);
  temp = temp + temp2;
  temp = temp / 2;
  zeroscale();  // comprobación soldador desconectado
  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() {
  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 Updated 10/21/2019 (C/C++) — Versión final

Pégalo en IDE y sube. Solo funciona con el esquema.

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#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);
  // Promediado temperatura
  temp2 = temp;
  delay(50);
  temp = analogRead(0);
  temp = temp + temp2;
  temp = temp / 2;
  zeroscale();
  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() {
  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);
  }
}

Esquemáticos

Usa este esquema para crear el circuito del soldador:

Controlador DIY para soldador 862D+ — Precisión y fiabilidad

Proceso de manufactura

  1. Sistema de Sensor de Temperatura Multiposición para Integración en Hogar Inteligente
  2. Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
  3. MotionSense: Detección inteligente de intrusos con Arduino y ESP8266
  4. Prevención de Incendios en Impresoras 3D: Sistema de Seguridad con Sensor Inteligente
  5. Integración MIDI para Órganos Digitales: Componentes y Guía de Configuración
  6. Levitación magnética repulsiva con Arduino: Circuito simple y guía DIY
  7. Robot pinza controlado remotamente para manipulación de precisión
  8. Laboratorio avanzado de microcontroladores: ESP32, Arduino, PIC y módulos de sensores
  9. Globo POV DIY: Arte LED con Persistencia de Visión y Arduino Mega
  10. Sistema Solar de Seguimiento Solar (Dual Axis) con Arduino UNO – Hazlo Tú Mismo
  11. CoroFence: Detector Térmico Avanzado con Sensor PIR e Integración IoT