Flowpi: The Affordable Reflow Oven With Smart Features

About the project

Reflow ovens are generally expensive to buy and boring, so why don't I make one myself which is cheaper and smarter.

Project info

Difficulty: Moderate

Platforms: Raspberry PiMicroPython

Estimated time: 1 week

License: GNU General Public License, version 3 or later (GPL3+)

Items used in this project

Hardware components

oven oven buy a small one second-hand online x 1
Raspberry pi pico w Raspberry pi pico w x 1
bamboo tissue box bamboo tissue box or anything else you can use as an enclosure for you electronics x 1
max 6675 module + thermocouple max 6675 module + thermocouple This is the one I used and this one works with my code, but I would recommend a better module like the max 31855 for better temperature readings x 1
I2C 1602 Arduino LCD Screen I2C 1602 Arduino LCD Screen x 1
Metal button Metal button got them out of an old flat building doorbell system x 2
red 230v switch red 230v switch x 1
230 to 5v converter 230 to 5v converter x 1
Solid State Relay - 40A (3-32V DC Input) Solid State Relay - 40A (3-32V DC Input) x 1

View all

Software apps and online services

Thonny Thonny

Hand tools and fabrication machines

Drill Drill x 1
soldering iron soldering iron x 1
Fretsaw Fretsaw x 1



The goal of this project is to turn an old oven into a smart reflow oven with raspberry pi pico W. A Reflow Oven is  used to solder smd(Surface Mounted Device) components onto a pcb, because soldering smd components by hand is not always possible. Some time ago I started learning how to design PCBs, I ordered my first PCB and the components I needed, but I had one problem: I didn't have a way to solder the components on.
This problem and the fact that the cheapest reflow ovens i could find were €150,- led me to making my own oven, I got the idea to make it "smart", because apparently everything device is smart nowadays.

How does it work

