Barbecue may be the world's oldest cooking method. Cultures all over the world have barbecue in one form or another, united by their common use of heat and smoke. One of my favorite styles is American Southern BBQ, which involves roasting meat at low temperatures for many hours in the presence of smoke.

Charcoal is an excellent fuel source for this type of cooking, but it can be difficult to maintain stable temperatures with charcoal for long periods of time. I built an automatic temperature controller for my charcoal grill to make that a lot easier.

For this project, I used one Modulo base and four Modulo devices:

Controller - A microcontroller board that's programmable with the Arduino IDE. It can control the other Modulo devices and also has 6 I/O ports, each with Power, Ground, and an I/O pin.

Display - A full color OLED display that shows the current temperature and graphs it over time.

Knob - A rotary encoder and push button for setting the target temperature and adjusting parameters. The Knob also has an RGB LED, but I didn't use it in this project.

Thermocouple Interface - An amplifier for a Thermocouple probe, which makes it possible to measure the high temperatures present inside the BBQ.

Programming

The Modulo Arduino library makes it easy for controller code to communicate with the devices that are connected to it. You simply create an object for each module that you're using.

ColorDisplayModule display;
ThermocoupleModule thermocouple;

KnobModule knob; Then you can easily access the modules through methods on the objects. For instance, by getting the thermocouple's temperature.

double temp = thermocouple.getTemperatureF();

or write the temperature to the display:

display.clear() 
display.print("Temperature: ")
display.print(temp);
display.refresh();

Results

Ribs!

I tested the system by BBQing pork spare ribs and beef back ribs. At first the controller needed some parameters to be tweaked and minor bugs to be fixed, but after an hour or so it was dialed in and kept a steady temperature for the remainder of the cook. Though it seemed to work well, I think I should probably "test" it again soon. ;-)

View the full project on Hackster.io