Hardwareの最近のブログ記事

しばらく作りかけて放置していたchoco60(v1)が、GW中にようやく完成。
交換を見据えてソケット化した静音軸スイッチ+スプリング交換して変荷重レイアウトにしたのがこだわりポイント。
choco60.jpg
このように分割形式でも使える!
choco60_splitted.jpg

どうも世の中に自作キーボードなる世界があるというのはHHKBのユーザーミートアップで知ったのだが、HHKB持っているし、静電容量スイッチは無いみたいだからいいかぁ‥とその場ではスルーしていた。

その後、しばらくして調べてみるとHHKBと同じ配列ベースの自作キーボードがいくつかあることを知り、興味があったので技術書典に行ってみた。そのときに買いたいと思っていたのがchoco60だったのだが、残念ながらその場で売り切れ。何も買わないのももったいないと思い購入したのが、『Learning Custom Mechanical Keyboard』(通称: #白ウサ本)だった。
sirousa.jpg
実際に作る前に読んでおくと自作キーボードに必要な知識を得られる。コンパクトにノウハウがまとめられた良い本だった。知識を得た上で実際に自作キーボードの世界にいざ入門!

やりたかったこと
・HHKBと同じレイアウトで
・HHKBよりもキータッチを軽く、静かにしたい

やったこと(準備編)
1⃣キースイッチの選定
 遊舎工房に行って実際に様々なスイッチを試してみた。良さげな静音軸スイッチをいくつか選んで一個ずつ購入。あとは家で押しまくって何が良いのか決める。
 自分の中ではHealios、画像にはないけどGateron InkのSilent Blackが良かった。
 やはり価格相応という感じ。Healiosはv2があり、v1よりもv2のほうが良い印象。
key_sw.png


2⃣キーキャップ準備
 ハマると自作キーボードの世界で一番散財しやすいポイントだと思った。こだわると$100オーダーの世界。でも最も目につくポイントでもある。また、手元に届くまで平気で半年以上はかかるので気長に考える必要がある。
 今回はGMK RED SAMURAIをベースにしている。

 ベースキットだけでchoco60に必要な分割スペースバーが手に入るのがポイントだった。
 ただ、GMK RED SAMURAIには1Uスペース、コマンドキーでよさげなものがないので、積み状態になっていた別キット(GMK 9009)から拝借。


3⃣潤滑とスプリング交換
healios_disassembly.jpg
 潤滑は「recompile keys キースイッチ ベストプラクティス」を参考にした。この辺の作業が一番コツコツ感がある。
 スプリング交換はやっているうちにどのへんが良いのかわからなくなり(気づくとスプリングの種類が増えている)、完全に迷宮に入り込んだ感がある。
keyboard_spring2.jpg

keyboard_spring3.jpg
個人的にはHHKBよりも軽くしたいという当初の思惑があって、45sを上限としたが、軽すぎるのも考えものだということがわかったので、今後は重い方向にトライしても面白いのかもしれない。


4⃣キー配置を決める
 45s~20sまでのスプリングを使って東プレRealforceっぽく変荷重にしてみた。


5⃣ソケット対応
millmax_socket2.png
 完成後にキースイッチ交換したくなると思い、Mill-Max 3305-0-15-80-47-27-10-0を使用。個体によってはタイトでソケットが入りにくい場合がある。面倒でも金属ヤスリで足の部分を少し削ると良い。無理にソケットを付けようとすると足が折れて、付けるのがますます困難になる。


やったこと(工作編)
基本的に公式のビルドログに沿ってやったぐらいである。
少し自分のやったこと事を補足すると
・コンスルーピンヘッダはんだ付け後のピン除去
choco60_pro_micro.jpg
 ボトムプレートと干渉しないように、はんだ固定側のピンは切って、高さを切り詰めた。

・ファームウェア書き込み
 「自作キーボード温泉街の歩き方 (初心者編)自作キーボードにファームウェアを書き込む」を参考にした。

・ダイオードのはんだ付けが終わったらピンで一度通電テスト。
 基板のみで文字が打てるのかをまず確認した。

・スタビライザーのlube
 この動画を参考にした。

choco60_band_aid_mod.jpg
 底面がぶつかるところにバンドエイドを仕込んでクッション代わりにするのをband aid modと呼ぶらしい。
 たしかにやたらと静かになる。

作ってわかったこと
・キーは軽ければ軽いほど楽...とは限らない
 適度に反発力がないとかえって疲れるし、タイプミスも多くなる。(35s以上が良さそう。)
・TRRSケーブルはふにゃふにゃのほうが取り回ししやすい。
 スリーブ付きは見た目が良いが、ケーブルが固くなり取り回しが難しくなる。
・HHKB準拠のコマンドキーを集めるのが割りと大変。choco60_superkey.jpg
 HHKBに寄せてると1.5Uのコマンドキーが必要になるが、この大きさのコマンドキーは割と希少。(手持ちだとGMK9009の拡張パーツぐらいしかない)
 HHKBに慣れているのでALTと交換したくはないのが悩みのタネ。
・変荷重レイアウトが難しい。単に人差し指中指から遠いほど軽くするものではないと思う。例えば...
 ①<>→対になっているキーは重さを揃えたい。
 ②zxcv→Ctrlと組み合せると人差し指も割と使う領域なのでこちらは揃えた。

 ①②は作りながら対応したが、今後は更に以下も追加すべきと考える。
 ③wasd→ゲームを考えるとこれも重さを揃えるべき領域。
・スプリング交換後の静音性比較
 面倒で試していなかったが、スプリング交換後にお気に入りスイッチの音比較をやってみたほうが良いかもしれない。初期スプリング時の比較評価とはまた違った評価になる可能性がある。もしかしたら安いスイッチも候補にまた選ばれるかもしれない。当時のログを見返すとHealiosとSilent black Inkだけでも相当悩んでいた。
・ソケットの厚みにそこまでこだわらなくても良かった。
 途中、Mill-Max 7305-0-15-15-47-27-10-0から3305-0-15-80-47-27-10-0に鞍替えしたが、スイッチプレートによってスイッチが浮くのであまり拘る必要はなかったかもしれない。millmax_socket.jpg
・ソケット対応にするにははんだごてのスキルを上げる必要がある。
 ソケットのところだけは共晶ハンダを使って流れやすくしたが、2~3割はミスっている気がする。
・スイッチブレートの位置決め大事。
 →これがヘマるとキーボード全体が歪む。一番大事な工程に思えた。
・量産効果の凄さ
 →世界におそらくひとつだけのキーボードが得られる嬉しさはあるが、
  工業製品なのでHHKBは安いという間違った認識も持つようになる。

ちなみにカスタムUSBケーブルは@2zk氏から購入した。
TRRSケーブルだけで難儀していた自分にとって、カスタムUSBケーブル自作はすごすぎる。

今回は好きな様にやってしまえ!と吹っ切ったおかげで初自作ではあったが
自作キーボードの狂気レベルでは一気に4層目ぐらいにたどり着いた。
自作キーボードではqwerty配列に拘る必要すらないという自由度がある。
次はキー配列のカスタマイズに手を出してみたいと思っている。

行ってきました。(イベントの様子
hhkb_meetup.jpg

HHKBでのイベントは約6年ぶりだったので(前回のレポート)面白そうな話が聞けるかなぁと思い参加してみた。

残念ながら家事に手間取ってしまい、やや時間を過ぎたぐらいで到着。
会場では最初の和田先生のビデオ講演が少し始まっていた。最後の方でinfinity 60% keyboardがHHKBを参考にしている話を紹介したあたり、完成品を長く使ってほしいという話が印象に残った。自分がHHKBを使いはじめたのは二十歳の頃、動画でも出ていたぷらっとホームで買ったものだったので、なんだかんだで長い間、この完成品に触れられていたのは幸せなことである。

ミートアップでは動画の通り、面白い要望が出ていた。ハードウェアでのカスタマイズ機能が今後出るなら色々面白いことができそうだ。最近40% keyboardの世界も面白そうかなぁと思っていたけど、ちょっと踏みとどまりそう。

会場で誰かが言っていたけど、末永くこの商品が続けば良いと思う。もし壊れてまた買いたいと思ったときに商品が無いのは辛い。そのためには色々ユーザの要望を取り込んでいけなければならないのもわかるが、できればUS版はこのままの形で残しておいてほしいと思う。個人的には白の経年による黄ばみがなんとかならんかなぁと思うけど、懇親会では年季の入った感じと評されてまぁ、それも悪くはないのかなぁと思い直した。

その他、会場で感じたこととしては、HHKBが日本だけの閉じた世界ではなくなりつつあるのだなぁと思った。いつかこのミートアップが日本限定でない日が来るのかもしれない。(HHKBで告白された中国のエンジニアが羨ましい。)

懇親会では私も前に作ったBTアダブタを持参。
20170923_hhkbs.jpg
各自のキーボードを持ち寄せて話ができたので面白かったし、何より同じものが好きな人同士の空間というのは居心地が良い。

このイベントで一番ビックリしたのは帰りにキーボードが一台増えていたことだろう。
20170923_hhkb_type_s.jpg
(初代proが壊れるまで我慢と思っていたけど、13年経っても全く壊れる気配は無く、会場特価だったので思わず買ってしまった。)

・キートップ差し替え
20170923_hhkb.jpg
昔憧れていた赤Ctrlも購入。手元で通常pro版と押し比べができるようになったので改めて書くが、やっぱりtype-Sの方が押し心地は軽い。イベントに参加して安く購入できた喜びもあるが、type-Sに触れられている喜びのほうが勝っているので、やっぱりとっとと購入すべきだったかもしれない。

せっかくの夏休みなので、昨年作ったArduinoを用いたUSB→BTアダプタを小型化してみた。
最終的に下の写真のようにフリスクケースに収まるぐらいの大きさになったので満足している。
a_promini_usb2bt.jpg

フタを開けると大体こんな感じ。DCジャックはちょっとはみ出した。
a_promini_usb2bt_2.jpg

必要なもの
・Arduino pro mini 3.3v 8MHz版(加えてPCからスケッチを書き込むためのFTDI USBシリアル変換アダプター)
・USB Host Shield for Arduino Pro Mini
・RN-42 XVP(前回のを流用)
・DCジャック
・コンデンサ 0.1μF(パスコン)
・5v ACアダプター
 5vレギュレータをつけようか迷ったかが、スペースの関係上、早々に断念。
 (しかし、完成後のスペースを見るとできそうな感じではある。)
 5v ACアダプター使用前提の設計とした。
加えて諸事情により自分は抵抗 3.3kΩを使用。

以下、やったことをつらつら並べる。
1.USB Host Shield for Arduino Pro Miniの購入
国内では入手できないので、ある意味これが一番敷居が高い。PayPal経由で自分は本家から購入。
Amazonでも互換のパチものが売っているようだったが、後述のVBUS jumperが無いようだったので自分は避けた。
(国内でもどっかの代理店が売ってくれればよいのだけど...。)

2.USB Host Shield for Arduino Pro Miniの下準備
3.3vのままではUSB機器に給電できないので、外部からVBUSへ5vを供給しなければならない。
本家のマニュアルを元にVBUS jumperを切断し、VBUS pad とRAWピンを接続する必要がある。
具体的には↓の方のツイートが参考になる。
https://twitter.com/YuuichiAkagawa/status/307151034839613441
(このVBUS pad とRAWピンの距離感が残念なところ。ほぼ対角線上だ。)

3.USB Host Shield for Arduino Pro Miniと Arduino Pro Miniの接続
スペースを少しでも確保するため、本家の写真にもあるようにUSB Host Shieldの上にpro miniを載せる形で半田付け。

4.9600bps対応
8MHz版を使用する場合、以前使用していた115200bpsだとエラー率が高く、使用できないようなので
前回使用したソースコードを修正した。(bps以外にも最新ライブラリに追従するための微調整も含めた)
Arduino以外にRN-42側も9600bpsに変更する必要があるが、ここで自分はRN-42側のコマンドモードで設定しようとしてハマった。
一回リセットしようさせようとreset pinをカチカチやってみたが、どうも初期状態に戻らない。調べてみると一旦HIDモードに入るとfactory reset出来なくなるようだ(う〜ん、前に初期化した記憶があるのだが...。HIDに入る前だったか...?)。仕方なく、GPOI7をonにすることで対応。RN-42評価キットの実装から間に抵抗3.3kΩを追加したが、モジュール側で設定出来るならこの抵抗は不要。

4.RN-42と接続。
ブレッドボードでテストした後、フリスクケースに収まるようにハンダ付け。
最終的な回路図は以下の通り。
arduinopromini_rn42.png
3.3v機器同士の接続は繋げればイイだけだから非常に楽である。

Windowsとの接続テストの様子。特に問題なし。
a_promini_usb2bt_3.jpg

iPadとの接続もok。今はこのスタイルをベースにやってる。
a_promini_usb2bt_4.jpg

一番大変だったのはフリスクケースの加工である。大きめにカットするときにニッパーを使って切断したが、
本当にお菓子入れかと思いたくなるぐらい材質が堅かった。熱いホットボンドを垂らしても全然平気。
電子工作のケースに良く選ばれている理由がよく分かった。

arduino_bt.jpg

Arduinoと秋月で安く売られているbluethoothモジュール(RN-42 XVP)をくっつけて試したところ、いくつか紆余曲折があったものの、うまく動かすことが出来たので纏めておく。

なお、本作成にあたり、addsict氏の記事[1]を非常に参考にさせて頂きました。

使用したもの
・ハードウェア
 ・Arduino Uno
 ・USB Host シールド(Sparkfun製)
 ・RN-42 XVP
 ・SSCI-KIT-XBSOCKET XBeeピッチ変換基板とソケットのセット(スイッチサイエンス製)
 ・抵抗 4.7kΩ、9.1kΩ
 ・9V 0.65A アダプター

・ソフトウェア
 ・felis/USB_Host_Shield_2.0 https://github.com/felis/USB_Host_Shield_2.0
 ・addsict/USBKeyboard2BT https://github.com/addsict/USBKeyboard2BT


やったこと
①USB Host シールドの動作確認
sparkfun_usbhost.jpg参考元のaddsict氏の記事で一番よく分からなかったのがUSB Host シールドから伸びている謎の線である。
国内で入手性しやすいのはSparkfun製のUSB Host シールドだが、調べてみると配線が本家と異なるため、ライブラリーがそのままでは使えないそうな[2]。
改造例はいくつか見つけたが、配線直したりしなきゃいけないのでなかなか面倒。NeoCat氏のように7ピンとresetピンをくっつけさせるのが一番ラクそうである[3]。

この状態でUSBホストシールドのライブラリーを取り込み、サンプル(HID→USBHIDBootKbd)を動かしてみたところ、正常にシリアルコンソール上に押したキーが表示されていることを確認。
なお、USBバスパワーだけではパワー不足なのか、HHKBを動かすにはACアダプター(外部電源)が必要だった。


②RN42-XVPの設定
まず、ブレッドボード上でお手軽に結線させたいため、ピッチ変換基板をはかせた。任意でコンデンサ(パスコン)も付ける。
SSCI-KIT-XBSOCKET.jpg
その後、RTSとCTSを繋いで、GNDとVCCをArduinoのGNDと3.3Vに繋ぐ。Arduino Unoは5Vで動作するが、RN42側は3.3Vで動作するのでRN42のVCCに5Vを繋がないように注意する。

ここから先は英語マニュアルとの格闘になる[4]。
ちなみに自分の環境ではwindowsのbluetoothレシーバーとRN42との相性が悪いためか、何回やっても接続できなかった。諦めてMac Book Air + CoolTermを使用したらすんなりといけた。
CoolTerm上の設定は以下のとおり。

ss_2014-06-26 22.57.59.png

Mac Book Air 上でbluetoothのデバイスを探し、(RNBTうんたらかんらというモジュール名で出てくる)間髪入れず、CoolTerm上で接続して$$$を入力するとモジュール側から応答が返ってくる。(よくよく考えるとBluetoothモジュールの電源をつけただけで、PCとシリアル通信できてしまうのだから、このRN42 XVシリーズはヤバイぐらいお手軽なモジュールである。)

マニュアル見ながら色々なコマンドを流して見たが、最終的に必要なのは
以下の4コマンドぐらいかな。

(1. モジュール名の設定)
SN,HHKB_BT
(2. ペアリングモード化)
SM,6
(3. HID化)
S~,6
(4. reboot)
R,1

その後、addsict氏のUSBKeyboard2BT スケッチを書き込み、USB Host シールドと RN42を以下のように接続させればok。

arduino_rn42.png
RN42はRN41を元にして作った図なのでピンが違うかもしれないが、ココでのメインはArduino側のTXとRXをRN42側のRXとTXに繋ぐよう、クロス結合させることである。(Arduinoにとっての入力はRN42の出力。逆もまた然り。)

ひとつ注意しなきゃいけないのがArduino側の出力は5Vなので、3.3Vまで落とさないとRN42側が壊れてしまう点である。
ここでは抵抗分圧回路[5]を用いて3.3Vまで落としてある。(抵抗分圧は抵抗の比によって決まるので4.7kΩ、9.1kΩでなくても良い。極端な話、4.7Ω、9.1Ωでも電圧は3.3Vに下がるのだが、抵抗値が少ないと今度は電流が大きくなってしまい、回路が焼き切れてしまうそうな。)

ちなみにRN42からやってくる出力(Arduino側から見た入力)は3.3VでもArduinoは識別可能なので、そのまま繋ぐだけでよい。


ここまでやってwindowsでBluetoothデバイスの検索の検索をやってみると...

bt_on_win7.png
↑こんな感じで出てくる。しばらくインストールの準備を待てば使えるようになった。
今のところwindows7、ipod touchの2つで動作確認が取れている。
ただし、Mac Book Airは断続的に切断してしまい、思うように動いていない。
SPPでは問題なく接続できるのに謎。

Arduinoによるプロトタイプは完成したので、今後はArduino Pro Miniとかで小型化させたい。

・参考
[1]Happy Hacking KeyboardをBluetooth化する(無改造版) - addsict's blog http://addsict.hatenablog.com/entry/2013/08/18/170204
[2]Arduino Uno ではじめる ADK - ADK勉強会 (東京) https://sites.google.com/site/adktokyo/unoadk
[3]USBミサイルランチャーをArduinoでコントロール - Okiraku Programming http://d.hatena.ne.jp/NeoCat/20120325/1332677097
[4]RN42XV - rfPIC http://www.microchip.com/wwwproducts/Devices.aspx?product=RN42XV
[5]抵抗計算ツール http://sim.okawa-denshi.jp/teikokeisan.htm

PC組み立て

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

自分はだいたい3~4年周期でPCを切り替えるようだ。K6-II→C3→Athlon64→Athlon64 X2ときて、初のIntel CPUでメインマシンを組むことにした。

欲しいCPUのモデル名3770Tでtwitter検索した結果RSSリーダで追ってたら千葉のドスパラで売っていたようなので、千葉に出向いて買った。その後足りないパーツを秋葉原で買おうとしたら秋葉原のドスパラにも3770Tの在庫が復活してて泣いた。

まぁ苦労したものほど、愛着がわくということにしておこう。紆余曲折はあったが、クアッドコアをゲットしたのだ。
3770T_1.jpg

久々にPCを自作するのだが、まずCPU側にpinがないことに驚いた。最近じゃこっちのケースのほうがメジャーだろうか?マザー側でしっかりpinが保護されているので、こっちのほうが合理的なのかも。
3770T_2.jpg

PCに組み込んでみたところ。

ケースも新調したが、電源が下置きだったり、裏配線、ツールレスでストレージがセットできたりと色々楽しめた。あとUEFI BIOSにカルチャーショックを受けた。(マウスポインタが出たり、ネット経由でBIOSのupdateができたり等)

ちなみに構成は以下のとおり。
[cpu] Intel Core i7-3770T
[memory] KingSton HeyperX Lovo 4GB*2
[motherboard] MSI Z77A-GD65
[power unit] Super Flower SF-550P14PE-P
[ssd] Intel SSD 510 Series 128GB
[hdd] HGST 0S03224 2TB
[case]CORSAIR CC650DW-1(付属のケースファンは五月蠅いので、ファンの取り替えを考えている。)

MSIマザーのZ77A-GD65だが、電圧を下げる方向では今のところ設定できないようだ。下げ方向にぎりぎり切り詰めてみたかったので、ちょっと残念。OCメニューの箇所にある[My OC Genie]項目をCustmizeに設定すれば電圧設定メニューがでてくるが、メモリの電圧下げた後にシステムモニターからモニタリングしても1.5V固定になっている。せっかくのDDR3Lモジュールなのに少しもったいない気もするが、↓にも書いてあるように定格でも十分良さげ。

ワットチェッカーで測ると以下のようになった。
アイドル時・・・23-24W
youtubeやニコニコ動画で動画見る・・・25W(ほとんどCPUを使用していないらしく、アイドル時とあまり変わらない。)
HDDがスピンアップすると+3W増加
3Dゲーム(WoT)・・・55W前後

コア数倍増で消費電力減るとかすごい!多分これで5年は戦える気がする。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちHardwareカテゴリに属しているものが含まれています。

次のカテゴリはProgrammingです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 7.9.3