Introduction: DIY Soldering Reflow Oven

They say you are only as good as your tools. This is a statement I can vouch for, as better tools can make the difference between a sleek and well designed prototype and a rats nest covered breadboard. Unfortunately as an electronic hobbyist you don't always have the budget of a big tech company at your disposal. But hey, that's what DIY projects are for!

Starting off as a hobbyist or even small tech company designing and building electronics you will soon learn that most of the fun IC or MCU chips are either cheaper in, or only available in, surface mount form, and fancy reflow ovens are expensive. But a soldering oven isn't much different from a toaster oven-- the only difference is the accuracy and temperature settings.

That is why I'm going to show you how to build your very own Soldering Reflow Oven for under $100 from an old/new standard toaster oven, thermocouple and a microcontroller.

Note: This project can be accomplished many different ways with many different MCU's and components. I wanted to use Freescale Processors and StickOS BASIC, but I look forward to see how other people do this.

-Elipsit

Step 1: What You Need: BOM and Tools

Requirements:
-Basic Knowledge of AC wiring (eg: Black = hot, White = Neutral, Green = GND)
-Soldering experience
-Some Microcontroller experience

Bill Of Materials:
-Toaster oven new or old
-Fiberglass insulation or fiberglass pipewrap
- K Type Thermocouple
- Max6675 K Type Thermocouple to-Digital Converter
- SSRD-240D40R Solid State Relay (Mechanical ones will be too noisy), 40A
- Note: This relay is now obsolete but I had it lying around so I used it. You can use any SSR-- just make sure it is rated for double the current that you need, as it will be derated due to high temperature. If you're not sure how much current your toaster uses, calculate it from (Power = Voltage * Amperage). For example my toaster was 1500W at 120V, therefore I = 1500/120 = 12.5A
-All Round steel strapping
-16X4 Character LCD - White on Blue
-Adapt9S12DP512 with resident BASIC
-5 button joystick
-Wire
-Screws and nuts and standoffs
-Acrylic face plate
-Protoboard or prototyping card
-Dip to SO breakout board

Tools:
-Soldering Iron
-Solder
-Fume extractor (Optional)
-Laser cutter (optional)
-Screw driver
-Drill Press
-File/sand paper
-heat-shrink / marrettes

Step 2: StickOS: What Is That?

"StickOS® BASIC is an entirely MCU-resident patented interactive programming environment, which includes an easy-to-use editor, transparent line-by-line compiler, interactive debugger, performance profiler, and flash filesystem, all running entirely within the MCU and controlled thru an interactive command-line user interface.  In StickOS, external MCU pins may be bound to “pin variables” for manipulation or examination, and internal MCU peripherals may be managed by BASIC control statements and interrupt handlers.  A StickOS-capable MCU may be connected to a host computer via a variety of transports and may then be controlled by any terminal emulator program, with no additional software or hardware required on the host computer.  Once program development is complete, the MCU may be configured to autorun its BASIC program autonomously." - http://cpustick.com/

StickOS programs can be downloaded from http://cpustick.com/downloads.htm

I found this OS and though it was a refreshing change from the ubiquitous Arduino projects. Nothing personal Adrunio fanboys, I still play with my Duemilanove. Similar to the Arduino system where you have a bootloader code on an Atmel chip, StickOS is a resident OS that can be loaded on Freescale (S12, Coldfire, S08) and Microchip (Pic) MCUs. But unlike Arduino once the StickOS is loaded the chip now becomes a mini computer that can be interfaced with by any Terminal Program.

I used Putty or TeraTerm to communicate with the MCU.

My Favorite part is that it doesn't matter what computer or operating system you use to connect to the MCU running StickOS, because Terminal programs all use the same protocols so it can be reprogrammed on the fly using anything with a terminal and serial port.

Step 3: Where to Start

Step 1: First start by disassembling your toaster, you will need to remove the dials and timers as we won't be using them. Make sure to keep the wire as it is rated for high heat and we will be using that later. Also make sure its not plugged in while you disassemble it...

Step 2: Next line the inside of the toaster (the gap between the inner and outer shell) with fiberglass insulation, this will help keep the heat in and thus help maintain a steady temperature.

Step 3: Mount the SSR. The toaster i used had a convention fan so i used a two channel relay so I could control the heating elements separate from the fan.

Step 4: Drill a hole in the back/side of the toaster and mount the thermocouple. i made a brace out of steel strapping to hold the thermocouple in place. Ideally you want to mount the thermocouple as close to the level where your boards are located.

Step 5: Solder the Max6675 to the smt to dip breakout board then solder that to the protoboard. One thing that i noticed which threw me off a bit was that the yellow wire of the thermocouple is +ve and the red wire is -ve...not sure what colour code they were following.

Step 6: You're almost done! Wire the Thermocouple, LCD, Button Joystick to the Protoboard then connect that to the Adapt9S12DP512. I laser cut an acrylic faceplate and mounted all the pieces to that but you can mount them to a project box if you don't have access to lasers.

Step 4: The Program:

********************************
*****Technological Arts******
********************************
  Project: Reflow Toaster
      For:  MC9S12DP512 | MAX6675 | K-Type Thermocouple | NHD-0420DZ-NSW-BBW



> pins (Must be designated by typing "pins <Statement>")

heartbeat pp7
safemode* pa6

for k type thermocouple yellow/green wire = +ve, red wire = -ve

rem //LCD - see page 94 in basic users guide

