概要
冬場になると体温35℃ちょっとのジジイにとって腰の辺りが冷えて大変不快。そこで充電式電池を使ったカイロを製作することにした。電池でニクロム線を加熱しその熱で腰の部分を温めようというものである。最初単三のエネループを使おうと思ったが、十分なパワーを得ようとすると携帯する電池の数が多くなり重くなってしまうことが分かった。結局別の目的で購入してあった5Vリチウムイオン電池を使うことにした。まず実験ボードでその可能性を試し、実用機を製作し使ってみた。
−主要部品−
1) 電池: 充電式リチウムイオン電池 MPP-100 (4400 mAh)
2) 発熱体: ニクロム線 0.27 mm x 60 cm (抵抗値=約8オーム)(ダイソー 発泡スチロールカッター用)
3) リレー: ラッチリレー (OMRON G6CK-2117P-US, 3VDC)
4) マイクロコントローラ: 12F629
回路
下に回路図を示す。電池と発熱体(ヒーターエレメント)を直接つないで加熱すれば目的を達するが、途中にラッチリレーを入れて電気の流れを入/断し、温度調整と電池の持ちを長くしようとした。ラッチリレーは2組の入力端子を持ち、一方の入力端子に短時間通電すると出力端子の位置が変わり、そして、もう一方の入力端子に通電すると出力端子が元の位置に戻る。しかも各出力端子の位置を保っておくのに電気を流しておく必要がないという性質を持つ。したがって、2組の入力端子に交互に短時間通電することによって、電池から発熱体へ通電をさせたり、止めたり出来るようになる。
−ラッチレレーの動作−
1) Pin1と8間に通電するとPin3と4間が導通し発熱体が加熱される。,
2) Pin2と7間に通電するとPin3と4間の導通が切れ発熱体の加熱は停止される。
上記リレーの制御は12F629 が担う。そのI/OポートGP4とGP5からリレーの端子を直接ドライブ出来ないのでトランジスタ2SC1815を使った。一方、加熱モードが選択できるようにI/OポートGP0とGP1にスイッチSW1とSW2を付けた。 下表は各モードとSW1及びSW2の位置の関係を示す。
加熱モード(加熱比率%) |
SW1 |
SW2 |
(1) Full加熱モード(100) |
H |
H |
(2) Medium加熱モード(70) |
H |
L |
(3) Low加熱モード (50) |
L |
H |
(4) Lowest加熱モード (30) |
L |
L |
H: +5Vに接続、L: GNDに接続
実験中: 右上の白い紙に包まれたのが発熱体、右下の黒いのがリチウムイオン電池、
中央部左側に小さいラッチリレー、さらにボードの上部に8ピンの12F629が見える
発熱体: 5x7cmの基板に60cmのニクロム線(8W)を這わせてある
線の大部分は表面に出ている。ケーブルとの接続はハンダが
使えないのではネジ止めしてある
−理論的なことなど−
1) どれ位電池がもつか?
使用したリチウムイオン電池 (MPP-100)の電流容量は4400mAh (4.4Ah)である。ニクロム線の抵抗が8オームなので流れる電流 I=V/Rから5/8=0.625Aとなる。4400mAh/625mA=7.04h.
つまり7時間もつ計算になるが実際はそんなに持たないようである。
ワット数W=5VX0.625A=3.125W
2) 発熱量の計算
このリチウムイオン電池のエネルギー容量(Wh)は(電圧)X(電流容量)なので5.0
X 4.4 =22Wh となる。
1Wh=3600J(ジュール)なので、22Wは22X3600=79200Jとなる。
1cal=4.184Jなので、22Whは 79200/4.184=18929calとなる。これは190gの0℃の水を約100℃まで上げる熱量に相当。
一方、小型使い捨てカイロ(サイズ14X11cm、鉄酸化式、30g)の場合の発熱量は、1g当たりの発熱量が2900Jなので、2900X30/4.2=20714カロリーとなる。この発熱量はわずかに今回のリチウムイオン電池より多少高い。大まかに言えばこのリチウムイオン電池の発熱量は小型使い捨てカイロのそれとほぼ等しい。
プログラム
このプログラムの概要は、SW1とSW2から加熱モードを読み込み、その加熱モードに応じたルーチンに飛んで加熱/非加熱のパターンを繰り返すという簡単なものである。ラッチリレーを加熱/非加熱を続行中に駆動しないように注意した(電気を消費するので)。
''****************** プログラミング備忘録 *******************
'Warmer629A.bas 2010.1.9
'This program drives the battery warmer in 4 different modes. (Fullheating, Mediumheating, Lowheating and Lowestheating).
'******** Pin connection ******************
'Pin 1: Vdd (3.0V) - battery operated
'Pin 8: Vss (GND)
'Pin 7: GPIO.0: input - connected to SW1 (H/L selection)
'Pin 6: GPIO.1: input - connected to SW2 (H/L selection)
'Pin 4: GPIO.3: input - connected to MCLR via 4.7kR to reset the system whenever the main SW is turned on
'Pin 2: GPIO.5: output - connected to Tr 1815(2) for driving the relay to disconnect between its pins 3 and 4
'Pin 3: GPIO.4: output - connected to Tr 1815(1) for driving the relay to connect between its pins 3 and 4
'********* ここからがプログラム本体 ***************
Insw1 VAR GPIO.0 'Input SW1 setting ‘以下6行はI/Oピンなどの設定
Insw2 VAR GPIO.1 'Input SW2 setting
Transist2 VAR GPIO.5 'Output Tr1815(2)
Transist1 VAR GPIO.4 'Output Tr1815(1)
CMCON=7 'Disable Comparators
TRISIO=%001011 'GPIO.0, GPIO.1 & GPIO.3 (reset)- inputs, GPIO.4 & GPIO.5 - outputs
Inswcheck:
Pause 200 'Wait 0.2 sec for stabilization
If Insw1=1 and Insw2=1 Then Fullheating ‘以下4行は加熱モードの選択
If Insw1=1 and Insw2=0 Then Mediumheating
If Insw1=0 and Insw2=1 Then Lowheating
If Insw1=0 and Insw2=0 Then Lowestheating
Fullheating: 'heating mode - always ON (100% heating) ‘Full加熱モード
Low Transist2 'Low Tr 1815 (2)
Pause 100
High Transist1 'High Tr 1815 (1) Heater->ON
Pause 200
Low Transist1 'Stop driving Tr 1815 (1)
Pause 60000 'Keep this state for 60 sec
Goto Inswcheck
Mediumheating: 'heating mode - 60sec ON <-> 26sec OFF (70% heating) ‘Medium加熱モード
Low Transist2 'Low Tr 1815 (2)
Pause 100
High Transist1 'High Tr 1815 (1) Heater->ON
Pause 200
Low Transist1 'Stop driving Tr 1815 (1)
Pause 60000 'Keep this state for 60 sec
High Transist2 'High Tr 1815 (2) Heater->OFF
Pause 200
Low Transist2 'Stop driving Tr 1815 (2)
Pause 26000 'Keep this state for 26 sec
Goto Inswcheck
Lowheating: 'heating mode - 60sec ON <-> 60sec OFF (50% heating) ‘Low加熱モード
Low Transist2 'Low Tr 1815 (2)
Pause 100
High Transist1 'High Tr 1815 (1) Heater->ON
Pause 200
Low Transist1 'Stop driving Tr 1815 (1)
Pause 60000 'Keep this state for 60 sec
High Transist2 'High Tr 1815 (2) Heater->OFF
Pause 200
Low Transist2 'Stop driving Tr 1815 (2)
Pause 60000 'Keep this state for 60 sec
Goto Inswcheck
Lowestheating: 'heating mode - 60sec ON <-> 140sec OFF (30% heating) ‘Lowest加熱モード
Low Transist2 'Low Tr 1815 (2)
Pause 100
High Transist1 'High Tr 1815 (1) Heater->ON
Pause 200
Low Transist1 'Stop driving Tr 1815 (1)
Pause 60000 'Keep this state for 60 sec
High Transist2 'High Tr 1815 (2) Heater->OFF
Pause 200
Low Transist2 'Stop driving Tr 1815 (2)
Pause 60000 'Keep this state for 140 sec
Pause 60000
Pause 20000
Goto Inswcheck
'********* プログラムの終わり ***************
'Note:
'AKI Programmer's configurations:
'FOSC - INTOSC(GP4:I/O); WDTE -
Disable; PWRTE – Enable*
'MCLR - Internal ; BODEN – Enable; CP - Disable; CPD - Disable..
結論・余談
1) 電流消費量は発熱体(ヒーターエレメント)ON時に470−480mA、OFF時(他の部分で消費される量)は10mA以下であった。
2) 発熱体のニクロム線は指で触れるくらいの熱さにしかならないので、紙や薄い布を巻いてニクロム線の面を直接皮膚に触れさせて暖をとれる。
3) 実験ボード上では予想通りに動作することが確認された。実際にテストしてみて検討し、実機を製作したい。
4) 費用は、充電式リチウムイオン電池が3,300円、ラッチリレー500円、その他が500円で合計4,300円ほど。
5) 何と言っても電池式カイロ製作の要は電池のパワーで、今回のリチウムイオン電池と同じパワー(5V,4400mAh)を出すにはニッケル水素電池の単三エネループが10本(1.2V,2000mAh,26g)位必要となる(例えば、1.2V X 5本=6V 2000mAhなので、これをもう一組並列に組み合わせると6Vで4000mAhの電源が出来る。そのエネルギー容量(Wh)は(6V X 4A=24Whでわずかにリチウムイオン電池の22Whを超す)。 Am I right? 携帯時に問題になる重さを比較するとリチウムイオン電池130gに対し、エネループ10本の重さは26g x10本=260gと2倍になる。前者の性能の高さが分かる。さらに、どうやってエネループ10本を均等に充電するかも問題。
実用機の製作 (2010.1.14)
下の左の図に示すように45X70mmの基板上にすべての部品がうまく搭載できた。右の図では左が充電式リチウムイオン電池、真中がコントロール基板、そして、右が発熱体である。あとはこれらをいかに体裁よく携帯できるようにするかである。
ダイソーのフタ付きプラスチック容器(45X95X140mm)に電池(底部)と
コントロール基板(上部)がコンパクトに収まった。電源部ケーブルを途中で
つなぐコネンクタも4アンペア型に変え接続不良をほぼ皆無にした。容器全体
をメッシュケースに入れてシャツ内部で首からつるす。
−分かったことなど−
1) Low加熱モード(加熱50%、非加熱50%の繰り返し)で電池は8時間位持つようである。したがってFull加熱モードでは4時間ほど持つ。
2) テッシュペーパーで包んだ(マックで貰ったものを2枚重ねにして)発熱体をシャツ1枚を通して肌に触れた状態ではLowest加熱時でも程よい温度で温まってくるのが確実に分かる。
3) 基板上に赤と緑のLEDで電源が来ているかどうか、加熱/非加熱の状態が分かる。電池の4つのLEDsは消耗状態を教えてくれる。
4) 使い切ったリチウムイオン電池を付属のACアダプターでフル充電するには6時間位かかるようである。
5) ちょっと気になるのは電池の消耗状態を示すLEDsが相変わらずコネクタを抜いても点灯し続けたりすることである。
6) ザウルスなどの電源をバックアップする目的で入手した電池だが、今回の様な目的に適するとは意外だった。軽くて高出力なリチウムイオン電池が注目される理由が理解できる。
7) 今回は加熱モードの選択に2個のスイッチを使ったが、PICをADC付きの12F675に変え、VRを使って加熱モードを細かく設定するのも良いだろう。
8) 使い捨てカイロを冬期に毎日3−4カ月間使う場合の費用で十分今回の電池カイロが製作できる。充電式で捨てるものがないのが良い。
9) とにかく、ジジイの冷え性にどれだけ役立つか試してみたい。
10) ほぼ半年ぶりの電子工作、テーマが浮かばなくて四苦八苦。まわりが凄く見えて怖気づいてしまった感じ。やめてるとハンダ付けが下手になるしプログラミングの仕方も忘れてしまう。
(2010.1.19)
1) 電池・コントロール基板ボックスの携帯方法がまだ定まらないが、Lowest加熱モードで使っても使い捨てカイロ並みに結構温かく快適である。
2) 秋葉原のジャンクショップに中古のリチウムイオン電池が出回っていて電池式カイロに使えそうだが、残念ながら充電器がないのと怖くて素人はいじれない。
3) そんなわけでリチウムイオン電池が手軽に使えるようになったら本格的カイロ(¹Cairo)へ利用有望そうである。
上記実用機の温度設定をボリュームで出来るように改良 (2010.1.27)
1) 12F629の代わりにADCの付いた12F675を導入。
2) 2個のスイッチの代わりにボリューム(VR)を導入し12段階にほぼ連続的に加熱設定が出来るようにした。
3) 高価なラッチリレーの代わりに超小型リレー(A5W-OH-K、5V, 電流消費量20−25mA、¥100)を導入。
-結果、感想など-
1) 部品が減り構造がより簡単になった。
2) リレーの駆動電流20−25mAは発熱体の消費電流470−480mAに比べ極わずかでカイロの持ちにあまり影響しない。
3) 新発売のサンヨーのKBC-L2ASというリチウムイオン電池(5V, 5000mAh, 130g)がこの目的に適するみたい。
4) 先日ある展示会で、今回の自作発熱体の様な形をしたステンレス薄板を透明プラスチックで包んだものを見た。聞いたら発熱体だという。どっかで使われている。
5) 上記の実用機を使ってみた感想は、発熱量や電池の持ちは十分。ただ、電源と制御基板を入れた容器がいまいち持参する際収まりが悪い。
加熱モード表: VRを回してHeatmode0からHeatmode11の設定を選択する。
加熱モード |
加熱ON(時間、秒) |
加熱OFF(時間、秒) |
加熱比率(%) |
Heatmode0 |
0 |
常時OFF |
0 |
Heatmode1 |
10 |
60 |
14 |
Heatmode2 |
20 |
60 |
25 |
Heatmode3 |
30 |
60 |
33 |
Heatmode4 |
40 |
60 |
40 |
Heatmode5 |
50 |
60 |
45 |
Heatmode6 |
60 |
60 |
50 |
Heatmode7 |
70 |
60 |
54 |
Heatmode8 |
90 |
60 |
60 |
Heatmode9 |
120 |
60 |
67 |
Heatmode10 |
150 |
60 |
71 |
Heatmode11 |
常時ON |
0 |
100 |
下の回路図に見られるように大分簡素化された。超小型リレーの駆動電流は20−25mA程度なのでPICのポートに直結した。途中にダイオードなど入れると
電圧が下がって駆動できなくなった。
真中に超小型リレーが見える。発熱体の代わりに電球を用いて実験した。
12F675、超小型リレー、それに加熱モード設定に可変抵抗(VR)を使って大分
コンパクトになった。予想どおり動作することを確認した(2010.2.6製作)。
プログラム
このプログラムではGP0よりVRで設定された電圧をPIC内に読み取り、その値の大きさによって12個の加熱モードのいずれかに飛び発熱体の加熱と非加熱を繰り返すものである(上記の加熱モード表参照)。PICのADCの設定に注意が必要なのと、理由が不明だがPauseコマンドで指定する時間、例えばPause 60000は60秒間待つはずが52秒間しか待たなかった。そこで適当に秒数を加えて調整した。このプログラムは12F675のメモリの約3分の2を占有した。
'****************** プログラミング備忘録 *******************
'Warmer675VR.bas 2010.1.27
'This program drives the battery warmer using a 5k-VR input.
'Comment: Pause command was not accurate with unknown reasons.
'******** Pin connection ******************
'Pin 1: Vdd (5.0V) - Li-ion battery (5V MPP-100)
'Pin 8: Vss (GND)
'Pin 7: GPIO.0: input - connected to Vdd(+5V) and GND via 5k-VR
'Pin 6: GPIO.1: not used
'Pin 5: GPIO.2: not used
'Pin 4: GPIO.3: input - connected to MCLR via 4.7kR to Vdd
'Pin 3: GPIO.4: output - connected to Pin 1 of the relay via Diode
'Pin 2: GPIO.5: not used
'********* ここからがプログラム本体 ***************
ANSEL=%01000001 ‘初期設定
'sets Fosc/4MHz (bit6-4=100) and GPIO.0 as ADC input (analog)
ADCON0=%10000011
'bit7=1(right justified),bit6=0 (Vdd used as volt reference for ADC),
'bit5-4=0 (unimplemented), bit3-2=00 (GP0-Anlog Input),
'bit1=1 (starts right away), bit0=1(on operation)
TRISIO=%001001
CMCON=7 'turns off comparator function
Define ADC_BITS 10 '10-bit ADC used
Define ADC_CLOCK 3 'Internal clock used
Define ADC_SAMPLEUS 50 'Polling is not needed due to use of ADCIN command
Vin var WORD 'Storage for ADC data (入力電圧 0−5Vは10ビット値の0−1023に対応)
RelaySW var GPIO.4 'Relay ON/OFF
ADCloop:
Vin=0
RelaySW=0
ADCIN 0, Vin 'Read Vin from GPIO.0 (AN0) (range 0 - 1023) 加熱モード設定値の読込み
Pause 20
'Divisions of input values (volt) from VR
If (41>Vin) then goto ADCloop ‘Heatmode0 この場合加熱なし
if (Vin>=41) and (Vin<135) then goto Heatmode1
if (Vin>=135) and (Vin<229) then goto Heatmode2
if (Vin>=229) and (Vin<323) then goto Heatmode3
if (Vin>=323) and (Vin<417) then goto Heatmode4
if (Vin>=417) and (Vin<512) then goto Heatmode5
if (Vin>=512) and (Vin<606) then goto Heatmode6
if (Vin>=606) and (Vin<700) then goto Heatmode7
if (Vin>=700) and (Vin<794) then goto Heatmode8
if (Vin>=794) and (Vin<888) then goto Heatmode9
if (Vin>=888) and (Vin<982) then goto Heatmode10
If (Vin>=982) then goto Heatmode11 ‘この場合連続加熱する
Heatmode1:
'10-sec ON <-> 60-sec OFF
High RelaySW
Pause 11500 '10 sec
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode2:
'20-sec ON <-> 60-sec OFF
High RelaySW
Pause 23000 '20 sec
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode3:
'30-sec ON <-> 60-sec OFF
High RelaySW
Pause 34600 '30 sec
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode4:
'40-sec ON <-> 60-sec OFF
High RelaySW
Pause 46200 '40 sec
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode5:
'50-sec ON <-> 60-sec OFF
High RelaySW
Pause 58000 '50 sec
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode6:
'60-sec ON <-> 60-sec OFF
High RelaySW
Pause 60000 '60 sec
Pause 9200
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode7:
'70-sec ON <-> 60-sec OFF
High RelaySW
Pause 60000 '70 sec
Pause 21000
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode8:
'90-sec ON <-> 60-sec OFF
High RelaySW
Pause 60000 '90 sec
Pause 44000
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode9:
'120-sec ON <-> 60-sec OFF
High RelaySW
Pause 60000 '120 sec
Pause 60000
Pause 18000
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode10:
'150-sec ON <-> 60-sec OFF
High RelaySW
Pause 60000 '150 sec
Pause 60000
Pause 53000
Low RelaySW
Pause 60000 '60 sec
Pause 9200
Goto ADCloop
Heatmode11:
'All time ON
High RelaySW
Pause 60000 '60 sec
Pause 9200
Low RelaySW
Pause 100
Goto ADCloop
End
'********* プログラムの終わり ***************
'Note:
'AKI Programmer's configurations:
'FOSC - INTOSC(GP4:I/O); WDTE -
Enable; PWRTE – Enable*
'MCLR - Internal ; BODEN – Enable; CP - Disable; CPD - Disable