手で測ったところでは、いつもの地下室で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しないから気が楽である。やることが色々増えてきた。(金)SparkFunガイガーカウンターに操作ボタンをつけるUSBと電池切り替え回路の改良(7/28/2011)ブログに記事を上げてから、ずっと気になっていたことがある。SparkFunのガイガーカウンターキットに手を加え、電池駆動で動くようにしたのだが、USBをつないだとき、USBバスに電池の5Vが入りこまないよう、FETで電池からの供給を止めるのは良いとしても、逆に電池の電源をレギュレーターの前のスイッチで切るとレギュレーターの入力側が0になるのに、レギュレーターの出力側はFETのソースにつながっていて、ドレインはUSBの5Vがつながったままになる(ゲートは0Vだが)。Diode)が入っている。それなら、ドレインの電圧はそのままソースに反映されてしまうはずだ。電池ならさほど問題ないが、レギュレーターはまずい。本来ならもうひとつFETがいるところをさぼっている。言っているより、試してみたほうが早い。出来上がっているのをテストするのは、GM管の高圧が近くにあって怖いので、ブレッドボードに新しく2SJ377をブレッドボード用にハンダ付けして、テストしてみた。おお、やっぱり心配していた通りだ。ソースに何もつながないで、ドレインに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つの回路図は、この修正が反映されています)やっぱり屋外で平均値が見たい(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万を切るかもしれない。今日の買い物の中心は、やっぱりガイガーカウンター関係である。パネルに直付けするタクトスイッチをまず探す。タクトスイッチは、ねじでパネルに固定し、しかも小型のものというと意外に種類が少ない。下の電池や基板に干渉しない、低背(ローハイト)のものを探すが、見つけられなかった(結局、千石で前と同じようなものを買う)。次は、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チップからの引き出しは大分慣れてきて、ほどなく全部引き出し終えたが、問題はこの小基板への接続である。これまでのLCDの8本(Vcc、GNDを含む)に加えて6本、あわせて14本のソケットへのハンダ付けは、欲張ってこの小基板にタクトスイッチ用のプルアップ抵抗までつけたものだから、ちょっとした手品のしかけを作るような気分である。2段になったピンソケットへのハンダ付けの手順をあらかじめ確認し、ピンセットで慎重に0.2ミリのUEW線を、2段になったソケットピンの位置に合わせて切りそろえ、先端をハンダあげする。始める前は、本当にこれで全部ハンダ付けできるか自信がなかったが、やってみると意外にうまく行った。いうときのハンダは、みんなが推奨する日本アルミットのKR-19ではハンダの流動性が高すぎて、むしろ以前まで使っていたGootの普通の糸ハンダの方が仕上げが綺麗に出来る気がする(これに慣れているだけかもしれないが)。全部の配線を終わった。ソケットを定位置に戻し、テストする。LCDがちゃんと動いた。新たにつないだ線も、チップのピンとソケットの導通テストでちゃんとつながっていることが確認できた。全部出来たとなるとすっかり気が抜けて次のステップに進む気力を失う。タクトスイッチをつけてハードは完成。残りはソフトの開発(8/2/2011)自分は左利きだが、タクトスイッチは右利き用にLCDの右側につける。5ミリの穴2つである。念のため養生テープをつけたので、気楽に3.3ミリのバイトで大きなドリルを使って開けたら、しっかりずれてしまった(キリで下穴をあけていたのに)。気を抜くとろくなことがない。リーマーで何とか揃える。スイッチのプルアップ抵抗はソケット基板に既につけてあるので、3本のコードをハンダ付けするだけで、スイッチをつけてしまえば、ハードウエアの作業はあっけなく終わりである。スイッチ制御は、何度もやってきているので簡単に考えていたが、仕様を確定するのに少々手間がかかった。ボタンだけのユーザーインターフェースは電化製品では珍しいことではないが、使いやすいボタンのインターフェースというのには中々お目にかからないものだ。マニュアルを見直さなければ時刻合わせも出来ないデジタル腕時計や、何度やってもやり方を覚えられないPCビデオモニターの設定スイッチ、押しているうちに、何故か必要もないのに必ず統計ページが印刷されてしまうレーザープリンターなど、使いにくい例をあげだせばきりがない。使いにくいボタンインターフェースに共通することは、個別のボタン(スイッチ)の機能がフェーズによって変わってしまい、固有のシーケンスを覚えていないと操作が出来ないというやつである。何とか使えるのは、それぞれのボタンの機能が整理され、しかも個別のボタンの役割が固定されていて、全体の機能が階層的に整理されているインターフェースである。今度の場合はボタンは2つしか使わない。うまく機能を配分しないとわけがわからない操作になってしまう。ユーザーインターフェースの設計は所長のかっての専門分野でもある。これまでの経験を生かして使いやすいものにしないと笑われる。考えた結果、ガイガーカウンターのボタン設定は次のように決まった。Aボタンで選択する局面ごとに、その局面で行う処理を決定するボタン。この機械では、Aボタンで累積データ消去選択を選んだときだけ機能する。消去のような重要イベントの時は、確認を促す表示が出て、再度Bボタンを押すことで、それが実行されるものとする。このとき、Aボタンを押せばキャンセルとなる。Aボタンで表示するだけのフェーズのときは、Bボタンは機能させない(ここで欲張って何か機能を持たせると操作性が悪くなる)こういう仕様を決めるまでが、本来一番時間をかけるべきところである。良い加減な仕様でプログラムを書き始めてから、プログラムに合わせて仕様をいじると大抵使いにくいものが出来上がる。能書きを垂れながら、コーディングを開始する。して宣言しているのは、ともすると安易に流れて仕様をいじることをやらないよう自分に言い聞かせるためでもある(何度も失敗している)。擬似コーディングの勧め、再び(8/3/2011)コーディングは例によって、擬似コーディングから始める。Coding)が何度も当ブログに登場するのは、電子工作の世界で、ソフト開発の不得意な人が意外に多いことに気づいたからである。上から目線でちょっと僭越だが、みなさんソフトウエアを少し気楽に考えすぎていると思う。World"のLCD出力くらいなら、いきなりコーディングして何の問題もないが、C言語でステップ数が200を越えるあたりからは、周到な準備を事前にやって開発にかからないと完全な動きをするプログラムを完成させることは難しい。この世界にも向き不向きがある。1000ステップを越すプログラムを楽々とドキュメントもなしに完成(バグなしということ)させる人がいるが、こういう人と自分を一緒にしてはいけない。今はもう別の会社に吸収されたが、Delphiや、Turboシリーズで有名なボーランド社のフィリップカーン社長は、Pascalコンパイラーのソースを全部記憶していて、何かエラーが起きるとたちどころに修正点を指摘できたそうである。ここまでいかなくても、いわゆるハッカーと呼ばれる人たちは大抵常人を超えた能力を持っている人たちである。この人たちを真似ようと思ってはいけない。した名人達に、我々凡人が対抗できる数少ない手段が擬似コーディングだと思っている。プログラムの動きを普通の自然語(我々なら日本語)で徹底的に記述し、矛盾点を洗い出す。矛盾するところがなくなったら、これを少しづつコンピューター言語に移していく。この手順を踏むことで、プログラムがどれだけ複雑になってもメンテナンスが可能になる。プログラム開発には、言語に特有の文法や、モジュール構成とか、構造化するとか専門的なテクニックを多々求められるが、これは必要に応じて身に着けていけばよい話だ。肝腎なところは、バグのない(論理矛盾のない)プログラムをいかに作るかで、それは自然語である日本語でも、プログラム言語でも基本的には変りはない。このあたりをおろそかにして開発をコーディングから始めると、大抵の人はバグを取りきれずに挫折してしまう。擬似コーディングの例は、これまでにいくつか(ここや、ここに)お示ししているが、ただ形や決まりにこだわることは無意味である。自分が納得するまで紙の上で何度も書き直して(アートワークと同じで、ボールペンより鉛筆、消しゴムがおすすめ)、ロジックを整理することである。開発したソフトウエアが思ったとおりの動きをするのを見ることは、もの言わぬ小さな部品を集めて特定のハードウエアを作り上げるのと全く同じ喜びである。電子工作の醍醐味のひとつだ。これを読んだ方々が、擬似コーディングの手法でソフトウエア開発のレベルを少しでも上げられることを願っている。操作ボタンをつけたガイガーカウンター完成(8/5/2011)てなことを書きつつ操作ボタンの開発である。擬似コーディング数枚を費やして、ガイガーカウンターの操作ボタンのソフト開発は終わった。タクトスイッチの制御は、ピンチェンジ割込みをトリガーとして、ボタン処理ルーチンで一手に行う。ここではチャタリングの待ち時間を入れたあと、スイッチの押下でディスプレイモードを切り替え、そのあとの表示ルーチンで、モードに応じたLCDの画面を用意する。表示タイミングは1秒ごとか、状態が変わったときなのだが、今度は、スイッチで表示モードが変わるというタイミングでも表示しなければならない。最初の擬似コーディングでは、このことを考慮していなかったので、1秒ごとにLCDがチラチラし見にくい。本来はもっと前に戻るべきなのだろうが、ずるをしてフラグ(表示モード変更フラグ)を追加し誤魔化す。フラグが多すぎるなあ。UARTも残してあるので7ヶもある。褒められたコードではない。それに誤算がもうひとつあった。AVRのピンチェンジ割込みは、立下りや立ち上がり、レベルなどの割込みのモードが指定できない。ロジアナで見ると、このタクトスイッチは押すときも離す時も派手なチャタリングが出るので普通のロジックではまともに動かない。仕方がないので、チャタリングを待つ時間は割込み禁止にして割込みフラグをクリアしてから割込み許可にする苦肉の策をとった(main.cの239行付近)。これでボタン操作が落ち着く。それまでは、いきなり確認ボタンを2つ連続して押すようなときがあって使い物にならなかった。それはともかく、SparkFunのガイガーカウンターは、ほぼこれで完成形に近づいた。ピンは余っているし、フラッシュはまだ10KB以下なので、RTCでも何でもつけられるが、こればっかりやっているわけにもいかない。それより、このガイガーカウンター時々、高圧が出なくなるのかGM管そのものなのか、時々計測不能になる。デジタル電圧計(DVM)の開発を急ごう。ここにボタンで制御するSparkFunガイガーカウンターのソース一式を置きます。回路図は前回のものに、PD4、PD5にタクトスイッチを追加しただけなので省略しました。