lcd_rs pa0
lcd_en pa1
lcd_d4 pa2
lcd_d5 pa3
lcd_d6 pa4
lcd_d7 pa5

rem // 5 button joystick used for user input

Left   pp0
right  pp1
down   pp2
up     pp3
select pp4

heater pp5
fan    pt0
buzzer pp6

analog 5000


rem ----Program Starts Here----

  10 dim nrsti as pin pm5 for digital output
  20 dim ncs as pin pm3 for digital output
  30 dim thermocouple as short, F as short
  40 dim cnt, setpoint, temp, status

  50 dim left as pin pp0 for digital input debounced
  60 dim select as pin pp4 for digital input debounced
  70 dim up as pin pp3 for digital input debounced
  80 dim down as pin pp2 for digital input debounced
  90 dim right as pin pp1 for digital input debounced

100 dim heater as pin pp5 for analog output
110 dim fan as pin pt0 for digital output
120 dim buzzer as pin pp6 for analog output

130 dim SPICTL as byte at address 0x000000d8
140 let  SPICTL = SPICTL&0xfe

150 configure timer 0 for 750 ms
160 configure timer 1 for 500 ms
170 configure timer 2 for 1 s
180 configure timer 3 for 500 ms



190 on timer 0 do gosub qspi
200 on timer 1 do gosub exit
210 on timer 2 do gosub count
220 mask timer 2
230 on timer 3 do gosub adjust
240 mask timer 3

250 let setpoint = 5000
260 sub main

270 lcd 0, "Tech Arts"
280 lcd 1, "Reflow Toaster"
290 sleep 1 s

300 rem

310 rem ----main menu----
320 rem gosub lcdclear
330 let cnt = 300, heater = 0, fan = 0, buzzer = 0
340 lcd 1, "ROHS || Lead"
350 lcd 2, " up  || Down"
360 while 1 do
370 if !up then
380   let temp = 473
390   gosub main2
400   rem sleep 100 ms
410 elseif !down then
420   let temp = 428
430   rem sleep 100 ms
440   gosub main2
450 else
460 endif
470 endwhile
480 endsub

490 sub main2
500 gosub lcdclear
510 while 1 do
520 lcd 1, "Start", "|<- ->|", "Stop"
530 if !left then
540   lcd 3, "Press ->| to Exit"
550   gosub preheat
560 else
570 endif
580 endwhile
590 endsub

600 rem----QSPI----
610 sub qspi
620 let ncs = 0, nrsti = 1
630 qspi thermocouple
640 let ncs = 1
650 let thermocouple = thermocouple >> 3
660 let thermocouple = thermocouple * 1/4
670 let F = thermocouple*9/5+31
680 lcd 0,"Temp:", dec thermocouple, "C", dec F, "F"
690 print "Fan =", fan
700 endsub

710 rem ----End program----
720 sub exit
730 if !right then
740   let heater = 0, fan = 0
750   lcd 0, " "
760   lcd 1, "Goodbye"
770   lcd 2, " "
780   lcd 3, " "
790   end
800 else
810 endif
820 endsub

830 rem----Preheat----
840 sub preheat
850 while F < temp do
860 gosub lcdclear
870  lcd 1, "Preheating"
880  if F <= 349 then
890    let heater = 5000, fan = 1
900  elseif F <= temp then
910    let heater = setpoint - (F*5), fan = 1
920    print "heater Value =", heater
930  endif
940  rem until F >= temp
950 endwhile
960 gosub reflow
970 endsub

980 rem----Reflow----
990 sub reflow
1000 unmask timer 3
1010 gosub lcdclear
1020 let buzzer = 750
1030 sleep 500 ms
1040 let buzzer = 0
1050 while 1 do
1060 lcd 3, "Timer = ", cnt, "secs"
1070 lcd 1, "Press < to start"
1080 if !up then
1090   let cnt = cnt + 10
1100 elseif !down then
1110   let cnt = cnt - 10
1120 elseif !left then
1130   unmask timer 2
1140 else
1150 endif
1160 endwhile
1170 endsub

1180 sub reflow2
1190 lcd 3, "Reflow Done"
1200 let buzzer = 500
1210 sleep 500 ms
1220 let buzzer = 0
1230 sleep 500 ms
1240 let buzzer = 400
1250 sleep 500 ms
1260 let buzzer = 0, fan = 0, heater = 0
1270 mask timer 3
1280 gosub main
1290 endsub


1300 rem----Adjust----
1310 sub adjust
1320 if F < temp then
1330    let heater = 5000, fan = 1
1340    lcd 2, "Temp adjusting"
1350    print "Adj Temp up =", F
1360 else
1370    let heater = 0, fan = 1
1380    lcd 2, "Temp good"
1390    print "Adj Temp down=", F
1400 endif
1410 endsub

1420 rem----Count----
1430 sub count
1440 if cnt > 0 then
1450 rem
1460 let cnt = cnt - 1
1470 rem lcd 3, "Timer = ", cnt, "sec"
1480 else
1490 mask timer 2
1500 let cnt = 300
1510 gosub reflow2
1520 endif
1530 endsub

1540 rem ----Clear LCD----
1550 sub lcdclear
1560 lcd 1, " "
1570 lcd 2, " "
1580 lcd 3, " "
1590 endsub

Step 5: Special Thanks

This project was accomplished with the help of Technological Arts who supplied the funding and parts for the project.