はるまきパタパタ

料理とDIYについて色々書きます。

コミケ92参加報告

報告とお礼

C92の3日目東W32ーbに参加しました。今回の新刊はおかげさまで完売いたしました。手にとって頂いた方はありがとうございます。入手できなかった人には申し訳ありません。

今後の活動

今後、頒布した内容を噛み砕いたものを、何回かに分けてブログ内で情報を更新していきます。C93にも応募する方針です。

引き続き低温調理と、冬に役立つレシピ等を頒布予定です。

 

今後共よろしくお願いします。

 

 

低温調理用のコントローラを作る5

概要

調理コントローラのプログラムの雑な設計と実装を紹介します。

設計

低温調理に求められるのは、温度管理と時間管理です。この内時間管理については、プログラムでやる必要が無いかなと思います。調理終了時には、加熱槽からパックを取り出さなければならないのですが、これに関してはコントローラは何もできません。せいぜいアラーム音をならすぐらいでしょう。

ここでは割り切って、温度管理のみを行うコントローラを実装します。

制御方法

制御方法は、いろいろなものがありますが今回は簡単なヒステリシス制御と、熱容量による制御の二種類を実装します。

ヒステリシス制御

ヒステリシス制御は簡単な制御で、ヒータがONになる温度とOFFになる温度を設定し、現在の温度によってヒータのON-OFFを切り替えます。

閾値が1つのときとくらべてノイズに強く、制御対象の詳細がわからなくてもある程度の制御ができますが、オーバーシュート(加熱しすぎ)が発生するという弱点もあります。

今回使用している熱源は、150Wのヒータなのでオーバーシュートはそれほど気にしなくてもいいでしょう。これを一つ目の制御方法として採用します。

熱容量による制御

今回の制御対象は水温です。一般に、物質の温度とエネルギーの関係は、以下の式で求めることができます。

熱量Q[J] = 熱容量C[J/K] * 温度差⊿T[K]

そして、ヒータが発生する熱量は以下の式で求めることができます。

熱量Q[J] = 電力P[W] * 時間t[sec]

さらに、ヒータの電力と熱容量は調理中に変わることはありません。つまり、有る時間加熱したときの温度変化は以下の式で求めることができます。

温度差⊿T[K] = 係数 * 時間t[sec] 

ここで係数は水の量や食材によって、調理毎に異なるため以下の2ステップをおこなえば水温が制御できます。

  1. 一定の時間加熱し、その間の上昇温度によって係数を算出する。
  2. 目標値と現在値の差(と係数)から、必要な加熱時間を算出する。

このうち2を、一定時間ごとに行うことにより目標の温度にすることができます。時間は水晶発振子によって取得できるので、簡単に実現できそうです。これを二つ目の制御方法として実装します。

PID制御

これも実装したいのですが、今回は見送り。(上の2つで調理ができてしまったので)

実装

実装は特に書くこともありません。Cでサクサク書くだけです。

機能紹介・操作

というわけで、完成したコントローラの紹介です。基本操作はエンコーダで選択、Aで決定、Bでキャンセルです。

電源を入れるとメインメニューが表示され、以下の4メニューがでます。それぞれを選んでAで決定します。

  • Temp Monitor
  • Heat Control
  • Hysteretic
  • Settings

モード紹介

Temp Monitor

温度計です。温度センサーの現在値を表示します。

Bでメインメニューに戻ります。

Heat Control

熱容量による制御をします。目標値を設定すると、係数の計算後、目標温度になるまで加熱を行います。目標温度に到達したら、以降その温度を維持します。

Bでメインメニューに戻ります。

Hysteretic

ヒステリシス制御をします。ヒーターをONにする温度(lower)とヒーターをOFFにする温度(upper)を指定すると、温度に応じてヒーターのON-OFFをおこないます。

Bでメインメニューに戻ります。

Settings

各種設定を行います。

今はパイロットランプ(ヒータON時と、センサー読み取り時のインジケーター)の有効無効のみが設定できます。

(そのうちPIDのパラメータとかを設定できるようになるはず)

 

