Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Kit fumoir à charbon à température contrôlée avec précision – Construisez votre propre chef-d'œuvre BBQ

Composants et fournitures

Arduino MKR1000 × 1
Soufflante brushless 5V × 1
Module driver MOSFET IRF520N × 1
Thermistance NTC 100 kΩ × 1
Plaque d'essai (breadboard) × 1
Fils de connexion (génériques) × 1
Batterie LiPo 3,7V ≥ 700 mAh × 1

Applications et services en ligne

À propos du projet

L'histoire

Les amateurs de fumage au charbon savent que la meilleure saveur vient du charbon. Les fumoirs au propane ou électriques offrent un meilleur contrôle de température, mais perdent cette saveur. Le charbon est capricieux : il faut surveiller constamment la température, ajuster les ouvertures, et recommencer toutes les 30 minutes au fur et à mesure que le charbon se consume. Ne serait-il pas idéal de rester sur son canapé, boisson fraîche à la main, match à la télé, pendant que le fumoir gère tout seul ?

Le projet

Créer un contrôleur qui surveille la température dans le fumoir et ajuste le flux d'air vers le charbon pour maintenir la température cible. Permettre aussi la surveillance à distance des températures du fumoir et des sondes à viande. Basé sur l'Arduino MKR1000 (WiFi intégré, support charge batterie LiPo).

Le matériel

Mesure de température : Thermistance NTC 100 kΩ en pont diviseur de tension sur une entrée analogique du MKR. Choisi car utilisé pour buses chaudes d'imprimantes 3D Prusa (disponible, peu cher). Déjà soudé sur fil silicone haute température pour sonde idéale. La thermistance est insérée dans un tube inox fin (≤ 6 mm) pour protection physique, une extrémité sertie, l'autre sécurisée par gaine thermorétractable.

Pont diviseur : Résistance 10 kΩ en série. Valeur choisie proche de la résistance de la thermistance à 225 °F (107 °C), offrant une bonne plage de mesure (50 °F à 300 °F+).

Broche A0 pour la sonde fumoir (sonde courte sur la grille). Autres broches analogiques pour sondes viande supplémentaires.

Soufflante : Petite soufflante fixée sur l'ouverture du fumoir. Bol inox pour nourriture canine fixé sur l'ouverture, soufflante sur trou au fond. Double fonction : obturer complètement l'ouverture et isoler thermiquement la soufflante du corps du fumoir. Contrôlée par MOSFET canal N (module IRF520N pour facilité). Gate du MOSFET sur broche numérique de l'Arduino.

La construction

Premier prototype sur breadboard. Ponts diviseurs thermistance faciles : 10 kΩ de Vcc (3,3V MKR) vers thermistance, autre borne au GND. Jumper entre milieu du pont et broche analogique. Tube découpé pour sonde, une extrémité sertie en étau, coins pliés pour pointe, thermistance insérée, gaine thermorétractable sur fils.

Côté soufflante : bornes de sortie du module MOSFET sur fils soufflante (polarité). Batterie LiPo + prise JST sur bornes d'alimentation du module MOSFET (polarité). Prise JST branchée sur prise chargeur batterie du MKR. Trois jumpers Vcc, GND, commande du module MOSFET vers MKR. Batterie 10 000 mAh pour grande autonomie.

Sur breadboard : potentiomètre 10 kΩ variable pour tester le sketch (commutation jumper thermistance/potentiomètre), LED + résistance 330 Ω sur broche 0 pour indiquer activation ventilateur.

Le logiciel

Deux parties : sketch Arduino et application Windows Universal (surveillance à distance sur tout appareil Windows 10).

Sketch : Basé sur un sketch serveur WiFi du livre "Programming Arduino Next Steps" de Simon Monk. Crée un serveur web simple affichant les températures mesurées et permettant de régler la température cible. Initialisation : configuration WiFi, IP fixe (pour connexion sans PC), broche 0 en sortie. Boucle : vérifier connexions clients, servir page web. Si requête avec paramètre URL, mettre à jour température cible. Lire température fumoir, activer soufflante si en dessous de la cible, désactiver si au-dessus.

Mesure température thermistance : Lecture analogique → chute de tension sur résistance fixe → loi d'Ohm pour courant I = V/R → même courant dans thermistance → résistance thermistance R = V/I → équation Beta : 1/T = 1/T0 + (1/Beta) × ln(R/R0) (températures en Kelvin).

Page web : Envoi en-têtes HTML + formatage autour des températures mesurées, champ input pour température cible, bouton soumission.

L'application Windows Universal

Permet de surveiller le fumoir depuis le canapé. Charge périodiquement la page web du fumoir, extrait les températures, les affiche, et permet de régler la température cible. Codes sketch et application sur GitHub.

Code

Sketch contrôleur fumoir (Arduino)

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

char ssid[] = "BeeBar2";      // SSID réseau
char pass[] = "9254582716";   // Mot de passe réseau
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() { 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; // Conversion en Fahrenheit }

Sketch + Application Universal : GitHub

Schémas

Fichier Fritzing (Smoker.fzz) : le MKR1000 est représenté par un Arduino Nano (piece non disponible dans Fritzing). Schéma d'image disponible.

Processus de fabrication

  1. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  2. Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
  3. Construire un Iron Man animé avec Arduino : capteurs, sons et relais
  4. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  5. Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
  6. Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
  7. Portique de contrôle de température sans contact pour dépistage rapide et précis
  8. Jeu Pong sur Matrice NeoPixel avec Arduino Nano
  9. Volant Joystick Arduino Personnalisé pour Jeux Vidéo