« 2011年7月 | トップページ | 2011年9月 »

2011年8月の4件の記事

2011年8月24日 (水)

遂にSparkFunガイガーカウンターの不具合を解決した

 とうとう、SparkFunのガイガーカウンターキットの不具合(と言って良いだろう)の原因を解明した。もし、同じこのキットをお持ちの方は、この記事の最後に出てくる改修を出来る限り早く実施された方が良いだろう。さもないと、虎の子のガイガーミュラー管LND712を失う可能性が高い。

S_p8244149なぜ高電圧のまま出荷されていたのか理由がわかった(8/22/2011)
 SparkFunのガイガーカウンターキットの高圧部は、高入力抵抗の電圧計でも1500V近く、分圧器(1GΩ)を使ったオシロでも同じくらいの電圧がかかっていることが確認された。2種類の測定で同じ値だ。この電圧に間違いないだろう。このキットのガイガー管(以下GM管)はLND712で定格は500V、この電圧は余りにも高すぎる。

 Sparkfunのフォーラムには、以前の記事でも紹介したように、900V以上電圧が出ているよというユーザーの投書があり、Sparkfunから調べておくという返事があってそのままになっている。

 しかし、発振回路を調整して500Vに下げると、こんどは放射線パルスを感知しない。ガイガーカウンターとしての機能を果たさない。仕方がないので、元へ戻すと、高圧部から、異音が発生して電圧が断続的に低下し、正常な観測が出来なくなる。このブログにも同じような悩みを持っている人からのコメントがある。

 こちらで最初、高圧がでなくなったのは、当方の原因(配線パターンに接着剤をつけた)のようだが、電圧が高すぎることについては全く思い当たる節はない。フライバックトランスの出力は、オシロで見た限りでは、p-pで160~180V、3倍圧整流回路を通って、500V近辺になるはずだが、ウェブ情報などによると、フライバックトランスによる発振は安定でなく共振すると突然上がったり下がったりすると言う。

 そのため、Sparkfunがお手本にしたらしい回路には、ツェナーダイオードを直列にした電圧制限回路が入っており、一定の電圧以上では、ドライバーに制限がかかって出力が下がるようになっている。ところがSparkFunの回路は、なぜかこの部分が省かれている。

 いずれにしても、定格にすると機能しない。高圧に戻すと検知はするものの、異音が出て電圧が下がる。進退窮まって、もうSparkfunのキットは諦めようと思っていた(前記事にはそう書いた)ときのことである。

S_p8214123 GM管からの波形をオシロで見るともなしに見ながら、ふと、このGM管の放射線検知によるパルス波形が、これまでのウェブで見たお馴染みのパルス波形でなく、えらく派手なのに気がついた。

 ふーむ、ウェブで見るパルスは一回限りで、こんなに20ms近い連続したパルスではない。500Vではこのキットでは検知しないが、もしかしたら、このGM管はパルスを出していても回路が認知していないだけなのではないかという感じがしてきた。

S_p8224124 500Vに電圧を下げる。前のようなパルスは発生しない。つまり検知しない。オシロのスキャンの時間を一旦長くしておいてから、様子を見る。おっ、何か非常に短いがパルスが出ている感じがする。少しづつスキャン時間を短くしていく。そうだ、1現象ではなく、GM管から引き出されている信号出力にもオシロをかけてみよう。さらにトリガーをAutoでなく、検知したらそこで止まるNormalモードにしてみた。

S_p8224125 ビンゴ!である。トランジスターのベースには綺麗なパルスが入っているのが確認できた。間隔は、環境放射線の線量に近い間隔だ。なーんだ。ちゃんと検知しているではないか。それなのに何故マイコンの方には伝えられないのだ?

 回路図を見る。おおお、検知トランジスターのコレクターに4.7μFのコンデンサーが入っている。今まで気がつかなかったけれど、こんなに大きな時定数では、GM管の短いパルスは吸収されてしまうはずだ。

 わかったぞ、わかったぞ。このコンデンサーを使っていると言うことは、さきほどの派手なパルスを1パルスにするための定数だったのだ。今までの事実の断片が、次々につながって確かなストーリーが出来上がっていく。全部の謎がずるずると解けていくのがわかる。このコンデンサーの定数が動かぬ証拠だ。

 Sparkfunの開発者は、何らかの理由で電圧制限回路を省略し、電圧が1500V近くに上がっていることに気づかず、そのときのGM管の高圧でのパルス挙動を通常のパルスと勘違いし、このパルスで1カウントになるように、このコンデンサーを調整したのだ。

恐らく内部抵抗の低い計測器で高圧を測ったのだろう。高圧部の測定値が実際よりかなり低く、フライバック発振の電圧を見ているので3倍圧整流回路を通っても500V以下と確信していたに違いない。

 1500V近辺のLND712の放射線感知の波形は、多数のパルスが長時間でる(20ms以上)。設計者はこれに合わせて、信号検知の時定数を大きくし、結果として、通常のGM管の反応の時はパルスを拾わなくなってしまった。本来のGM管の反応パルスは、非常に短く(100μs程度)、この定数では隠れてしまう。

 アメリカでは余り問題にならず、日本のユーザーで「動かなくなった」という声があるのは、アメリカが日本に較べれば、圧倒的に湿度が低いため、数倍の電圧でもおかしくならなかったのだろう。

 日本の湿度はアメリカでは想像できないほど高い。これによって、LND712の絶縁が限度を越えてしまった可能性が高い。カンッカンッと音がしていたのは、定格の3倍近い電圧を喰らってリークしているGM管の悲鳴だったのだ。危ない、危ない。

 謎が解ければ、対処の方法は簡単だ。基板上の4.7μFのコンデンサーをはずし、少し極端だが、0.1μFに減らしてみる。よーし、良いぞ、500Vでも、しっかり反応をするようになった。オシロでみると少し少なすぎてパルスを余分に集めてしまいそうだが、これはあとで調整できる。

S_p8234148 500Vに下げれば、当然GM管からは全く異音はしなくなる。良かった。GM管は壊れていなかった。それにしても、GM管というのは丈夫な機器のようだ(冷戦という戦時仕様だからかも)。

Sparkfunのガイガーカウンターキットの修正方法(8/23/2011)
 Sparkfunのこのキットを持っている人は、早急に次に説明されている部品を交換したほうが良い。そうでないと、GM管がこわれるか、測定不能になる。

(1)発振回路のC2の10μFを1μFに替える。
  これで、GM管の電圧は、1500Vから600V程度に下がる。このままでは、パルス
  を拾わ ないので、次の(2)を行う。

(2)SIGをとりだすバッファートランジスタコレクタにあるC9 4.7μFを0.1μFに下げる。
    これでLND712の正規パルスを拾うようになる。ただし、この定数は調整する
  必要があるだろう。余り小さいと主パルスに付随する弱いパルスを独立した
  パルスとして拾ってしまう可能性がある。

