2024年の私の自作キーボードの楽しみ振り返り

2019年12月にLily58と出会ってから5年、未だに自作キーボードで遊んでいます。2024年の自作キーボードの楽しみを記録しておくことにします。電子工作の記事と同一記事にするつもりで書き始めましたが、量が多くなったので、自作キーボードは分離して記事にすることにします。

自作キーボードの制作

M5Dialをトラックパッド化したSparrowDial

M5Dialをトラックパッド化してみた記事を2023年12月に公開しました。 これを使った自作キーボードを作ろうと計画し、SparrowDialを作りました。

実用レベルのトラックパッドになり、M5Dialによる大きなロータリーエンコーダスクロールが非常に独特なキーボードになりました。 これでツイッタータイムラインを眺めるのが楽しいです。

M5Dial、M5StackCore2をトラックパッドのI2Cモジュール化し、キーボード側にはRP2040を積むことで、QMK FirmwareやRemapを使ったカスタマイズができるようになっています。

また、このためのI2C通信のプロトコル仕様を作成し、QMK Firmwareで使えるように実装しました。

制作については記事にしています。

74th.hateblo.jp

こちらについては多く注目いただき、びあっこさん執筆のHHKB Lifeの記事にしていただいたり、M5Stack Creative Contest 2024に応募し「商業アイディア賞」をいただきました。

happyhackingkb.com

protopedia.net

現在でも、Boothにてキットを販売中です。

74th.booth.pm

StickPointVと、それを搭載したSparrow60C

ジョイスティックモジュールをチューニングし、トラックポイントキャップをつけてポインターデバイス化したI2Cモジュール、StickPointVを制作しました。

これはI2Cプロトコルを、Pimoroni Trackball互換とすることで、QMK Firmwareでもさくっと使えることを狙ったモジュールになっています。

こちらの制作については記事にしています。

74th.hateblo.jp

現在でも、Boothにてモジュールキットを販売中です。

74th.booth.pm

そして、このモジュールを組み込んだ自作キーボードキットSparrow60Cを作りました。GH60互換ケースを利用することで、キーボードに強い操作をしても大きなケースで安定することができます。

汎用ケース対応ということで、アルミ削り出しケースを購入して装着して、とても見た目の質感が上がって嬉しくなりました。2024年最も使っていたキーボードはSparrow60Cになっていました。

この制作については記事にしています。

74th.hateblo.jp

現在でも、Boothにてモジュールキットを販売中です。

74th.booth.pm

SparrowG21

GH60互換ケースを使ったゲームコントローラーデバイスが欲しいなーと思い、SparrowG21を作りました。

特徴としては、格闘ゲームを私はしないので、ジャンプボタンを親指に置き、上下移動を行いやすいキー配置にしたり、アクションゲームで急に必要になるジョイスティックを2本搭載したことなどです

スイッチには自作キーボードのCherry MX互換、もしくはKailh Chocスイッチを使えるようにしました。ファームウェアにはGP2040-CEを使いました。

ゲーミング製品なので、RGBLEDで光らせたりしました。

この制作については記事にしています。

74th.hateblo.jp

現在でも、Boothにてキットを販売中です。

74th.booth.pm

SparrowS V3(開発中)

キーケットVol.2に向けて、分割キーボードであるSparrow62シリーズの新作キーボードを製作中です。

Sparrow62シリーズは以下の特徴のあったキーボードでした。

  • 格子配列に近いがわずかな湾曲
  • 左右分割
  • MCUにRP2040を採用
  • 左右分割の片方にはIOエキスパンダーMCP23017を採用
  • 薄さ追求
  • Cherry MX互換、Kailh Choc v1/2スイッチ対応
  • 一般的なキーキャップセットが使えるように、1U以外のキーも配置
  • MagicTrackpadを組み合わせるキットあり

今回のポイントは以下の通りです。

  • MagicTrackpadを良い位置に配置できるように右手のキーの基板サイズを特殊な形にする
  • 右手のIOエキスパンダーとして、CH32V003を採用する
  • 3Dプリントでケースを制作し、ガスケットマウントを採用する。けど、可能な限り薄くしたい

