へぇボタン

 11/7(金)、バンダイより「1/1 へぇボタン」が発売された。「トリビアの泉」でおなじみのあのボタンだ。

 深夜時代の第1回からこの番組を視聴している裏金産業にとって、昨今のトリビアブームは複雑な心境である。流行に敏感なさんぎょーと、流行に鈍感なT寄、そして流行に嫌悪感を示すクールてつおー。本音としては内輪だけで盛り上がりたいのだが、こうも視聴率が良いと一般市民にも感心がいくのは致し方ない。

 さて、RUQS時代にメンテナンス部と称して早押し機の修理や時限装置の作成に携わっていた私だが、卒業してからはこのような機械に触る機会が少なくなった。ここは1つ、世間の流れに乗って、へぇボタンのアーキテクチャを解明し、システムそのものを見直してみようじゃないか、というのがこのページのコンセプトである。ちなみに、この番組を知らない人はこのページをご覧いただいても意味不明だと思われるので、先にこちらを見ていただくことをおすすめする。へぇボタンのFLASHなどは世の中に腐るほど頒布されているが、実際にハードで組むことを前提とした話をしているホームページなど無い(あってもごくわずか)だろう。このページは(アップした現時点、11/27時点で)かなりセンセーショナルな内容になっていることうけあい。

 何はともあれ、まずはこのボタンを購入。2079円(税込)。会社近くのセブンイレブンで購入したものだが、店員に聞くとそんなに売れていないらしい。レジの兄ちゃんは売れているところを初めて見たという。今下期だけで100Kは高い目標だったか。

 こちらが外形。手のひらサイズである。番組で見ているものと同型であると見て間違いないであろう。LEDの光り方が本物に比べ若干ちゃちいような気もするが。


パッケージ有り。買ったまま。

パッケージ無し。上部を押す

正面から。7ゼグLEDとリセットボタン

 構造としては、まず、「へぇ」と言わしめるボタンが筐体上部を覆っている。押すと確かに「へぇ」という声と一緒にLEDが光る。これはこういう仕様のものを売り出しているのだから当たり前。で、へぇのカウントは前面にある7セグメントLED。0へぇから始まって1つづつインクリメントして20へぇまでカウント。20へぇになると、そこからボタンを押しても反応はまるで無い。よくできているが、ソースにしてみたらif文1つで書ける仕様だ。ちなみに、番組では0〜19へぇの時は数字が白、20へぇの時に赤くなるが、その仕様は入っていない。2色以上の色を発光させるLEDは世の中にすでに存在するが、単価の問題で見送ったものと思われる。

 7セグLEDの横には、リセットボタンがある。20へぇになったら反応しなくなるので、これは絶対に必要。もちろん、20へぇまで行かない途中の数でも押せば0へぇになる。押している間はへぇの反応が一切ないので、ifのネストはリセットが外側にあるようだ。

 ここまで見てわかったのが、入出力が少ないことである。これは、中身がブラックボックスになっていて、仕様が見難いことを表わしている。入力は電源スイッチを除くとへぇボタン、リセットボタンの2つ、出力は「へぇ」の声と7セグLED、それに押した時に光るLED17個の3つ。合計5ポートである。簡単なつくりとこの小さな筐体である。このぐらいが限界だろう。

 では、いよいよ開けて中身を見てみることにする。まずはネジ留めされている一番外側の箱を外す。


開けてみると…何も無い。

 驚いたことに、まだ基板が見えない。「見えない」というのには語弊があるが(下部に子基板が見えるから)、システム全体を支える本基板はまだ中のようである。奥が深い。この子基板と思しき部分は7セグLEDの表示部分のみの基板となっており、まあ写真を見ていただければわかるかと思うが、3cmぐらいしかない。


「手のひらサイズ」よりも小さい

厚さはこのくらい