Sparkgeigertop823 (1)は1μFより、0.5μFにした方が良いかもしれない。( 1μでも定格の500Vを超える)。一番良いのは、前回記事の海外サイトのオリジナル回路のように、ツェナー(またはバリスター)で高圧電圧を測りフィードバックして制御するのが一番確実だ。ブロッキング発振は、調整が難しい。原作者はそれを知っていて電圧制限回路を加えていた。これならツェナーダイオードで設定した以上の電圧はかからない。

 面実装の部品を取り外すのは通常では難しい。10μFのチップコンデンサーは2012クラスで、この程度なら、半田ごて一本で辛うじてはずせると思うが、4.7μFのコンデンサーは大きくてパタンが離れているので、はずすのは苦労するだろう。半田ごて2本あればとれると思うが、簡単にとるには、所長の愛用しているサンハヤトの低温特殊ハンダをお勧めする。少し高い(千石電商で¥4200)が、こういう表面実装部品のとりはずしはうそのように簡単になる。

| | コメント (14) | トラックバック (1)

2011年8月22日 (月)

ガイガーカウンター制作は迷走が続く

DC-DCコンバーターの製作(8/17/2011)
 SparkFunのガイガーカウンターの修復はともかく、CHANEYのキットの方も実装を進めなければならない。同じケースに入れるとしても、CHANEYの9Vの電源が問題だ。9Vを供給する006Pの電池は、少し古い電子機器には良く使われているが、容量が小さく、交換の頻度がばかにならない。

 ここからMega328などの5V電源を単に電圧降下で熱にしてしまうレギュレーターで作るのは地球資源に優しくない。特に006Pについては、前からリチウムバッテリーとDC-DCコンバーターで代わりになるものを作ってやろうと、DigiKeyでICチップを買ってあった。

 LM2735という石である。ストロベリーリナックスの5~20V可変のDC-DCコンバーター基板に使われている(そこでこのチップを知った)。この基板は、このあいだのフォトフレームの12V電源に使ってとても具合が良かった。大電流(最大500mA)が供給できるし、シリーズレギュレーターと違って効率が良い。熱を持たない。

 すっかり気にいったが基板の価格が少々お高い(¥945)。そこでチップだけ買って(¥322)自作しようと思っていた。買ったのは大分前で、なかなか実装する機会がなかったがちょうど良いチャンスが巡ってきた。ブレッドボードではうまく動かないという話を聞いていたので(発振回路が微妙なのだそうだ)、直接、基板を切り出して作りこんだ。

S_p8224141 誤配線もなく、DC-DCコンバーターはスペック通りの電圧を出力し始めた。半固定の抵抗をまわして電圧を調整する。うむ、問題ない。100Ωのダミーの負荷をかけて電圧を見る。よーし、100mAでも、電圧降下も少なく、無負荷のときと変わりがない。これでSBM-20の電圧も調整してやろう。

 CHANEYのキットは、9Vから少しづつ下げていって、結局コンバーターなしの裸の5Vでも辛うじて動作することがわかった。ただし、トランスが小さくうなりだし、余り機械には良くなさそうだ。7Vくらいが一番省電力レベルか。

大惨劇が起きた(8/18/2011)
 機嫌よく、DC-DCコンバータの可変抵抗器を動かしながら、最適な動作電圧をテスターで測っている時である。大事件が起きた。コードを少し引っ張ってCHANEYのキットが机上を滑った途端、突然、連続するガイガーカウンターのパルス音とともに激しく青色LEDが点滅するのが目に入った。

 ややや、何が起きた。とりあえず電源をコンバーターから抜く。うわあ、いけない。机上の金属製ピンセットが基板の裏側に入り込んでいる。高圧部が電源回路に触れた可能性がある。頭の中から血が引いていく。これは大変なことになったぞ。

 まず、ピンセットを取り除き、キットの外観に何も起きていないことを確認し、気を鎮めてから電源を入れ直す。DC-DCコンバーターの電圧が上がらない。何い、こちらがやられている? Vccに高圧が触れたのだ、当然こちらにも影響があるだろう。予期せぬ事態にさらに気が動転する。

 LM2735が死んでしまったようだ。やれやれ予備は買ってあるが、どうもついていない。この石は、我家の9V電源の機器(音楽演奏用チューニングメーター、予備のテスターなど)の代替電源用に使うつもりだったのに、替えがなくなってしまう。

 背に腹は代えられない。チップを取り替える。よし、ちゃんと電圧が戻った。電源を入れ直す。うーむ、全く動作する気配がない。やっぱり本体も大分やられているようだ。おお、NE555が熱い。ここがやられたか。

 NE555を昔々買ってあったセカンドソースのTA7555に取り替える。熱は持たなくなったが動かない。ふむ、ドライバーのトランジスター(以下TR)も熱を持っている。そうか、ICはことごとくやられたか。

 部品表を見ると、TRの2N3906は汎用の2SA1015(2SC1815のコンプリメンタリー)と殆ど同じということなので、これもとりかえる。再度、電源ON。おお、LEDが点いた、と思った瞬間、2SA1015のところで「パチッ」と大きな音がして、淡い煙が見えた(ように思う)。うわあー、何だ何だ。まだ他にも悪いところがあるのか。もう、完全に気が動転して頭の中が真っ白だ。何をして良いのかわからない。

何とかCHANEYガイガーカウンターキットを元へ戻す(8/19/2011)
 暫くして、少し落ち着いたので回路図を確認する。Vccに高圧がかかったといっても、微小電流である。抵抗器やトランス、コンデンサーが壊れる可能性は少ない。壊れる可能性の高いのはICだけである。それでどうして交換したTRが爆発する? そんな馬鹿な。気を落ち着けて資料を読み直す。2N3906は日本でも売られているようだ。あああ、そこの説明に「ピンアサイン注意!」とある。

 しまった。2N3906は、ピンアサインがEBCなのだ。ここへ2SA1015をそのままつけると、ECBなのでベースにコレクタ電圧がかかってしまう。良かったー。これが原因だ。ピンを歪めて(これ結構、難しい)、もういちど半田付け。恐る恐る電源を入れ直す。もう、異常なことは起きない。

 しかし、高圧は発生しない。他のICも疑わしいが、こいつらが動かないにしても高圧が出なくなることはない。うーむ、SparkFunに続いて、CHANEYも壊してしまったか。夜ももう遅い。今日はこれくらいにしておこう。暗い気持ちで作業を終える。

 俺もこりない男である。次の日の午後には秋葉原に立っていた。最後の可能性、NE555を買いにやってきた。ついでに独自の高圧回路を作るための部品も調達する。ウェブを渡り歩いて、大分、高圧回路にも詳しくなった。自前で作れそうだ。鈴商では、壊れているかもしれない高耐圧トランジタ(2SC4003)も手に入れた。高圧用のコンデンサーもここで買う。この店は目が離せない。千石、秋月にない商品が揃っている。

