Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Kit Defumador a Carvão com Controle Preciso de Temperatura – Construa sua Obra-Prima de BBQ

Componentes e Materiais

ComponenteQuantidade
Arduino MKR10001
Soprador Brushless 5V1
Módulo Driver MOSFET IRF520N1
Termistores NTC 100K ohm1
Protoboard (genérico)1
Fios jumpers (genéricos)1
Bateria LiPo 3.7V >= 700mAh1

Aplicativos e Serviços Online

Sobre o Projeto

A História

A maioria dos defumadores sérios sabe que o melhor sabor vem do uso de carvão para aquecer. Defumadores a gás propano e elétricos têm melhor controle de temperatura, mas perdem o sabor do carvão. Como fonte de calor, o carvão pode ser um incômodo. Você precisa monitorar constantemente a temperatura, ajustar as aberturas para tentar obter a temperatura certa, e brincar com isso algumas vezes para acertar. Então, tem que continuar fazendo isso a cada meia hora conforme o nível de carvão muda. Não seria ótimo apenas sentar no sofá, curtindo sua bebida gelada favorita e evento esportivo na TV enquanto o defumador faz seu trabalho?

O Projeto

Criar um controlador que monitora a temperatura no defumador e ajusta o fluxo de ar para o carvão para manter a temperatura correta. Também fornecer maneira de monitorar remotamente as temperaturas do defumador e das sondas de carne. Baseado no Arduino MKR1000 com Wi-Fi integrado e suporte para carregar bateria LiPo.

O Hardware

A temperatura no defumador é monitorada usando termistor NTC 100K em divisor de tensão conectado a uma entrada analógica do MKR. Este termistor foi escolhido pois é usado em hot ends de impressoras 3D Prusa RepRap, amplamente disponível e barato. Podem ser comprados já soldados a fio de silicone isolado para alta temperatura, ideal para sonda. O termistor é inserido em tubo fino de aço inoxidável (1/4 polegada ou menor) para proteção física, com uma extremidade fechada e fios fixados na outra com termoencolhível.

O divisor de tensão usa resistor de 10K como outra metade. Valor escolhido por ser próximo à resistência do termistor NTC 100K em temperaturas típicas de defumador (107°C / 225°F). Isso dá boa faixa de medição, com leituras de ~10°C a 150°C+ com granularidade razoável.

Pino A0 monitora temperatura do defumador com sonda curta colocada na grelha interna. Outros pinos analógicos podem criar mais sondas termistores e divisores de tensão para inserir na carne e monitorar temperatura interna.

Do outro lado, um pequeno soprador conecta à ventilação do defumador. Prato pequeno de aço inoxidável para ração de cachorro cobre a ventilação e o soprador conecta a furo no fundo. Serve duas funções: cobrir completamente a ventilação e isolar termicamente o corpo do defumador do soprador. O soprador é controlado usando MOSFET N-channel. Poderia ser ligado diretamente, mas para facilidade de construção usei módulo MOSFET. O gate do MOSFET conecta ao pino digital do Arduino.

A Construção

Na primeira implementação, tudo em protoboard para simplicidade. Pontes termistores fáceis de ligar: resistor 10K do Vcc (3.3V no MKR) a um lado do termistor, outro lado ao GND. Jumper entre centro da ponte e pino analógico no MKR. Corte tubo para sonda, feche uma extremidade em torno, dobre cantos para ponta mais afiada. Deslize termistor no tubo até o fim. Coloque termoencolhível na outra extremidade e fios. Aqueça para encolher e fixar fios.

Lado do soprador: fixe fios do soprador ao bloco terminal de saída do módulo MOSFET observando polaridade. Conecte bateria LiPo e fios de plugue JST ao bloco terminal de potência do módulo MOSFET, observando polaridade. Plugue JST no jack do carregador de bateria no MKR. Três jumpers para Vcc, GND e fio de controle dos pinos do módulo MOSFET ao MKR. Usei bateria 10.000 mAh para bastante autonomia com o soprador.

Na protoboard, adicionei itens não no esquemático: potenciômetro 10K variável para gerar tensões de teste (alternando jumper de termistor para cursor do potenciômetro; pontas do resistor em Vcc e GND). Também LED com resistor limitador 330 ohm no pino de saída 0 para indicar quando sketch liga/desliga ventilador.

O Software

Duas partes de software: sketch para controlar Arduino e app Universal Windows para monitoramento remoto em qualquer dispositivo Windows 10.

Sketch baseado em sketch de servidor WiFi do livro "Programming Arduino Next Steps: Going Further with Sketches" de Simon Monk.

Basicamente cria servidor Web simples servindo página com temperaturas medidas e permitindo definir temperatura alvo do defumador. Inicialização: configurar adaptador WiFi e atribuir IP fixo (para saber endereço quando não conectado a PC para ver IP DHCP). Pino 0 como saída. No loop: verifica se cliente tenta conectar, serve página web. Se houver requisição, verifica se inclui parâmetro na URL para definir temperatura alvo. Verifica temperatura do defumador e liga soprador se abaixo da alvo, desliga se acima.

Medição com termistor em divisor de tensão: da leitura analógica, determina queda de tensão no resistor fixo. Lei de Ohm (V=IR) para calcular corrente (I=V/R). Mesma corrente flui pelo termistor, usar Lei de Ohm novamente para calcular resistência do termistor (R=V/I). Usar R na equação Beta do termistor:

1/T = 1/T0 + 1/Beta * ln(R/R0)

Onde R0 é resistência do termistor a T0. (Todas temperaturas em Kelvin).

