DIY SMD - Lötstation Ersatz für (WELLER)

Meine läuft zwischenzeitlich auch. Hatte bloß einen stehenden Trimmer für Leiterplattenmontage zur Hand weshalb der kurz 'getrimmt' wurde. An dem 12V Eingang habe ich einen 220uF/25V Elko. Jetzt muss ich nur noch einen Halter für die Lötspitze (von einem Alu Kugelschreiber) inkl. Anschlusskabel machen und dem Teil ein Häuschen zimmern.
IMG_0118.JPG IMG_0119.JPG IMG_0120.JPG
Anschlusskabel sind bei mir steckbar mit PS-Serie Steckverbinder (https://www.pollin.de/search?query=ps serie&channel=pollin-de&sid=olzeFeQtHxprWwNMvvHJ5LlgoOTPFq) ausgeführt.

Damit das °-Zeichen an die richtige Stelle kommt (hinter die Temperatur und nicht wie auf den Bildern irgendwo davor) hab ich folgende Änderungen am Sketch gemacht:
Code:
#define VERSION "2.12" // Versionnummer hochziehen
...
void setup(void) {


	FastLED.addLeds<WS2812B, LED_PIN, GRB>(led, 1);
	FastLED.setBrightness(BRIGHTNESS);
	led[0] = CRGB::White;
	
	pinMode(BLpin, OUTPUT);
	analogWrite(BLpin, 0);
	
	pinMode(STANDBYin, INPUT);
	
	pinMode(PWMpin, OUTPUT);
	digitalWrite(PWMpin, LOW);
	setPwmFrequency(PWMpin, PWM_DIV);
	digitalWrite(PWMpin, LOW);
	
	tft.initR(INITR_BLACKTAB);

	tft.setRotation(0);	// 0 - Portrait, 1 - Lanscape
	tft.fillScreen(ST7735_BLACK);
	tft.setTextWrap(true);
	
	//Print station Logo
	tft.drawBitmap(2,1,stationLOGO1,124,47,ST7735_GREY);
	tft.drawBitmap(3,3,stationLOGO1,124,47,ST7735_YELLOW);		
	tft.drawBitmap(3,3,stationLOGO2,124,47,Color565(254,147,52));	
	tft.drawBitmap(3,3,stationLOGO3,124,47,Color565(255,78,0));
	 
	
	analogWrite(BLpin, DISPLAY_BL);
	
#if defined(INTRO)
	delay(250);
	
	//Print Iron
	tft.drawBitmap(15,50,iron,100,106,ST7735_GREY);
	tft.drawBitmap(17,52,iron,100,106,ST7735_YELLOW);
	delay(500);
	
	tft.setTextSize(2);
	tft.setTextColor(ST7735_GREY);
	tft.setCursor(70,130);
	tft.print(VERSION);
	
	tft.setTextSize(2);
	tft.setTextColor(ST7735_YELLOW);
	tft.setCursor(72,132);
	tft.print(VERSION);
	
	tft.setTextSize(1);
	tft.setTextColor(ST7735_GREY);
	tft.setCursor(97,0);
	tft.print("v");
	tft.print(VERSION);
	
	tft.setTextColor(ST7735_YELLOW);
  tft.setCursor(98,0);
	tft.print("v");
	tft.print(VERSION);
	
	delay(1500);
#endif
	
	tft.fillRect(0,47,128,125,ST7735_BLACK);
	tft.setTextColor(ST7735_WHITE);

	tft.setTextSize(1);
	tft.setCursor(1,84);
	tft.print("IST");
	
	tft.setTextSize(2);
	tft.setCursor(116,53); // zu weit hinten
	tft.print("o");
	
	tft.setTextSize(1);
	tft.setCursor(1,129);
	tft.print("SOLL");
	
	tft.setTextSize(2);
	tft.setCursor(116,98); // zu weit hinten
	tft.print("o");         
	
	tft.setCursor(80,144);
	tft.print("   %");    // Position und Zeichen
	
	tft.setTextSize(1);
	tft.setCursor(1,151);		//60
	tft.print("PWM");
	
	tft.setTextSize(2);

}
Sieht dann so aus
IMG_0121.JPG
 
Zuletzt bearbeitet:

Vectrix

Neuer Benutzer
Am Wochenende hatte ich etwas zeit, um meine SMD-Lötstaion zusammen zu bauen.
Hat bis auf dass, Reichelt mir 2,2Kohm statt 56Kohm Widerstände geliefert hat, ohne Probleme funktioniert.
Für meine "feste" Station konnte ich eine Defekte Weller Lötstation ergattern.
Für die ich eine neue Frontplatte gefräst habe.
Jetzt warte ich noch auf den Spannungsregler um die Station fertigzustellen.
Dann kann ich mit der Station meine Mobile Station zusammen Löten:D

Vielen dank an alle die das Projekt möglich gemacht haben!
 

Anhänge

schuerni

Erfahrener Benutzer
...sehr schön! [emoji3] Eigentlich müssten bald die Alu-Gehäuse reinflattern..... Gruß


Gesendet vom Fluxkompensator 0815v2.0 mit Tapatalk
 

Vectrix

Neuer Benutzer
Dein Alugriffel ist mal wirklich sehr schön, hast du da ne Quelle oder kannst du ein bisschen was dazu sagen?

Geflogen mit 800mW
Der Griffel ist einfach ein Stück Alu Rund, welches mithilfe einer Drehbank ein klein wenig veredelt wurde.:)
Die Klinkerbuchse habe ich auf den gleichen Durchmesser wie der Ansatz an der Spitze gedreht, damit die Spitze durch den Ansatz geführt wird und nicht durch die Klinkerbuchse. Ein kleiner Gewindestift sichert die Klinkerbuchse im Griff. Eine Zugentlastung gibt es nicht, das Kabel wird aber auf ca. 40mm geführt und "Knickt" dann erst ab. Bei dem Kabel handelt es sich um ein Weller Silikon Kabel (Ø6mm) welches bei der Defekten Station dabei war.
 

