Jul 11, 2017

Halogen floodlight SMT reflow

This project was waiting on a box fot two years, until I had to solder 100 PCBs. After some research on SMD/SMT reflow oven hacking, I was confident to build my own reflow device with an halogen floodlight.

First test was to check the speed of the temperature rise inside a standard halogen floodlight. Reflow soldering temperature curves are quite demanding, and some adapted ovens can't reach the degrees-per-second speed of the ramp-up stages of these curves.

I bought the spotlight, put an aluminium sheet covering the inside surface of the protective glass (to reduce heat loss), and measured the temperature rise with a multimeter's thermometer.... and wow! More than 5ºC/s... and I better turned the thing off after reaching 300ºC and still rising quickly.
So the floodlight was able to fulfill the needs.
Next step was a temperature controller, that is, the device that keeps the temperature as in a specified reflow curve profile in each moment. Having an AC heater element (in my case the halogen bulb), the two basic components in a AC temperature controller are:
- a temperature sensor
- an AC dimmer (connected to the heater element)

The most common temperature sensors are:

- Thermocoulples
- Thermistors
- RTD's

You can read more about their characteristics in this article.

AC dimmers contain basicly:

- A zero crossing detection circuit
- An AC commutation circuit

You can read more about AC dimmers here.
And more info about detection AC zero cross here.

I decided to adapt 0xPIT's reflow Oven Controller to my needs. This controller uses a Thermocoulples as temperature sensor, a bidirectional optocoupler as zero cross detector, and a Non Zero Cross SSR (Solid State Relay) as AC commutation device (instead of the combination of an Optoisolator Triac and a Triac ).

Then made a new board design, using as dimmer circuit the combination of an Optoisolator Triac and a Triac, wich are cheaper more replaceable and easier to get than SSR's. The board can be made at home on a single side PCB with toner transfer, and in the reflow cicle the triac's temperature stayed well below 60ºC without heatsink, being the load a 500W halogen lamp.

The sources are available in my github: https://github.com/dasaki/nanoReflowController

If your K-type thermocouple comes enclosed in a protective metal cylinder, make sure you remove it to get a quick response to temperature changes.

With the controller working, I just drilled the floodlight enclosure to fit the thermocouple. I used a piece of 6mm OD / 4mm ID teflon pipe to add a bit of thermal insulation between the probe and the case's metal.

0xPIT's original code (which I heavily modified for this project) includes PID to match the required temperature curve. The PID parameters have to be tuned for each hardware setup, changes in the power/size of the floodlight, position of the probe, etc. However, you should be conservative, as the geometry of the heat radiation from the bulb to the board changes a lot with distance, so the center of the board you are cooking will be hotter than the thermocouple reading.

That means you should keep the peak temperatures at the minimum usable for the reflow. To give you some practical numbers, I'm using a peak temperature of 200ºC, so the temperature at the center of the board (shortest distance to the lamp) reached around 220ºC.

The lowest price I've found for the components are: 

500W halogen floodlight       10,00 €
TFT 1.44"                              3,37 €
rotary encoder module           0,90 €
Max 6675+probe                   3,00 €
arduino nano                         2,20 €
blank pcb (15x10cm)             1,68 €
Components on PCB (aprox)   3,00 €
jumper wires (80 units)          1,70 €
teflon pipe (1m)                     0,90 €
TOTAL (aprox.)                    26,75 €




heatsink calculation

