hyousi

  • Home
  • 一覧
  • 雑記
  • [自キ]初めての自作キーボード テンキー(試作)

    自作キーボードやってみたいと唐突に思い道具をそろえ挑戦することに。

    初めてなこともありキー数の少ないテンキーを作り自作キーボードを大まかに理解することを目的とした。

    また今回自作キーボードに挑戦するうえで「手配線で自作キーボードを作る講座 – おかゆ++」さんを参考にしました。

    購入した材料

    Pro Micro(単体) 660円 

    マイコン


    Kailhロープロファイルスイッチ(10個)白 440円×2セット

    キースイッチ。分厚くなりそうだったのでロープロファイルにした。18キーで作ったため20個購入。


    MBK Choc Low-Profile Keycaps 550円×2セット

    キーキャップ。キースイッチよりキーキャップの方が高いとは!


    タクタイルスイッチ – 2pin 3.5x6x4.3mm 11円

    リセットスイッチ。結果としてはわざわざリセットスイッチ設けなくてもピンセットで短絡させればいいかなと思った。


    高速スイッチング・ダイオード 1SS178(100本入) 100円

    ダイオード


    プラ板(PC)数百円

    9×11cm程度×2枚使用。いわゆるサンドイッチプレートみたいな感じ。特に理由なくPC板を購入したが柔らかく加工がしやすかった半面テンキー自体もふにゃふにゃになった。


    ネジ・スペーサー 数百円

    プラ板固定用。ネジはM3、スペーサーは1cmのやつ。

    完成

    4×5の18キーで空いたところにマイコン張り付ける感じのテンキーとなりました。汚い出来上がりですね。雑で不器用だな。

    組み立て

    プラ板の切り出し

    普通キーボードは1キー19.05mm四方でつくられていること、ねじ止めする余白を1cmとったことから

    縦86.2mm、横105.25mmを2枚アクリルカッターで切り出しました。


    プラ板の穴あけとキースイッチの固定

    普通アクリルプレートは14mm角の穴をあけキースイッチをはめると思うのですが加工するのが非常にめんどくさいと思ったので別の方法をとることにしました。

    Kailh choc v1のデータシートから足の位置を確認してプラ板に電動ドリルで穴をあけました。また、キースイッチを差し込みボンドで固定しました。


    行列の配線

    格子配列なので手配線は直線ばかり、単純でした。


    promicroとの配線

    回路とpromicroを耐熱電子ワイヤで配線します。今回は下側の9つのpin、promicroに書いてある5~10、14~16を使用しました。耐熱電子ワイヤをはんだ付けしました。promicroにはんだ付けするのは穴同士が近いし少しめんどくさい。


    組み立て

    promicroはボンドでプラ板に張り付け、そこら辺にあったUSBを刺しておきました。

    スペーサーをプラ板で挟みねじ止めしキーキャップをはめたら本体は完成。

    Firmware

    config.h

    #pragma once
    
    #include "config_common.h"
    
    /* USB Device descriptor parameter */
    #define VENDOR_ID    0xFEED
    #define PRODUCT_ID   0x0000
    #define DEVICE_VER   0x0001
    #define MANUFACTURER Tsuiha
    #define PRODUCT      tenki01
    
    /* key matrix size */
    #define MATRIX_ROWS 4
    #define MATRIX_COLS 5
    
    #define MATRIX_ROW_PINS { B1, B3, B2, B6 }
    #define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
    #define UNUSED_PINS
    
    /* COL2ROW, ROW2COL */
    #define DIODE_DIRECTION COL2ROW

    「define MATRIX」で行列を定義する必要があるらしい。今回だと縦に4キー横に5キーなので行(ROW)が4、列(col)が5とします。

    「MATRIX_PINS」で行と列で使用するマイコンのピンを指定します。テンキーの0~3行、0~4列で配線したピンを指定します。

    「COL2ROW」はcolからrow(縦線から横線)に電流が流れるということらしい。ダイオードの向きと対応させます。

     

    tenki01.h

    #pragma once
    
    #include "quantum.h"
    
    #define LAYOUT( \
    	   k01, k02, k03, k04, \
    	   k11, k12, k13, k14, \
    	k20, k21, k22, k23, k24, \
    	k30, k31, k32, k33, k34  \
    ) { \
          { KC_NO,  k01,  k02,  k03,  k04 }, \
    	{ KC_NO,  k11,  k12,  k13,  k14 }, \
    	{ k20  ,  k21,  k22,  k23,  k24 }, \
    	{ k30  ,  k31,  k32,  k33,  k34 }  \
    }

    行列とキーの名前を対応させます。わかりやすく座標をそのまま名前にするのが定番なのだろうか。今回は左上のスペースは使用しないがこのように空欄にし下のカッコ内で「KC_NO」とすればよいらしい。

     

    keymap.c

    #include QMK_KEYBOARD_H
    
    #define BASE  0
    const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      [0] = LAYOUT(
            KC_7 ,KC_8     ,KC_9    ,KC_KP_SLASH   , \
                   KC_4 ,KC_5   ,KC_6    ,KC_KP_ASTERISK, \
        KC_DELETE ,KC_1 ,KC_2     ,KC_3    ,KC_KP_MINUS   , \
        KC_BSPACE ,KC_0 ,KC_KP_DOT,KC_ENTER,KC_KP_PLUS      \
      ),
    };

    先ほどの行列に合わせてキーコードを打ち込む。

     

    あとはうまくコンパイルできればqmktoolboxで書き込んで完成。

    今回は一発で動作したので良かった。

    反省とか

    • 無事完成しテンキーとして動作、使用することができた。調べたり作ったりの中でなんとなく自作キーボードについて理解が深まった気がする。
    • PC板が柔らかく加工しやすいのはよかったがふにゃふにゃになった。素材や厚さはしっかり考えた方がよさそう。
    • 簡単だったのでプラ板に穴をあけスイッチを差し込んだが、プラ板が薄い必要があったりキーボードが厚くなったりするのであまりよくないので14mm角にはめ込むほうがよいかな。
    • promicroに直接配線したが作業がとてもやりにくかったので棒状のやつを差し込みそこに巻き付けてはんだ付けする方がよさそう。
    • 縦の配線、ダイオードの足そのまままげてつなげればよさそう。

    初めてにしてはちゃんとできたしまあ上出来なんじゃないだろうか。

      

    次の記事:[自キ]チルトグリップ対応の左手デバイス(試作)

  • [APEX]ゲーム内FOVと実際FOVの変換方法

    APEX世界のinGAME視野角はactual視野角とは微妙に異なります。APEX世界の視野角はどう計算されているのかの記事になります。

    APEX90は4:3fov89.25というやつです。特に目新しい情報ではないですが、知らない初心者とかに向けて。

    APEX視野角と実際の視野角の関係

    APEX世界の視野角と実際の視野角の関係は温度でいうところの華氏と摂氏の関係に似ています。

    (X°C×1.8) + 32 = Y°F

    というやつですね。

    Cl_FovScaleとは?4:3視野角の関係

    APEXの視野角は Cl_FovScale という値によって決められています。

    この値は「C:\Users\Username\Saved Games\Respawn\Apex\profile\profile.cfg」内に記述されています。拡張子をtxtに変更もしくはテキストエディタで開くことで確認、書き換えを行えます。

    そして Cl_FovScale の値を70倍すると4:3視野角を求められます。

    例えばゲーム内視野角90に設定したとき Cl_FovScale は1.275となります。これを70倍すると89.25となりこれが4:3視野角というわけです。

    またゲーム内視野角70のとき Cl_FovScale は1ぴったりとなっていて70倍すると4:3視野角も70で一致します。APEX世界の視野角と4:3視野角が70のときだけ一致するということです。APEX世界の視野角はこの70を基準として計算されています。

    Cl_FovScale のことが分かったところでそれぞれの関係を見ていきましょう。

    Cl_FovScale とAPEXゲーム内視野角の関係

    先ほどのゲーム内視野角90を例にしましょう。APEXでは70が基準となるといいました。ゲーム内視野角とのその差を取ってみましょう。

    90-70=20ですね。

    Cl_FovScaleも差を取ってみましょう

    1.275-1=0.275

    ではAPEX視野角1度あたり Cl_FovScale がどれだけ変動するのか見てみましょう。

    0.275 ÷20=0.01375

    つまり ゲーム内視野角を90から91に1増やすと Cl_FovScaleが0.01375増えます。 90から92に2増やすと Cl_FovSc aleが0.0275増えます。ということですね。

    APEX視野角1度 と Cl_FovScale0.01375が対応しています。

    よってAPEX視野角と Cl_FovScalega相互変換できます。

    Cl_FovScale = 1 + { ( APEX視野角 – 70 ) x 0.01375 }
    APEX視野角 = 70 + { ( Cl_FovScale – 1 ) ÷ 0.01375 }

    APEXゲーム内視野角と4:3視野角の関係

    APEX視野角1度 と Cl_FovScale0.01375が対応しています。 そして Cl_FovScale の値を70倍すると4:3視野角を求められます。

    Cl_FovScale0.01375 を70してみましょう

    0.01375 x 70 = 0.9625

    これがAPEX視野角1度と4:3視野角の関係に対応していることとなります。

    APEX視野角90は4:3視野角89.25でゲーム内では実際より大きな視野角が表示されていますが、それはAPEX世界では1度が0.9625度だからということですね。

    よってAPEX視野角と4:3視野角が相互変換できます。

    APEX視野角 = 70 + { ( 4:3視野角 – 70 ) ÷ 0.9625 }
    4:3視野角 = 70 + { ( APEX視野角 – 70 ) x 0.9625 }

    おわり

    電卓たたくのも面倒なんで表計算ソフトに突っ込みましょう。

      

    計算フォーム:[計算機]APEX ゲーム内視野角と実際の視野角の変換

    ADS用の計算フォーム:[計算機]APEXの腰だめ・ADS視野角を計算

    関連:[計算機]APEXの腰だめ・ADS視野角を計算

  • [BFV]統一照準の設定

    Battlefield Vには操作方法の詳細設定に「統一照準」という項目があります。統一照準「視野角やズームの状態に関わりなく画面上の長さに基づいてほぼ一定の感覚でエイムできるように感度が補正されます」とは何なのか、統一照準係数が何を指しているのかという話。

    BF2042でもスコープ倍率は異なりますが計算方法は同様の設定のようです。

    前の記事:[計算機]BFVのADS視野角を求める

    統一照準を設定するとどうなるのか

    統一照準係数を変化させると、感度がこのグラフのようになります。これは視野角74(Hor90)のときの例です。横軸の取り方はこれでいいか?まあいいでしょう。

    統一照準係数を大きくすると、スコープ倍率が上がるにつれてADS感度が上がっていきます。

    統一照準係数を小さくすると、スコープ倍率が上がるにつれてADS感度が下がっていきます。

    ということを統一照準は行う設定となっています。このスコープ倍率に応じてADS感度が微調整されるのが 「視野角やズームの状態に関わりなく画面上の長さに基づいてほぼ一定の感覚でエイムできるように感度が補正されます」 ということで、いわゆるモニターディスタンス変換です。

    こちらは視野角最大時における統一照準オン感度比です。

    FOV74(Hor90)と比較してみると視野角が大きい方がスコープ倍率における感度の上り幅、下がり幅が大きくなります。

    逆に視野角がより小さい方がスコープ倍率における 感度の上り幅、下がり幅が小さくなります。

     もちろん視野角を変えればADS視野角も変わりますし振り向き比はどうなるかなど考えるとまた変わってきますがそれはまた別の話。

    統一照準オフ

    統一照準をオフにすると感度はどのようになるのでしょうか。

    MD22%程度、統一照準39%程度となります。また1.25倍スコープ及びサブウェポンは等倍サイトの1.3倍の振り向き感度になるようでモニターディスタンス的には0%より小さく統一照準39%と比較して5%程度低感度となります。

    視野角やズームの状態に関わりなく画面上の長さに基づいてほぼ一定の感覚でエイムできるように感度が補正されます

    統一照準とは感度を一定の感覚に補正するものだと書いてあります。この一定の感覚というのはモニターディスタンス変換のことです。

    BFVはデフォルトだとMD約75%です。ApexはMD0%でADS感度が低く、valorantはMD100%でADS感度が高く、R6Sは等倍サイトの振り向きはMD∞%で腰うちの振り向きと一致し感度がさらに高いです。(今の新設定は知らない)

    BFでは統一照準係数をいじることでこのMD〇%を自分好みに変えられます

    ゲームごとにADS感度は異なり、MD変換は値が大きくなると感度が高くなります。ADSしたときと腰うちのときとで、MD〇%の位置へのフリックが同じマウス移動距離で行えるということです。

    〇%より内側では画面上でのフリック感度が高く、外側では画面上でのフリック感度が低くなります。よってMD0%では内側が存在しないのでADS感度が低く、%を大きくしていくとADS感度が高くなっていきます。

    普通感度は振り向きとか横方向で考えますから横方向に〇%で考えたいです。BFの統一照準の値は縦方向のMD変換なので少し勝手が変わってきます。

    縦から横へのモニターディスタンスの変換

    統一照準係数は縦方向のモニターディスタンスを表しています。

    感度は横方向の振り向きで計算しますから、モニターディスタンスも横方向で表されることが多いですしわかりやすいです。

    16:9モニターでは画面の縦を1とすると画面比が16/9=1.777…ですので1.78となります。

    モニターディスタンスは単に画面中央から端までの長さの割合ことですから単純に画面比を掛けたり割ったりするだけで変換できます。よって縦方向のモニターディスタンス100%は横方向のモニターディスタンスで表すと178%ということになります。

    なのでデフォルトで設定されている133%は横方向に直すと133/1.78=75%ということですね。この75%という数字は4:3モニターが主流だったころの名残でしょうか。

    4 : 3 = 12 : 9より、(12/9) / (16/9) = 0.75ですね。

    統一照準係数は300%まで設定できるのでモニターディスタンス300/1.78=169%まで自動で設定できるということになりますね。それ以上に設定したければ手動でということになりますね。

    設定したいモニターディスタンスがあればその値に1.78を掛ければよいですね。

    普段APEXをしていてADS感度を0.8に設定している人がBFに感度を移植するには、統一照準133%のままでADS感度を0.8にしても、なんか感度が高いな?と感じるかもしれません。

    この場合移植するには統一照準係数を0%に設定してADS感度を0.8にすることで同じ計算式で感度が決定されるということになります。

    あるいは普段BFをプレイしていて高倍率スコープの感度が低いと感じている人は、高倍率スコープの感度のみを高くしてもいいですが、統一照準係数を上げてみることで高倍率スコープだけでなく他のスコープの感度も同時に調整してくれます。

    終わり

    結局統一照準オフに設定するにしても、設定項目が一体何を設定しているのかぐらいは把握しておいた方がよいと思います。

    次の記事:[BF2042]視野角(ADS)の設定が高倍率スコープでは強制的にオフ 照準時視野角

  • [計算機]モニターディスタンスで感度を変換-Sensitivity Converter by Monitordistance

    視野角を変えたとき、違うゲームに感度を移植するとき役に立つかもしれません。モニターディスタンスと視野角を入力しMD変換します。振り向きで計算するのですべてのゲームで使用できます。ゲームごとに振り向きから感度に変換するのはGsettingsとか使ってください。

    モニターディスタンスについて:FPSとFOV④ モニターディスタンスで感度を変換する

    Sensitivity Converter by Monitordistance

    スポンサーリンク

    視野角変えたときに感度合わせるときとかに使ってみてください。

    ADS感度倍率を計算

    スポンサーリンク

    apexを例に。4:3fovを選択すると1.073になるはず。

    apexfov90の時の等倍サイトの4:3視野角が76.5なのでそれを入力、MD0%からMD75%に変換するとads感度倍率を1.073に設定すればいいということです。

    求めたいモニターディスタンスを9999とか大きい値にすると腰だめとADSの振り向きが揃います。

    関連:[計算機]異なるアスペクト比に視野角を変換-Aspect-ratio FOV Calculator

     

  • [計算機]APEXのゲーム内視野角と実際視野角の変換-APEX trueFOV Calculator

    APEXのin game設定でFOV90にしたとき、実際の視野角は89.25ですよね。ゲーム内設定でのFOVが実際はいくつなのかを計算します。

    APEX世界の視野角から変換

    スポンサーリンク

    ゲーム内視野角より実際の視野角は少し小さいですね。

    実際の視野角から変換

    スポンサーリンク

    Cl_FovScaleから変換

    スポンサーリンク

    よくClFovScaleの最大値1.7がfov120だといわれていますが、APEX世界では121ですし実際の視野角でも119なので厳密には120ではないですね。

    導出:[APEX]ゲーム内FOVと実際FOVの変換方法

    関連:[計算機]APEXの腰だめ・ADS視野角を計算