強めのリニアスイッチであるDurock Black Lotusを、分割キーボードの Sparrow62(+1)v2 に試そうとしました。 Sparrow62は薄くするために、机と一体化するように作っていました。 そのため、強めのスイッチの衝撃が全て机を受けてそれが指に跳ね返ってしまい、指を痛めてしまいました。 それから汎用ケースに対応したSparrow60Cを開発を進めていました。

また分割キーボードに戻ってきたいと思っていました。 今度はケースを作ろうと思い、積層タイプの3Dプリンタ Anker M5Cを購入しました。 これを使ってガスケットマウントが良いのかトライしたいと思っていました。 それにトライしています。

キーケットvol.2に出したいと思います。

Sparrow62v2のQMK Firmware対応

Sparrow62(+1)v2は既に完売していましたが、QMK Firmwareの対応の要望をいただきました。

Sparrow62(+1)v2は、左右分割キーボードの右手に、IOエキスパンダーであるMCP23017を使って実現していました。 QMK FirmwareはMCP23017をサポートする機能はないため、KMK Firmwareのみの対応としていました。 要望をいただいたため、QMK FirmwareでMCP23017に対応を頑張りました。

この対応の詳細は記事にまとめています。

74th.hateblo.jp

Sparrow2.5D

3Dキーボードを簡単に作れないかと思い、奥行き方向のみ立体にできる自作キーボードを考えました。

結局まだ完成まで辿り着いていませんが、完成されれば面白そうです。

イベント参加・出展

今年もいくつかのイベントに参加しました。

キーケット

2024年3月2日に開催された、自作キーボードの同人即売会キーケットにサークル出展しました。

これについては記事にしています。

74th.hateblo.jp

天下一キーボードわいわい会 Vol.6

2024年5月6日に開催された天下一キーボードわいわい会Vol.6に参加してきました。

多くのキーボードに出会ったことを記事にしています。

74th.hateblo.jp

天下一キーボードわいわい会 Vol.7

本当に多くのキーボードに出会ったので、そのことを記事にしています。

74th.hateblo.jp

自作キーボードのライフの購入品

自作キーボード関連で購入したものを紹介します。

Cerakey

セラミック製キーキャップです。わいわい会で触らせてもらい、非常に良かったので、購入しました。硬質な感じが非常に良いです。

こちらで購入できます。

Ceramic Keycap Full Set-Blackwww.cerakey.com

磁気スイッチをポインターデバイス化 nobkey module

パレットシステム よっぴさん(@4py1)が提供する、磁気スイッチをポインターモジュール化するデバイスを購入して、実際に操作してみました。

現在もこちらで販売されています。

palette-system.booth.pm

トラックパッド TPS43-201A-S

DigiKeyでトラックパッドのI2Cモジュールである TPS43-201A-S を試していました。 QMK Firmwareで動くようにしたことは以下の記事にしています。

74th.hateblo.jp

今でもマルツ経由でDigiKeyで購入できます。

www.marutsu.co.jp

動くアームレスト

孤高のからあげさんの、動くアームレストをわいわい会で体験し、良さそうに思い購入しました。

同じローラーを使って3Dプリンタで自分用のアームレストを作ってみたりしていました。

こちらで販売されています。

kokou.shop-pro.jp

自作キーボードで便利なもの

自作キーボード活動で便利だった道具を紹介します。

キースイッチ導通確認はんこ

Daraku-Nekoさんが販売するキースイッチ導通確認はんこを購入しました。

darakuneko.booth.pm

今でも自作キーボードのソケット実装後はまずこれを使って実装を確認しています。

Lofreeのスイッチプラー

Lofree x Kailh Shadow Switchを1ケース購入すると、スイッチプラーが付いてきました。 いろいろスイッチプラーを試しましたが、結局これが非常に使いやすく、ずっと使っています。

RP2040手はんだ実装位置決め治具

SparrowDial、Sparrow60C、SparrowG21と、RP2040を基板に直接実装したキーボードキットを作ってきました。 RP2040の実装は私の手で行っています。 しかし、0.4mmピッチの手での実装は神経を使います。 15近く実装しましたが、疲れました。