HEX

ここに置きます。

ThermostaticCooker - Google ドライブ

 

書き込みはISPMK2をつかっている場合は以下のコマンドで

avrdude.exe -pm328p -cavrispmkII -Pusb -u -Uflash:w:cooker_v010.hex:a -Ulfuse:w:0xd2:m

低温調理用のコントローラを作る4

概要

 完成した基板に部品を実装して、低温調理用のコントローラを作成します。

 

コントローラを組み立てる

基板が届きました

 

f:id:harumaki_flipflop:20170812225650j:plain

 基板が届きました。発注から到着まではわりと早かったです。これに部品を実装してコントローラを完成させます。

 

使用する部品の調達

 使用するパーツは、設計時にすでに選定しています。以下のパーツを使います。いろいろ忙しかったこともあり、秋月電子の通信販売で部品の調達を行いました。別に秋月じゃなくてもいいですが、私は秋月大好きマンなので贔屓にしています。

 

部品番号 数量 部品名 通販コード
IC 1 ATMEGA328P-PU I-03142
Q1 1 水晶発振子 32.768KHz P-04005
LCD 1 LCDモジュールAQM1602A-RN-GBW P-08779
J1 1 2.1mm標準CDジャック 基板取付用 C-00077
X_TEMP1 1 ターミナルブロック 3ピン P-01307
X_HEATER 1 ターミナルブロック 2ピン P-01306
S1,S2 2 タクトスイッチ P-03647
ENC 1 ロータリーエンコーダ P-06357
LED1~3 3 5mm LED  
R1,R3,R7 3 470Ω カーボン抵抗 1/6W  
R2,R4~6 4 10KΩ カーボン抵抗 1/6W  
R8~11 4 100Ω カーボン抵抗 1/6W  
C1~3 3 1μF 積層セラミックコンデンサ  
C4~8 5 0.1μF 積層セラミックコンデンサ  
JP 1 2×2ピン 2.54mmピッチ ピンヘッダ  
- 2 ジャンパピン 2.54mmピッチ  
CON1 1 2×3ピン 2.54mmピッチ ピンヘッダ  
CON2 1 1×6ピン 2.54mmピッチ ピンヘッダ  

 

はんだ付け

 特段いうことも無いです。背が低くて、熱に強い部品から実装していきます。一号機は色々する予定なので、AVRは直接はんだ付けせずにICソケットを噛ませます。LCDと水晶発振子は、はんだだけだと固定強度に不安があるので、別途ホットボンドで固定しました。

 はんだ付けがおわるとこんな感じ。温度センサも接続しています。f:id:harumaki_flipflop:20170812225659j:plain

はんだ付けの確認

 検図済みですし、特に検証はしなくていいでしょう。はんだ付けが失敗していないかだけ確認します。 

 

動作確認

ジャンパの設定

 ACアダプタの極性がどちらでもいいようにジャンパを設けました。センタープラスのアダプタを使うときは1-2、3-4と接続します。

温度センサの接続

 Amazonで買った温度センサを接続します。左のコネクタにそれぞれ接続します。大体黒がGND、赤がVCCです。

 

プログラムの書き込み

 ここまできたら、プログラムを書き込みます。CON1にAVRライタを接続してPCからプログラムを焼きます。

f:id:harumaki_flipflop:20170812234531j:plain

これでコントローラの完成です。

 プログラムの実装と中身については別途紹介します。

 

 

お知らせ

とりあえず、告知です。

コミケに、低温調理の本出します。

 

日曜日 東地区“W”ブロック-32b 

 

ちょっと本業が忙しいので、そのうちコンテンツを更新します。

 

 

 

Elecrow での穴加工

概要

Eleclowでの穴の指定方法まとめ。

 

長穴

DCコネクタとかの取付用に、長穴を開けたい場合があります。EagleではMillingレイヤに書き込むことで実現できます。最小1mm幅の穴が作成できます。

