DIY Soldeerbout-controller voor 862D+ — Precisie & Betrouwbaarheid
Onderdelen en benodigdheden
| Arduino Nano R3 | × | 1 |
| Normale Flyback-diode | × | 1 |
| IRF540N N-kanaal MOSFET | × | 1 |
| 5V lineaire regulator | × | 1 |
| Weerstand 330 ohm | × | 1 |
| Pin headers (mannetjes) | × | 2 |
| .96 inch OLED | × | 1 |
Nodige gereedschappen en machines
- Solderbout (algemeen)
- 8mm boorbout / met boormachine
Over dit project
Update (21-10-2019): Grote update van de code. Lees ook hieronder. Een beetje is veranderd.
Mijn 862D+ soldeerbout was kapot, dus in plaats van een nieuwe te kopen, nam ik een tweede bout en repareerde die. Het moeilijkste was dat er geen oplossing online te vinden was. De printplaat was kapot omdat na het vervangen van de bout nog steeds "S-E" of sensor error aangegeven werd.
Dus besloot ik mijn eigen controllercircuit te maken en in de behuizing te stoppen. Het vereiste een tweede transformator, maar aangezien de behuizing goedkoop was, was er genoeg ruimte binnenin.
Het ziet er misschien niet mooi uit, maar het werkt als een tierelier. Als bonus heb ik de aan/uit-knop van de soldeerbout verwijderd en tussen de 5V en de Arduino geplaatst.
Bouwtips:
- Alle onderdelen zijn nu te koop. LCSC is een bulk-electronica-site. Verzendkosten zijn duur naar Amerika, maar de componenten zijn ridiculoos goedkoop.
- Bijv. MOSFET op Amazon $6, maar MOSFET op LCSC 32 cent. Echter, dingen als weerstanden moeten in bulk gekocht worden. Nog steeds, 50 weerstanden zijn letterlijk 0,84 cent.
- ZORG DAT JE LANGE DATADRaden AFSCHERMT met geaarde aluminiumfolie of iets anders. De I2C-schermdraad bijvoorbeeld.
In de code:
1023 = koudst, 0 = lava. Verander de settemp naar je wens. Ergens rond 600 typisch.
De soldeerbout-controller kan detecteren of je bout aangesloten of defect is. Als de soldeerbout losgekoppeld is, zet de Arduino de analoge ingang op nul. Als de soldeerbout vroeger goed opwarmde, maar nu niet meer: koppel de bout los, wacht tot "plug iron in" verschijnt, dan ben je goed. (Dit was een probleem voor mij)
Nu ken je de basis van je bout. Dit kan een goedkope alternatief zijn voor het kopen van een kwalitatieve soldeerbout. Hoewel er hogere kwaliteit bouten zijn, is deze heel goedkoop en DIY.
Code
- Control Code
- De Code
- Code Geüpdatet 21/10/2019
Control Code C/C++
Plak dit in de Arduino en upload. Werkt alleen met het meegeleverde circuit
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 //sets the set temp to the serial input
inputString = "";
stringComplete = false;
}
rapid();
pid();
}
void rapid() {
//Controls the soldering iron by rapidly heating it up in the beginning.
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() {
//Controls the soldering with slow active power heating.
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() {
//Serial communication that can be used to update settemp
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
De Code C/C++
Plak in editor en upload. Werkt alleen met ontworpen schema.
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(-1);
int settemp = 590; //manual set variables
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() {
//Controls the soldering iron by rapidly heating it up in the beginning.
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() {
//Controls the soldering with slow active power heating.
temp = analogRead(0);
//Temp averager
temp2 = temp;
delay(50);
temp = analogRead(0);
temp = temp + temp2;
temp = temp / 2;
zeroscale; //activate no soldering iron checker
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() {
//Updates Powerbar on OLED display
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() {//Update text on Oled display
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 soldering iron is unplugged, adjust the input pin value to zero it out
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 Geüpdatet 21/10/2019 C/C++
Plak in IDE en upload. Werkt alleen met schema.
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(-1);
int settemp = 590; //manual set variables
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() {
//Controls the soldering iron by rapidly heating it up in the beginning.
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() {
//Controls the soldering with slow active power heating.
temp = analogRead(0);
//Temp averager
temp2 = temp;
delay(50);
temp = analogRead(0);
temp = temp + temp2;
temp = temp / 2;
zeroscale(); //activate no soldering iron checker
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() {
//Updates Powerbar on OLED display
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() {//Update text on Oled display
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 soldering iron is unplugged, adjust the input pin value to zero it out
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);
}
}
Schema's
Gebruik dit schema om een circuit voor de bout te maken
Productieproces
- Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
- Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
- MotionSense: Slimme inbraakdetectie met Arduino en ESP8266
- 3D-Printer Brandpreventie: Slimme Sensor Veiligheidssysteem
- MIDI-integratie voor digitale orgels: Componenten & Handleiding
- Arduino-gebaseerde Afstotende Magnetische Levitatie: Eenvoudige Schakeling & DIY Handleiding
- Geavanceerde Remote-gecontrolleerde Gripper Robot voor Precisiehantering
- Geavanceerde Microcontroller Lab: ESP32, Arduino, PIC en Sensormodules
- DIY Persistence of Vision (POV) Globe: LED-kunst met Arduino Mega
- Zelfbouw Zonnetracker Zonne-energiesysteem met Arduino UNO
- CoroFence Thermische Detector: Geavanceerde PIR-sensor & IoT-integratie