そこでRP2040の汎用位置決め治具を作成しました。 キーケット以降の増産分はこの位置決め治具を使って実装しました。 実のところかかる時間は変わらないのですが、実装に神経を使わずに済みました。

この制作については記事にしています。

74th.hateblo.jp

現在、Boothにて販売中です。

74th.booth.pm

ほかにやってたこと

Kailh Choc v2スイッチの対応キーキャップを調べた記事を書きました。

74th.hateblo.jp

来年は…

来年はまずキーケット2にむけて、SparrowS v3を完成させ、販売したいと思います!

7セグLEDを176個セット買ったので、Grove I2Cで制御して使うためのデバイスを作った

tl;dr

  • 秋月電子通商の長期保存品のお買い得商品で、7セグLEDを買ったよ
  • 7セグLEDを使いたくて、Grove I2Cで、簡単に制御できるデバイスを作ったよ
  • 整数値をI2Cで送るとそのまま表示する機能を付けたよ
  • 制御サンプルコードはM5stack Atom Liteで作ったよ、ブラウザで書き込みできて便利!
  • OSHWとして公開中! Boothでキットも販売中!

秋月のお買い得品の7セグLEDを買ってしまう

秋月電子通商の秋葉原店の2階店舗には、お買い得品がいつも置かれるようになっています。 私自身も秋葉の秋月電子通商に行くと、真っ先に見に行ってしまいます。

ここで、7セグLED、白、赤、オレンジのものがお買い得品としておかれていました。 非常にお安く赤、オレンジは200円で50個程度と手に取りやすい量で得でしたが、自分は白が良いなと思い、悩んだ末176個528円の品を購入してしまいました。

これは7セグLEDを使った工作をしなければならないと思い、Groveデバイス化することを考えました。

作った7セグLEDデバイス

I2Cコントローラとしては、CH32V003を使いました。 既に、自作キーボードの左手ICや、StickPointVでI2Cコントローラとして使っているため、慣れたものです。

7セグLEDの制御

LEDの制御にはマトリックス回路を作ることにしました。

まず、7セグLED(OSL10561-LW)の内部回路は以下のようになっています。

7セグLEDのデータシートより

アノード側のピンがセグメント別LEDに分かれて用意されており、カソード側がカソードコモンとして共通のピンで共通になっています。

これを、複数の7セグLEDを制御するために以下のように、マトリックスで回路を組みました。

回路図を見るとマトリックス感はないですが、アノード側が全ての7セグLEDで共通(SA〜AG、SDP)になっています。 カソードコモン側は、7セグLED毎に用意します(SEL1〜4)。

これで、以下のように制御して点灯させます。

  1. SA〜AG、SDPを、すべてLowにする
  2. SEL1をLow、SEL2〜4をHighにする
  3. SA〜AG、SDPを、点灯するLEDをHigh、しないものをLowにする
  4. 一定時間待つ(点灯時間、100us)
  5. SA〜AG、SDPを、すべてLowにする
  6. LED2〜4で2〜5を繰り返す

交互に点灯しているので実際は点滅しているわけですが、人間の目にはずっと点灯しているように見えます。いわゆるダイナミック点灯

I2Cスレーブデバイスとしての仕様

I2Cには、メッセージボックスという仕様があり、マスタからスレーブデバイスのレジスタを読み書きするように使うことがあります。このデバイスもそのように使うようにしました。

レジスターは以下の通りです。

address R/W reset
0x00 Direct IO for LED 1 R/W 0x00
0x01 Direct IO for LED 2 R/W 0x00
0x02 Direct IO for LED 3 R/W 0x00
0x03 Direct IO for LED 4 R/W 0x00
0x10 Number uint16 input(Upper bit) W 0x00
0x11 Number uint16 input(lower bit) W 0x00
0x12 Point location(0xFF is OFF) W 0x00

Direct IOの場合、各bitは以下に対応します。

対応bit

基本は、DirectIOとして1byteで1LEDの状態を登録することで点灯できます。