Servir página HTML simples: enviar blocos de cabeçalho HTML e códigos de formatação em torno das temperaturas medidas. Inclui input para temperatura alvo e botão para incluí-la em requisição de volta ao servidor.

O App Universal Windows

Permite sentar e relaxar sabendo que seu defumador produz o melhor brisket defumado a oeste do Pecos (ou rio de sua escolha). Carrega periodicamente página web do defumador, extrai temperaturas e exibe. Também permite definir temperatura alvo.

Código do sketch e app Universal disponíveis no repositório GitHub abaixo.

Código

Sketch Controlador do Defumador (Arduino)

// sketch_12_04_server_wifi
#include <SPI.h>
#include <WiFi101.h>

char ssid[] = "BeeBar2"; // seu SSID
char pass[] = "9254582716"; // sua senha
WiFiServer server(80);
WiFiClient client;
const int numPins = 10;
int pins[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int pinState[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char line1[100];
char buffer[100];
IPAddress server_IP(192,168,123,90);
float targetTemperature = 225;
float smokerTemperature = 225;
float v0;

void setup() {
  Serial.begin(9600);
  while (!Serial) {};
  for (int i = 0; i < numPins; i++) {
    pinMode(pins[i], OUTPUT);
  }
  analogReadResolution(12); // ADC 12 bits
  if (WiFi.begin(ssid, pass)) {
    WiFi.config(server_IP);
    printWifiStatus();
  } else {
    Serial.println("Could not connect to network");
  }
  server.begin();
}

void loop() {
  client = server.available();
  if (client) {
    if (client.connected()) {
      Serial.print("Request Received: ");
      Serial.println(line1);
      readHeader();
      if (!pageNameIs("/")) {
        Serial.print("Invalid Page Requested: ");
        Serial.println(line1);
        client.stop();
        return;
      }
      readTargetTempParam();
      client.println("HTTP/1.1 200 OK\nContent-Type: text/html\n");
      sendBody();
      delay(1);
      client.stop();
    } else {
      Serial.println("No Client connected");
    }
  }
  int reading = analogRead(0);
  v0 = (float)reading / 1241.0;
  smokerTemperature = ThermisterTemp(v0, 100000, 10000, 3950, 25);
  digitalWrite(0, smokerTemperature < targetTemperature);
}

void sendBody() {
  client.println("");
  sendAnalogReadings();
  client.println("
"); client.print("\n

Target Temperature:


"); client.println("\n
\n"); } void sendAnalogReadings() { client.println("

Temperatures

\n"); Serial.print("Pin(");Serial.print(0);Serial.print("): V=");Serial.print(v0);Serial.print(" Temperature="); Serial.println(smokerTemperature); client.print(""); for (int i = 1; i < 7; i++) { int reading = analogRead(i); if (reading > 0) { float v = (float)reading / 1241.0; float T = ThermisterTemp(v, 100000, 10000, 3950, 25); Serial.print("Pin(");Serial.print(i);Serial.print("): ");Serial.print(reading);Serial.print("V=");Serial.print(v);Serial.print(" Temperature="); Serial.println(T); client.print(""); } } client.println("
Smoker "); client.print(""); client.print(smokerTemperature); client.println(" F
Probe "); client.print(i); client.print(""); client.print(T); client.println(" F
"); } void readHeader() { readRequestLine(line1); while (readRequestLine(buffer) > 1 && buffer[0] != '\n') {} } int readRequestLine(char *line) { char ch; int i = 0; while (ch != '\n' && i < 100 && client.available()) { if (client.available()) { ch = client.read(); line[i] = ch; i++; } } line[i] = '\0'; return i; } boolean pageNameIs(char* name) { int i = 4; char ch = line1[i]; while (ch != ' ' && ch != '\n' && ch != '?') { if (name[i - 4] != line1[i]) { return false; } i++; ch = line1[i]; } return true; } float readTargetTempParam() { Serial.println(line1); int len = strlen(line1); for (int i = 0; i < len; i++) { if (line1[i] == 't' && line1[i + 1] == '=') { float val = 0; for (int j = i+2; j < len; j++) { if (isDigit(line1[j])) { val *= 10; val += (int)line1[j]-'0'; } else { break; } } targetTemperature = val; Serial.println(val); return val; } } return -1; } void printWifiStatus() { Serial.print("SSID: "); Serial.println(WiFi.SSID()); IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); } float ThermisterTemp(float Vtherm, int R0therm, int Rfixed, int Beta, int T0) { double I = (3.3 - Vtherm) / Rfixed; double Rtherm = Vtherm / I; T0 += 273.15; double T = 1.0/( (1.0/((double)Beta))*log((Rtherm)/((double)R0therm)) + (1.0/((double)T0)) ); return (float) ((9*(T-273.15))/5)+32; // converte para Fahrenheit }

Sketch e App Universal

Repositório GitHub: github.com/DuncanBarbee/SmokerController

Esquemáticos

O MKR1000 é representado por um Arduino Nano no Fritzing (ferramenta não tinha a peça). Arquivo: Smoker.fzz

Processo de manufatura

  1. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  2. Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield
  3. Construa um Homem de Ferro com Arduino: Componentes, Sensores e Guia Passo a Passo
  4. Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
  5. Construa um Braço Robótico 3D Impresso Funcional com Arduino – Guia Passo a Passo
  6. Controlador de Umidificador DIY com Arduino e Relé – Configuração Segura de Alta Tensão
  7. Portão de Triagem de Temperatura Sem Contato para Monitoramento Rápido e Preciso
  8. Jogo Pong Neon em Matriz NeoPixel com Arduino Nano
  9. Volante Joystick Arduino Personalizado para Jogos
  10. Construa um Receptor FM Potente com Arduino e Módulo TEA5767