S_p8144114 部品を持ち帰って、まずはTA7555をはずしてNE555にしてみる。仕様的にはセカンドソースといわれるとおりピン互換のはずなので動かないことに変りはないとは思うが、ものは試しである。それこそ祈る気持ちで念をこめてスイッチを入れる。これで動かなければ自前の回路開発に行く。さあ、どうだ。やったー、青色LEDが瞬き、スピーカーからクリック音がしてSBM-20のガイガーカウンターは生き返った。

 そうかTA7555はCMOSなので動かないということもあるのか。秋月で、LMC555(これもCMOS)にするか、NE555にするか迷い、結局オリジナルのNE555にしておいて良かった

一瞬、SparkFunが生き返るが、すぐに動かなくなる(8/19/2011)
 CHANEYのキットは生き返った。今度は、SparkFunの修復である。前回の記事でドライバーTRの高耐圧トランジスタが壊れたのではないかという仮説を立てた。まだ諦めきれない。その代替品を買ってきてある。

 面実装の件のTR(MPSA42)を念のため特殊ハンダではずし、そのフットパターンに苦労してリードタイプ(SC-64)の2SC4003を取り付けた。余り期待しないで電源を入れる。これが何と、「ジィーッ」という高圧が出たときに出る音とともに、SparkFunのガイガーカウンターは生き返ったのである。

 ウオーッ、やったぞ。仮説が的中した。暫く通電する。何事もなかったかのように自然放射線の数値をLCDに刻んでいく。よーし、これでガイガーカウンターは2台とも復帰した。ただ、高圧が高い(1500V近い)ことには変わりはない。これを解決しないことには、いずれこのTRも壊れるだろう。

 それはともかく、上機嫌で仮止めのTRのリード線を切って正式に付け直し、LCDのソケットを元の位置に戻して(作業の邪魔になるのではずしてあった)、正規の状態に戻した。

 ところが、何と、元へ戻したらまた動かなくなったのである。ありゃあー、ハンダ付けが悪かったのか、いやルーペで仔細にチェックするが問題ない。もう壊れたのか。電圧を測る。やっぱり高圧が出ていない。歓喜の頂点からまっさかさまに奈落に落ちた気分である。いったいあの動いたときは何だったのか。

 泣く泣く、実装したTRをはずして予備のテスターで正常かどうかを確認する。殆ど使っていない昔のテスターだがTRをチェックする機能がついていて、リード線を差し込んでhFEを測定することが出来る。何い?TRは壊れていない。hFEは120以上を指す。

 ふーむ、これはおかしい。もしかしたら前のTRも壊れていなかったのかもしれない。チップTRを苦労して汎用基板の3ピンにつけてリード線を出して測ってみた。予想通り、このTRも壊れていなかった。hFEは何と150を越えた。

S_p8224137

 トランジスターが原因ではなかった。しかし、それなら何故、交換で動いた? やったことは、面実装のTRを取り外したことと、LCDへつなぐソケット基板を、固定するスペーサーから浮かしただけである。スペーサーの片側はまだはずしていない。鉄(ステンレス)ネジが基板に近づいたから?まさか。 謎は深まるばかりである。

 ただ、このスペーサーをなくすことは出来ない。ソケット基板の固定が出来なくなってしまう。もう、何がなにやらさっぱり見当がつかなくなって呆然自失の状態である。

SparkFunの回路のモデルを発見。ブレッドボードで作り直し(8/21/2011)
 そうは言っても、ころんでもただでは起きない性分の所長である。しつこいことには自信がある(自慢にならないか)。完全に手段が目的化しているが、このまま黙ってSparkFunのキットを見捨てるわけには行かなくなった。ここまで来れば、何とか原因を解明しないことには気がすまない。

 来週、旧友に会ってガイガーカウンターを持ち込んで自慢しようと思っていたが、それどころではなくなった。事態を冷静に見直して、やはりプリント基板の上に、気楽にスペーサーを接着したのが原因ではないかと感じ始めた。基板は、かなり厚いレジストが表面に塗られているが、発振回路なので微妙だ。

 それを確認するのは、もういちど回路を別のところで作り直すしかない、と思っていたときに、偶然、SparkFunの高圧回路のオリジナルとおぼしい回路を海外のサイトで見つけた。これ、これ。間違いない。全く同じように音響トランスをフライバックトランスに使った回路だ。

 あれ、この回路には、高圧からツェナーダイオード2ヶを使った回路がついていてTR一個でドライバーTRの出力を制御する電圧制限回路がついている。しかし、SparkFunではこれが省略されている。

 ふーむ、謎が解けてきたぞ。やっぱりこの回路はほっておくと500Vでは納まらないのだ。だから、制限回路がついている。1500Vを観測しているが、やっぱりこれだけの電圧が出ていた可能性が高い。とすると、GM管は、過電圧を長時間かけられたために、正規の500Vでは動かなくなったのか(800Vでは動かなかった)。

S_p8224131 このあたりは、あとで調べることとして、今は、接着剤で回路がおかしくなったという仮説を証明するのが先だ。ブレッドボードで同じ回路を組んでみることにした。こういうこともあろうかとこのあいだ行った秋葉原で小さなブレッドボードを入手してある。SparkFunのキットから音響トランスもとりはずす。

 ブレッドボードはやはり便利だ。あっというまに音響トランスを使った高圧ドライバーが完成した。こんどは、オシロで観測もしやすい。このドライバーだけで動かしてみる。波形を観測した。すごいパルスだ。P-Pで140V、3倍圧の整流回路にかければ、500V近くが取り出せるしかけのようだ。

S_p8214122 元のチップTRをブレッドボードに差し込んで実験してみる。何のことはない。これでも全く同じ電圧、波形が観測された。TRが原因でないことは明らかになった。やれやれ。

 いよいよ、本体に接続。少し賢くなって、オシロで高圧が測れるように、もうひとつの1Gオームで分圧器を作った。このあいだのアクリル曲げ器で、CDケースの切れ端で簡易な端子盤を作る。

S_p8214121

 オシロで1.3Vの直流がでた。1000Xなので、1300Vが軽々でている。ほう、フライバックトランスのときは派手な脈流だったが、コンデンサーでこんなに平坦になるのか。

 SparkFunのガイガーカウンターは、また動き始めた。ところが、そのうち、カンッ、カンッという例の音がし始めた。電圧がその度に急激に下がる。この音、初めはトランスかと思ったが、場所が離れたので、そうではないことがわかる。

S_p8224146

 すると音の発生元はGM管しか考えられない。これがプラトー電圧を超えた上限での連続放電の音かもしれない。電圧は、オシロでもDVMでも同じ電圧だった。この電圧で間違いないだろう。500Vでは反応しないが、現在の電圧はGM管を壊す可能性がある(もう壊れているかも)。心配になってきたので、とりあえず実験は中止する。

 さて、このあとである。残念ながらSparkFunは、これ以上の実験は無駄のような気がする。GM管の替えはないのである。これが悪いのなら、もう先には進めない。これまでの経過では、電圧がでなくなったのは、ドライバー回路のプリントパターンの上に接着剤でスペーサーをつけたことが原因であることは、ほぼ間違いないようだ。ただ、1500Vの高圧が何故かかっていたのかという最も根本的な原因は解明されないままである。

| | コメント (1) | トラックバック (0)

2011年8月19日 (金)

