エントリー

カテゴリー「make:」の検索結果は以下のとおりです。

夏休みの工作 - PC-6001のキーボードをUSBに! ~ QMK編

20240912142912.JPG

 さて,PC-6001のキーボードをUSBで繋ぐ夏休みの工作,今回は完結編として実際にキーボードをUSBで繋いでみたいと思います。

 分解清掃はいってみれば(ノウハウはあるにせよ)誰でも気軽に出来る仕事です。しかし,USBで繋ぐにはハードとソフトの知識に加え,諦めないという熱意も不可欠だと思います。

 とまあ,気合いを入れて取り組んでみたところ,昨今の自作キーボードの流行を支える便利なシステムの存在がわかり,おかげさまでたった2日,実質2時間ほどで完成してしまいました。

 それはQMKといいます。アマチュアの自作は言うに及ばず,市販品にも使われるファームウェアで,主流だったAVRはもちろん,最近ではRaspberryPi Pico(RP2040)にも実装されていて,様々なMCUで動作します。

 主な機能はもちろん,かなり特殊な機能も実装済みであり,我々はキーボードごとに異なる差分をコンフィギュレーションしていってビルドすれば,信頼性の高いキーボードが完成します。面倒なUSB周りも実装済みなのがうれしいところです。

 以前ADBをUSBに変換する基板を作る時,ATmega32U4を搭載したProMicroを使いましたが,これも定番です。私も当初これを使ってPC-6001のキーボードを繋いでみようと画策しましたが,ちょっとGPIOの数がギリギリすぎ(ローとカラムで18本,LED用の1本が足りない)なので,手持ちのRaspberryPi Pico(以下RPi Pico)を使うことにしました。

 さてこのQMK,実は歴史あるシステムでユーザーも多いのですが,今なお頻繁に変更や修正が加えられている「生きている」システムで,根幹にかかわる部分に半年ごとに手が入るようなムムムな状況です。

 おかげで半年前の先人達のメモが役に立たなかったり,一部読み替えないといけなかったりします。特に私のようなCに慣れた人にとってjsonのデータ構造を見るのはなかなか苦しい物があり,今回はとても良い勉強になりました。

 まずはインストールからです。今回はMacを使ってみましょう。

 Homebrewでインストールしますので,

brew install qmk/qmk/qmk

 としましょう。続けて,

qmk setup

 としてセットアップを済ませてしまいます。これでホームディレクトリにqmkフォルダが作られます。試しに,

qmk compile -kb clueboard/66/rev3 -km default

 としてサンプルをコンパイルし,正しくセットアップが出来ているかどうか確かめておきます。

 ではいよいよ作業開始です。まずは新規のキーボードを設定します。

qmk new-keyboard

 いろいろ聞かれますので,今回の条件に合うように入力していきます。名前とかそんなのはどうでもいいのですが,大切なのはDefault Layoutでnone of the aboveを選ぶ事と,MCUにRP2040を選ぶ事です。

 こうして新規にプロジェクトを作ったら,~/qmk_firmware/keyboards/以下に,自分の命名したキーボードのフォルダが出来ており,この中にkeyboard.jsonとdefault/keymap.cが出来ているはずです。

 この2つを修正するのが今回の作業の中心です。なお,このファイルの構成は時期によって異なっているみたいで,config.hだった時代もあれば,info.jsonだった時代もあるようです。最新の状況は上記のようにkeybord.jsonとkeymap.cですが,これを解説した初心者向けのページはまだ引っかからないようでした。

 個人的には,近い将来keymap.cもcからjsonになるだろうと思うので,今回の情報もいつまで通用するかわかりません。

 では早速keyboard.jsonです。

