I bought a Weller WSP 80 clone that didn't 'talk' to my base station, but it was quite well made so I made a little base station for it and my daughter (12yo) uses it now.
The basic design was similar to the link below, I used an Arduino (I'm too lazy to use a PIC) and my code is below. One issue was to get the delay in update at the correct timing to avoid too much over shoot. Pretty rough really but it works ok.
Hope this is of help
http://eosystems.ro/index.php/projects/esol#include <Arduino.h>
#include <LiquidCrystal.h>
//Detects Temperature (Voltage), Displays, turns on heating element if below set temperature, reads 2 buttons to set temperature
//For Soldering Iron
// sensorValue=iron temp, settemp=desired iron temp
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 ); // A basic LCD setup programme
void setup () {
pinMode (12, OUTPUT); //Sets pin 12 as output (iron heating element on)
//pinMode (13, OUTPUT); //sets pin13 as output SPARE
//pinMode (11, OUTPUT); //sets pin11 as output spare
pinMode (A2, INPUT_PULLUP); //sets pin 2 as input, with pullup resistor for button COOLER (shorts to earth, LOW = ON)
pinMode (A0, INPUT); //Sets pin 0 as input, Volatge "sensorValue"
pinMode (A1, INPUT_PULLUP); //sets pin 1 as input with resistor pullup for button HOTTER (shorts to earth, LOW = ON)
lcd.begin(16, 2); //initiates LCD size etc
lcd.print(" SOLDERING"); //print text
lcd.setCursor(0,1); //moves cursor
lcd.print(" STATION"); //print text
delay(2000); //pauses so can be read
}
int temp=300; //sets initial set temp at 300C
void loop(){
float sensorValue = analogRead(A0)*1.28 ; //reads voltage and does maths operation to calculate temp C
lcd.setCursor(0,0); //set cursor at beginning of screen
lcd.clear(); //clears lcd
lcd.write("TEMP = "); // writes voltage (temperature) on screen
lcd.setCursor(7,0); //places cursor
lcd.print(sensorValue, 1); // reads voltage/power
lcd.write(" C");
delay(200);
{
if(sensorValue < temp) // switches on heater if temp below set temp
{
digitalWrite(12, HIGH);
}
else
{
digitalWrite(12, LOW); //switches off heater
}
if (digitalRead(A2) == LOW) { // reads lower set temp button and lowers set temp
if (temp > 100); {
temp = temp - 10;
}
}
if (digitalRead(A1) == LOW) { // reads lift set temp button and raises set temp
if (temp < 400); {
temp = temp + 10;
}
}
}}