ガイガーカウンター制作で思わぬ道草

 高入力インピーダンスのDVM(デジタル電圧計)を作ったり、別のガイガーカウンターのキットを組み立てたり、このところすっかりアナログの世界にはまっている。ガイガーカウンターの高圧発生回路は、所長の最も不得手なアナログのハードウエアの世界である。調べれば調べるほど知らないことが出てきて、これがまた面白くて横道に入る。つい調べる目的をそっちのけにして、ウェブサーフィンに時間が経つのを忘れてしまう。まあ、これが楽しいのだから仕方がない。いつになったら本題(ってなんだっけ)に戻れるやら。

SparkFunガイガーカウンターキットの不具合(8/7/2011)
 そもそもの原因は、SparkFunのガイガーカウンターキットの不調である。突然、パルスが出なくなるかと思うと、暫くすると何事もなかったように復旧する。これが電圧計の完成直前、とうとう動かなくなった。これまでは数分か数十分放置しておくと自然に戻っていたのだが、今度は1時間以上経過しても回復しない。

 折角、ボタンをつけて完成!と思っていたのにこれである。ウェブを見ると、SparkFunのキットが動かなくなったという記事を散見する。何か販売元でも交換に応じているようなのだが、こちらのキットは、既に14本も線を追加しており、いくら高圧部は触っていないと主張しても交換や修理に応じてもらえる可能性は低い。

S_p8074086 と暗い気持ちになっていたら、また復活した。ガイガー管そのものが壊れていることは考えにくい(希望的観測)。恐らく高圧発生部だと思う。その理由として、ガイガー管がパルスを出す度に、トランス近くから「ジイッ」という小さい音が段々大きくなり、最近は、パルスに関係なく1秒程度の間隔で、小さな「カンッ」「カンッ」という音まで出始めた。どこかで回路が放電して電圧が出ていない感じだ。

 入力インピーダンスの高い電圧計(秋月のDVMキット)はまだ完成していない。本体が正常に動いているあいだに動作電圧を測っておこうと、あわててDVMキットを組み立て始める。組み立てている最中に気がついた。1Gオームの抵抗があるのだから、その分圧部(ローサイド)では普通のテスターで測れるのではないか(内部抵抗の低いテスターを分圧部に入れても入力インピーダンスは1Gで変わらない)。

 早速、試してみる。1Gオームを慎重に袋から取り出し、1MΩと空中配線し、恐る恐る、ガイガー管のアノードにリードを差し込む。1Mの低圧部も安心できない。グランド側が万が一外れれば、一気にここも高圧(まあ、極小電流の500V程度だが)がかかる。テスターに接続して、電源をONにする。

 ありゃあ、テスターで1.28V。1Gと1Mだから1280V以上かかっていることになる。これはどうしたことだ。念のため、1Mを2Mに換えると、0.58V。ほんとだ。倍にすれば1160V、これでも1KV以上の高圧だ。SparkFunのガイガー管はLND712で適正電圧は、460~500Vとある。

 以前、SparkFunのガイガーカウンターの掲示板で、「電圧が900V以上出てるぜ。コンデンサーを変えたら500Vに戻ったけど」という書き込みがあったのを思い出した。このとき、SparkFun側は、「そんなことあり得ないが、調べるから詳しい状況を教えて」ということでそのままになっている。

 ところが皮肉なことに、1Gオームの回路をつけて測っている間に、音が出るのが直ってしまったのである。何の音も出ることなく高圧は順調にでている(測定値は1200V近辺)。やれやれ、おかしくなった時の電圧を確かめて修理しようと思っていたが、現象が起きないので、おあずけである。

デジタル電圧計(DVM)の組み立て(8/7/2011)
 秋月キットのベストセラー商品のようである。相当古い歴史を持っているようだ。色々なキットに応用されている。ユニバーサル基板に配線したパターンをそのまま基板に起こしたような、ちょっと変わったプリント基板である。1テラオームに近いという内部抵抗が自慢で、今度の1GΩの分圧抵抗100Kに並列にするには十分な性能を持っている(つけたことを殆ど無視できる)。

S_p8114095

 組み立ては造作がない。数時間で半田付けは終わった。ただ、キットのICとLCDは2つとも40ピンの大きなDIPパッケージで、ソケットにつけるのは慣れないと緊張する。少し力を入れると歪んでLCDの画面が一瞬黒くなったりして慌てる。

 最初、LCDを逆さまにつけてLCDにデタラメな文字が表示され頭を抱えた。冷や汗をかきながらやっとのことではずし、正しい位置に付け直してめでたく数値が出た。いやいやお恥ずかしい。わきの下にたっぷり汗をかいた。

 さて、バラックでは電圧が測れるようになった。次はケースへの組み込みである。前からどうするか、あれこれ悩んでいる。仕事の帰り、秋葉原を巡回して高圧用の端子(テフロン製)を探す。ウェブではマックエイトなどのブランドで色々あるが、単品で売っているところを見つけられない。

 ネジで有名な西川で、やっとみつけたが、テスターのプローブジャックになるような大きめの端子は売っておらず、小さいのはあっても、10ヶ¥2300とかの値段で手が出ない。

 ロータリースイッチは、はなから高圧用はあきらめている。ロータリースイッチは200V以下の測定レンジと高圧のローサイド側に使うことにする。高圧用に独立の端子を設ける。考えてみればケースは金属ではなく、プラスティックなので、普通の端子でも1000V以上に耐えられると判断した。

 ロータリースイッチに、電圧計キットについている1%の抵抗を直付けし、小さな基板を足して、ここに残りの抵抗や、高電圧分圧の半固定抵抗をつける。この小基板には、さらにLCDの数字のドット表示用の回路が乗る予定だ。

別のガイガーカウンターキット到着(8/9/2011)
 SparkFunのガイガーカウンターがおかしな動きを始めたので心配になり、前から目をつけていた別のキットを発注してしまった。現在使っているものが危うくなると、あわてて代替品を衝動買いする癖がある。今度もそうである。

 ウェブ上で試しにお買い物籠に入れている間に、思わず「買う」ボタンをポチってしまった。これもアメリカの電子キット会社CHANEYのものである。GM管は、日本のウェブでも高性能と定評のあるロシア製のSBM-20。今度のキットはスピーカーとLEDがついているだけでマイコンは付属していない。多数の応用例があり、日本でも売り出されている(値段は¥12,000程度)。

S_p8094090 直接買えば、価格が94ドル。30ドルの送料をつけても、超円高の時代、1万円を切る。ここは会員登録も要求しない。メールアドレスと住所を知らせると素直に注文を受け付けてくれた。今度は、何のメールの問い合わせも来ない。問題のSparkFunのキットが回復し、うーむ、はやまったかと思う間もなく品物が届いた。何と発注から4日しか経っていない。

S_p8094092

 今度も記念撮影しておく。エアバックのような包装ラップから部品セットがビニル袋に入って登場した。おや、今度は組み上がっていない部品がアイロンで分割した袋にまとめて入ったキットだ。GM管だけはさらにエアマットにくるまれている。基板の作りは雑である。基板の切断面は手を切りそうな荒っぽい切り方だ。SparkFunに較べると、素人のプリント配線と余り変わらない。これで本当に動くのかちょっと心配だ。

