毎週火曜日にやってくる「こなさねばならないもの」を1週間かけて読むことは習慣にこそなりましたが,できればその習慣は,一日も早く断ち切りたいと思う,忌むべきものでした。やめればいいじゃないか,と思われるでしょうが,途中で辞めてしまう事への純粋な不安,これまで頑張ってきたことが無駄になることの怖さと,希に面白い記事に巡り会う事への期待があって,もう少しだし頑張って見るかと,買い続けてきました。これが,ディアゴスティーニの本当に怖さでしょう。当初200号だか250号だかで終わる予定だったはずなのですが,スイッチバックをやたら詳しく説明したり,私鉄のロマンスカー(いわく,一方方向に向きを揃えたクロスシートを備えた優等列車をロマンスカーというのだそうです)を会社・時代ごとにまとめ直してみたり,ダイヤ改正を地域ごとに詳細に書いてみたりと,はっきりいって冗長な内容に気持ちよくお金が払える状態ではありませんでした。開いた口がふさがらないのは,ロープウェイやらケーブルカーが追加されたことです。確かに鉄道には違いないですが,問題は読者がそれらに興味を持ち,それらの情報を求めているかどうか,です。スキー客が激減してロープウェイの存在が薄くなる昨今,スキー場にぶら下がるロープウェイの写真を見せられて「知らんがな」と思った人は私だけではないでしょう。280号くらいからでしょうか,途中で辞められないようにするためと思われる,歯抜けにしてあったシートの補完がやっつけ仕事で急激に進められ,計画性のなさにため息が出ました。やって膨大な補完を行うため,ページ数が増えても内容は薄く,しかも出てくる記事があちこち飛びまくっているので,読了するのが本当に辛くなっています。言われているように,誤字脱字などの間違い以上に,著者の知識不足や誤った理解も目に付きますし,作者の趣味を反映した東南アジアの旅行記などをだらだらと作文のように読まされることも苦痛だったりしましたが,そもそもこのあたりの週刊誌に過度な期待をする方がおかしいと,私は思っています。悪いことばかりではありません。アメリカやヨーロッパの鉄道に興味を持たせてくれたことはきっかけとしてありがたいものですし,車輌だけ,あるいは駅だけ,というものではなく,全般を一通り取り扱っていることから,システムとしての鉄道に関心が沸いたことも事実です。いえ,さすがに300号買い支えた私は,本当にバカだと思います。あまりに恥ずかしく,一号も欠かさず買い終えた事は,死んでも黙っているべきです。300号までの道程をしみじみと思い返してみると,まさに私の平坦な人生において,激動期と重なっていたように思います。創刊号が出た頃,ちょっとした鉄道ブームが起こっていました。理由は分かりませんが,1つには団塊世代の引退があるのではないかと思います。私は団塊の世代もなく,まして退職したわけでもないのですが,たまたま立ち寄った家電量販店のオモチャ売り場で,処分のワゴンに入っていたマイクロエースのED17が特価で売られており,私がNゲージで遊んでいた子供の頃とは精密度が全然違うことに驚き,買って帰ったことに端を発します。以後,次々と鉄道関係の本が出たり,魅力的で個性的な車輌が模型化されたり,DCCという鉄道模型に革命を起こすシステムが一般化したりと,まるで私を狙い撃ちしたかのような状況になっていきました。このED17を買うことがなければ,鉄道に興味を示すことはなかっただろうと思うのですが,ひょっとすると,こんなふとしたきっかけで鉄道に回帰した人が多く,それがブームに成長したのだとしたら,私もブームに乗っただけの人だったことになるのでしょうか。鉄道データファイルの第1号が登場したのは,2004年2月3日でした。それから約6年,毎週毎週出続けたことになります。最終号を手にとって,この6年間の自らの境遇を,ちょっと思い出してしまいました。2004年は,自分の希望で慣れた職場を飛び出したはいいが,すっかり行き詰まってしまい,毎日が沈んだ日々を送っていた年でした。その職場の近所の本屋に毎号買いに出かけていました。この職場はやがて解散となってしまうのですが,ここで出会った,一生の宝となる方々には,後日随分と助けて頂くことになります。2005年は,結局もとの職場に戻ることになり,自分の居場所を見つけた時でした。自分が思い描いていた仕事をフルパワーでやっていた時期です。毎日が楽しく,難しい事にも果敢に挑み,充実した日々をおくっていました。仲間も出来ましたが,敵も作りました。この頃,毎週出る鉄道データファイルが楽しみで,職場から少し離れた本屋に出向くのが楽しくて仕方がありませんでした。2006年は,心血を注いだ仕事が水泡に帰し,その上職場を追われた時でした。別の部署に引き取られましたが,私はここで干されてしまい,ろくな仕事のない時でした。そのうち「ここにはあなたの仕事はないから」と部長に言われて職場を追われました。2007年は,次の職場を選んでいた私が,かつての上司に言葉巧みにだまされて,おかしな職場に引っ張り込まれた時でした。当の上司は私が異動した初日にとっとと逃げ出してしまい,私だけが置き去りとなりました。事前に聞いていた話とは全然違い,わずか1ヶ月でプロジェクトから外され,この年の夏には席まで隔離されてしまいました。いえば「会社に残りたければ雑巾がけをやれ」と人事に言われたのもこの年でした。本当に辛い時期でした。2008年は,設定された期日を過ぎても異動先がなく,退職の覚悟をした後に,全く縁もゆかりもなかった職場に本当に偶然拾ってもらった年でした。ここで自分の得意な小型マイコンを使う事があったり,今も友人として親しくしている社外の方とも出会う機会があったりと,朽ちる寸前だった私の心に少しずつ血が通い始めた時でした。2009年は,リストラのあおりをうけてその職場も追い出され,今の職場に流れ着いた年でした。会社に対して,あるいは人間に対しての,不信感と言うよりそれらへの虚無感を抵抗なく受け入れて,まあ世の中そんなもんだと割り切って生活するようになった時期です。よい仕事の出来る時期を成果も無しに過ごしてしまったことは決して取り返すことは出来ず,そのことをふと思い出した時に,ダメ人間というのはこうやって出来上がるんだなと,しみじみ思うのです。この6年,長かったようで短かった時間でした。あって,生きること以外のすべてを否定されても,それでも生きていかねばならないことの辛さを知った,そんな時だったように思います。そんな日々を送っていても,毎週火曜日には必ず鉄道データファイルの号数が1つずつ増えていきました。思い起こすと,どんなに辛いときにも,どんなにうれしいときにも,必ず枕元には鉄道データファイルがありました。無神経とさえ思うことがありました。鉄道データファイルが自分を支えたとは全く思いませんが,変わってゆく自分と同じ時間軸にある変わらないものに,もしかしたら,少しはもたれ掛かっていたのかも知れません。プラス」が始まるそうです。いやー,まさかの続編とは。~プラスって流行ってるんですか,もしかして。定期購読をお願いしているいつもの本屋さんに,いつものように火曜日の朝,最終号を取りに行くと,すっかりおなじみになったいつもの店員さんに「今日でおわりなんですよね。ありがとうございました。きてくださいね」と,言われました。私も,「またきますよ」と言って,お店を後にしました。変わらぬ事が変わってしまった,瞬間でした。工作をするとゴミが出ます。切りくずや削りカスなどは掃除機がないと片付かないわけですが,私の掃除機は15年ほど前に買った何の機能もない無骨な掃除機でして,これを引っ張り出すのがいつも億劫でした。そもそもゴミを出さないように工作すればいいのですが,ゴミごときに気を遣って集中できないのも男としてどうかと思いますし,それが作品のクオリティを左右するなら本末転倒です。汚れないように泥遊びをしろと子供に言ってもかわいそうでしょう。泥遊びをする子供と同じレベルを脱せず,自分が大人であることをすっかり忘れていていた私は,大人の責任を果たすべく,手軽にゴミを片付けられる方法を模索していましたが,1つの解決策がハンディクリーナの導入です。・・・またおかしな理由を付けて散財か,とか思わないでやってください。いや,数年前からハンディクリーナを探していたのです。実家にいたころの経験で,コードレスタイプは吸引力が弱く結局使い物にならない,ACタイプは吸引力は十分だが機動性に欠け,しかもケーブルが邪魔で片付けるのも面倒,ということで,どっちも次第に使わなくなってしまいました。非常にネガティブな印象しかないのです。そんなおり,なかなか良さそうなハンディクリーナを見つけたので買うことにしました。ブラック&デッカーというメーカーの,Z-PV1000という機種です。PV-1000といってもカシオが1980年代初頭に出していたゲーム機ではないですよ。2006年に登場したサイクロン式のハンディクリーナです。ブラック&デッカーという会社は日本では馴染みもないですが,本国アメリカでは有名なDIY関連の道具のメーカーで,日本で言うならリョービとかマキタとか,そのあたりの感じでしょうか。Z-PV1000は,吸込仕事率26Wとそれなりに強力であること,電動工具ではごく普通に行われている12Vという電源電圧を誇らしげに謳っていること,4時間充電で10分使用可能というスペックはハンディクリーナとして実用上なんとかOKであること,吸い込み口が回転して使いやすそう,そういえばサイクロン式って私は使ったことが一度もなかった,ということで,この機種を選びました。価格もなかなか手頃で,安いお店では5000円ちょっとです。micronを買ったときに約1800円分のポイントがもらえたので,このポイントが使えるお店を探した結果,6300円で見つかりました。最終的にポイントを充当して4500円ほどを支払い,数日後に届きました。届いたZ-PV1000の印象です。・結構大きい丸みを帯びたデザインなので小さく見えるかも知れませんが,床に置いて遠目に見ると結構存在感のある大きさをしています。香箱を組んだネコくらいの大きさでしょうか。充電はスタンドに立てて行うのですが,立てるとこれまた結構な存在感があります。スタンド置き場所は慎重に考えた方がよいでしょう。・結構重い見た目以上に結構重いです。絶対的な質量よりも,ノズルを伸ばした時の全長が長いため,手首だけで上下左右に動かすと結構力がいります。それもあってか無意識のうちに強く握りしめているようで,使用後に手に力が入らなくなるほどでした。重量バランスはよく考えられていますし,モータが横置きされており,回転によるモーメントの発生方向が左右ではなく前後なので,持ちにくいという印象はありませんでした。・結構難しい別に操作が難しい,というわけではないのですが,先程の若干重いこと,大柄なので狭いところで苦労することもあって,ノズルが狙った所にさっといかないのがもどかしいです。前述のように,全長が長いことで振り回すのが大変な上,ジャイロ効果もあって,手首にぐぐっと力が入ってしまうのだと思います。・結構うるさい26Wの吸込仕事率だけに,音はかなりうるさいと思います。騒音に対する配慮が全くないのではないかと思われる,遠慮のない出方です。無骨な掃除機を長年使っている私にすればこんなもんだと思います。ちなみにZ-PV1000はハンディクリーナとしては珍しく,強弱の切り替えがあります。弱ならそれほど目くじら立てるほどのものはないと思うのですが,常識として深夜には使うべきではないでしょう。・結構電池が持たない約10分の使用時間ですから,それを前提にした使い方をするべきなのでしょうが,良く吸い込むハンディクリーナなので,ついつい目に付いたところをついでに掃除してしまいます。するとあっという間に吸引力が落ち,充電が必要になってきます。充電すればいいだけのこととはいえ,なにせ4時間かかりますからね,本当に必要なときに電池切れになっていないように,多少考えながら使う必要があるかも知れません。・結構雑な作り今時中国製は珍しくもなんともないのですが,日本のメーカーだと中国製でも国産と同じクオリティを目指して頑張るので,最近はぱっと見ただけだと中国製かどうかわからないものですが,アメリカのメーカーはそういうわけではないようで,一瞬で中国製とわかる作りの雑さがあります。無用な隙間がある,成型条件が悪いのかムラがある,全体的に厚ぼったい,ビスを隠そうとしない上,そのビスがまたとても格好の悪い色や形をしていて,安っぽいのです。ACアダプタもトランス式で,非常に大きいです。いって邪魔な大きさです。・結構吸い込むハンディクリーナとしては十分な仕事をします。ハンディクリーナといえば,先端のゴムへらやブラシで舞い上げたホコリを吸い込むもの,という印象が私にはありましたが,Z-PV1000について言えば,ちゃんとホコリを浮かせて吸い込む力があります。私にとって重要な,ハンダくずの吸い込みも問題なしです。吸い込み口が小さいので,大面積のゴミを吸い込むのは,取り回しの大変さと相まって苦手です。強弱の切り替えがありますが,普段は弱で十分,ここ一番で強にするという使い方が私の場合はよいと思いました。・結構ゴミが早くたまるダストボックスの中心部には大きなフィルタが取り付けられていますが,このためゴミが実際にたまる空間は結構小さいです。ゴミを吸い込むとすぐにいっぱいになります。ゴミがたまってくると吸い込んだゴミがノズルから出てきてしまいますので,こまめにゴミを捨てる必要がありそうです。・結構ゴミ捨てが大変そのゴミ捨てですが,これだけが気に入りませんでした。ダストボックスの横にあるフタを開けて捨てるのですが,ふたの開く角度がちょうど90度しかなく,ゴミがフタにかかってしまいます。ゴミ箱にフタにぶつからないように注意していると,思わぬ所からゴミがこぼれてしまいます。細かいホコリもダストボックスの縁に付着しますし,ゴミ捨てがとにかく嫌になる機種だと思います。とまあ,GMやクライスラーが丸っこい小さい車を作ったような,そんな無理矢理な感じがなきにしもあらずなZ-PV1000ではありますが,そこはアメリカンV8の国,ストイックな電動工具のDNAを受け継ぐだけに,実用性という点における欠点は見あたりません。国産品の細やかな配慮を期待するのはそもそも難しいと理解しながら,このかわいらしいデザインに惑わされないように実直に使いこなすことを前提におけば,これは優れたハンディクリーナと言えるでしょう。少なくとも私にとって,使っていて楽しい製品であることは確かです。普通の家電メーカーが掃除機の小型版としてハンディクリーナを作るのと,ドリルなどの充電式電動工具の派生としてハンディクリーナを作るのとでは,こんなに違うものなのかと感じた次第です。Laboさんでわけて頂いた,GPS時計プログラムを書き込んだATtiny2313を生かさねばなりません。簡単に試せるという事で,MTM04の直後にGPSモジュールを秋月電子に手配を済ませてあり,翌週の土日から検討に入っています。LCDは昨年の今頃,大阪のデジットで入手した大型のLCDモジュールを使う事としましたが,予想通りあっさり動いてしまいました。PICをアセンブラで使い慣れている私としては,個性の強いMSP430やPSoCならまだしも,個性の弱いAVRを今さら使うのもどうかなあ,と感じて試す気にならずにいました。ところが,GCCが使える(つまり無制限で優秀なCコンパイラが使える)ことと,tiny2313であれば秋月価格で1つ100円と圧倒的に安いことが私にとっては強烈な個性に見えて,軽く遊んでみることにしました。ライタは昨年のデジット詣の際に購入済みです。GCCが使えるという事から,プロセッサのアーキテクチャが無個性であることがうかがい知れるわけですが,逆にPICでは個性が強すぎてGCCをインプリ出来なかったわけですね。先日も話していたのですが,PICは「クセの強さをアセンブラで味わうマイコン」です。開発環境であるAVRstudioも使いやすいですし,tiny2313はちょっとメモリが少ないですが,最大20MIPSという高速処理と,レジスタと内部メモリが1クロックアクセス出来る事もあり,プログラムを作る上で速度低下に気をつけながらコードを書かずに済むため,コンパイラ任せでも精神的に随分楽です。100円で20MIPS,豊富なI/OポートをCでグリグリ動かせますから,もうPIC18F84とはおさらばです。いうことで,すっかり私はAVRのファンになってしまいました。AVRを使うと決めた以上,いろいろ試しておきたくなるのが人情というもので,USIという原始的なシリアルインターフェースモジュールを使ってSPIを実現する(8MHzのクロックで4MHzの転送クロックが出せます)プログラムや,LCD関連のライブラリをひと通り準備しました。これは,MacBookPro上にSunのVirtualBoxという仮想マシンを入れて,Windows環境が実現出来たことが随分大きいです。後日書こうと思っていますが,このVirtualBox,かなり出来がよいです。無償ですが,有償の仮想マシンを買う必要を全く感じません。余談ですが,x86には仮想マシンを実装するにはやや問題があり,普通に仮想マシンを実装しようとしてもパフォーマンスががた落ちになり,うまくいきません。有償の仮想マシンとして有名なVMwareはこの問題をうまく解決したソフトとして知られていますが,Core2Duoなど仮想マシンを前提とした新しいx86であれば,あまりおかしな事をしなくても仮想マシンをちゃんと実装出来ます。無償の仮想マシンでもなんら問題はないというのが,私の考えだったりします。実際の所,VirtualBoxがどうやっているかはわかりませんが,仮想マシンを支援するハードウェアを使うかどうかのオプションがあるので,少なくともパフォーマンスへの貢献はあるのでしょう。話が逸れてしまいましたが,開発関連ツールはWindowsが前提なだけに,自宅にまともなWindows環境が手に入ったことはとても大きなことで,今回のAVRを楽しむことだって,その恩恵だと思います。それで,GPSクロックですが,どうもうまくありません。Laboさんは,処理などに時間がかかり,表示された時刻が正確な時刻ではない,という話をされており,これをきちんと表示させるには1PPSの信号のあるGPSモジュールを使うしかない,といわれていました。実際,平気な顔をして1秒くらい表示が遅れています。GPSが原子時計の精度を持っているといっても,表示が1秒もずれたら,正確な時計としては存在価値がありません。Laboさんのソフトは,時刻情報の含まれているGPGGAセンテンスを割り込みで一気に80バイトのバッファに取り込み,その後文字列から時刻情報を抽出し,JSTに変換してLCDに転送する仕組みです。初期設定が終わったらひたすら空ループを回すのが,main()の中身だったりします。それはそれでいいのですが,割り込みは出来るだけ軽く,という考えからすると,時刻情報の抽出やJSTへの変換,LCD表示などはやはりmain()で処理したいところです。普通に,UARTからの割り込みで1バイトをバッファに取り込む,という処理だけを割り込みで行うと,1センテンスの取り込み完了を待たずに続きの処理が出来る事になるので,表示のアップデートにかかる時間が短縮されて,表示の遅れが小さくなりそうです。そこで,UARTの練習も兼ねて,プログラムの書き直しをしてみることにしました。センテンスの処理を行って時刻情報を抽出する部分は流用させて頂きますが,それ以外は他の方のコードを参考にするか,自分で作るかします。UARTから受信割り込みがきたら,割り込み処理の関数で1バイトをリングバッファに取り込み,ライトポインタを進め,割り込みから復帰させます。main()ではループのなかで$をリングバッファからサーチし,以下に続くGPGGAが見つかったら,続けて取得した文字列をデコード,時刻情報を取り出しJSTに変換,LCDへの転送を行います。リングバッファは1センテンス分というより処理が間に合うだけという感じですので,当初は64バイトを確保しました。ついでにGPRMCセンテンスから日付情報も取得するようにしてみました。ところが,これでもやっぱり遅れます。考えてみると,UARTから80バイトを取り込むのにかかる時間は多くても100ms程度ですから,これをゼロにしても,1秒の遅れが解消されるわけではありません。なにが原因なんだろう・・・やっぱり1PPS出力がないとダメなのでしょうか。GPSモジュールとしては,MNEA-0183で送り出す測位情報を外部のマイコンで記録してくれることを期待しているわけですから,必要なのはその測位を行った時刻が正確であることです。リアルタイムで正確な時刻を吐き出すことはしていなくても当然です。GT-720Fを使う限りは,もう無理なのかなあと思ったのですが,あきらめずにもう少しだけ頑張ってみることにします。GT-720Fには,ボーレートを変更するためのツールがあります。9600bpsではなく,これを38400bpsにすれば1センテンスの受信にかかる時間が1/4に短縮されます。いうことでいろいろツールをいじっていると,別の端子から専用のパルスを出すのとは違いますが,UARTへの出力を1秒で正確に出すことで1PPSが可能になったり,測位を1秒に2回とか4回といったように,測位周期を変えるたり出来ます。送り出すセンテンス種類を制限したり,それぞれの送信頻度を調整できたりします。タイムゾーンの設定が出来るとJSTへの変換もいらなくなるのでいいなと思ったのですが,設定を行っても反映されないようなのであきらめました。これらの設定をいろいろ試行錯誤したところ,AVR側の処理速度と受信バッファの大きさから,38400ボーでは取りこぼしが起きています。64バイトの受信バッファでは,あと数バイトたりない感じです。悔しいので,96バイトまで増やすことにしました。64バイトだと,リングバッファを実現するのに,リードポインタもライトポインタも0x3fでANDするだけでサイクリックに回せるのですが,96では真面目に96になったかどうかを判定し,真ならゼロにリセットという処理をせねばなりません。ボーレートを上げても,処理が増える事で速度低下が起きるようなら本末転倒ですが,まあやるだけやってみます。測位周期は1秒に1度から1秒に2度にします。これまでは1秒に1度しかGPGGAセンテンスが飛んでこず,よって1秒に1度しか表示が更新されないことになるので,表示のズレが1秒くらい出てきてしまうことは避けられないように思いました。1秒に2回にすれば,500msごとにGGAセンテンスが送られてきて,表示も1秒に2回更新されることになりますから,GPSモジュールが本当に1秒未満のズレで時刻を送ってこなければ,表示のズレは500ms以内に収まるはずです。処理を軽くするために,GPGGAとGPRMC以外のセンテンスの送信を停止し,さらに日付情報が欲しいだけのGPRMCセンテンスの送信頻度を10秒に一度にします。すると,GPGGAが運んでくる時刻情報が他のセンテンスに邪魔されず,1PPSを守って送られてくると考えたのです。AVRの処理速度を根本的に向上させるため,これまで内蔵クロック8MHzだったものを,外部クリスタルによる20MHz駆動としました。UARTのボーレートも正確になり,一石二鳥です。そんなこんなで,こんなコードになりました。