この方法で指定した穴は、特に指定しないとメッキ加工されます。メッキ加工が不要ならば、その旨をNOTE.TXT等適当な名前のファイルに書き込んで、ZIPに忍ばせておけばよいと思います。

 

スルーホール・普通の穴

Eagleでのレイヤは、Drills/Holesレイヤです。スルーホールだけならば、*.TXTを提出します。

普通の穴も開ける場合は、ファイルをスルホール用のデータ(*-PTH.TXT)と、非スルホールのデータ(*-NPTH.TXT)の2つを提出します。

 

*.TXTの提出だけでも、データを見てスルホール/非スルホールをElecrowの中の人が判断してくれている説もありますが、分けておいたほうが無難です。

Elecrowのサイトで入手できるCAMファイルは、スルーホールだけの設定になっています。普通の穴も開ける場合は、CAM出力時にHolesレイヤの指定を外してDrillsのみで出力し、後からProcess SectionでHolesを追加出力するのが良さそうです。

 

下の画面で、右のリストで出力するレイヤを指定できます。

f:id:harumaki_flipflop:20170221003826p:plain

 

困ったときは

「ここをこうしたいんだけど、あってる?間違ってたら連絡くれ」とメモを残しておけば、Elecrowの技術者側で、ある程度融通を効かせてくれます。

困ったら、素直に問い合わせてみるなりするのがやはり正道です。Twitterが反応はやくておすすめです。

 

 

eagle+elecrowでPCB発注まとめ

概要

eagleでデザインしたPCBを、Elecrowに発注する際の色々をまとめます。

対象の工程は、ガーバーの出力から商品の受取までで、PCBの設計は完了している状態から開始します。

 

基本の流れ

基本的には、以下のページを参考にしてもらえば問題ないと思います。

make.bcde.jp

 

Elecrowはここ。

www.elecrow.com

デザインルールチェック

基本は出てきたエラーを潰していくだけ。

”Stop Mask”エラーが山ほど出る場合があります。これは、シルクがStopレイヤにかかっているときにでます。無視してOKです。

Elecrowに限った話ではないですが、DRのギリギリを攻めると不良率が高くなります。格安PCBサービスを使う場合は、攻めない設計が無難だと思います。

 

ガーバーデータの出力

出力後に確認しよう

出力した後に、ビューワーなどで確認するとミスがわかりやすくて良いです。特にシルクについては、サイズや位置のずれが結構あるので、やっておくと吉。

私は、ビューワーにgerbvを使っています。

sourceforge.net

 

先に発注用ファイルを抜き出す

やっておいたほうがいいです。余分なファイルが混ざっているとミスも見つかりづらいですし、発注時に間違えると面倒です。

適当に作ったWindows用のバッチおいておきます。適当な名前.batとしてeagleプロジェクト直下に置いて使ってやってください。 

@echo off

setlocal

 

echo "Extract Gxx Files"

 

set /P DST_DIRNAME="output dir name:"

 

mkdir %DST_DIRNAME%

 

echo "Top layer:*.GTL"

move *.GTL %DST_DIRNAME%

echo "Bottom layer:*.GBL"

move *.GBL %DST_DIRNAME%

echo "Solder Stop Mask Top:*.GTS"

move *.GTS %DST_DIRNAME%

echo "Solder Stop Mask Bottom:*.GBS"

move *.GBS %DST_DIRNAME%

echo "Silk Top:*.GTO"

move *.GTO %DST_DIRNAME%

echo "Silk Bottom:*.GBO"

move *.GBO %DST_DIRNAME%

echo "NC Drill:*.TXT"

move *.TXT %DST_DIRNAME%

echo "Mechanical layer :*.GML"

move *.GML %DST_DIRNAME%

 

echo "end."

pause

 

ビューワでドリルの位置がずれる問題

ElecrowのCAMファイルでは、ドリルデータが.TXTで出力されます。これはEXCELLONという形式なのですが、一部のビューワでは位置ずれが出て、正常に読めないことがあるようです。(Elecrowでの製造はこの形式で問題なし)