DVM(電圧計)ケース完成。LCDドット表示回路にはまる(8/13/2011)
 CHANEYのガイガーカウンター組み立ては、すこしお預けにしてDVM(電圧計)キットのケースの工作を続ける。秋葉原からさらに部品を調達し、実装に色々工夫する。これはこれで結構夢中になる。

S_p8144102 仮組み立てをして、待ちきれずに端子経由で高圧を測ってみる。端子の絶縁を確認する目的もある。えー、1495Vもある。嘘だろー。いや、間違いなさそうだ。コッククロフト・ウォルトン回路になっているところを測ると、忠実に半分づつ電圧が低下していく。間違いないだろう。しかし、何故こんなに高いのか。

 DVMのケースの実装が完成した。キットについていたケースは、偶然にも現在のSparkFunのガイガーカウンターと全く同じケースである。これに入れるのも芸のない話なので、もう少し小さいケースに入れようと探したが、なかなか適当なものが見つからない。電池(006P)とロータリースイッチが意外とかさばり、小さくまとめられない。結局、最初のケースよりほんの少し小さい、タカチの透明ケース(PB2 110×80×33)でがまんする。

S_p8134099 ロータリースイッチで、電圧のスケールが換えられることを確かめる。うまく動いた。ここまできたら、やっぱり数字の下にドットを表示させたい。説明書には、このドットの点け方が載っている。これが微妙な書き方である。このLCDは設計が古く、液晶を交流ドライブしている。従って単に電圧をかけるだけでは、液晶が劣化してしまう(今のLCDにはコントローラーが内蔵されていて、この配慮は不要)。

 説明書には「ドット焼けを起こすけれど移動させなければ制御ラインを0にすればOK」って書いてあるが、これってやっぱり焼けてしまうことを言っている。ドットが移動するDVMでは、これでは点灯していないドットが焼けてくるので、いずれはどこのドットの表示かわからなくなる。

 これを回避する正式な方法が説明書には出ている。しかし、このEX-OR回路が良くわからないのである。理屈が理解できない。ウェブをさまよって、遂にロジックを見つけた。LCDのベース電位が50Hz近辺(オシロで測ったら47.7Hz)で0,1に動き、ドットの点灯用のロジックが逆相(EX-OR)なら、ちょうど-1 +1の交流で点灯、同相なら0Vで、LCDには電圧がかからない(消灯)ということなのだ。

 ドット一つにEX-ORのICをつけるというのも大げさだ(基板にはスペースを確保したが)。何か上手い方法はないかとあれこれ思案する。このあたりが面白いところである。逆相なら単にインバータだけで良い。同相にするならドライブ(バックプレーンBP)端子をFETか何かでつなげばよい。この2入力を切り替えれば、EX-ORと同じロジックができる?

 あ、ドットはロータリースイッチで切り替えるので、同相は不要だ。BPにインバータをつければ良いだけではないか。早速ブレッドボードでインバータを持ってきてオシロで測る。見事、BPの逆相が得られた(あたりまえか)。

S_p8114098

 これをDVMのドット表示ピンに与える。よーし、ドットが表示された。こりゃ何もインバータ(74HC04)も持ち出すことはない。トランジスタ1石で十分だ。これもテストする。問題なし。いやあ気分が良い。

 これは後日談があって、組み上げてみたら、ドットが最初つくがすぐ消えてしまう。説明書にはグランドをテスト端子にしているので、そうしてみたがやはり同じ。ふとした弾みで、トランジスタのグランド側を触るとドットが消えずに残った。

 あれこれいじって解決したのは、インバーター(トランジスタ)のアース側を浮かすことだった。どうもLCDとのグランドの関係が良くわかっていないので、あまり気分の良い解決ではないが、そのままにした。まあ、こわれてもトランジスタ一ヶなら悔しくない。

とうとうSparkFunのガイガーカウンターが動かなくなった(8/14/2011)
 遂に、SparkFunガイガーカウンターが息を吹き返さなくなった。やっぱり高圧発生回路の不具合のようだ。電圧が全く上がっていない。まだ元気な時、苦労して10μFのチップコンデンサーをはずし、SparkFunの掲示板にあったように1μFにとりかえた。電圧は800Vまで下がったものの、まだ高い。しかしこの電圧では不思議なことにGM管は動作しない。電圧計がおかしいのか。

 ところが、元のコンデンサーを戻し、電圧が回復した(1500V近辺)のも束の間、ローソクの火が消えるように電圧が下がり始め、このあとは何をやっても回復しなくなった。コンデンサーを換えるストレスが何かのスイッチを押したらしい。このあとは全く目覚める気配がない。

 やれやれ、代替品を用意してあるにしても、動かないとなると気分が落ち込む。ガイガー管がこのキットの価格の大半を占める($154のうちの$94で2/3、¥7200)ようなので、ガイガー管(LND712)をはずし、高圧回路の基板を作り直すか、高圧回路をはずして(トランスがやけに大きい)、ここに別のインバーター基板でもつければ、今までのMega328まわりの修正は生かせるが、どちらにしても気が重い。まあ、原因が特定できただけでも、この1週間の電圧計の工作は無駄ではなかったと、自分で自分を慰める。

CHANEYのガイガーカウンターはあっけなく稼動(8/14/2011)
 思いは残るが、SparkFunのキットにこだわるのはこれくらいにしておこう。LCDを動かすためにMaga328から多量のピンを引き出した基板を簡単に捨てるわけには行かないが、このままでは先に進めない。

 高圧発生回路そのものの解析が必要である。この回路、色々なウェブの高圧回路を見ているが、どこにも同じ例がない。トランジスタは日本製ではないので、代替品が難しい。特に、オーディオトランスをドライブする高耐圧(300V)トランジスターは手持ちにない。解析の足がかりに不足している。少し休もう。

 となると、次は、届いたまま何もしていないCHANEYのガイガーカウンターキットである。早速組み立てにとりかかる。親切な3枚の実体配線図つきの説明書があるので、組み立ては至極簡単である。

S_p8144105 とりかかって小一時間で半田付けを終える。早速通電。よし、スピーカーからクリック音、青いLEDが瞬いて正常に動き始めた。例のマントルを近づけると派手な音と点滅が始まる。間違いない。正常に動いている。

 手で測ったところでは、いつもの地下室で20~28CPM、SparkFunのLND712が12CPM程度だったから、ウェブの情報どおり、2倍ほど感度が良いようだ。電圧を測る。いかん、LEDが点きっ放しになる。それでも300V程度は観測できた。

 今度は、この基板からデジタル出力を出す方策だ。9Vのバッテリーも邪魔なので、これまでのエネループを利用し、DCDCコンバーターで9Vに上げてやろう。CPUは同じMega328を使ってやろう。ちょうど面実装のMega328の予備がある。

