概要・基本構成
①ホームセンターにあるフライパンとカセットコンロを使用
アルミフレームはNICオートテックより購入
電子工作でおなじみArduinoを使用
②上記①を組み合わせて、加熱調理ロボット的な装置を構成
③今回は試しにお米を炊いてみる
解説
Youtube解説動画
ニコニコ動画解説
https://www.nicovideo.jp/watch/sm44920465
ポイント
●Arduinoでカセットコンロの火力制御
●フライパンも使って、半自動加熱調理 今回はお米
火力調整は、点火、中火、弱火、消火を時間計測で切り分け
●カセットコンロは改造せず、ハンドルに外付けの回転・点火機構を搭載
●ハンドルの回転位置を、可変抵抗で読み取り
●9V乾電池を使用 リチウムイオンバッテリーは不使用(火を使うのでなるべく使用避けたい)
特殊な機材は不要で、ホームセンターで売られているものでも使用できます。
1⃣本体ハード
本体の外観はこのようになっています
アルミフレームはNIOCオートテックから購入
ジョイントアングル材もNICで購入可能ですが、3Dプリンターで造形してコストを抑えています
ギアボックス 可変抵抗~カセットコンロハンドル
可変抵抗とハンドルは同軸上に配置されています。 可変抵抗は秋月電子にて販売されています
これで、回転位置を読み取り、火力調整が可能になります
2⃣電気電子回路
外観はこのようになっています
ただこれだとどうつながっているか全くわからないと思うので、簡易的な回路図がこちらになります
(クリック推奨です)
モータドライバーはMDD3Aという、タクトスイッチが搭載されたものを使用しています。
これで、Arduinoを接続しなくても、電力を供給していれば、タクトスイッチを押して
モータを回転させ、火力調整の事前確認であったり、
コンロでトラブルがあった際に、Arduinoの電源を切って、モータドライバーのスイッチを押して
コンロのハンドルを消火位置まで回転できます(配線が生きていればですが・・・)
3⃣プログラム
const int INPUT_PIN = A1;
int pin3 = 3;
int pin5 = 5;
int VOLUME;
int timec;
enum State {
IDLE, IGNITION, ADJUST_FIRE, COOKINGS, COOKINGF, FINISHED
};
State currentState = IDLE;
unsigned long stateStartTime = 0;
void setup() {
Serial.begin(9600);
pinMode(pin3,OUTPUT);
pinMode(pin5,OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
VOLUME = analogRead(INPUT_PIN); // アナログ値の読み取り
int angle = map(VOLUME,0,1023,0,180);
Serial.print("angle: "); // シリアルモニタに出力
Serial.println(angle);
Serial.print("モード: "); // シリアルモニタに出力
Serial.println(currentState);
switch (currentState) {
case IDLE:
Serial.println("待機中...");
if (digitalRead(12) == LOW) { // スイッチが押されたら開始
analogWrite(pin3,0);
analogWrite(pin5,0);
currentState = IGNITION;
}
break;
case IGNITION:
if(angle>135){
Serial.print("ハンドル回転");
Serial.println(angle);
analogWrite(pin3,0);
analogWrite(pin5,100);
stateStartTime = currentMillis;
}
else{
Serial.println("点火中...");
Serial.println(angle);
analogWrite(pin3,0);
analogWrite(pin5,0);
if ((currentMillis - stateStartTime)/1000 >= 3) { // 3秒経過
Serial.println("点火完了");
currentState = ADJUST_FIRE;
}
}
break;
case ADJUST_FIRE:
if(angle<163){
Serial.println("火力中火調整モード");
Serial.println(angle);
analogWrite(pin3,100);
analogWrite(pin5,0);
stateStartTime = currentMillis;
}
else{
Serial.println("中火維持 調理中");
Serial.println(angle);
analogWrite(pin3,0);
analogWrite(pin5,0);
if ((currentMillis - stateStartTime)/1000 >= 240) {
Serial.println("中火終了");
currentState = COOKINGS;
}
}
break;
case COOKINGS:
if(angle<166){
Serial.println("火力弱火調整モード");
Serial.println(angle);
analogWrite(pin3,100);
analogWrite(pin5,0);
stateStartTime = currentMillis;
}
else{
Serial.println("弱火維持 調理中");
Serial.println(angle);
analogWrite(pin3,0);
analogWrite(pin5,0);
if ((currentMillis - stateStartTime)/1000 >= 300) {
Serial.println("弱火終了");
currentState = COOKINGF;
}
}
break;
case COOKINGF:
if(angle<174){
Serial.println("消火開始");
analogWrite(pin3,100);
analogWrite(pin5,0);
}
else{
analogWrite(pin3,0);
analogWrite(pin5,0);
Serial.println("消火完了");
currentState = FINISHED;
}
break;
case FINISHED:
analogWrite(pin3,0);
analogWrite(pin5,0);
Serial.println("炊飯完了!");
while (true); // 停止
break;
}
delay(100);
}
各火力調整の概念ですが、
よくある料理はハンドルやレバーを調整してから、中火で~分というように
調整し終えた時を0秒としてカウントしていると思います
今回のコードでは、ArduinoのスイッチをONにした瞬間を0secとして
ハンドルを特定の位置に達した瞬間を記憶しつつ、引き続き時間計計測を実施
そして、計測時間と、ハンドル位置に達した時間の差分をとって、中火、弱火の時間が今どれくらいなのかを
判断して、制御を行っています。
もし何かご質問がありましたら、コメントをください
部品名 | 購入先 |
---|---|
Arduino uno | 秋月電子通商orマルツパーツor千石電商 |
可変抵抗 | 秋月電子通商orマルツパーツor千石電商 |
マイクロスライドスイッチ | アマゾン |
Arduinoシールド | アマゾン |
配線 | ホームセンタ |
9V乾電池 | ホームセンター |
カセットコンロ | ホームセンタ |
フライパン | ホームセンター |
アルミフレーム | NICオートテック |
投稿者の人気記事
-
ProjectSR
さんが
2025/04/27
に
編集
をしました。
(メッセージ: 初版)
-
ProjectSR
さんが
2025/04/27
に
編集
をしました。
-
ProjectSR
さんが
2025/04/27
に
編集
をしました。
-
ProjectSR
さんが
2025/04/27
に
編集
をしました。
ログインしてコメントを投稿する