pcb trace withs calculator:


  1. looks like a lotz of fun building this

  2. That's Ingenious! I bow to you in respect!

  3. may want to consider posting this on hackaday.io, I'm sure a lot of people would be interested. I've only seen one project which was similar, which used one of those glass cooking appliances which also used a lamp to cook the food.

    i don't really know anything about halogen lamps - is there anything wrong operating them this way? Like would it shorten the lifespan significantly

    1. Already there :)

      It will probably shorten the lifespan of the bulb indeed

    2. Halogen bulbs must be operated at no less than about 90% of rated voltage. Otherwise the regenerating effect of the halogen gas to redeposit the tungsten on the filament stops. You will notice a buildup of the tungsten on the bulb glass over time. And the filament fails.

    3. What about if you tried PWM to control the lamp instead of
      continuous dimming. That might help the lamp as it would see multiple full-on / full-off cycles rather than an intermediate temperature ?

    4. How about controlling the lamp with PWM (full-on / full-off) instead of a continuous analog voltage ? Might that help the bulb life ? Harry

  4. Hey your process for applying solder paste looks really neat, can you detail it a little more ?

    1. I made the stencil for the solder paste with the aluminium of a soda can. Had to sand off the coatings/paint of the aluminium before etching the stencil with the same toner transfer technique used to etch PCBs.

    2. Ah cool, thanks. And is it just stock cardboard that holds everything in place ? What are you using to squeegee the paste on ?

    3. Yes, a thin cardboard to keep the board and the stencil aligned.
      My friend Carlos (the one in the video) used a pointy wood stick to apply the paste. However, the most common way to do it is with a "solder paste squeegee".

    4. I made the stencil in a similar way as in this video:

  5. Hello, I tried your sketch. Everything is going fine. Except one thing: I can't get the encoder running. I am using the same encoder as in your photos. The program detects when the encoder is turned right or left. But it doesn't detect if the encoder is clicked or not.
    Everything is fine with my wiring, and the voltage on the pin where I connected the encoder is going perfectly down when I click it.
    Do you know what it can be?

  6. Hello. I downloaded your sketch. I works good, except one thing: I can't detect wheter the encoder is clicked or not. The program gets it when the encoder is turned left or right. But a click isn't reckognized. The encoder setup, I set it on low, is correct and the voltage on my declared encoder-button-pin drops perfectly when I click it. Do you have any ideas what could be wrong?

    1. Hi!
      Just to discard things, can you please check your wiring is as this:

      PIN_ENC_A (A2) ---> encoder "CLK"
      PIN_ENC_B (A3) ---> encoder "DT"
      PIN_ENC_BTN (A4) ---> encoder "SW"
      5 volt ---> encoder "+"
      GND ---> encoder "GND"

      If the wiring is ok, you could try changing in config.h:
      IS_ENC_ACTIVE = true;

      The module I use is like this:https://www.modmypi.com/image/cache/data/electronics/sensors/rotary-encoder/DSC_0700-800x609.jpg

    2. I',ve also noticed I didn't include the encoder library in the repository. The one I use is:

    3. It seems that there is something false within the code. The wiring is correct and if I try the Encoder in an example called ClickEncoderTest of the library it works fine.
      I modified the part of the loop where it handles the encoder.button "case ClickEncoder::Clicked:" with "if (digitalRead (PIN_ENC_BTN ) == false)". Of course I can't double click right now. Do you have any idea why it isnt working?

    4. Well, it works for me. I've just downloaded again the encoder library form 0xPIT's repo and uploaded the code and it works fine.
      Can't figure out what could be the problem

    5. Is your mains 50Hz or 60Hz?
      Just for the try, you could put 5 instead of 10 here and see what happens (in ReflowController.ino line 204):

      // handle encoder + button
      if (!(timerTicks % 10)) {

    6. Hi, did you find/fix the problem?

  7. Hey,
    Thank you for sharing your Work!

    I have 1 Problem. I am not getting any temperature values. It`s always "0". If i load any max6675 example sketch its working fine. I also activated SERIAL_VERBOSE, also "0" only.
    Any Ideas`?

    1. There might be spi communication interference between your LCD and the max6675.
      I'm away home, so can't try things.
      Maybe putting an extra delay between the chip select signals in temperature.h? Try it:


    2. Adding delay didn`t help. But I get Values if i deactivate the LCD( //setupTFT() ). So we are not far away.

  8. I maybe should have mentioned that i am using an ILI9341 Display instead of your ST7735.

    1. This comment has been removed by the author.

    2. This comment has been removed by the author.

    3. Yes, that is probably what is causing trouble. Try this:

      in file ReflowController.ino change in the include:




      In file UI.h change:

      PDQ_ST7735 tft;


      PDQ_ILI9341 tft;

      In file PDQ_ST7735_config.h add:

      #define ILI9341_CS_PIN PIN_LCD_CS
      #define ILI9341_DC_PIN PIN_LCD_DC
      #define ILI9341_RST_PIN PIN_LCD_RST
      #define ILI9341_SAVE_SPCR 1

      Let me know if it works