SparkFunの故障の原因は異常寄生発振か(8/17/2011)
 結局、SparkFunのガイガーカウンターキットはその後も息を吹き返さない。時折、電源を入れた直後、1000V近くまで電圧が上がるが、すぐ電圧は下がり始め、今度は何時間ONしたままでも5Vから上に上がらない(以前は、急に戻ったりした)。

 測定した電圧が1400Vというのが正しいとすると、共振による異常発振(テスラー発振?)かなにかで倍の電圧が発生し、これにより出力トランジスタが破壊されたという仮説をたてた。これを裏付けるためウェブで色々探すがめぼしいものは見つからない。

 超高圧というと必ず出てくるのが、磁気の単位にもなっているテスラーである。彼に関してはオカルトっぽい話が沢山あって暫くこれに熱中した。1980年代にテスラーの研究を元に超高圧を研究するグループが、300キロもある変圧器が浮上させたとか、通常の反応では作れない合金が出来たとか、米軍がこの研究成果を全部独占して、これをなかったことにしようとしているとか(ハチソン効果)、どうも眉唾ものなのだが面白い。

 もっとすごいのになると第二次世界大戦当時(テスラー存命時)、超高圧をかけてレーダーから姿を隠す実験をしていた米軍駆逐艦一隻が瞬間移動したなどという(フィラデルフィア実験)、とんでもない話まである。ウェブはこういう話は大好きなようで、情報が溢れており、見始めるときりがない。本題の異常発振の解明は先に進まない。

 それはともかく、この先の具体的な方策を決めなければいけない。GM管は無事なようなので、基板をそのままに発振回路の部分を作り換えるか、CHANEYの基板をここに持ち込んで、新しくCPU基板を追加するか。

 色々な選択肢があるので迷う。それにしても、SparkFunのキットはどこが壊れたのだろう。外見上は、全く変りはない。Mega328から引き出したLCDへのソケット基板をこの高圧のドライバー回路の上に瞬間接着剤で固定しているのが悪いのかもしれない(接着剤は高絶縁体と思っているが)。

 壊れて元々である。接着剤をカッターで削り(結構丈夫についている)ソケット基板をはずして、配線パターンを出してみた。期待は空しく状況は全く変わらなかった。もっともパターンの溝まで削らないと意味がないかもしれない。

 そのうち、有力な情報を見つけた。リンギング発振(寄生発振)で高電圧を出しているページである。 ベースの周波数とは全く違う高い発振を起こさせ、簡単に2倍、3倍の電圧が出るという。もしかすると、SparkFunの発振回路は、これを起こしていたのではないか。この高電圧で、出力トランジスタの耐圧が不足して壊れたのかもしれない。

 いや待て、この回路は、ステップアップトランスではなく、単にインダクタンスだけなので、そもそもこのリンギング発振で高圧を出しているように見える。ただ、それにしても、どうして出力電圧が想定より高くなったのだろうか。よくわからない。

 DVMが測った電圧が正しいとすると、高圧で壊れる部品を考えると、やはりICが一番こういうのに弱いはずだ。トランスをドライブしているトランジスタを換えれば復旧するかもしれない。このトランジスタの型番はMPSA42である。

 アメリカでは定番の石らしく、オーディオアンプのドライバー部やLCDディスプレイの水平出力に使われている。コレクターエミッター間の最大電圧が300V、最大コレクタ電流が0.1Aのいわゆる高耐圧トランジスタと言われるやつである。

 互換品はいくらでもあるが、みなTO92とかTO126などのごついやつばかりで、今のキットについているSOTサイズのものは手に入らない。まあいずれ大きいものでも良いから手に入れてテストしてみよう。値段はどれも¥100しないから気が楽である。やることが色々増えてきた。

| | コメント (9) | トラックバック (0)

2011年8月 5日 (金)

SparkFunガイガーカウンターに操作ボタンをつける

USBと電池切り替え回路の改良(7/28/2011)

S_p8054061 ブログに記事を上げてから、ずっと気になっていたことがある。SparkFunのガイガーカウンターキットに手を加え、電池駆動で動くようにしたのだが、USBをつないだとき、USBバスに電池の5Vが入りこまないよう、FETで電池からの供給を止めるのは良いとしても、逆に電池の電源をレギュレーターの前のスイッチで切るとレギュレーターの入力側が0になるのに、レギュレーターの出力側はFETのソースにつながっていて、ドレインはUSBの5Vがつながったままになる(ゲートは0Vだが)。

 最初、回路が出来たときドレインからソースへ電流が流れていなかったので(誤測定だった)安心していたのだが、ウェブの記事を見ると、FETは内部的にドレインからソースに順方向の寄生ダイオード(Body Diode)が入っている。それなら、ドレインの電圧はそのままソースに反映されてしまうはずだ。電池ならさほど問題ないが、レギュレーターはまずい。本来ならもうひとつFETがいるところをさぼっている。

 ぐだぐだ言っているより、試してみたほうが早い。出来上がっているのをテストするのは、GM管の高圧が近くにあって怖いので、ブレッドボードに新しく2SJ377をブレッドボード用にハンダ付けして、テストしてみた。

S_p8054076 おお、やっぱり心配していた通りだ。ソースに何もつながないで、ドレインに5Vをかけるとソースは4.5V近くを指す。レギュレーターをつけると電圧は2Vくらいまで下がるが、電流は直結のときと同じ0.6mAが流れ込む。何だFETというのは遮断の役に立たないのか。レギュレーターをはずし、4.5Vかかっているドレインに試しにLEDの負荷をつけると、同じ程度に電圧は下がったが、電流は殆ど流れないので点灯はしない。接続されたレギュレーターは全く熱も持たないが、やっぱり心配だ。FETは電池からUSBバスに導通するのは防いでいるが逆はだめなのだ。

 本来の回路に2つFETがあったのは、この逆流を防ぐためだったのだ。この場合は、FETが対称に配置されるので、USBからの電流は、電池へ流れ込まない。しかしFETを追加するには、電源小基板のスペースはもうない。幸いダイオードくらいなら入る余地があったので、SBダイオード(1S4)を、レギュレーターとFETの間に入れた。よーし、これでレギュレーター出力での電圧は0.5V以下に下がった。ただ、レギュレーターからの電圧は、5Vから4.7Vに低下した。まあ、これは仕方がない。

 逆流電流は0.6mAくらいなので、もしかしたらレギュレーターは大丈夫(内部の逆接続防止ダイオードが必死に支えている?)なのかもしれないが、正規外の状態であることは間違いない。まあ、これで安心して眠れる。いやいやそれにしてもアナログは難しい。(前回記事の2つの回路図は、この修正が反映されています)