Anhänge

Vectrix

Neuer Benutzer
Ich habe die Station jetzt schon ein paar mal genutzt und bin wirklich Positiv überrascht.
Auch Größere Querschnitte kann man ohne Probleme Löten.
AWG16 mit einer RT8/2,2x0,4mm Spitze kein Problem.
Habe die Standby Leitung erst mal Provisorisch angebaut:D

Zusätzlich habe ich versucht die Spannungsanzeige zu Realisieren, Was leider nicht ganz so Funktioniert wie ich es mir vorstelle. An Sich funktioniert es, bis sich der Wert ändert. Der Wert wird im Display überschrieben und nicht ersetzt. Auch vor der Ausgabe die Zeile mit Leerzeichen zu überschreiben hat leider nichts gebracht.
Was mache ich falsch?

Ich kenne mich mit der Programmierung nicht sehr gut aus, zu diesem Punkt bin ich mit Hilfe vom Internet und Try and Error gekommen.


Meine Eingefügten Befehle befinden sich einmal am Anfang (Eingang Definiert) und am Anfang der schleife (Berechnung und ausgeben)
Code:
e //*******************************//
// Soldering Station
// Matthias Wagner
// www.k-pank.de/so
// [email protected]
// Modification for version 2.1 laout K.Schubert/T.Pfaff V1.0 and V1.1
// Mit Spannungsmessung auf A3
// Software version 2.12
//*******************************//
//Spannung messung Eingänge:
int analogInput = A3;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // Widerstandswert R1 (100K)
float R2 = 10000.0; // Widerstandswert R2 (10K)
int values = 0;
//Definition ende

#define __PROG_TYPES_COMPAT__ 
#include <FastLED.h>
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
//#include <SPI.h>

#include "iron.h"
#include "stationLOGO.h"

#define VERSION "2.12"		//Version der Steuerung
#define INTRO

#define sclk 	13		// Don't change
#define mosi 	11		// Don't change
#define cs_tft	10		// 10 OKKS

#define LED_PIN 6 // 6 OKKS
#define BRIGHTNESS 200

