久しぶりの更新になります。
水ロケットでパラシュートを放出する機構を電子化しようと思います。
4号機まではraketfuedのおもちゃ用ゼンマイ(Tommy timer)を使った時限式の放出機構を使っていました。
到達高度の頂点でパラシュート放出できるように電子式の放出装置を作りたいと思います。
目次
パラシュートの放出方法を考える
まず、物理的な放出装置は今までと同様にペットボトルで作ったばねでパラシュートを放出するようにします。
問題は、どうやってふたを固定して、どうやって固定を開放するのか?です。
いままではフタをゴム紐でぐるぐる巻きにしてゼンマイに固定して、ゼンマイが回るとゴム紐が開放される機構でした。
今回は電子装置を使うので、すぐ思いつくのは3つぐらい。
- ふたをナイロン糸で固定して、糸を電熱線で焼き切って解除
- ふたをゴム紐で巻いてサーボに固定して、サーボを回転させてゴム紐を開放
- ふたをヒンジとロックで固定して、ロックを電磁石で引張ってor回して開放
3は構造が複雑になりそうなので却下。面白そうだけど。
2は今までの構造のゼンマイをサーボに置き換えているだけでつまらない。しかも重くなるので却下。
1も電源がある分で重くなるだろうが、2よりは軽くできそうなので1の案で行くことにします。電源はロガーと共用できるので、電源部以外をいままでと同等の質量で作れるとGOOD。
放出装置の動作と仕様を考える
放出装置の構造をいったん決めたので動作を考えます。
動作の流れ
- ロケットの発射を検知(ジャンパをワイヤーで発射台に固定して切断を検知する)
- 最高高度到達までの時間をタイマーでカウントして電熱線をON
結構単純ですね。
2のところを今回はタイマーでやってますが速度検知でできるようにバージョンアップしたい。
電熱線を使うための電源選択
今回は電熱線でナイロン線をカットしますが、このとき電熱線には数Aの結構大きな電流を流してやる必要があります。
通常のアルカリ乾電池では内部抵抗が大きくて単3で2Aほどしか電流を流せません。
対策として大電流を流せるニッケル水素電池を使います。
ということでダイソーで単4のニッケル水素電池を2本買って来ました。搭載する電源は1本で行こうと思いますが予備にもう一本。充電器とセットで300円(+税)という驚きの安さ。
使用するマイコン
今回の電子回路を制御するマイコンはLPC1114を選びました。
これだけあればPCと繋いでmbedで開発ができる mbed LPC1114FN28(スイッチサイエンス)を以前購入していたのでそのまま使います。マイコンだけ取り外して電源を供給してやれば同じ動作で使うことができるので、超簡単に使えます。
今回の放出装置だけに使うにはオーバースペックですが、今後飛行ログ取得機能もこいつに追加していこうと思います。
必要となる電気回路の作成
装置の動作とだいたいの仕様も決まったので必要な電気回路を作っていきます。必要となる回路は以下の3つです。
- 電源回路
- 射出検知回路 (=ワイヤー切断検知回路)
- 電熱線オンオフ回路
電源回路は、電源が1.2Vのニッケル水素電池でマイコンの動作電圧が3.6V~1.8Vなので昇圧してマイコンを動かすのに必要になります。電池を2本使えば動きますが軽くしたいので電池は1本でいきます。
射出検知回路は、ジャンパやワイヤーが外れて回路が切れたことを検知する回路を作ります。
電熱線オンオフ回路は、大電流を流す必要があるのでトランジスタで電熱線に流れる電流をオンオフしてやります。
それではひとつづつ、ブレッドボードで試しながら作っていきます。
電源回路
1.2Vでマイコンを駆動できるように、電圧を3.3Vに変換する回路を作ります。DCDCコンバーターの「HT7733A」を使います。
1.5Vで点灯のLED昇圧回路を参考にさせてもらいました。
ブレッドボード図と写真
マイコンのプログラムは最初に作成されるLED点滅をそのまま書き込んでます。
回路図
電源回路はマイコンLPC1114より左の部分です。
それ以外のLEDと抵抗は動作確認用回路です。
ワイヤーが切れたことを検知する
ロケットが発射されたことを検知するのに、地上に固定したジャンパが外れて回路が切れるようにします。
このワイヤーカットを検知する回路を考えます。
ワイヤー切断検出回路
上記のように、VCCとGNDを抵抗とジャンパを介して繋いで、その抵抗とジャンパの間でGPIO(IN)に繋ぎます。
ジャンパがつながった状態だと、VCCからGNDに向けて電流が流れ、抵抗のVCC側がプラス、GND側がマイナスになります。GPIOはこの時GND側に繋がっているのでマイナスになります。
ここでジャンパを切ると以下の状態になります。
GNDとの接続が切れるので、抵抗に電流が流れなくなります。
電流が流れないと抵抗での電圧降下も起こらない為、抵抗の左側もプラスのままになります。
そしてその先に繋がったGPIOもプラスになります。
なので、このGPIOを入力としてプラスになったらジャンパが切れたと判断できます。
ジャンパが接続されている間は抵抗に電流が流れ続けて電力を消費しますので、抵抗の値はなるべく大きくして電力消費を抑えます。
でもあまり大きくし過ぎるとうまく検出できなくなります。(上の図では100kΩにしていますが、実際は330Ωを使いました)
最初の回路にワイヤカット検出回路を追加
1.2Vでマイコン駆動できる回路にワイヤカット検出回路を追加します。
ブレッドボード図と写真
写真手前に見えている緑色のワイヤーがジャンパ線です。
回路図
テストプログラム
ジャンパーが切れたのを検知したらLEDの点滅速度を変更するテストプログラムです。
#include "mbed.h" DigitalOut myled(LED1); DigitalIn myinput(dp17); int main() { float blinkTime = 0.2; while(1) { myled = 1; wait(blinkTime); myled = 0; wait(blinkTime); if(myinput){ blinkTime=0.8; }else{ blinkTime=0.2; } } }
電熱線でテグスを切る
電熱線でテグス(ナイロン糸)を切ることを考えます。
どのぐらいの発熱量を確保すればいいかよくわからないので、以下のサイトを参考にして検討しました。
参考URL
電熱線で発生する熱量を求める
$$ R= \rho L/S \\
\rho = \rho_0 (1+\alpha t) \\
E=IR \\
P=EI \\
$$
R: 抵抗[Ω]
ρ: 抵抗率[Ωmm]
ρ0: 0℃での抵抗率
(ニクロムは107[x10^-8 Ωm]=1.07[x10^-3 Ωmm])
α: 温度係数
(ニクロムは0.21[x10^-3 /℃])
t: 温度[℃]
(単位はKでなく℃なので注意。ナイロンが溶ける250℃とする)
L: ニクロム線の長さ[mm] (20mm)
S: ニクロム線の断面積[mm^2]
(ニクロム線の直径Φ0.26なので、0.13^2*π=0.053[mm^2])
E: 電圧[V] (ニッケル水素 1.2[V])
I: 電流[A]
P: 電力[W]
ρを求める。
$$ \rho = \rho_0 (1+\alpha t) \\
= 1.07×10^{-3} (1+0.21\times10^{-3} \times 250) \\
=1.126×10^{-3} $$
250℃ぐらいだと5%ほどしか変わらない。
抵抗Rを求める。
$$ R = \rho L / S \\
=1.126×10^{-3} \times 20 / 0.053 \\
=0.425 [Ω] $$
電流Iと電力Pを求める。
$$ I=E/R = 1.2/0.425 = 2.82[A] \\
P = IE =1.2 \times 2.82 = 3.38[W] \\
$$
電熱線単位長さ当たりの電力を求める。
(外部環境を無視すれば)これが電熱線の温度と同等と考えられる。
$$ P/L = 3.38 / 20 = 0.169 [W/mm] $$
実際電熱線に電流を流してナイロン糸を切るテストしてみる
ステンレスのネジを20mmで配置し、その間をニクロム線で結んでネジに電流を流します。
ナイロン糸をニクロム線にひっかけ、5円玉を重り代わり結んでつるします。
ネジはユニバーサル基板に刺さるようなるべく細く、放熱が良いようなるべく長いものを探ました。
この状態で電流を流すと、通電から約8秒で糸が切れました。
ちょっと時間かかりすぎです。
切れるまでの時間は単位長さ当たり発熱量に比例するはずなので、P/Lが倍になるようにしてみます。元々のP/Lが0.169 [W/mm]だったので、
$$
P/L = IE/L = \frac{E^2}{RL} = \frac{E^2}{\rho L^2 / S }= \frac{E^2 S}{\rho L^2} = 0.169 \times 2 = 0.338 \\
L^2 = \frac{E^2 S}{0.338 \rho} \\
L = \sqrt{\frac{E^2 S}{0.338 \rho}} \\
\rho = 1.126 \times 10^{-3}, E = 1.2, S=0.053を代入して、\\
L=14.1mm
$$
ということで、ニクロム線の長さを14mmで張りなおして実験したら確かに約4秒で糸が切れました。
この時の電流は、
$$ I=E/R = \frac{E S}{\rho L}=\frac{1.2 \times 0.053}{1.126 \times 10^{-3} \times 14 } = 4.0 [A] $$
抵抗値は
$$ R = \rho L / S = 1.126 \times 10^{-3} \times 14 / 0.053 = 0.30[Ω] $$
本当は1秒ぐらいで切れるぐらい短くしたいのですが、電流が大きくなりすぎるのでやめておきます。
というのも、今回は購入したトランジスタ(2SD1415A)の許容電流が7Aなのと、ニッケル水素電池の流せる電流量は3C程度のようなので、単4の750mAhだと2.24A程度。短時間頑張ってもせいぜい倍ぐらいが限度と思われます。
思ってたよりニッケル水素の最大電流値が低くて困りました。電池2本にして並列にしようかしら?
回路図
マイコンからの出力をトランジスタへ入れて、スイッチング回路を作ります。出力があったときは電池直結で電熱線に電流が流れるようにします。
抵抗Rは以下のように計算してます。
まず、先ほど計算したように動作時ニクロム線には4A流れます。
2SD1415Aの増幅率は最低2000倍なので、ベースに流す電流は、
4[A]/2000(増幅率) = 0.002[A]
上記が最低限なので安全率を5として、0.002×5=0.010[A]の電流が流せる抵抗値を考えます。
(本当はマイコンから流す電流をこの10mA程度になるようにトランジスタの増幅率を選んでます。2000倍だと普通のトランジスタじゃ足りないのでダーリントントランジスタなるものを使っています。)
R= E/I = 3.3[V]/0.010[A] = 330[Ω]
ということで、使う抵抗は330[Ω]にしました。
安全率は3ぐらいでもいいので、それで計算すると550[Ω]でもOKです。
今までの回路に電熱線によるテグスカット回路を組み込む
つーことで合体っ!
ブレッドボード図と写真
回路図
プログラム
#include "mbed.h" Ticker timer; Timeout onTimer; Timeout offTimer; DigitalOut led1(LED1); InterruptIn int_dp17(dp17); // pin変化割り込み DigitalOut heaterSW(dp26); void attime() { led1 = !led1; } void heater_off() { timer.detach(); led1=0; heaterSW=0; } void heater_on() { timer.detach(); timer.attach(&attime,0.1); offTimer.attach(&heater_off, 10); heaterSW=1; } // ピン変化割り込み処理 // Low->High (ジャンパが抜かれた時) void int_rise() { timer.detach(); led1 = 1; onTimer.attach(&heater_on, 10); } int main() { led1=1; heaterSW=0; timer.attach(&attime, 0.5); int_dp17.rise(&int_rise); while(1) { wait(1); } }
実行結果
実行すると以下の動きをします。
- 0.5秒ごとにLEDが点滅してジャンパの切断を待ちます。
- ジャンパが切断されるとLEDが点灯。
- 10秒後に電熱線へ通電。LEDは0.1秒ごと点滅。
- さらに10秒後に電熱線への通電終了。LEDは消灯。
実際に実行したらナイロン線が切れず。
接続する電源を単3型2つ直列にして動作させたら正常に動作して切れました。
ジャンパー線やブレッドボードを使っているので途中のインピーダンスが高いのかも。
ユニバーサル基板にはんだ付けしたら改善するかもしれないし、だめなら電池2本で行くことにします。
長くなり過ぎたので今回はここまでにします。
次回はリセットスイッチなどの周辺回路も含めてユニバーサル基板に実装したいと思います。