精密温度制御チャコールスモーカーキット:Arduino MKR1000で極上BBQを実現
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino MKR1000 | 1 | Wi-Fi内蔵、LiPo充電回路内蔵、3.3V動作 |
| 5V ブラシレスブロワーファン | 1 | スモーカー給気口に取り付け、風量で火力制御 |
| MOSFET IRF520N ドライバーモジュール | 1 | ファンPWM制御用、ロジックレベル駆動対応 |
| 100kΩ NTCサーミスタ | 1〜複数 | スモーカー内温度・肉芯温度測定用、高温シリコンケーブル付き推奨 |
| ブレッドボード | 1 | プロトタイピング用 |
| ジャンパーワイヤー | 1セット | |
| 3.7V LiPoバッテリー(≥700mAh) | 1 | MKR1000のJSTコネクタに直結、長時間駆動用 |
| 10kΩ 抵抗 | 複数 | サーミスタ分圧用 |
| ステンレスチューブ(1/4インチ以下) | 適量 | サーミスタ保護用プローブケース |
| 収縮チューブ | 適量 | プローブ端末処理用 |
| ステンレス製ドッグフード皿(小) | 1 | 給気口カバー兼ファンマウント・断熱スペーサー |
使用するソフトウェア
- Arduino IDE - MKR1000スケッチ開発
- Microsoft Visual Studio 2015+ - ユニバーサルWindowsアプリ開発(リモート監視用)
プロジェクトの背景
本格的なBBQスモーカーでは、炭火(チャコール)を熱源とすることで最高の風味が得られますが、温度管理が非常に困難です。ガスや電気スモーカーは温度制御が容易ですが、炭火特有のスモークフレーバーが出ません。本プロジェクトは、炭火の風味を損なわず、自動で目標温度を維持するコントローラーをMKR1000で構築するものです。ブロワーファンで給気量を調整し、スモーカー内温度を目標値(デフォルト225°F ≈ 107℃)にキープします。さらにWi-Fi経由でスモーカー温度・肉芯温度を遠隔監視・目標温度変更が可能です。
ハードウェア設計
温度プローブ(サーミスタ)
- 100kΩ NTCサーミスタ(3Dプリンター・ホットエンド用として広く入手可能・安価)
- 高温対応シリコン絶縁ケーブル付きのものを選定、または自作
- ステンレスチューブ(1/4インチ以下)にサーミスタを挿入、片端をバイスで潰して密封、もう片端を収縮チューブでケーブル固定
- 分圧回路: 3.3V - 10kΩ抵抗 - サーミスタ - GND、中点をアナログピン(A0〜)に接続
- 10kΩ選定理由: 107℃(225°F)付近でサーミスタ抵抗≈10kΩとなり、分圧比が最も良好なため
- 測定範囲: 約10℃〜150℃以上をカバー、十分な分解能
ブロワーファン制御
- スモーカー給気口をステンレス皿で完全覆い、中央にブロワーファンを取り付け
- 皿が給気口を塞ぐ役割と、スモーカー本体熱からファンを断熱する役割を兼ねる
- IRF520NモジュールでファンをPWM制御(ゲート→MKR1000デジタルピン)
- ファン電源はLiPoバッテリーから供給(MOSFETモジュールの電源端子へ)
- LiPoはMKR1000のJSTジャックに接続し、内蔵充電回路で管理
プロトタイプ実装(ブレッドボード)
初期実装ではブレッドボード上に全回路を構築。デバッグ用に以下を追加:
- 10kΩ可変抵抗: サーミスタ代わりに電圧可変、スケッチ動作確認用
- LED + 330Ω: ファンON/OFF指示用(ピン0接続)
ソフトウェア設計
Arduinoスケッチ(Webサーバー機能内蔵)
Simon Monk著「Programming Arduino Next Steps」のWi-Fiサーバースケッチをベースに改造。固定IP割り当てでアクセス容易にし、シンプルなHTMLページで温度表示と目標温度設定を提供します。
主要処理フロー
- Wi-Fi初期化、固定IP設定、Webサーバー開始(ポート80)
- loop()でクライアント接続待機
- リクエスト受信時:
- HTTPヘッダー解析
- ルートパス("/")以外なら404
- URLパラメータ
t=温度があれば目標温度更新
- サーミスタ読み取り → 温度変換 → 目標温度と比較 → ファンON/OFF制御
- HTMLレスポンス生成・送信(現在温度テーブル + 目標温度設定フォーム)
サーミスタ温度変換(ベータ定数式)
float ThermisterTemp(float Vtherm, int R0therm, int Rfixed, int Beta, int T0) {
// 固定抵抗の電圧降下から電流計算
double I = (3.3 - Vtherm) / Rfixed;
// サーミスタ抵抗計算
double Rtherm = Vtherm / I;
// ベータ式: 1/T = 1/T0 + (1/Beta) * ln(R/R0)
// 全てケルビンで計算
T0 += 273.15;
double T = 1.0 / ( (1.0/Beta) * log(Rtherm/R0therm) + (1.0/T0) );
// 華氏変換して返却
return (float)((9*(T-273.15))/5) + 32;
}
パラメータ例: R0therm=100000(25℃時), Rfixed=10000, Beta=3950, T0=25
ユニバーサルWindowsアプリ(リモート監視用)
Windows 10デバイス(PC、タブレット、スマホ、Xbox等)で動作するUWPアプリ。定期的にMKR1000のWebページを取得・解析し、温度をグラフ表示。目標温度の遠隔変更も可能。ソファでくつろぎながらスモーカーの状態を把握できます。
製作のポイントとトラブルシューティング
- サーミスタキャリブレーション: 実際の沸点・氷点で実測し、Beta定数・R0を調整すると精度向上
- ファンPWM周波数: MKR1000デフォルト(約732Hz)で動作するが、ファンによっては可聴ノイズ発生。必要ならタイマー設定で周波数変更
- 制御ロジック改良: 現状は単純なON/OFF制御(ヒステリシスなし)。オーバーシュート防止のためヒステリシス幅(±5°F等)またはPID制御の導入を推奨
- 複数プローブ対応: A1〜A6に追加分圧回路を実装し、肉芯温度を同時監視可能(スケッチは7ch分ループ対応済み)
- 電源管理: 10,000mAhクラスのLiPoで数十時間駆動可能。MKR1000の充電機能で給電しながら運用も可
- 防水・防塵: 実運用時は防水ボックス収納、プローブ接続部は防水コネクタ化推奨
拡張アイデア
- PID制御実装で温度安定性向上(オートチューニング機能付き)
- 肉の目標芯温度設定と到達通知(プッシュ/メール/ブザー)
- スモーク木材投入タイマー・リマインダー機能
- データロギング(SDカードまたはクラウド:ThingSpeak, Firebase, AWS IoT等)
- Webアプリ化(React/Vue等)でクロスプラットフォーム対応
- 音声アシスタント連携(Alexa/Google Home: "スモーカーの温度を教えて")
- ソーラーパネル充電システム統合でオフグリッド運用
完全なソースコード
GitHubリポジトリで公開中(スケッチ + UWPアプリ):
https://github.com/DuncanBarbee/SmokerController
回路図(Fritzing)
FritzingにMKR1000パーツがないため、Arduino Nanoで代用して作成:
Smoker.fzz- Fritzingプロジェクトファイル- ブレッドボード実装写真も参照
参考文献
- Simon Monk, Programming Arduino Next Steps: Going Further with Sketches, McGraw-Hill
- NTCサーミスタ特性とベータ定数式の解説: 各種電子部品メーカーデータシート
- MKR1000公式ドキュメント: Arduino.cc
製造プロセス
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- 非接触温度スクリーニングゲート:Arduino MKR1000で迅速・高精度な検温
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- ArduinoとTEA5767で作る高性能FMラジオ受信機
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き