//Missing color in TFT lib
#define ST7735_GREY 0x632C
#define DISPLAY_BL  255 //Backlight 0 off, 255 maximum

#define dc   	9		// 9 OKKS
#define rst  	8		// 8 OKKS


#define STANDBYin A2 //A2 OKKS Sb auf A4 muss bei Jans Board V2.1 manuell gelinkt werden
#define POTI   	A1 // A1 OKKS
#define TEMPin 	A0 // orig A7, A6 OKKS
#define PWMpin 	3 // OKKS
#define BLpin		5 // OKKS

#define CNTRL_GAIN 10

#define DELAY_MAIN_LOOP 	10
#define DELAY_MEASURE 		50
//#define ADC_TO_TEMP_GAIN 	0.415
#define ADC_TO_TEMP_GAIN 	0.53 //Mit original Weller Station verglichen
#define ADC_TO_TEMP_OFFSET 25.0
#define STANDBY_TEMP			175



#define OVER_SHOT 			2
#define MAX_PWM_LOW			180
#define MAX_PWM_HI			210		//254
#define MAX_POTI				400		//400Grad C

#define PWM_DIV 1024						//default: 64   31250/64 = 2ms

Adafruit_ST7735 tft = Adafruit_ST7735(cs_tft, dc, rst);  // Invoke custom library
//Adafruit_ST7735 tft = Adafruit_ST7735(cs_tft, dc, mosi, sclk, rst);  // Invoke custom library

int pwm = 0; //pwm Out Val 0.. 255
int soll_temp = 300;
boolean standby_act = false;
CRGB led[1];