せっかくならば、整数値を入力すると、それをそのまま表示する機能を付けました。0x10、0x11に16bit整数値を入れることで、その値がそのまま表示されるようにしました。これで、このデバイスを利用する側は7セグLEDを数字を表示するためにどうやって入力すべきか知っている必要はなくなりました。

実際のArduinoのコードでも、以下のように使えます。

// 表示する16bit整数
uint16_t num = step % 10000;

// 送るメッセージ
uint8_t msg[4] = {0};
msg[0] = 0x10; // 整数入力用のレジスタアドレス
msg[1] = num >> 8; // 上位8bit
msg[2] = num % 0x100; // 下位8bit
msg[3] = 1; // 小数点の位置

printf("Num: %x,%x\n", msg[1], msg[2]);

// I2Cで送信
Wire.beginTransmission(SEG7_ADDR);
Wire.write(msg, 4);
Wire.endTransmission();

検討したこと

今回7セグLEDへのカソード側もアノード側もMCUのピンに繋いでいます。本来はMCUのピンではなく、もっと電流が流せるようにMOSFETをつけるなどすべきでしょう。ブレッドボード上で実験していたところ、ひとまずLEDを十分に制御できそうだったので、直接MCUのピンに繋ぐことにしました。部品点数も減らせるので。

7セグLEDの制御にはTM1637などのICがあります。100円程度で購入できるため、本来であればこのようなモジュールを使うべきです。しかし、自分は全て慣れているCH32V003で制御できるようにしたいと思いました。さらに、整数値を直接入れて数字を表示できるようにしたいです。そのため、CH32V003で強行しています。

現状の問題点

前述の通り、7セグLEDの両ピンをMCUのピンに繋いでいます。そのせいか、少しリークしているのか、DPピンが点灯していないにもかかわらずほんの少し点滅しています。暗いところで見ないと分からないくらいなので、まぁ良いかとしています。

制御サンプルをM5Stack Atom Liteで作る

デバイスを作ったからには、すぐに試せるサンプルコードがあるべきです。サンプルコードを用意しようと思いました。Groveポートを持ったデバイスとして、M5Stack Atom Lite(以下Atom)を利用することにしました。

Atomは、Switch Sienceや秋月電子通商などで1,700円程度で購入することができます。更にボタン、LEDもあるため、簡単な入力やインジケータとしても機能します。一般的なマイコン開発ボードでは、ボタンやLEDを外付けする必要がありますが、Atomであれば含まれています。

github.com

このサンプルの動画のツイートがこちらです。

ESP32であれば、PC内にツールを入れなくても、ブラウザ経由で書き込みできるツールESP Web Toolsがあります。

esphome.github.io

PCにAtomを接続し、このWebページにアクセスして「CONNECT」を押して、インストールを進めることができます。

74th.github.io

設計ファイルはオープンソースとして公開中

今回作成した全ては、オープンソースハードウェアとしてMITライセンスでGitHubにて公開しています。回路図や、KiCad設計ファイルもあるので、見てみてください。

github.com

キットとして販売中

この制作したデバイスを、キットとしてBoothで販売中です。良かったら入手してみてください。

74th.booth.pm

使おうと思っている用途

ESP32C3-IoT-Serverに接続して、温度などを表示させたいと思います!

あと、ハンドルネームの74thが、7セグLEDで表現できると気づいて、嬉しくなりました。

押しやすいスイッチでUSB電源を遮断するUSB Switch Adapterを作った

USB Switch Adapterを使っているところ

tl;dr

  • 電子工作でよく使うマイコンボードにはUSBがついていて、よくそこから電源をとって、ブレッドボードの電源としてよく使うよ
  • マイコンボードにリセットボタンはあるけれど、周辺回路を含めてリセットしたいとき、USBを抜き差しして、リセットを行うよ
  • このUSB電源断によるリセットを、メカニカルスイッチで軽い力で行えるUSB Switch Adapterを作ったよ
  • マイコンCH32V003搭載で、ボタン長押しで電源断を継続する機能を付けたよ