S_p8054084やっぱり屋外で平均値が見たい(7/30/2011)
 今日は久しぶりにテニスをやってきた。雨を覚悟していたのだが、結局、降らず。真夏にしては快適にテニスが出来た。雨模様で参加者が少なかったので、順番が早く廻り、ほとんどプレイしっぱなし。さすがに疲れた。ガイガーカウンターをテニスコートに持っていくのを忘れていた。自慢できなかったのは残念だったが、このところ、ことあるごとに持ち出しては測定の機会を増やしている。

 週2回出かける事務所は日本橋にある。ここでの平均は、ビルの3階のせいか自宅よりやや少ない放射線量である。ある政党の調査結果によると、東京都内は東部にかけてかなり高くなるという。確かに事務所近辺の地面近くでは一気に線量は増える(0.1μSv/hを常に超える)。といっても、まあ、海外旅行を1回した程度の線量だ。大騒ぎする量には程遠い。

 ある場所を測定したあとは、最寄のPCにつなぎ、蓄積値(平均値)を出しているが、やっぱり蓄積データをリセットして個別の平均値をだす操作が出先で自由に出来ないと、使い勝手が悪いことがわかる。頭で考えるより、こういうフィールドテストが操作仕様を決める最善の方法だ。ということでやはり、タクトスイッチをつけてガイガーカウンターをボタンで制御できるように改良することにした。

 そのためには、スイッチだけでなく、CPUチップからさらにI/Oピンを引き出す必要がある。引き出した線の固定やスイッチの実装も考えなければいけない。最初は今までの工作と同じスタイルで、パネルにあけたLCD固定用ねじを使って付属追加基板を固定し、そこにスイッチを実装しようとした。しかしフロントパネルにスイッチの穴を開けると、ちょっとした雨でもケース内に水が入ってしまう。

 すでにUSBのコネクターの穴が横に空いているので、防滴仕様にもなっていないが正面に穴があくのはやっぱり避けたい。ということになるとタクトスイッチはパネルにネジで固定しなければならない。あいにく部品箱にはネジで止めるタクトスイッチの在庫がないので、部品の調達が出来るまでハードの工作は一休みである。

ATMega328の全部のピンを引き出す(8/1/2011)
 仕事の帰り、久しぶりに秋葉原に出る。秋月、千石界隈は、相変わらずメイド喫茶の客引きが煩わしい。目立ったところでは、定点観測しているSDカード2GBの値段が遂に¥300を切った(¥250)ことと、安売りショップにやたらとガイガーカウンター売出しのポップが増えたことである。大抵のショップには1つや2つの案内がある。値段はウェブ上と同程度だが、一時に較べると安くなった。この分で行くと秋には、完成品でも1万を切るかもしれない。

S_p8024056

 今日の買い物の中心は、やっぱりガイガーカウンター関係である。パネルに直付けするタクトスイッチをまず探す。タクトスイッチは、ねじでパネルに固定し、しかも小型のものというと意外に種類が少ない。下の電池や基板に干渉しない、低背(ローハイト)のものを探すが、見つけられなかった(結局、千石で前と同じようなものを買う)。

 次は、1GΩのいわゆるハイメグ抵抗(これはタクマンの商標らしいが)と、秋月のDVMキットである。これはガイガーカウンターの高電圧測定が目的である。我々が取り扱える高圧は、微小電流が殆どなので(大きければ命にかかわる。こんな呑気に扱えない)、相当高い抵抗で分圧しないと正しい測定ができない。

 このSparkFunのキット、たまに長時間パルスを出さない(暫くすると何事もなく復帰)ときがあり、原因がGM管か高電圧発生回路か特定するために準備している。もともと高入力インピーダンスの電圧計は前から欲しかった計器でもある。

 ウェブの情報では、秋月のDVMキットが一番安価で手軽のようなので、電圧計の方は心配ないが、フルスケール0.2Vの電圧計で1000V近い電圧を測るのには、ギガを超える分圧抵抗が必要だ。これもウェブ情報にもとづいて、高電圧用の特殊部品専門店という山王電子というラジオデパート2階のショップに行く。

 タクマンの1GΩ(¥850、誤差1%のものは¥1000、1%のものは千石の方が安かった¥920)を手に入れる。どうせ校正しなければいけないので5%の安いほうを選ぶ。秋葉原特有の偉そうなショップの親爺だったが、感心なことに抵抗を素手では触らなかった(指紋の油でリークするらしい)。

 家に帰って、高電圧測定はあとにして、タクトスイッチのハードウエアを準備する。キットのMega328はLCD用に6本I/Oピンを出したが、さらに2本は余計に必要になった。この際なので、使うあてはないが、いっそのこと残っている全部のピンを引き出すことにする。

 空いているI/Oピンは6本である。受け側も用意しなければいけない。これまでの2ミリピッチのピンヘッダーの小基板を作り直す。0.8ミリピッチCPUチップからの引き出しは大分慣れてきて、ほどなく全部引き出し終えたが、問題はこの小基板への接続である。

S_p8024049 これまでのLCDの8本(Vcc、GNDを含む)に加えて6本、あわせて14本のソケットへのハンダ付けは、欲張ってこの小基板にタクトスイッチ用のプルアップ抵抗までつけたものだから、ちょっとした手品のしかけを作るような気分である。2段になったピンソケットへのハンダ付けの手順をあらかじめ確認し、ピンセットで慎重に0.2ミリのUEW線を、2段になったソケットピンの位置に合わせて切りそろえ、先端をハンダあげする。 

 始める前は、本当にこれで全部ハンダ付けできるか自信がなかったが、やってみると意外にうまく行った。こういうときのハンダは、みんなが推奨する日本アルミットのKR-19ではハンダの流動性が高すぎて、むしろ以前まで使っていたGootの普通の糸ハンダの方が仕上げが綺麗に出来る気がする(これに慣れているだけかもしれないが)。

 全部の配線を終わった。恐る恐るソケットを定位置に戻し、テストする。良かった。LCDがちゃんと動いた。新たにつないだ線も、チップのピンとソケットの導通テストでちゃんとつながっていることが確認できた。全部出来たとなるとすっかり気が抜けて次のステップに進む気力を失う。

タクトスイッチをつけてハードは完成。残りはソフトの開発(8/2/2011)
 自分は左利きだが、タクトスイッチは右利き用にLCDの右側につける。5ミリの穴2つである。念のため養生テープをつけたので、気楽に3.3ミリのバイトで大きなドリルを使って開けたら、しっかりずれてしまった(キリで下穴をあけていたのに)。気を抜くとろくなことがない。リーマーで何とか揃える。

S_p8054082

 スイッチのプルアップ抵抗はソケット基板に既につけてあるので、3本のコードをハンダ付けするだけで、スイッチをつけてしまえば、ハードウエアの作業はあっけなく終わりである。次はソフトである。スイッチ制御は、何度もやってきているので簡単に考えていたが、仕様を確定するのに少々手間がかかった。

 ボタンだけのユーザーインターフェースは電化製品では珍しいことではないが、使いやすいボタンのインターフェースというのには中々お目にかからないものだ。マニュアルを見直さなければ時刻合わせも出来ないデジタル腕時計や、何度やってもやり方を覚えられないPCビデオモニターの設定スイッチ、押しているうちに、何故か必要もないのに必ず統計ページが印刷されてしまうレーザープリンターなど、使いにくい例をあげだせばきりがない。

 使いにくいボタンインターフェースに共通することは、個別のボタン(スイッチ)の機能がフェーズによって変わってしまい、固有のシーケンスを覚えていないと操作が出来ないというやつである。何とか使えるのは、それぞれのボタンの機能が整理され、しかも個別のボタンの役割が固定されていて、全体の機能が階層的に整理されているインターフェースである。

 今度の場合はボタンは2つしか使わない。うまく機能を配分しないとわけがわからない操作になってしまう。ユーザーインターフェースの設計は所長のかっての専門分野でもある。これまでの経験を生かして使いやすいものにしないと笑われる。色々考えた結果、ガイガーカウンターのボタン設定は次のように決まった。