{
    "manufacturer": "gshoes",
    "keyboard_name": "pc6001_rp2040",
    "maintainer": "gshoes",
    "bootloader": "rp2040",
    "diode_direction": "COL2ROW",
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true
    },
    "matrix_pins": {
        "cols": ["GP14","GP15","GP16","GP17","GP18","GP19","GP20","GP21"],
        "rows": ["GP0","GP1","GP2","GP3","GP4","GP5","GP6","GP7","GP8","GP9"]
    },
    "processor": "RP2040",
    "url": "",
    "usb": {
        "device_version": "1.0.0",
        "pid": "0x27DB",
        "vid": "0x16C0"
    },
    "indicators": {
        "caps_lock": "GP22",
        "on_state": 0
    },
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
                {"matrix": [0, 1], "x": 1, "y": 0},
                {"matrix": [0, 2], "x": 2, "y": 0},
                {"matrix": [0, 3], "x": 3, "y": 0},
                {"matrix": [0, 4], "x": 4, "y": 0},
                {"matrix": [0, 5], "x": 5, "y": 0},
                {"matrix": [0, 6], "x": 6, "y": 0},
                {"matrix": [0, 7], "x": 7, "y": 0},
                {"matrix": [1, 0], "x": 0, "y": 1},
                {"matrix": [1, 1], "x": 1, "y": 1},
                {"matrix": [1, 2], "x": 2, "y": 1},
                {"matrix": [1, 3], "x": 3, "y": 1},
                {"matrix": [1, 4], "x": 4, "y": 1},
                {"matrix": [1, 5], "x": 5, "y": 1},
                {"matrix": [1, 6], "x": 6, "y": 1},
                {"matrix": [1, 7], "x": 7, "y": 1},
                {"matrix": [2, 0], "x": 0, "y": 2},
                {"matrix": [2, 1], "x": 1, "y": 2},
                {"matrix": [2, 2], "x": 2, "y": 2},
                {"matrix": [2, 3], "x": 3, "y": 2},
                {"matrix": [2, 4], "x": 4, "y": 2},
                {"matrix": [2, 5], "x": 5, "y": 2},
                {"matrix": [2, 6], "x": 6, "y": 2},
                {"matrix": [2, 7], "x": 7, "y": 2},
                {"matrix": [3, 0], "x": 0, "y": 3},
                {"matrix": [3, 1], "x": 1, "y": 3},
                {"matrix": [3, 2], "x": 2, "y": 3},
                {"matrix": [3, 3], "x": 3, "y": 3},
                {"matrix": [3, 4], "x": 4, "y": 3},
                {"matrix": [3, 5], "x": 5, "y": 3},
                {"matrix": [3, 6], "x": 6, "y": 3},
                {"matrix": [3, 7], "x": 7, "y": 3},
                {"matrix": [4, 0], "x": 0, "y": 4},
                {"matrix": [4, 1], "x": 1, "y": 4},
                {"matrix": [4, 2], "x": 2, "y": 4},
                {"matrix": [4, 3], "x": 3, "y": 4},
                {"matrix": [4, 4], "x": 4, "y": 4},
                {"matrix": [4, 5], "x": 5, "y": 4},
                {"matrix": [4, 6], "x": 6, "y": 4},
                {"matrix": [4, 7], "x": 7, "y": 4},
                {"matrix": [5, 0], "x": 0, "y": 5},
                {"matrix": [5, 1], "x": 1, "y": 5},
                {"matrix": [5, 2], "x": 2, "y": 5},
                {"matrix": [5, 3], "x": 3, "y": 5},
                {"matrix": [5, 4], "x": 4, "y": 5},
                {"matrix": [5, 5], "x": 5, "y": 5},
                {"matrix": [5, 6], "x": 6, "y": 5},
                {"matrix": [5, 7], "x": 7, "y": 5},
                {"matrix": [6, 0], "x": 0, "y": 6},
                {"matrix": [6, 1], "x": 1, "y": 6},
                {"matrix": [6, 2], "x": 2, "y": 6},
                {"matrix": [6, 3], "x": 3, "y": 6},
                {"matrix": [6, 4], "x": 4, "y": 6},
                {"matrix": [6, 5], "x": 5, "y": 6},
                {"matrix": [6, 6], "x": 6, "y": 6},
                {"matrix": [6, 7], "x": 7, "y": 6},
                {"matrix": [7, 0], "x": 0, "y": 7},
                {"matrix": [7, 1], "x": 1, "y": 7},
                {"matrix": [7, 2], "x": 2, "y": 7},
                {"matrix": [7, 3], "x": 3, "y": 7},
                {"matrix": [7, 4], "x": 4, "y": 7},
                {"matrix": [7, 5], "x": 5, "y": 7},
                {"matrix": [7, 6], "x": 6, "y": 7},
                {"matrix": [7, 7], "x": 7, "y": 7},
                {"matrix": [8, 0], "x": 0, "y": 8},
                {"matrix": [8, 1], "x": 1, "y": 8},
                {"matrix": [8, 2], "x": 2, "y": 8},
                {"matrix": [8, 3], "x": 3, "y": 8},
                {"matrix": [8, 4], "x": 4, "y": 8},
                {"matrix": [8, 5], "x": 5, "y": 8},
                {"matrix": [8, 6], "x": 6, "y": 8},
                {"matrix": [8, 7], "x": 7, "y": 8},
                {"matrix": [9, 0], "x": 0, "y": 9},
                {"matrix": [9, 1], "x": 1, "y": 9},
                {"matrix": [9, 2], "x": 2, "y": 9},
                {"matrix": [9, 3], "x": 3, "y": 9},
                {"matrix": [9, 4], "x": 4, "y": 9},
                {"matrix": [9, 5], "x": 5, "y": 9},
                {"matrix": [9, 6], "x": 6, "y": 9},
                {"matrix": [9, 7], "x": 7, "y": 9}
            ]
        }
    }
}

 最初に用意されるサンプルコードは4x4のキーパッドのものですのであまり役には立たず,ちょこちょこと修正すればOKというほど甘い物ではありません。

 今回のようにフルキーボードの場合には自分で調べて記述する必要もあり,それがまた楽しい作業だったりしました。

 今回のポイントです。

(1)matrix_pins

 以前はマトリクスの大きさ(4x5とか)を先に指定する必要もあったようですが,今はマトリクスについてはこの記述だけで良いようです。

 ピンの指定にはそれぞれのMCUに指定された端子名を書く必要があるので,RP2040ならGPxxなどの番号を,ATmega32U4ならBxxやCxxという番号で記述します。

 ProMicroだと,基板のを端子名はATmega32U4の端子名と違っているので読み替えないといけないですから,結局回路図が必要だったりするのですが,RP2040の場合RPi Picoの基板に書かれている端子名がRP2040の端子名と一致しているのでそのまま書けば問題ありません。これは楽です。


(2)USBのpidとvid

 アマチュアの工作であれば誰もうるさいことを言わないと思いますが,今回私が使ったIDは条件付きながらアマチュアであれば無償で使っていい物ということで,ありがたく使わせて頂きました。


(3)LED

 LEDについては,jsonでのサンプルコードが見つからず,試行錯誤をしました。まずQMKにはCapsLockなどのLED制御の仕組みは含まれているので,使いますという宣言をするだけで動いてくれます。自分でコードを書く方法もありますが,そこまでする必要は薄いでしょう。

 書き方ですが,indicatorsのcaps_lockにLEDを割り当てた端子名を記述,そしてその論理をon_stateに書きます。負論理だったら0,正論理だったら1です。

 で,この0や1は文字ではなく数値扱いですので,""で囲んでしまったらエラーになります。

 後述しますが私はcaps_lockをかなキーに割り当てました。なぜならかなキーの横にあるLEDを点灯させたいと思ったからで,この記述でCapsLockがロックされるとLEDが点灯するようになりました。ちょっと感動しますよ。


(4)laouts

 ここはおまじないのような感じがします。用意したキーボードのマトリクスの構造を記述します。PC-6001の場合,Xが0から7までの8本,Yが0から9までの10本ですので,順番に書いていくだけです。


 次にkeymap.cです。

// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H
#include "keymap_japanese.h"

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [0] = LAYOUT(
    KC_NO  ,KC_LCTL,KC_LSFT,KC_LCMD,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,
    JP_1   ,JP_Q   ,JP_A   ,JP_Z   ,JP_K   ,JP_I   ,JP_8   ,JP_COMM,
    JP_2   ,JP_W   ,JP_S   ,JP_X   ,JP_L   ,JP_O   ,JP_9   ,JP_DOT ,
    JP_3   ,JP_E   ,JP_D   ,JP_C   ,JP_SCLN,JP_P   ,KC_F1  ,JP_SLSH,
    JP_4   ,JP_R   ,JP_F   ,JP_V   ,JP_QUOT,JP_AT  ,KC_F2  ,JP_UNDS,
    JP_5   ,JP_T   ,JP_G   ,JP_B   ,JP_RBRC,JP_LBRC,KC_F3  ,KC_SPC ,
    JP_6   ,JP_Y   ,JP_H   ,JP_N   ,JP_MINS,JP_CIRC,KC_F4  ,JP_0   ,
    JP_7   ,JP_U   ,JP_J   ,JP_M   ,KC_NO  ,JP_YEN ,KC_F5  ,KC_NO  ,
    KC_ENT ,KC_STOP,KC_UP  ,KC_DOWN,KC_RGHT,KC_LEFT,KC_TAB ,KC_ESC ,
    JP_CAPS,KC_INS ,KC_DEL ,KC_BSPC,KC_HOME,KC_NO ,KC_NO   ,KC_NO  
    )
};
 
 これは短いのですが,結構重要な記述があります。ファイル名の通りC言語の記述方法ですので,慣れている私は助かりました。

(1)include

 ライブラリやマクロの定義などを読み込ませる記述ですが,サンプルに含まれるQMK_KEYBOARD.Hはそのままに,keymap_japanose.hもincludeしておきます。

 というのは,PC-6001がJIS配列だからです。QMKは標準ではUS配列です。ですのでSHIFT+2では@ではなく"が出ます。さらに;や',[や]の位置も違いますので,これを上手くアサインするのは難しいです。

 私も最初はPC-6001をUS配列でキーをアサインしていたのですが,途中でどうにもならなくなり,調べたところ便利なJIS配列でのアサイン方法が見つかりました。

 通常,アサインにはKC_xxというコードで記述を行うのですが,JIS配列のキーについてはJP_xxで書けば良いです。もちろん,JISとUSで同じキー(例えばカーソルキーなど)はKC_xxのままで構いません。


(2)LAYOUT

 前述の通り,USはKC_xxで,JISはJP_xxでアサインを行っていきます。

 手持ちのPC-6001の資料からキーマトリクスは分かっていますし,コネクタの配列も回路図から判明していますので,その通りに入力していきます。

 これはノウハウというよ私の考え方なのですが,ファンクションキーは無理に拡張せず,F1からF5までとしました。PC-6001ではSHIFT+F1でF6と言う具合にF10まで扱えるようになっていたのですが,今回はそこまではやりませんでした。そもそもファンクションキーなんか使いませんし。

 また,かなキーはCapsLockキーに割り当てました。前述の通りLEDを使いたいからですが。使用頻度が低いので迷いもありました。しかし,PC-6001でもかなキーの使用頻度は低く,同じような物だと思えば気分良く割り切ることができました。

 BackspaceキーはPC-6001にはないキーなのでどこにアサインしようかと考えたところ,位置的にページ切り替えキーが良さそうだったので割り当てました。回っている矢印なので意味は違ってきますが,左向きの矢印も書かれているので良しとしましょう。

 HOME_CLRキーは該当するキーがありませんが,HOMEキーがあるので割り当てました。ほとんど使い道がありませんが,STOPキーに比べればまだましです。そのSTOPキーですが,なんとKC_STOPというキーがアサイン出来るので,割り当てました。Macはもちろん,Windowsでもこんなキーを見た事がないので,きっとザ実在しないキーなのでしょう。

 ただでさえ少ないキーなので使わないキーを割り当てるのはもったいないのですが,もともと実用を考えたキーボードではありませんので,オリジナルの機能を優先することにしました。

 さて最後にGRAPHキーです。グラフィックキャラクタを打ち込むためのキーですが,MacにもWindowsにもそんなものはありません。その上絶妙な位置にあります。ここはcommandキーに割り当てることにします

 WindowsならALTキーになるんだろうと思いますが,これでショートカットも日本語ON/OFFも思いのままです。

 修正が終わったら,以下でコンパイルしましょう。

qmk compile -kb pc6001 -km default

 コンパイルできたら書き込みです。RPi Picoにあるボタンを押しながらUSBを差し込むとフォルダがマウントされますが,これが書き込み可能な状態です。この状態で,