USBポート付きマイコンボードを使った開発のリセットに、USB抜き差しが面倒くさい

電子工作では、Raspberry Pi PicoなどのUSBポートの付いたマイコン開発ボードをよく使います。 私自身の設計するマイコン開発ボードにも、USB機能のないマイコンに対しても、必ずUSBポートを付けていて、電源として利用します。

トラックパッドデバイスの実験風景

ブレッドボードで繋げたデバイスに対してもリセットしたいことがよくあります。 この場合、USBを抜き差しして行います。 しかし、USBを逐一抜き差しするのは面倒くさいです。

USB Switch Adapterを作った

以前USB電源を定期的にリセットするアダプタUSB Rebooterを、CH217をパワースイッチとして、CH32V003でタイミング制御を行うマイコンとして使って、作成しました。

74th.hateblo.jp

74th.booth.pm

こちらを購入いただいた方に、スイッチで手動でスイッチオフができないか相談が来ました。 確かにそのような使い方も良いと思い、スイッチ基板をCH217に手配線して、可能にできると話していました。

これをちゃんとまとまった作品化できないかと思い、今回USB Switch Adapterを作りました。

USB Switch Adapter

USB Rebooterと同様に、スイッチ機能のあるUSB電源保護ICであるCH217のスイッチピンを操作して、電源の遮断を実現しています。

CH217については過去に記事にしています。

74th.hateblo.jp

回路つなぎ替え時に便利な長押しで電源を切れる機能をつけた

ブレッドボードで実験中、回路をつなぎ替える時には、電源を遮断しておくのが常識です。 この長い時間の電源遮断も、このアダプタでできると良いと思いました。

ボタンとCH217のスイッチピンの操作を、マイコンCH32V003を介して行うことにしました。CH32V003は、本ブログでも何度も登場している、秋月でも40円で買える安価なマイコンです。安価なため簡易な要素にもじゃんじゃん組み込めます。

akizukidenshi.com

通常はボタンを押して通電している間電源を遮断するようになっていますが、ボタンを一定以上長押しした場合、遮断の状態を続けるようにしました。この動きはTwitter上に動画で上げています。

過電流を表示する機能

CH217には過電流が発生すると遮断するポリフューズとして使える機能が含まれています。 CH217は、過電流時による遮断が発生しているとき、FLAG#ピンがLowになります。 これを読んで、LEDを点滅して人間に伝える機能を追加しました。

今のところ、このアダプタを使って、電子工作を行っていて、これが点滅する事態になったことはありません。

USB-Cプラグ

部品に、USB-Cプラグを使っています。 以前USB Rebooterを作ったときには、秋月で売られている 00402-UCAM002-X を使いました。

akizukidenshi.com

これはピンの上に屋根が付いており、はんだごてでは非常に実装が難しい部品となっていました。

今回LCSCで購入した SHOU HAN TYPE-C 24P-GTJB 040 を使いました。 こちらは 00402-UCAM002-X と比べると実装しやすいですが、簡単とは言いがたいとは思います。

www.lcsc.com

実際便利かどうか

実際に、私の電子工作では非常に便利に使っているツールとなります。

直近で使ったのは、販売用モジュールの製作時の、テスト工程です。 StickPointVという自作キーボード用モジュールを作っているのですが、RP2040を積んだテスト基板のGroveポートに接続し、RP2040に書き込まれたQMK Firmware上で動作するかどうかを確認しています。 この接続後にRP2040をリセットする必要があるのですが、このリセットにUSB Switch Adapterを使いました。

Boothにて販売中

USB-Cプラグの実装の難易度が高いため、本ツールはキットではなく完成品ツールとしてBoothで販売することにしました。 以下で販売しています。

74th.booth.pm

販売開始1週間で7つ販売し、わりと好評です!

OSHWとして、回路図、KiCadファイル等は公開中

こちらは、74thのOpen Source Hardwareプロジェクトの1つとしています。 以下のリポジトリで回路図やKiCadファイル、CH32V003のファームウェアを公開しております。

github.com

ご自身で基板を発注して利用も可能です。 日本国内での販売はご遠慮いただけると助かります。