void setup(void) {




  FastLED.addLeds<WS2812B, LED_PIN, GRB>(led, 1);
  FastLED.setBrightness(BRIGHTNESS);
  led[0] = CRGB::White;
  
  pinMode(BLpin, OUTPUT);
  analogWrite(BLpin, 0);
  
  pinMode(STANDBYin, INPUT);
  
  pinMode(PWMpin, OUTPUT);
  digitalWrite(PWMpin, LOW);
  setPwmFrequency(PWMpin, PWM_DIV);
  digitalWrite(PWMpin, LOW);
  
  tft.initR(INITR_BLACKTAB);

  tft.setRotation(0); // 0 - Portrait, 1 - Lanscape
  tft.fillScreen(ST7735_BLACK);
  tft.setTextWrap(true);
  
  //Print station Logo
  tft.drawBitmap(2,1,stationLOGO1,124,47,ST7735_GREY);
  tft.drawBitmap(3,3,stationLOGO1,124,47,ST7735_YELLOW);    
  tft.drawBitmap(3,3,stationLOGO2,124,47,Color565(254,147,52)); 
  tft.drawBitmap(3,3,stationLOGO3,124,47,Color565(255,78,0));
  
  analogWrite(BLpin, DISPLAY_BL);
  
#if defined(INTRO)
  delay(250);
  
  //Print Iron
  tft.drawBitmap(15,50,iron,100,106,ST7735_GREY);
  tft.drawBitmap(17,52,iron,100,106,ST7735_YELLOW);
  delay(100);
  
  tft.setTextSize(2);
  tft.setTextColor(ST7735_GREY);
  tft.setCursor(70,130);
  tft.print(VERSION);
  
  tft.setTextSize(2);
  tft.setTextColor(ST7735_YELLOW);
  tft.setCursor(72,132);
  tft.print(VERSION);
  
  tft.setTextSize(1);
  tft.setTextColor(ST7735_GREY);
  tft.setCursor(97,0);
  tft.print("v");
  tft.print(VERSION);

  tft.setTextColor(ST7735_YELLOW);
  tft.setCursor(70,0);
  tft.print("x.x");
  
  tft.setTextColor(ST7735_YELLOW);
  tft.setCursor(98,0);
  tft.print("v");
  tft.print(VERSION);
  
  delay(1500);
#endif
  
  tft.fillRect(0,47,128,125,ST7735_BLACK);
  tft.setTextColor(ST7735_WHITE);

  tft.setTextSize(1);
  tft.setCursor(1,84);
  tft.print("IST");
  
  tft.setTextSize(2);
  tft.setCursor(116,53); // zu weit hinten
  tft.print("o");
  
  tft.setTextSize(1);
  tft.setCursor(1,129);
  tft.print("SOLL");
  
  tft.setTextSize(2);
  tft.setCursor(116,98); // zu weit hinten
  tft.print("o");         
  
  tft.setCursor(80,144);
  tft.print("   %");    // Position und Zeichen
  
  tft.setTextSize(1);
  tft.setCursor(1,151);   //60
  tft.print("PWM");
  
  tft.setTextSize(2);

}
void loop() {
    // Anfang
   // Werte am analogen Pin lesen
  values = analogRead(analogInput); //Messwerte am analogen Pin als "values" definieren
  vout = (values * 5.02) / 1024.0;  // Messwerte in Volt umrechnen = Spannung am Ausgang des
// Spannungsteilers mit Zuleitung zu Pin A3 
  vin = vout / (R2 / (R1 + R2));  // Berechnen, welche Spannung am Eingang des Spannungsteilers
   
   
  //Spannung anzeigen
   
tft.setTextSize(1);
tft.setTextColor(ST7735_YELLOW);
tft.setCursor(20,0);
tft.print(" ");
tft.setTextSize(1);
tft.setTextColor(ST7735_YELLOW);
tft.setCursor(20,0);
tft.print(vin);
tft.print("v");
delay(50);

  // ENDE 
	
	int actual_temperature = getTemperature();
	soll_temp = map(analogRead(POTI), 0, 1024, 0, MAX_POTI);
	
	//TODO: Put in Funktion
	tft.setCursor(2,55);
	if (digitalRead(STANDBYin) == true) {
		tft.setTextColor(ST7735_BLACK);
	} else {
		tft.setTextColor(ST7735_WHITE);
	}
	tft.print("SB");
	
	int soll_temp_tmp = soll_temp;
	
	if (digitalRead(STANDBYin) == false) {
		standby_act = true;
	} else {
		standby_act = false;
	}
	
	if (standby_act && (soll_temp >= STANDBY_TEMP )) {
		soll_temp_tmp = STANDBY_TEMP;
	}
	
	int diff = (soll_temp_tmp + OVER_SHOT)- actual_temperature;
	pwm = diff*CNTRL_GAIN;
	
	int MAX_PWM;

	//Set max heating Power 
	MAX_PWM = actual_temperature <= STANDBY_TEMP ? MAX_PWM_LOW : MAX_PWM_HI;
	
	//8 Bit Range
	pwm = pwm > MAX_PWM ? pwm = MAX_PWM : pwm < 0 ? pwm = 0 : pwm;
	
	//NOTfall sicherheit / Spitze nicht eingesteckt
	if (actual_temperature > 550){
		pwm = 0;
		actual_temperature = 0;
	}
	
	analogWrite(PWMpin, pwm);
	
	writeHEATING(soll_temp, actual_temperature, pwm);
 
	//update LED
	FastLED.show();
	
	delay(DELAY_MAIN_LOOP);		//wait for some time
}


int getTemperature()
{
	analogWrite(PWMpin, 0);		//switch off heater
	delay(DELAY_MEASURE);			//wait for some time (to get low pass filter in steady state)
	int adcValue = analogRead(TEMPin); // read the input on analog pin 7:
	Serial.print("ADC Value ");
	Serial.print(adcValue);
	analogWrite(PWMpin, pwm);	//switch heater back to last value
	return round(((float) adcValue)*ADC_TO_TEMP_GAIN+ADC_TO_TEMP_OFFSET); //apply linear conversion to actual temperature
}





