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
- Fer à souder (générique)
- Foret 8 mm avec perceuse
À 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.
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.
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
- Tous les composants peuvent être achetés maintenant. LCSC est un site d'électronique en gros. L'expédition est chère vers l'Amérique, mais les composants sont ridiculement bon marché. Exemple : MOSFET sur Amazon 6 $, mais sur LCSC 32 centimes. Cependant, les résistances doivent être achetées en gros. Pourtant, 50 résistances coûtent littéralement 0,84 centime.
- ASSUREZ-VOUS DE BLINDER LES LONGS FILS DE DONNÉES avec du papier d'aluminium mis à la terre ou autre chose. Le fil I2C de l'écran par exemple.
- Dans le code : 1023 = le plus froid, 0 = lave. Changez
settempselon votre désir. Environ 600 typiquement. - Le contrôleur peut détecter si votre fer est connecté ou cassé. Si le fer est déconnecté, l'Arduino mettra l'entrée analogique à zéro. Si le fer chauffait correctement avant mais ne le fait plus : déconnectez le fer, attendez qu'il affiche « branchez le fer », puis c'est bon. (C'est un problème que j'ai rencontré.)
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)
- Le Code (avec écran OLED)
- Code mis à jour 21/10/2019 (version finale)
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 :
Processus de fabrication
- Système de Capteur de Température Multi-Position pour Intégration Domotique
- Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
- MotionSense : Détection d'intrusion intelligente avec Arduino et ESP8266
- Prévention incendie imprimante 3D : Système de sécurité à capteur intelligent
- Intégration MIDI pour Orgues Numériques : Composants et Guide de Configuration
- Lévitation magnétique répulsive avec Arduino : circuit simple et guide DIY
- Robot préhenseur télécommandé avancé pour manipulation de précision
- Laboratoire avancé de microcontrôleurs : ESP32, Arduino, PIC et modules capteurs
- CoroFence : Détecteur Thermique Avancé PIR + Capteur Grid-EYE & IoT