Aボタン(セレクト機能)  ボタンを押すたびに、表示が移動平均値->累積平均値
               ->累積データ消去選択-> と循環する。

Bボタン(決定機能)  Aボタンで選択する局面ごとに、その局面で行う処理を決定
              するボタン。
              この機械では、Aボタンで累積データ消去選択を選んだとき
              だけ機能する。
               ただし、消去のような重要イベントの時は、確認を促す
              表示が出て、再度Bボタンを押すことで、それが実行
              されるものとする。

               このとき、Aボタンを押せばキャンセルとなる。

      なお、Aボタンで表示するだけのフェーズのときは、Bボタンは機能
      させない(ここで欲張って何か機能を持たせると操作性が悪くなる)

 こういう仕様を決めるまでが、本来一番時間をかけるべきところである。良い加減な仕様でプログラムを書き始めてから、プログラムに合わせて仕様をいじると大抵使いにくいものが出来上がる。と、能書きを垂れながら、コーディングを開始する。

 こうして宣言しているのは、ともすると安易に流れて仕様をいじることをやらないよう自分に言い聞かせるためでもある(何度も失敗している)。

擬似コーディングの勧め、再び(8/3/2011)
 コーディングは例によって、擬似コーディングから始める。擬似コーディング(Pseud Coding)が何度も当ブログに登場するのは、電子工作の世界で、ソフト開発の不得意な人が意外に多いことに気づいたからである。上から目線でちょっと僭越だが、みなさんソフトウエアを少し気楽に考えすぎていると思う。

 LEDの点滅とか、"Hello World"のLCD出力くらいなら、いきなりコーディングして何の問題もないが、C言語でステップ数が200を越えるあたりからは、周到な準備を事前にやって開発にかからないと完全な動きをするプログラムを完成させることは難しい。

 もちろんこの世界にも向き不向きがある。1000ステップを越すプログラムを楽々とドキュメントもなしに完成(バグなしということ)させる人がいるが、こういう人と自分を一緒にしてはいけない。

 今はもう別の会社に吸収されたが、Delphiや、Turboシリーズで有名なボーランド社のフィリップカーン社長は、Pascalコンパイラーのソースを全部記憶していて、何かエラーが起きるとたちどころに修正点を指摘できたそうである。ここまでいかなくても、いわゆるハッカーと呼ばれる人たちは大抵常人を超えた能力を持っている人たちである。この人たちを真似ようと思ってはいけない。

 こうした名人達に、我々凡人が対抗できる数少ない手段が擬似コーディングだと思っている。プログラムの動きを普通の自然語(我々なら日本語)で徹底的に記述し、矛盾点を洗い出す。

 矛盾するところがなくなったら、これを少しづつコンピューター言語に移していく。この手順を踏むことで、プログラムがどれだけ複雑になってもメンテナンスが可能になる。もちろんプログラム開発には、言語に特有の文法や、モジュール構成とか、構造化するとか専門的なテクニックを多々求められるが、これは必要に応じて身に着けていけばよい話だ。

 肝腎なところは、バグのない(論理矛盾のない)プログラムをいかに作るかで、それは自然語である日本語でも、プログラム言語でも基本的には変りはない。このあたりをおろそかにして開発をコーディングから始めると、大抵の人はバグを取りきれずに挫折してしまう。

S_p8054073 擬似コーディングの例は、これまでにいくつか(ここや、ここに)お示ししているが、ただ形や決まりにこだわることは無意味である。自分が納得するまで紙の上で何度も書き直して(アートワークと同じで、ボールペンより鉛筆、消しゴムがおすすめ)、ロジックを整理することである。

 開発したソフトウエアが思ったとおりの動きをするのを見ることは、もの言わぬ小さな部品を集めて特定のハードウエアを作り上げるのと全く同じ喜びである。電子工作の醍醐味のひとつだ。これを読んだ方々が、擬似コーディングの手法でソフトウエア開発のレベルを少しでも上げられることを願っている。

操作ボタンをつけたガイガーカウンター完成(8/5/2011)
 てなことを書きつつ操作ボタンの開発である。擬似コーディング数枚を費やして、ガイガーカウンターの操作ボタンのソフト開発は終わった。タクトスイッチの制御は、ピンチェンジ割込みをトリガーとして、ボタン処理ルーチンで一手に行う。ここではチャタリングの待ち時間を入れたあと、スイッチの押下でディスプレイモードを切り替え、そのあとの表示ルーチンで、モードに応じたLCDの画面を用意する。

 表示タイミングは1秒ごとか、状態が変わったときなのだが、今度は、スイッチで表示モードが変わるというタイミングでも表示しなければならない。最初の擬似コーディングでは、このことを考慮していなかったので、1秒ごとにLCDがチラチラし見にくい。

 本来はもっと前に戻るべきなのだろうが、ずるをしてフラグ(表示モード変更フラグ)を追加し誤魔化す。ちょっとフラグが多すぎるなあ。UARTも残してあるので7ヶもある。余り褒められたコードではない。

Photo それに誤算がもうひとつあった。AVRのピンチェンジ割込みは、立下りや立ち上がり、レベルなどの割込みのモードが指定できない。ロジアナで見ると、このタクトスイッチは押すときも離す時も派手なチャタリングが出るので普通のロジックではまともに動かない。

 仕方がないので、チャタリングを待つ時間は割込み禁止にして割込みフラグをクリアしてから割込み許可にする苦肉の策をとった(main.cの239行付近)。やっとこれでボタン操作が落ち着く。それまでは、いきなり確認ボタンを2つ連続して押すようなときがあって使い物にならなかった。

 まあ、それはともかく、SparkFunのガイガーカウンターは、ほぼこれで完成形に近づいた。ピンは余っているし、フラッシュはまだ10KB以下なので、RTCでも何でもつけられるが、こればっかりやっているわけにもいかない。それより、このガイガーカウンター時々、高圧が出なくなるのかGM管そのものなのか、時々計測不能になる。デジタル電圧計(DVM)の開発を急ごう。

ここにボタンで制御するSparkFunガイガーカウンターのソース一式を置きます。回路図は前回のものに、PD4、PD5にタクトスイッチを追加しただけなので省略しました。
8/5/2011に公開したソースにバグがあったので修正した版を以下に掲載します(EEPROMをボタンで消去するとデータが蓄積されない)  8/7/2011

「SparkGeiger807_2011.zip」をダウンロード

| | コメント (0) | トラックバック (0)

« 2011年7月 | トップページ | 2011年9月 »