void writeHEATING(int tempSOLL, int tempVAL, int pwmVAL){
	static int d_tempSOLL = 2;		//Tiefpass für Anzeige (Poti zittern)
	static int tempSOLL_OLD = 	10;
	static int tempVAL_OLD	= 	10;
	static int pwmVAL_OLD	= 	10;
  static int vin_OLD =      10;
	//TFT Anzeige
	
	pwmVAL = map(pwmVAL, 0, 254, 0, 100);

	tft.setTextSize(5);
	if (tempVAL_OLD != tempVAL){
		tft.setCursor(30,57);
		tft.setTextColor(ST7735_BLACK);
		//tft.print(tempSOLL_OLD);
		//erste Stelle unterschiedlich
		if ((tempVAL_OLD/100) != (tempVAL/100)){
			tft.print(tempVAL_OLD/100);
		} else {
			tft.print(" ");
		}
		
		if ( ((tempVAL_OLD/10)%10) != ((tempVAL/10)%10) ) {
			tft.print((tempVAL_OLD/10)%10 );
		} else {
			tft.print(" ");
		}
		
		if ( (tempVAL_OLD%10) != (tempVAL%10) ) {
			tft.print(tempVAL_OLD%10 );
		}
		
		tft.setCursor(30,57);
		tft.setTextColor(ST7735_WHITE);
		
		if (tempVAL < 100) {
			tft.print(" ");
		}
		if (tempVAL <10) {
			tft.print(" ");
		}
		
		int tempDIV = round(float(tempSOLL - tempVAL)*8.5);
		tempDIV = tempDIV > 254 ? tempDIV = 254 : tempDIV < 0 ? tempDIV = 0 : tempDIV;
		tft.setTextColor(Color565(tempDIV, 255-tempDIV, 0));
		led[0].r = tempDIV;
		led[0].g = 255-tempDIV;
		led[0].b = 0;
		if (standby_act) {
			tft.setTextColor(ST7735_CYAN);
			led[0].r = 0;
			led[0].g = 0;
			led[0].b = 255;
		}
		tft.print(tempVAL);
		
		tempVAL_OLD = tempVAL;
	}
 
	
	//if (tempSOLL_OLD != tempSOLL){
	if ((tempSOLL_OLD+d_tempSOLL < tempSOLL) || (tempSOLL_OLD-d_tempSOLL > tempSOLL)){
		tft.setCursor(30,102);
		tft.setTextColor(ST7735_BLACK);
		//tft.print(tempSOLL_OLD);
		//erste Stelle unterschiedlich
		if ((tempSOLL_OLD/100) != (tempSOLL/100)){
			tft.print(tempSOLL_OLD/100);
		} else {
			tft.print(" ");
		}
		
		if ( ((tempSOLL_OLD/10)%10) != ((tempSOLL/10)%10) ) {
			tft.print((tempSOLL_OLD/10)%10 );
		} else {
			tft.print(" ");
		}
		
		if ( (tempSOLL_OLD%10) != (tempSOLL%10) ) {
			tft.print(tempSOLL_OLD%10 );
		}
		
		//Neuen Wert in Weiß schreiben
		tft.setCursor(30,102);
		tft.setTextColor(ST7735_WHITE);
		if (tempSOLL < 100) {
			tft.print(" ");
		}
		if (tempSOLL <10) {
			tft.print(" ");
		}
		
		tft.print(tempSOLL);
		tempSOLL_OLD = tempSOLL;
		
	}
	
	
	tft.setTextSize(2);
	if (pwmVAL_OLD != pwmVAL){
		tft.setCursor(80,144);
		tft.setTextColor(ST7735_BLACK);
		//tft.print(tempSOLL_OLD);
		//erste stelle Unterscheidlich
		if ((pwmVAL_OLD/100) != (pwmVAL/100)){
			tft.print(pwmVAL_OLD/100);
		} else {
			tft.print(" ");
		}
		
		if ( ((pwmVAL_OLD/10)%10) != ((pwmVAL/10)%10) ) {
			tft.print((pwmVAL_OLD/10)%10 );
		} else {
			tft.print(" ");
		}
		
		if ( (pwmVAL_OLD%10) != (pwmVAL%10) ) {
			tft.print(pwmVAL_OLD%10 );
		}
		
		tft.setCursor(80,144);
		tft.setTextColor(ST7735_WHITE);
		if (pwmVAL < 100) {
			tft.print(" ");
		}
		if (pwmVAL <10) {
			tft.print(" ");
		}
		
		tft.print(pwmVAL);
		pwmVAL_OLD = pwmVAL;
		
	}
  
}

 