ビューワで確認したい!という場合は、CamProcessor画面のDrillsHolesタブで、出力フォーマットにEXCELLON_24を選んで、Process Sectionボタンから別のTXTデータを出力してみてください。これなら問題なく確認できると思います。

f:id:harumaki_flipflop:20170216220128p:plain

 

発注

発注は、適当に項目を選んでカートに入れてお支払してください。

ちなみに、英語で住所かけなかったらローマ字でOKです。船だろうが航空機だろうが、最初は”Japan”しか見ないので。Japan以降の住所を確認されるのは、国内に入ってからなので問題ないです。

支払いは、クレジットカードで支払ったほうが、Paypalよりも若干レートが有利です。微々たる差かもしれませんが。

 

着荷

後は待っていれば届けてくれます。Elecrowは発送時に写真付きメールでお知らせしてくれます。

だいたい1枚から3枚ぐらいおまけでついてきます。これはElecrowのサービス精神の現れと同時に、不良があっても許してねという意思表示(だと思っています)なので、不良品が入っていたら残念、なかったらラッキー程度で構えたほうがいいです。おまけに期待しちゃダメ。

届いたらTwitterで写真付き報告すると、公式アカウントに補足されます。

SSRでACをPWM制御する

概要

 家庭用電源などのACを、SSRPWM制御します。gnuplotのリハビリも兼ねて。

 

SSRとは

 Solid State Relayの略です。半導体を使ったリレーのことです。機械接点がないので壊れにくいのですが、リレーとは異なる動きもするので注意が必要です。

 

OFFのタイミングは制御できない

 SSRは、トライアックという半導体部品で回路のオンオフを実現しています。ゲートに小さな電流を流すことで、T1,T2間を導通させることができます。

www.tij.co.jp

 しかし、ゲートへ電流を流すのをやめたとしても、トランジスタのようにオフにはできません。一度T1,T2間が導通すると、電流が流れ続ける限りONのままです。

 交流の場合は、電流がゼロになるタイミングがあるので、そのタイミングでOFFになります。つまり、ごく短いパルスをゲートに加えると、50Hz地域なら最大10msだけONになります。

 原理上、直流は制御できません(ONにはできるけど…)直流の場合は、リレーやFET、IGBTを使いましょう。

 

デューティー比=エネルギー比ではない

 下図は、デューティー比10%のときのSSR動作イメージです。素直に実装しようとすると、こんなイメージを持つかと思います。

f:id:harumaki_flipflop:20170123232225p:plain

  これでは、負荷に10%のエネルギーを与えられていません。

 DCでは電圧が一定のため、デューティー比とエネルギー比が一致しますが、ACは電圧が変化するためデューティー比とエネルギー比が一致しません。もちろん計算で求めることができますが、三角関数使うので、少し面倒です。

 

 タイミングがシビア

 SSRを使ったPWMでは、OFFのタイミングが負荷側電源の周期に依存します。正確に制御するためには、制御入力のパルス周期と位相を負荷側電源の周期×2(または×1)に合わせてあげる必要があります。

 

 ダメな例1。電源周波数50Hz、PWMのパルス周期11ms、周期がずれている場合のイメージです。

f:id:harumaki_flipflop:20170124002052p:plain

少しづつずれていって、長期的にみると出力50%になってしまいます。  

 

 ダメな例2と3。電源周波数が50Hz、PWMのパルス周期10msと周期は合っているが、位相がずれている場合のイメージです。f:id:harumaki_flipflop:20170123232233p:plain

 

f:id:harumaki_flipflop:20170123232228p:plain

どちらも10%ではないですね。マイコンから制御しようと思うのであれば、AC100Vと周期・位相を合わせるのは大変です。絶縁も大変だし、部品が増えるし…。

 

ではどうするか

 パルス周期を電源周期に合わせるのではなく、長くしましょう。パルス周期を長いほど、出力の精度が上がります。

 下図は、電源周波数が50Hz、パルス周期100sデューティー比40%です。

f:id:harumaki_flipflop:20170123232239p:plain

このようにすれば、位相を気にせず可変出力が得られます。