BBQ Temp Controller Build
-
I'm in the process of building a BBQ temp controller, and was trying to figure out the best way to remotely monitor/control it. After coming across this website a month or so ago, I'm now running OpenHAB on a RPi2 and have a couple temp sensors deployed around my house.
This project is a little more involved, and I'm sure I'm going to run into roadblocks along the way. My goal is to have a sitemap in OpenHAB that will allow me to set and monitor my desired grill temp, which will control a small fan on my BBQ using a PID algorithm, as well as display the temps of the meat probes so I can know how things are going.
I currently have the sitemap setup in OpenHAB, and have had the code working for the thermocouple temp probes that I will be using for the grill and meat temps. Today I will start trying to get the two to work together, based on the MySensors Serial API. I'll be using the NRF24L01+ radio modules for this. I'll post my code periodically, and hopefully will have some chime in on how to make it work or improve it.
-
Below is a very rough sketch of what I have so far. This is not working or tested even yet, but it does compile in Arduino IDE. I will breadboard the sensors I have in the next couple of days and get the basics working, then I will have to figure out how to send the temperatures over to my gateway. Next will be configuring for receiving commands from the gateway/controller to allow me to set my target temperature on the Arduino. Any recommendations are welcomed.
This program is my attempt at creating a BBQ controller for my Big Green Egg using an arduino to monitor grill and meat temps as well as control a fan to regulate the grill temperature. Components used: - Arduino UNO - 10CFM Brushless DC Blower - Level Shifter - K-type Thermocouple - K-type Grill Probe - K-type Meat Probe Pin assignments: */ /* Tasks: - Selftest - Fan 0-100-0 - Check for Probes - Set Grill Temp - Setup Display - Grill Temp - Probe 1 - Probe 2 - Fan Status - Elapsed Time - Measure Temperature - Grill - Probe 1 - Probe 2 - Analyze Temperature - PID Contol - Control Fan - PWM Value - On/Off */ //-------------------------------- Classes ------------------------ //-------------------------------- Includes ----------------------- #include <MySensor.h> #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #include <PID_v1.h> //-------------------------------- Defines ------------------------ #define oneWirePin 9 #define TempPrecision 9 #define MAX_ATTACHED_DS18B20 16 OneWire oneWire(oneWirePin); //Setup oneWire instance to communiate with any oneWire devices DallasTemperature sensors(&oneWire); //Pass our oneWire referenceto Dallas Temperature. DeviceAddress Probe0, Probe1, Probe2, Probe3; //Define arrays to hold device addresses. MySensor gw; unsigned long SLEEP_TIME = 15000; float lastTemperature[MAX_ATTACHED_DS18B20]; int numSensors = 3; boolean receivedConfig = false; boolean metric = true; MyMessage msg(0,V_TEMP); void sketchInfo () { gw.begin(); gw.sendSketchInfo("Temperature Sensor","1.0"); } void setupProbes () { sensors.begin(); sensors.getAddress(Probe0, 0); sensors.getAddress(Probe1, 1); sensors.setResolution(Probe0, TempPrecision); sensors.setResolution(Probe1, TempPrecision); } // Cycle fan from 0-100-0% power over 10 seconds. void selftestFan () { } // Verify which probes are connected and report status for 10 seconds void selftestProbes () { } void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); //Display Temp in °C //Serial.print("Temp C: "); //Serial.print(tempC); //Display Temp in °F Serial.print(DallasTemperature::toFahrenheit(tempC)); Serial.print(" F "); } void printData(DeviceAddress deviceAddress) { //Serial.print("Device Address: "); //printAddress(deviceAddress); //Serial.print(" "); printTemperature(deviceAddress); //Serial.println(); } void sendTemps () { for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) /10.; gw.send(msg.setSensor(i).set(temperature,1)); lastTemperature[i]=temperature; } gw.sleep(SLEEP_TIME); } void setup() { Serial.begin(9600); sketchInfo(); setupProbes(); //selftestFan(); //selftestLCD(); } void loop() { // put your main code here, to run repeatedly: gw.process(); sensors.requestTemperatures(); printTemperature(Probe1); printTemperature(Probe2); sendTemps(); //readTemps(Probe0); //readTemps(Probe1); } -
I've been watching this one, but will watch this one evolve too.
Waiting to see if they get a web app done.
-
I've been watching this one, but will watch this one evolve too.
Waiting to see if they get a web app done.
@BulldogLowell
That looks like an interesting project as well. This originally started very similar to that one, and I was planning on using a local LCD on it for the display. I quickly realized that the local LCD would not give me the "warm fuzzy" that checking this remotely would give me. When I started going towards a web interface design, I then realized that I really didn't need the local LCD at all.I'm not at all good with the programming piece, but I've gotten by so far. We'll see how this works out.
-
@Tango2 Check this link, it is something I built for my Big Green Egg BBQ.
It looks like it could be my sensors material.
http://www.susanminor.org/forums/showthread.php?315-PID-Controller
Maybe this may help.@5546dug That's an interesting build. I've come across several using a PID controller similar to that, however they have mostly been on electric smokers. My original intent was to do a PWM fan that could be speed controlled, but it was very hard (impossible) for me to find a blower type fan that was PWM-capable. My very initial testing showed that an on/off model would work as well but I haven't tried this on the Big Green Egg yet.
My main concern is being able to feed a temp from my phone back to the arduino controlling this, and being reliable if for some reason wireless connectivity was lost from the arduino. I don't think this should be too hard, but will probably take some trial and error on my part.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login