To reflow components to a PCB it is best to use a specific reflow pattern for heating up which you can find in the datasheet of the solderpaste you're using. You can change the patern in the control panel I coded in HTML:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  5. <script>
  6. var timerVar = setInterval(countTimer, 1000);
  7. var totalSeconds = 0;
  8. function countTimer() {
  9. ++totalSeconds;
  10. var hour = Math.floor(totalSeconds /3600);
  11. var minute = Math.floor((totalSeconds - hour*3600)/60);
  12. var seconds = totalSeconds - (hour*3600 + minute*60);
  13. if(hour < 10)
  14. hour = "0"+hour;
  15. if(minute < 10)
  16. minute = "0"+minute;
  17. if(seconds < 10)
  18. seconds = "0"+seconds;
  19. document.getElementById("timer").innerHTML = minute + ":" + seconds;
  20. }
  21. </script>
  22. <script>
  23. </script>
  24. <script>
  25. google.charts.load('current',{packages:['corechart']});
  26. google.charts.setOnLoadCallback(drawChart);
  28. function drawChart() {
  29. // Set Data
  30. var data = google.visualization.arrayToDataTable([
  31. ['Time', 'Heat'],
  32. [val6,val1],[val7,val2],[val8,val3],[val9,val4],[val0,val5],[val0 + 60,0]
  33. ]);
  34. // Set Options
  35. var options = {
  36. title: 'Heat per second',
  37. hAxis: {
  38. title: 'Time (seconds',
  39. gridlines:{
  40. count: 11
  41. }
  42. },
  43. vAxis: {title: 'Heat (°C)',
  44. gridlines:{
  45. count: 10
  46. }
  47. },
  48. legend: 'none',
  49. backgroundColor: 'white',
  50. chartArea:{
  51. left: 48,
  52. top: 24,
  53. bottom: 48,
  54. right: 24,
  55. },
  56. curveType: 'function',
  57. pointsVisible: true
  58. };
  59. // Draw
  60. var chart = new google.visualization.LineChart(document.getElementById('myChart'));
  61. chart.draw(data, options);
  62. }
  63. </script>
  64. <meta charset="UTF-8">
  65. <meta name="author" content="Daniël van Belzen">
  66. <meta name="description" content="This page is a control panel made by Daniël van Belzen for the FlowPi oven he made.">
  67. <title>FlowPi Online</title>
  68. <link rel="icon" href="3565450.png" type="image/x-icon"><!--replace this img-->
  69. <link rel="stylesheet" href="style.css">
  70. </head>
  71. <body>
  72. <h1>Reflow control online</h1>
  73. <hr><form onsubmit="return waitforsub(); ">
  74. <center>
  75. <div class="stap"><button name="start" id="start">Start</button><button name="stop" id="stop">Stop</button></div>
  76. <div class="ripple"></div>
  77. </center></form>
  78. <hr>
  79. <div id="Cp">
  80. <div style="position:relative;"><div id="myChart"><br></div></div>
  81. <div class="stats"><div class="stopwatch"><div id="timer"></div> <br> more info on lcd screen</div></div>
  82. <form>
  83. <div id="Heatparent">
  84. <label for="Heat1">Heat 1</label>
  85. <input type="number", id="Heat1", name="Heat", min="0", max="200", step="10", class="Heat", placeholder="&ordm;C", value="val1"><br>
  86. <label for="Heat2">Heat 2</label>
  87. <input type="number", id="Heat2", name="Heat", min="0", max="200", step="10", class="Heat", placeholder="&ordm;C", value="val2"><br>
  88. <label for="Heat3">Heat 3</label>
  89. <input type="number", id="Heat3", name="Heat", min="0", max="200", step="10", class="Heat", placeholder="&ordm;C", value="val3"><br>
  90. <label for="Heat4">Heat 4</label>
  91. <input type="number", id="Heat4", name="Heat", min="0", max="200", step="10", class="Heat", placeholder="&ordm;C", value="val4"><br>
  92. <label for="Heat5">Heat 5</label>
  93. <input type="number", id="Heat5", name="Heat", min="0", max="200", step="10", class="Heat", placeholder="&ordm;C", value="val5"><br>
  94. </div>
  95. <br><br><br>
  96. <div id="Timeparent">
  97. <input type="submit" name="submit" value="submit and restart" id="submit">
  98. <input type="number", id="Time1", name="Time", min="0", max="300", step="10", class="Time", placeholder="Preheat", value="val6">
  99. <input type="number", id="Time2", name="Time", min="0", max="300", step="10", class="Time", placeholder="soak", value="val7">
  100. <input type="number", id="Time3", name="Time", min="0", max="300", step="10", class="Time", placeholder="ReflowRamp", value="val8">
  101. <input type="number", id="Time4", name="Time", min="0", max="300", step="10", class="Time", placeholder="Reflow", value="val9">
  102. <input type="number", id="Time5", name="Time", min="0", max="300", step="10", class="Time", placeholder="Cooling", value="val0">
  103. </div>
  104. </form>
  105. </div>
  106. <hr>
  107. &lt;&lt;&lt; &copy; <a href="about.html" class="link">Dani&euml;l van Belzen</a>&gt;&gt;&gt;
  108. </body>
  109. </html>

I was planning to host this from my arduino with an esp8266, but while working on this project a new raspberry pi board was released: the raspberry pi pico W, this board has the wireless functions I needed for the project, is more compact and is also more powerfull than the arduino uno.

I'm using the micropython network, socket and re libraries to host the website to an IP address on my network, this IP address will be shown on the lcd screen until you start the oven.

When a user changes the heating profile, the data will be saved to a csv file, this data will be loaded on startup.
I had some issues making the oven be able to host a website, receive data and use it to control the oven all at the same time, I fixed this by using multithreading, this makes the website run on one of the cores and the oven on the other core.

The oven works with PID, it has a target temperature which the raspberry pi tries to stay at, the raspberry pi controls the oven with a solid state relay.

The reflow process usually happens in 5 stages, you can customize the stages on the website, and the display will show in what stage the oven is.

(source: madpcb

Building the oven

I started with cleaning the oven, it had been used for years to make food in, so there was a lot to clean.
I then started wiring everything together, I had a nice bamboo box I used as enclosure for the electronics, I made holes in the front for buttons and an lcd screen.

The oven worked on mains electricity, I did this together with my dad, because I had never done anything with it before, and didn't want our house to burn down.

End Result

In the end I still had some bugs, but it worked, I assembled my first pcb and put in in the oven, the pcb looks great! 


Schematics, diagrams and documents




Photo of Danivbel


I am Daniël van Belzen, 16 years old and i live in the Netherlands. I like to make things with electronics and the raspberry pi.


Leave your feedback...