qmk flash -kb pc6001 -km default

 とすれば書き込みが出来ます。終わったら勝手にリセットがかかって今書いたファームが動き出しますので,早速テストしてみましょう。

 っと,その前にハードウェアですね。

 もともと電気屋さんなのに最近はハードウェアの組み立てよりも先にコードを用意するようになり,手を動かすのが億劫になっているんだなあと自覚することもあるのですが,今回は配線数こそ多いものの簡単なので,まずはブレッドボードで作ってみました。

 RPi Picoをブレッドボードにのせて,アサインした端子とキーボードから出ているコネクタを配線していきます。実は最初,コネクタに書かれている番号をそのまま信じて配線したのですが全く動かず,よく調べてみるとこの数字の並びは逆になっていた事が判明し,すべての配線を入れ換える羽目になりました。

 LEDについてはX8がかなキーのLEDでカソードが,X9が電源LED(ESCキーの上)のアノードで電源に,X10が電源LEDのカソードなので抵抗を介してGNDに落とします。

 X9はRPi Picoの3V3OUTに繋げば,キーボードがUSBで繋がった時点でLEDが点灯しますので,本物っぽいですよ。

 PC-6001の回路図によると,このLED用の抵抗は220Ωとかなり小さい値が使われています。ざっと15mA程も流すことになりますが。今どきのLEDはすの数分の一で十分なので,時代を感じます。今回は電源電圧が3.3V程度ですので220Ωでもよいと思いますが,オリジナルの光り方を追求するなら100Ω程度でも良いかもしれないです。


 さて,こうして完成したUSB接続のPC-6001キーボードですが,昨日書いたようになかなか快適なキーボードです。反発力が大きく変化するので,ストロークの割には軽いタッチで入力できますし,底打ちするまで押し込むこともありませんので,メンブレン型の他のキーボードや,RealForceなんかとは別の種類の打ち心地です。

 軸もグラグラせずしっかりとしつつ,引っかかりのないスムーズな打鍵で,キーによる押し心地のムラもありませんので,実に快適です。キートップの真ん中へんが窪んでいるところもポイント高いです。やはりアルプスはいい仕事をしていたんだなあと思います。

 今も日本語をゴリゴリとPC-6001のキーボードで書いているのですが,この新鮮さは何だろうと思って考えてみると,私が触った最古のキーボードである一方で,ローマ字による日本語の入力をほとんど行った事がないことに気が付きました。

 PC-6001のキーボードはもっぱらゲームと,プログラミングに使われるキーボードだったのです。だから,PC-6001でかな漢字変換というのは,今回が初めての体験になるわけです。

 ということで,PC-6001のキーボードをUSBにする夏休みの工作,あっという間に完成してしまいました。強いて言うなら専用の基盤を作ってブレッドボードからおさらばするのが残っていますが,それはもう簡単ですから,後は時間のあるときにやればいいでしょう。

 ここまでくると,PC-6001の筐体に小さいPCでも仕込むか,それこそRaspberryPiでも仕込んで,一体型PCを作ってみても面白いと思いますが,オリジナルの筐体を削るのも気が引けますし,作ったところで使う物でもないので,やめておきます。

 それにしても,ネタで始めた工作ですが,思いのほか収穫がありました。RPi Picoを初めて使ったこともそうですし,QMKを使って自分のやりたいことが実現したこともそうです。

 こうなってくると完全自作キーボードを作る事も気軽な物に見えてきますが,USBで繋ぐというのも今さらな感じがしますし,今のキーボードで満足しているので,変な配列のキーボードを作ろうと思わない限り,作る事はないでしょう。

 ただ,応用としてどんなキーボードでもUSBに出来るとわかった以上は,例えば当時から絶賛されていたFM-7のキーボードやAppleIIのキーボード,ファミリーBASICのキーボードや汎用機の端末やオフコンのキーボード,果てはポケコンのキーボードやM5のゴムキーなどを繋いでみることも可能なわけで,ある特定のキーボードに思い入れのある人には福音となる技術かも知れません。

 個人的にはPC-6001のキーボードの素晴らしさがわかったところで満足です。

 1981年生まれのホビーマシンのくせに,ちゃんとCTRLキーもTABキーもESCキーも正しい位置に備えています(ちなみに兄貴分のPC-8001にはTABキーはありませんでした)。アンダーバーも\もあるし,独立したカーソルキーはとても使いやすいです。

 グレーにオレンジの配色もいいですねえ。こうして現代のマシンに繋いでやりさえすれば,特に違和感も我慢もせずに即戦力になるあたり,大したものだと感心しました。

9月11日追記:
 Aliexpressで,1つ250円(送料込み)のRPi Picoの互換品が売っていたので3つほど試しに買ってみました。早速QMKを書き込んで純正品と交換したところ,ちゃんと動いてくれました。RESETボタンもあるし,USBもTypeCなので,純正よりもむしろ便利なくらいです。

 

夏休みの工作 - PC-6001のキーボードをUSBに!〜 分解清掃編

 今年の夏休みは,恒例の夏休みの工作が全く出来ませんでした。小学3年生からずっと続けている習慣がこれで途切れてしまうのももったいない。

 そこで,ふと思いついた小ネタ夏休みの工作としたいと思います。

 ことの始まりは,きつい日差しです。