コネクタ部分

 手が込んでいるようで全然そんなことは無い。7セグLEDは200円ぐらいだろうし、他のセラミックコンデンサも単価なら1円2円の世界である。コネクタも10円検討、抵抗は1ケタ。47μFの電解コンデンサがあとは高そうだが、これでも数十円である。ということで、基板台を抜きにするとこの子基板は300円ぐらいでできてしまうのである。ま、大量生産でコスト削減しようと思ったら、部品に金をかけられないのはデジタルコンシューマの運命である。

 拍子抜けしてしまったので、今度は逆にフタ側から開ける。すると、一応親基板と思しき基板が姿を現した。真ん中の写真の丸で囲った部分を押すことにより、あの「へぇ〜」の声と1ヘェのカウントが行われるようだ。


フタを取ったところ

4つある突起を押すと「へぇ〜」

もちろん、手で押しても反応する

 フタ側からもう1つネジを取って、ようやく親基板を外す。ボタンに合わせた基板の形は、これだけで金がかかりそうな形である。表側はボタン上部にあたり、部品が一切実装されていない(見栄えの問題であろう)。で、裏側を見てビックリである。


これもシンプル、だが…

 あまりに部品点数が少ないのである。パッと見、ロジック(論理回路)を構成している部分すらわからない。どこでどう動いているのか、全くの謎である。完全に迷宮入りだ。

 基板から出ている5本の線は、参照電圧とGND、それにI/Oポートのような線が2つ。たったこれだけである。ますますわけがわからん。電圧を測ってみたが、「+4.5V」と書かれている部分がすでに3.8Vになっており、激しく電圧降下が見られる。新品の電池を使っているので、電池の残りが少ないわけではないのにだ。I/Oはどう動いているのか、テスターだけでは全くわからない(絶対に肉眼ではわからないぐらい速い)。何より、クロックが存在しそうもない。オシレータぐらいあってもよさそうだが、これは小さな部品のどれか1つに相当しているのかもしれない。型番とか全然わからんし。

 このボタンを買った人が、同様のコピー商品を出すことを防ぐためか、単純なつくりであるにも関わらず、基板の情報からではブロック図すら引くことができない。よくできたつくりだ。量産効果で1980円なのだろうが、これだけ最適化するのにどれだけ開発費がかかっているのだろうか。まあバンダイが自社生産しているのは部品と実装だけで、基板開発とかはOEMだろうけど。

 さて、基板からの情報では全く何もできないので、ここは社会人になってから培った技術力を(仕事以外で)生かし、このシステムを実現する方法を考えてみる。

 下記はあくまで私の想像であるが、私なりに作成してみた「へぇボタン」のブロック図である。


「へぇボタン」ブロック図(クリックすると拡大)

 腐っても半導体関連業務のエンジニア、このくらいのブロック図作成は朝飯前である。この情熱をもう少し仕事に生かせば査定もよくなるのだろうが、人間、興味の無い物事はなかなか情熱を向けることができないものだ。

 このブロック図だけでこのシステムを構築できる人は、メーカ勤務か熱心な学生かどっちかだろう。スプリングマンやクェーカー。あたりにこれだけで作らせてみたいが、流石に無理だと思うので、各々のブロックについて説明をば。


入力

Button
 上部のボタン。押すと「へぇ〜」の声と共に1ヘェ。そのまんま。1bit

Reset
 側部のボタン。押すとヘェのカウントがリセット(押している間はブランク、離すと0が表示)。1bit。

出力

7segmentLED
 「ヘぇ〜」の数を表示するLED。デフォルトは0、Buttonを押す度に1へぇづつ加算。20へぇがMaxで20へぇの時にButtonを押しても変化しない。Resetを押すとデフォルトに戻る。7bit(小数点部分は何をやっても光らないのは確認済)。

LED*17
 Buttonを押した際におよそ0.5秒光る緑色のLED。親基板に17個ちりばめられており、LEDに対する信号入力は共通化されている(テスターで確認)ため、17bitあるように見えるが実は1bitあれば事足りる。