uint16_t Color565(uint8_t r, uint8_t g, uint8_t b) {
	return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}



void setPwmFrequency(int pin, int divisor) {
	byte mode;
	if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
		switch(divisor) {
			case 1: 		mode = 0x01; break;
			case 8: 		mode = 0x02; break;
			case 64: 		mode = 0x03; break;
			case 256: 	mode = 0x04; break;
			case 1024: 	mode = 0x05; break;
			default: return;
		}
		
		if(pin == 5 || pin == 6) {
			TCCR0B = TCCR0B & 0b11111000 | mode;
		} else {
			TCCR1B = TCCR1B & 0b11111000 | mode;
		}
	} else if(pin == 3 || pin == 11) {
		switch(divisor) {
			case 1: 		mode = 0x01; break;
			case 8: 		mode = 0x02; break;
			case 32: 		mode = 0x03; break;
			case 64: 		mode = 0x04; break;
			case 128: 	mode = 0x05; break;
			case 256: 	mode = 0x06; break;
			case 1024: 	mode = 0x07; break;
			default: return;
		}
		
		TCCR2B = TCCR2B & 0b11111000 | mode;
	  }
}
 

Anhänge

Zuletzt bearbeitet:

schuerni

Erfahrener Benutzer
Hallöle... Gehäuse gekommen, also hab ich mal gleich die CNC Maschine angeworfen.
uploadfromtaptalk1506424161490.jpg

gesendet von meinem Fluxkompensator-0815
 

schuerni

Erfahrener Benutzer
Hat echt gut geklappt.
uploadfromtaptalk1506424214221.jpg

Display hat auf Anhieb gepasst....
uploadfromtaptalk1506424272929.jpg

gesendet von meinem Fluxkompensator-0815
 
Zuletzt bearbeitet:

schuerni

Erfahrener Benutzer
Also noch die Löcher für Poti und
Kl.-Buchse gefräst, passt sauber in das kleine Gehäuse rein...
uploadfromtaptalk1506424387516.jpg



gesendet von meinem Fluxkompensator-0815
 

schuerni

Erfahrener Benutzer
Hab die Maschine mal laufen lassen.... wer also braucht bitte ne PN. Gruss
uploadfromtaptalk1506424485255.jpg

gesendet von meinem Fluxkompensator-0815
 

schuerni

Erfahrener Benutzer
Und hier zusammengeschraubt mit neuer Software die auch Spannungsüberwachung kann mit Verktorgrafik statt grossen Bildern....
😊😊🖒
uploadfromtaptalk1506424541173.jpg
uploadfromtaptalk1506424553274.jpg
uploadfromtaptalk1506424569026.jpg
uploadfromtaptalk1506424580429.jpg
uploadfromtaptalk1506424589788.jpg

gesendet von meinem Fluxkompensator-0815
 

schuerni

Erfahrener Benutzer
P.S. 72W sind Spitzenleistung der Lötspitze ohne irgendwas dazwischen direkt am 13.8V Netzteil, aber vorsicht! 2sec. Und kaputt ist Sie!
Wir passen das noch an auf "40W".

gesendet von meinem Fluxkompensator-0815
 

schuerni

Erfahrener Benutzer
Nee nix verpasst. Wenn, dann verdiene ich da ja nix dran weil quasi zum Selbstkostenpreis und n bissel was für die Maschine, Fräser, Kühlmittel... Ich will ja auch keine Forenregel brechen! Daher gerne per PN 😊🖒

gesendet von meinem Fluxkompensator-0815
 

Vectrix

Neuer Benutzer
Die Gehäuse sehen ja super aus, Perfekt für unterwegs und das dann mit einer Guten "Lötstation"/Spitze.
Ich musste mich oft genug unterwegs mit bescheidenen Lötspitzen herumschlagen.

Gruß Jörn
 

schuerni

Erfahrener Benutzer
Hallo.. die Grafiken sind fertig im Quellcode implementiert.
Tobi hat das aber noch aufm Laptop. Ich werde Ihn anregen dass wir das reinpacken....
Gruss
 
FPV1

Banggood

Oben Unten