日差しがきつい ->
プラスチックの黄ばみを強力に漂白できる ->
そういやPC-6001の部品取り機のキーボードがひどい変色をしてたな ->
漂白するのはいいけど使ってないキーボードを漂白してどうする? ->
じゃ使えばいいんじゃないか ->
USBに変換して最新のマシンでPC-6001のキーボードを使うというのはおもろいかも

 ということで,決定です。

 冷静に考えてみると,最近流行の自作キーボードでは,自分でキーマトリクスを組んで,それにあわせてキーボードマイコンのファームを修正して動かしていますよね。いってみれば,PC-6001のキーボードをそのまま使うことで,キーボードマトリクスを組む作業をすっ飛ばして,自作キーボードをつくるようなものですので,実は全然大した事ではありません。

 何はともあれ,漂白です。9月には行っても日差しはきつく,    黄変と言うより茶変という感じで,まるでタバコのヤニみたいなヤケ方をしている予備のPC-6001のキーボードを分解して漂白を開始します。

 今回はジップロックで密封して漬け込みましたが,さすがに3日もかけると漏れてくるもので,後で掃除するのが大変でしたが,とりあえず変色は綺麗になりました。特徴的なオレンジ色がやや褪せてしまったのが残念ではありますが,かなり綺麗になったと思います。

 ちょっと余談を。

 PC-6001のキーボードって,いわゆるスカルプチャー型のキーボードではないため,チクレットキーボードと揶揄されることが多いのは,ご存じでしょう。

 今でこそ,私は40年も前にディスクリート型のキートップを実装した先進的なキーボードだと思っていますが,当時は後継機のPC-6001mk2ではスカルプチャー型になり,絶賛されたものです。それほどPC-6001のキーボードを難点に挙げられていたのです。

 当時の私も含めて,このチクレットキーボードというのはコストダウンだろうと思っていました。兄貴分のPC-8001が168000円,2年後に出たとは言え一部の機能はPC-8001を凌駕しているPC-6001が89800円ですから,こういうところでコストダウンが行われているんだろうとみんな思ってたわけです。

 しかし,今回の分解と清掃で,それが誤りであることを確信しました。

 PC-8001と比べると,確かにメカニカルスイッチではなく後にメンブレン方式と呼ばれるものには違いないのですが,リモコンや電卓のようなラバードームとキートップが一体になっているいわゆるゴムキーではなく,ラバードームと軸が別体で,軸には2色成形のキートップが差し込まれている,本格的なキーボードだったのです。

 この構造は評判の良かったPC-6001mk2のキーボードと同じなわけですが,PC-6001も同じ構造であることから,決してPC-6001がローコストを狙った訳でも,PC-6001mk2が評判の悪かったPC-6001のキーボードをお金をかけて改良したわけでもなかったのです。

 また,アメリカに輸出された北米版のPC-6001Aでは,キーボードが国内版とは違っていて,本格的な見た目のスカルプチャー型になっていました。PC-6001ファンとしてはこのキーボードが羨ましく,完璧なPC-6001の姿に見えるわけですが,配列が全く同じであることからも,わざわざ専用のキーボードユニットを作ったと言うよりは,キートップだけを交換した物というのが正しいでしょう。

 なら,なぜわざわざこんなオモチャみたいなキーボードにしたのか,疑問ですよね。

 その答えは,オーバーレイシートです。PC-6001は国産のホビーマシンとしては初のROMカートリッジのスロットを備えていて,電源を入れたら即座にソフトが動作するような,簡単に使いこなせる家庭用パソコンを目指した,志の高いマシンでした。

 パソコンはソフト次第でどんなことにも使えることが素晴らしいわけですが,まだまだキーボードに不慣れな日本人が多かった時代の話ですから,当時「キーボードアレルギー」と呼ばれた,キーボードへの抵抗感を減らして,専用機に匹敵する使い心地を考慮する必要があったのだと思います。

 しかし,キーボードに専用の機能を一々印刷するわけにもいきませんし,専用のキーやスイッチを設けることも出来ません。そこで,その頃よく見られたオーバーレイシートを使うことになります。

 オーバーレイシートはその名の通り,上から被せて使うシートですが,PC-6001の場合は本体のキーボードの面にぴったりフィットする大きさのシートに,キーが頭を出すように穴をあけ,専用機能の文字などはここに印刷することにしました。シートをソフトごとに付属し,使う時に交換すれば専用キーボードの出来上がりというわけです。

 標準ではカナが印刷されたオーバーレイシートが付属していました。グレーとオレンジのキーに,焦げ茶色のオーバーレイシートはとても映え,本体色のクリーム色ともマッチして,とてもフレンドリーでありながらも,デザイン的に洗練されていたと私は今でも思います。(蛇足ですがPC-8001は底板が金属,上ケースがFRPで成型されていたので成形時の制限もあったのですが,PC-6001は下ケースも上ケースもABSで,曲面を多用した非常に凝ったデザインが実現していました。ケースにABSを使ったNEC初のマシンでもあったのです。)

 実際,当時からPC-6001のキーボードのことを悪く言う人は実際に使ったことがない人か,AppleIIやPC-8801,FM-7などの本格的なキーボードを使っていた人が多くて,私自身はPC-6001のキーボードって,いわゆるゴムキーのような悪い物ではないなといつも思っていました。特にPC-6001mk2と比べても遜色ないというか,はっきり言えばどっちもそんなに良くないというか・・・

 その謎が確信に変わったのが今回のオーバーホールの結果だったのですが,こうして今実際にPC-6001のキーボードでこの文章を書いてみても,全然違和感がないですし,快適なのです。さすが往年のアルプス製と言いますか,反発力の調整が絶妙で,押した時は軽いのですが,徐々に重くなっていって,底打ちは余程の事がないと起きません。ぐっと反発力が増すところでさっとキーインされるあたりもまるでメカキーのようです。これはかなり本格的なタイピングが可能だと再認識しました。

 SHIFTキーやRETURNキーのような長いキーは丁寧に左側の軸とは別に右側にも軸が出ていて,これがキートップの穴に高精度にはまり込んで上品にストロークします。グラグラしないですし,左右のどこを押しても均等に沈み込んでくれます。しかもダンパーまで用意されているので打ち心地は快適です。

 また,当時から評判の良かった赤色のLEDも美しくて,今どきのギトギトしたレインボーカラーよりもこういうシンプルな表示の方が気が散らなくて好ましいです。

 残念なのは,やはりキートップが小さいので誤入力が起きやすいことと,ブラインドタッチが難しいことがあると思います。こういう異形のキートップは当時も今も熟練者ほど違和感を感じるのでしょう。

 それと,これは致命的とも言えるのですが,Nキーロールオーバーに対応しておらず,3つの同時押しにも対応しません。例えば大文字でLEDと入力するときに,SHIFTを押しながらEを押し,Eを離さずにDを押すと全然違うキーが入ります。これはゲーミングには使い物にならないでしょう。当時のPC-6001もこうだったっけなあ?

 とまあいうことで,PC-6001のキーボードを再生し,その志の高さが誤解されて安物扱いされた不運な歴史を語ったところで,次回は完結編,このキーボードをUSBで繋ぐことにします。

 まて次号。

Q.スマホの通話音声が聞こえないときは?

