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);
    }
    
    


  • Cool project! Following.


  • Contest Winner

    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.


 

326
Online

7.5k
Users

8.4k
Topics

90.4k
Posts