Speaker
 Buttonを押した際に「へぇ〜」の声を発する部位。音量調整機能は無い。1bit。

内部

OSC
 オシレータ(Oscillator、水晶発信器)。速いのは必要ない。1MHzで100円ぐらいで売っている。回路をすべて同期化するシステムクロックとして使用。

Pulse Generate
 Buttonの信号がアクティブになった時の立ち上がりを検知する部分。システムクロックに同期している。これが無いとButtonを押している間ずーっとカウントアップされてしまい、1回押すごとに1へぇ、という原則が覆ってしまう。ちなみにアクティブをHighにしてCounterに使っているFFにクロックとして突っ込めばとりあえずOSCは使用しなくてもこの部位は動く(その場合にはチャタリング防止回路が必要)。Buttonからの入力は1bit、出力パルスも1bit。パルスの生成方法は下記の図を参照のこと。


パルス生成の回路図とタイムチャート(クリックで拡大)

Counter
 その名の通り、数を数える部位。前段のPulse Generateから受け取ったパルスを検知してインクリメントする。Max20。Resetが入力されたらパルス入力に関係なくカウンタの値をリセットする。Resetを押している間はButtonの入力が無効になるので、非同期リセット付FFを使用。Pulse Generateからの入力は1bit、20まで数えるカウンタなので出力は5bit。

Decoder
 Counterから受け取った値を7segmentLEDに出力させるために変換する部位。LEDはおそらくLowアクティブなので、記述だと下記のようになる。なお、記述にはVerilog-HDLを使用。本当は2桁なのでこれが2つあるのだが、簡素化して1桁として書いているのをご容赦いただきたい。

always@(count) begin case(count) 4'b0001:LED = 7'b1111001; // 1 4'b0010:LED = 7'b0100100; // 2 4'b0011:LED = 7'b0110000; // 3 4'b0100:LED = 7'b0011001; // 4 4'b0101:LED = 7'b0010010; // 5 4'b0110:LED = 7'b0000010; // 6 4'b0111:LED = 7'b1011000; // 7 4'b1000:LED = 7'b0000000; // 8 4'b1001:LED = 7'b0010000; // 9 default:LED = 7'b1000000; // 0 endcase end



各ビットとセグメントの対応
Controller, Divider
 LED*17を0.5秒だけつける、インクリメントした際に音を出すなどの制御部位。MHzオーダのクロックをここでHzオーダ(仮に0.5秒とすると2Hz)に分周する。

CODEC
 音声データの格納と音声データをSpeakerへ出力するための音声CODEC制御部位。実際にはデコードしかしていない(音声データはすでに符号化されているはずだから)。


 とまあこんな具合だ。ディスクリートの細かい部品(コンデンサ、抵抗、導線など)を除くと、ロジック部分と電源制御(レギュレータ等。入力電圧が電池なので、安定化供給のためには必要になる)、それに親基板となる生基板とスイッチぐらいか。ロジック部分は、XilinxのCPLDを使用すると、秋月で500円で買えるレベルのデバイスで事足りる(私は会社で余っているものを貰えばタダ)。一番小さいものでもI/Oは30本ぐらいあるので、パッケージ的にも問題ない。

 実現のために必要な費用は、以下の通り。

部品価格備考
ボタン100円×2へぇ用、リセット用
LED17個200円数十個いくらの世界
7セグLED2個100円×2もっと安いかも
スピーカ300円一番安いもので充分
オシレータ50円これも安いもので充分
CPLD500円入手ルートさえあればもっと安い
CODEC300円データ格納部分も含むため割高
合計1750円(「価格」は試算)

 ………結論。

 コンシューマの量産品は買った方が手軽で安い!

 発売されてしまってからでは遅いのよ。発売する前に作成しないと。今の世の中、大事なのは"Time to Market"。


メンテナンス部トップへ