A.内部のレシーバーの接点を掃除してください

 先日,とても大切な問い合わせを電話で某所に行った際,つっけんどんな言葉の割にはとても親切な相手が,詳しいことを調べて折り返してくれると言ってくれました。

 かけた電話は家電話ですが,折り返しの電話は先方に登録された私の携帯電話に折り返すとのこと。

 とてもありがたいと,その電話を待っていたのですが,いざかかってくると相手の声が全く聞こえません。通話の時間のカウントは進んでいますし,どうも私の声は聞こえている様子。咄嗟にスピーカーに切り替えると相手の声が聞こえました。

 大切な電話でしたが,これでなんとか事なきを得ました。しかし,相手の声が聞こえないというのは電話にとって致命的で,見過ごすわけにはいきません。

 気のせいかと嫁さんに電話をかけてもらいましたがやはり聞こえず,設定の問題かと調べてみましたがそうでもなく,有線のヘッドフォンなら聞こえますし,Bluetoothのワイヤレスイヤホンでも問題なく聞こえます。

 うーん,これはもう,私の愛機であるF(X)tec Pro1xの故障でしょう。

 もう一度言いますが,スマートフォンも電話ですから,通話できないというのは致命的です。嫁さんは気楽に「電話がかかってきたらさっとヘッドフォンを出して繋げばいいんじゃない?」とクスクス笑いながら言うのですが,緊急時にこういうことがあったら命にかかわるかも知れません。

 もはや買い換えなのか,OSを入れ換えてもうちょっと使いたかったなあ,などと思っていたのですが,こういう場合はgoogle先生にとりあえず相談です。しかし今回の案件にはさすがのgoogle先生もお手上げのようで,なにも有益な情報を私に与えてはくれませんでした。

 どうせダメなら,とりあえず分解してみようというのが私の生き様です。ヘッドフォンやイヤホンなら相手の声が聞こえるのですから,深いところで起きている問題ではなさそうです。

 可能性が高いのはレシーバのボイスコイルの断線。その次はレシーバ駆動アンプの故障です。後者なら気軽に手を出せませんが,前者ならまだ望みはあります。

 早速分解。パネル裏の5本のビスを外せば,簡単にパネルが外れます。レシーバはここにくっついていて,ピンで向かい合った基板に圧接して導通しているという,ごく普通の構造です。

 レシーバの断線かどうかは,レシーバのピンの導通をみればすぐにわかります。調べてみると,直流抵抗で27Ωほどです。これなら断線していないでしょう。

 一応このレシーバから音が出るかどうかを別のアンプに繋いで確かめましたが,問題なく音は出ています。ということは接点の不良かアンプでしょう。

 ただ,アンプはそんなに簡単に壊れるものではないので,ここは接点の問題と考えて,金メッキされた端子やピンをアルコールで綺麗にしておきます。それから,レシーバのピンを少し起こしておき,接触圧を強めにしておきます。

 Pro1xはちょっと不思議な構造になっていて,パネル側の基板から一度本体側の基板にピンで導通させ,その基板からパネルにあるレシーバのピンにもう一度導通させるという面倒な仕組みをとっています。

 それならわざわざ接点を増やさず,パネル側でレシーバに繋いでしまえば完結するだろうとおもったのですが,きっと厚みの関係で基板のレイアウトに制限があり,一度本体側に回して再度繋ぐという方法をとったのでしょう。

 このことで,都合2つピンと基板との接点が発生してしまうわけで,これが信頼性を下げてしまうことは自明なのですが,ぶつぶつ文句を言っても仕方がないのでどちらの接点も綺麗にして,仮組みします。

 この状態で通話音量を調整すると,確認の音がちゃんとレシーバから出てきます。早速嫁さんに電話をかけてもらいましたが,無事に声が聞こえました。(今回ほどあなたの声が愛おしいと思った事はないよ,というと,失礼な!と速攻で切られました)

 そう,昔から携帯電話のレシーバはピンの接触不良で音が出なくなることがしばしばあり,清掃せずとも一度分解して組み立て直すだけで治ったりするものです。今回もまさにそういう状況だったようです。

 ともあれ,唯一無二のF(X)tec Pro1xを諦めずに済みました。もう少し使うつもりですが,この手の問題は再発することが確実なので,またいざというときに相手の声が聞こえないという問題でオロオロしそうな感じです。これが災害時だったりすると本当に怖いのですが・・・

 まあ,仮に故障がなくても,こんな変態スマホをメインに使って,しかも音声通話をあてにしているような変人は世界中で私だけでしょう。

 すでに満身創痍なPro1xですが,気に入ったマシンなので仕方がありません。セキュリティの不安とかありますが,その辺も含めて,考えながら使っていこうと思います。

 最後に,通話の音声が聞こえなくなったら,とりあえず分解してレシーバの接点を綺麗にして組み直すこと。

 あ,危険ですし法的にもどうなのよという感じがしますから,あくまで自己責任でお願いしますね。

AppleKeyboardをUSBでつないで,ああいい気分

20240618133833.png 

実家の整理をしたとき,古いMacintosh関連のものもいくらか出てきました。今にして思えばもったいないことをしたと思うのですが,当時はとにかく捨てないと,という気持ちが勝ったこともあり,なにを捨てたかよく覚えていないほどです。

 そんな中,奇跡的に生き残った物に写真のAppleKeyboardがあります。

 ある世代以前の方にはとても懐かしい物のはずですが,MacintoshSE,MacintoshIIが登場した時に用意された標準的なキーボードの,日本語版です。モデルナンバーはM0116Jです。

 1986年に登場,日本のアルプスが製造を請け負ったものなのですが,この,今で言うメカニカルキーボードはそんな経緯もあり,キースイッチはアルプス製です。接続はもちろん,ADBです。ADBはキーボードやマウスなどの今で言うHIDをデイジーチェイン出来るインターフェースで,ケーブルでごちゃごちゃする机の上を実にスッキリさせることが出来ました。国産機になれていた私は,当時この段階でアメリカ,そしてAppleの配慮にクラクラしたものです。

 この当時の製品にはありがちですが,紫外線による黄変が進んでおり,当時の美しさは失われていますが,それでもフロッグデザインによってデザインされたキーボードは,ただのキーボードを越えた美しさを放っています。

 さて,このキーボード,どうも私が最初に手に入れたMacintoshSEと一緒に買った物のようなのですが,大切に当時の元箱に入れてありました。ほら,白い段ボールに赤い林檎の印刷があるやルです。

 キーの配列も標準的で,コマンドキーが左右にあり,カーソルキーの配列も綺麗なAppleExtendedKeyboardIIに乗り換えるのはその後なのですが(余談ですがAppleKeyboardもAppleExtendedKeyboardもそれぞれIIに世代交代したとき,AppleKeyboardIIはメンブレン式になってしまったのに対し,AppleExtendedKeyboardはスイッチが変更になったもののメカニカルのままだったので,私はこちらに乗り換えました),乗り換え後も大切に元箱に入れて保管してあったようなのです。

 箱入りですから紫外線も浴びておらず,驚くほど美しかったのですが,実家から持ち帰るときに箱を捨てて中身だけで持ち帰ったことから,急激に黄変が進んでしまいこのざまです。

 捨てるに惜しいからと持ち帰ったはいいものの,ADBを持つ本体など捨ててしまって持っていませんし,今さら買うようなことも考えられません。そのうち中古で売ってしまうか,などと思っていた所,先日ぱっと閃いたのが,ADBをUSBに変換すればこのキーボードが現役に復帰出来るんじゃないのか,ということでした。

 世界中にADBのキーボードを愛する人がいるはず,今ならきっと感嘆に実現出来るはずだとサーべて見ると,iMateという私も知っている往年の変換器が高値で取引されているという話でした。

 もう少し調べると,キーボードの自作で定番化していたSwitchScienceのProMicroを使ったものが公開されていました。もともとArduinoですが,32U4を搭載したマイコンボードとして使うもののようで,書き込めばすぐに使えるバイナリも用意されています。

 ならこれを使ってみようと,ProMicroを早速手配。昔は安かったそうですが,今ではAliExpressで頼んでも1つ700円を超えます。送料を無料にしたかったので無理に3つ買い,届いたのが一昨日のことでした。

 まずはArduinoIDEをインストールし,初期不良がないか動作確認です。ちゃんと動作したので次に進んで,バイナリを書き込みます。これ,コマンドラインから書き込むのってなかなか面倒で,IDEが吐き出したバイナリのフォルダを探し出し,ここに書き込みたいバイナリをおいて,コマンドラインから書き込むのですね。

 試行錯誤を少ししましたが,無事に書き込めたようです。

 はやる気持ちを抑えられず,とりあえず部品集めです。ADBのコネクタはMiniDINの4ピンですが,ちょうどいい物が手持ちにありません。S端子のビデオケーブルを見つけましたが,悪いことに輝度と色のGNDが内部で繋がっているものだったので今回の用途には使えません。

 さらにジャンク箱をゴソゴソ探したところ,8ピンのMiniDINの壊れた奴が見つかりました。なにを思ったか端子が3本しか残っていません。残りの5本はどうしたんだよ・・・昔のわたし。

 ですが,ADBは1選式のシリアルインターフェースです。実は3本あれば問題なく使えます。(もう1本はPowerKeyです)

 そこで急遽ピンを組み直し,MiniDINの4ピンのコネクタを作りました。1本足りませんが,ここを使わないPowerKeyにあてがえば3本で問題ありません。

 このコネクタに3芯のケーブルを繋ぎます。そしてProMicroのジャンパをショートしてVccに5Vが出るようにした上で,VccとGND,そしてDataを繋ぎます。

 Dataは32U4のPD0が割り当てられていますが,ProMicroでは3というシルクがあるランドに出ています。ここをVccから1kΩでプルアップして接続すれば完成です。

 中国からの荷物を受け取ってから40分ほどで完成。なんの問題もなくあっさり動いてしまいました。

 30年ぶりに味わう,AppleKeyboard。なんと心地の良いことか。

 コマンドキーとスペースの間に”`”キーが挟まっていて,ここがミスタッチを連発することになるかもなあと思っていましたが,やはり体は覚えているもので,ちゃんと親指がコマンドキーの真ん中をとらえていました。なにも引っかかる物はなく,とても快適に使えます。

 音は大きいのですが,しっかりした剛性感も,手に馴染む湾曲の具合も,またちょうどいい傾斜も,やっぱりからだが覚えているんだなあと思います。カーソルキーもストレスなく使えますし。

 今日の艦長日誌はこのAppleKeyboardを使って書いていますが,もう毎日使いたいキーボードです。当時は本当にいいキーボードが作られていたんですね。コストダウンばかりが能じゃないんだと思いました。

 とまあ,AppleKeyboardを絶賛するのは,過去の記憶や慣れの問題もあるので偏りがあると自覚しているのですが,それにしても昔のキーボードのなにがそんなに魅力的なのかなとつくづく考えてみました。

 スイッチについては,今も昔もCherryの同じ物が買えますので,スイッチが今と昔で変わったという線はないでしょう。ならやっぱり剛性感でしょうか,それも大きさから来る安定感や接地感でしょうか。

 気付いたことは,キートップです。キートップの肉厚が太く,重くてしっかりしているのです。私のAppleIIplusのキーボードも実に心地よくタイピング出来るのですが,やはりキートップが分厚く重く,押し込んだ時と離したときの慣性が,最近のキーボードとは違うと気が付きました。

 先日のワイヤレスキーボードも心地よかったのですが,これもキートップが重いものでした。一方d,今常用しているキーボードは,スイッチこそCherryのものですが,やっぱりキートップが軽くて完成が小さいのと,おそらく材質がABSではないせいで,音も軽いんだと思います。

 重さとバネの力からその物体の運動は定義されるわけですが,おそらくキーボードについても同じ事が言えて,わずかな違いであっても,人間の体はその僅かな違いを感じ取り,心地よかったりそうでなかったりという感覚を得るのでしょう。

 昨今キーボードブームなわけですが,ともすればスイッチばかりに目が行きがちちな中,形状も含めてもっとキートップにこだわってもいいのではないかと思います。

 ということで,うちのキーボードのもう1つ選択肢が増えました。しかも極上です。とはいえ,私の中では未だにPC-9801Rシリーズ用のキーボードが一番だという意識が残っており,これをUSBか出来たらいいなあなどと思っていますが,悲しい事にPC-9801のキーボードは捨ててしまって手元には残っていません。ああなんと残念な事か。

 私の当時のPC-9801のキーボードは,CTRLキーとCapsLockが左右に並んでいるというPC-9801の最大の問題点を改造で解消したもので,CTRLキーを大型化してありました。キートップはEWS4800のキーボードから移植したもので,使う事のないCapsLockは存在が消されているというキーボードです。

 とにかく快適に使うことにこだわったキーボードだったのですが,音もそんなに大きくなく,滑らかで1.5倍は速くタイプできる,良いキーボードだったと思います。そしてCTRLキーが大きくて使いやすくて,UNIXでも便利,カタカナ入力でも便利と,本当に捨てなきゃ良かったです。

 今回作ったADB-USB変換基板のファームウェアには,そのPC-9801のキーボードをUSBにするものも用意されています。もしPC-9801のキーボードが手に入ったら作って試してみましょう。

 

T50RPmk4のバランス入力端子をMDR-1A互換に改造

 先日手に入れたフォステクスのT50RPmk4。バランス接続を行う為の3.5mmジャックのアサインを変更し,MDR-1Aと同じにする改造をやりました。

 別案として,改造ではなく,変換ケーブルを作る事も考えました。部品も揃っていたのでやろうと思えば出来たのですが,それだとやっぱり取り回しが悪くて嫌になることが目に見えています。

 T50RPmk4を分解して調べてみると大した改造もしなくて済みそうで,いざとなったらすぐに元に戻せそうです。

 ということで改造に踏み切りました。いやー,届いたその日に改造とは。

 改造の方針ですが,T50RPmk4とMDR-1Aの本体側のジャックのアサインの違いである,根元のR-とL-が入れ替わっているのを,MDR-1Aにあわせてしまいます。問題は,その作業をどんな風に行うか,です。

 下の写真はL側の基板です。写真が下手で申し訳ない。

20240614150408.jpeg

 基板の下側に4つのランドがあり,L側はこのうち右の2つが使われています。白が-,青が+,それぞれがドライバと繋がっています。

 一方でR側は下のようになっています。

20240614150409.jpeg

 R側はL側と違って,下の4つのランドの左側2つを使っています。今回はR-とL-を入れ換えますので,左から一つ目と右から二つ目を図のように入れ換えると上手くいきます。

 具体的には,まずL側は白い線を外して左端にハンダ付けします。次にR側は白い線を外し,右から二つ目にハンダ付けします。これだけです。

 改造によるデメリットはなく,付属のアンバランスのケーブルも当然使えますし,音質の劣化なども理屈の上ではありません。(ただ,渡りケーブルって結構抵抗値が大きいので,左右のジャックを差し替えると音が変わるかも知れませんが,それは無改造でも同じ話です)

 当然のことですが,純正のバランスケーブルは全く使えなくなります。

 MDR-1Aが2014年,フォステクスのバランス接続のアサインが決まったのは2017年のT60RPがきっかけですから,これだけの時間差ならMDR-1Aにあわせてくれてもよかったように思います。実質的にMDR-1Aのアサインが標準になっていますしね。

 ということで,作業そのものは5分もかかりません。分解もこれまでのT50シリーズと基本的には同じ方法ですので,イヤーパッドを外して上下左右の4本のビスを外してしまえば,パカッと本体が2つに分かれます。

 するともう先程の基板が見えてきますので,ハンダゴテで筐体を溶かして泣いてしまわないように慎重に配線を入れ換えます。

 終わったら組み立て直してテスト。まあ,間違いようがない改造です。

 ということで,改造によってバランス接続が出来るようになったわけですが,さすがにその差は歴然。セパレーションが上がった事で,それぞれの楽器の輪郭が明確になりました。これだけ違うと,出来るだけバランスで繋ごうと思うようになりますね。

 そんなに難しい改造ではなく,元に戻すのも簡単,綺麗にまとまるのに副作用はありませんので,同じような問題で頭を抱えている方がいらっしゃったら,この方法で解決するのもありだと思います。


 ところで,数日使ってみてT50RPmk4の印象が変わって来ています。楽器の分離の良さや定位,すーっと高音が伸びて行く感覚はさすが平面振動板と思うのですが,あれほど違和感を感じずに使っていたMDR-M1STが,もう我慢ならないほど嫌な音になっていました。

 いやほんと,慣れるって恐ろしいと思うのですが,今慣れているヘッドフォンから別のヘッドフォンにしたときに,やはり差が大きなと思うものほど,それに慣れたときの反動は大きいもので,戻したときに「ひどい音だ」と思う前に,変えたときにも「こりゃひどい」と思うものです。

 今回のケースだと,MDR-M1STからT50RPmk4に変えたときに「こりゃひどい」と思ったなら,T50RPmk4に慣れた頃にMDR-M1STに戻して「嫌な音だ」と思う事に何の不思議もありません。

 しかし,今回は違っていました。MDR-M1STからT50RPmk4に変えたときには,高域が良く出ているなという印象こそあったものの,とてもバランスが良い音に聞こえたのです。この段階で私は,MDR-M1STに近い音にチューニングされていて,モニターヘッドフォンというのは,最終的に同じような音に収れんしていくのだなと思ったのです。

 しかし,T50RPmk4にすっかり慣れてからMDR-M1STに戻すと,もうその違いが絶望的で,本当に嫌になるほどでした。高音がどうの低音がどうのという話ではなく,もう音がざらついているというか,聴くに堪えないというか,そんな印象に変わっていたのです。

 理由はよくわかりませんが,とりあえずT50RPmk4が,現在のうちの常用機になることは決定しました。MDR-M1STは決して悪いヘッドフォンではないと思うし,そこは間違っていないと確信もするのですが,どうもT50RPmk4に前にはくすんで見えるということだと思います。

 

ページ移動

ユーティリティ

2024年09月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

過去ログ

Feed