初めての自作キーボード
オンラインミーティング専用キーボードを作ろう
2019年頃から自作キーボードが徐々に盛り上がり、会社の中でも自作キーボードを使用しているメンバーを見かけることが多くなりました。
最近では、リモートワークが一般的になり周辺機器にこだわる人も増え、ますます自作キーボードの需要は高くなっています。
自作キーボードの魅力は、ユーザーが使いやすさを追求し、自由に発展できることです。
市販品に少し手を入れてカスタマイズしても“自作キーボード”ですし、基板の設計から行っても当然“自作キーボード”になります。
多様な自作キーボードの世界ですが、特にメジャーなのはキーボードキットと自分の好きなキーキャップを買い、カスタマイズする方法だと思います。
私自身も、2020年にないん(@pluis9)さんが設計したHelixキーボード(バックライトタイプ)キットを購入し、使用しています。フルカラーLEDがゆっくりと色を変え、とても幻想的で仕事がはかどります。
私はバックライトが気に入って購入したので、キーキャップやケーブルなどにはあまり手はかけていません。今後少しずつアップデートしていけたらと思っています。
薄型キーボードでバックライトLEDの実装が想像以上に難しく、四苦八苦しました。休日を潰してバックライトの調整をした様子をタイムラプス動画で撮っておきましたので、どのように調整しているのか、よければ見てください。
キットになっていても、はんだ付けをしたことのない方は難しいと感じるでしょう。
そこで、たった2つのキーだけの超ミニミニキーボードをはんだ付けなしで作成します。
「たった2つだけのキーボードで何ができるの?」と思われるかもしれませんが、キーボードといっても「あ」や「A」などの文字しか入力できないわけではなく、複数のショートカットや文字列をボタン(キー)1つで操作することもできるのです。
オンラインミーティングで使えるZoom専用キーボード
最近はZoomなどオンラインミーティングツールが一般的になり、1日の大半をオンラインミーティングの環境で過ごす方が多くなってきました。
「ミュートなどのON/OFFを、ボタン(ミニキーボード)で操作できたら楽ではないだろうか?」そんな考えから、Zoom専用のキーボードを作成することにしました。
キーボードの1つのキーにZoomのショートカットキーを割り当てるという考え方です。
ここでキーボードの作り方をマスターすれば、キーボードのキーは自分の考え次第で自由に増やしていくことも可能です。
Zoomにはミュート(消音)や挙手(手を挙げて話したい旨をアピールする)などの機能がありますが、基本的にパソコンの画面のアプリケーションを操作して行います。でも、専用のボタンがあれば瞬発的に操作でき、よりリアルのミーティングに近くなるのではないでしょうか。
必要な部品
・Arduino Micro 5V 16MHz(ATmega32u4 - ピンヘッダ付き)
https://www.switch-science.com/catalog/1120/
・ジャンパーワイヤー(オス〜オス)
https://www.switch-science.com/catalog/620/
・ブレッドボード
https://akizukidenshi.com/catalog/g/gP-00315/
・タクトスイッチ
https://akizukidenshi.com/catalog/g/gP-02561/
・固いジャンパーワイヤー(ブレッドボード用)
https://www.switch-science.com/catalog/314/
・カーボン抵抗(炭素皮膜抵抗)1/6W10kΩ
https://akizukidenshi.com/catalog/g/gR-16103/
・MicroUSB(プログラム書き込み用)
Arduino Microとは、プログラムを書き込むマイコンです。
Arduino MicroはATmega32U4を搭載しており、USBデバイスとして認識させることが可能なため、スイッチと組み合わせればキーボードを作成できます。
同じArduino製品では Arduino Leonardoというボードも同様にキーボード作成に使えますが、サイズが少し大きく価格も高くなるので、ここでは Arduino Microで作成します。
ジャンパーワイヤー、ブレッドボード、タクトスイッチは、電子工作をしたことがある方であれば1度は使ったことがあるかと思います。ご自宅にある場合は、あえて新しいものを買う必要はありません。
最初にキーボード部分を作成していきます。まずは、Arduino Microをブレッドボードに取り付けます。
購入したArduino Microがピンヘッダー未実装だった場合は、自身でピンヘッダをはんだで取り付けてください。
※ピンヘッダーが取り付けられていないArduino Microを購入した方は、別売りのピンヘッダーを購入する必要があります。
・丸ピンのピンヘッダー5本セット
(https://www.switch-science.com/catalog/93/)
電子工作全般に言えることですが、購入するマイコンやセンサーなどにピンヘッダーが実装されていることはまれです。ピンヘッダーが実装済みのものはブレッドボードの使用が想定されています。マイコンやセンサーを基板に取り付ける場合はピンヘッダーが不要なため、発売元はどちらにでも使えるよう、あえてピンヘッダーを未実装で販売することが多いのです。
そのため、自身でピンヘッダーを取り付けられるようにはんだ付けを学ぶ必要があります。
はんだ付けに慣れている方は、「ブレッドボードに配置する」まで読み飛ばしてください。
●基盤にピンヘッダーをはんだ付けする
Arduino Microのはんだ付けの写真を撮り忘れてしまったので、別の基板で紹介します。
ピンヘッダーの足が長い方をブレッドボードに取り付けます。
ピンヘッダーの上に基板を載せます。この時、基板とピンヘッダーが90度になるようにします。斜めになる場合は、他のパーツを挟み、基板が水平になるようにします。
はんだごてが十分に温まったら、基板から出たピンヘッダーをはんだごてで温めます。温めたピンにはんだを付け、穴にはんだを流し込みます。
※はんだごてにはんだを付けるのではなく、はんだが温めたピンヘッダーにはんだを付けることで、しっかりと基板にくっつきます。
再度ピンヘッダーをはんだごてで温め、はんだをしっかりと基板の穴に流し込みます。
●ブレッドボードに配置する
必要な部品の準備ができたら、キーボードを作成していきます。Arduino Microとボタンをブレッドボードに取り付けます。この際、ブレッドボードの間の溝を跨ぐように取り付けます。
タクトスイッチの足はブレッドボードに刺さりにくいので、少し強く押し込んで取り付けます。
取り付けたArduino Microとタクトスイッチをジャンパーワイヤーでつなぎます。ジャンパーワイヤーの色は関係ありません。自分が見やすいように工夫してみてください。
通常のジャンパーワイヤーだと配線がごちゃごちゃして見づらく、日常的に使うと配線が邪魔になるので、もう少し使い勝手を良くします。固いジャンパーワイヤーを使うことで配線がスッキリし、使いやすくなります。
タクトスイッチの上左側に、Arduino Microの2、3ピンに接続するジャンパーワイヤーと、10kΩの抵抗を挟んで+(5V)に接続している線が2本存在しています。これは、スイッチのオンとオフを安定させる処理です。スイッチをオンにすると電気が流れ、その電気の流れをArduino Microの2、3ピンで検出することで処理が実行されます。
もし、10kΩの抵抗を挟んで+(5V)に接続していないと、スイッチがオフの時は入力端子がどこにも接続されていないことになり、誤作動しやすい不安定な状態になります。それを回避するため、10kΩの抵抗を挟んで+(5V)に接続しています。このように安定してスイッチオンを検出できるようにする処理をプルアップ抵抗と言います。
●プログラムを作成する
配線ができたら、プログラムを作成します。Arduinoにはプログラムを作成する開発環境が用意されています。
デスクトップアプリケーションのArduino IDE、Webブラウザ上でプログラムを行うArduino Web Editorの2つがあります。
Arduino IDEはパソコンにインストールするのでオフライン環境でプログラムを作成できますし、さまざまなライブラリを好きなバージョンでインストールすることができます。
一方、Arduino Web Editorはライブラリのバージョンが常に最新になっており、パソコンにインストールの手間が要りません。そのため、初めてプログラミングをする人には始めやすいという利点があります。
本記事では、パソコン環境の違いが出にくいArduino Web Editorでのプログラミングを紹介します。
https://store.arduino.cc/digital/createにアクセスし、ユーザー登録を行ってください。
ユーザー登録完了後、エディターにアクセスします。
プログラムを作成する画面が表示されます。
すでに用意されているサンプルプログラムを改変して動作を確認します。
左側のメニューから「Examples」をクリックし、「9.USB」をクリック、「Keyboard」の中の「KeyboardMessage」を選択します。右側のプログラムエリアにプログラムが表示されます。
このサンプルプログラムは、ボタン(キーボード)を押すと、「You pressed the button 1 times.」というテキストが入力されるプログラムです。再度ボタン(キーボード)を押すと、「You pressed the button 2 times.」となり、押すたびにカウントアップします。
ここでは、キーボードの入力ができるかどうかを簡単に確認するので、プログラムを動かすのはボタンAで設定します。
ボタンAからの入力を受けるArduino Microの2ピンを設定します。
プログラム中
const int buttonPin = 4;
と記載された箇所を
const int buttonPin = 2;
に変更します。
これで、プログラムの改変は終了です。
ボードの設定を行います。ボードとは、書き込みを行うマイコンを設定します。ボードの設定と書き込みを行うマイコンが一致していない場合、プログラムに間違いがなくてもプログラムを書き込むことができずエラーになります。
画面上部にある「Arduino Due(Native USB Port)」の右にある▼印をクリックして「Select Other Board & Port」をクリックします。
Select Other Board & Port画面が開くので、検索エリアに「Arduino Micro」と入力し、Arduino Microを絞り込み選択してOKをクリックします。
ボードの変更が終わったら、プログラムを書き込みます。プログラムを書き込む前に上部の「✓」ボタンをクリックして、プログラムエラーがないか念のため確認します。
プログラミングエリア下に「Success」と表示されていればプログラムエラーはないので、Arduino Microに書き込むことができます。
パソコンにArduino Microを接続します。ページ上部に「Arduino Micro」と表示された右の▼印をクリックすると表示される
「Arduino Micro /dev/cu.usbmodemXXXXX」をクリックします。
※XXXXXはデバイスごとに異なります。
※Windowsの場合は、ポートの表示が例と異なります。例はMacの場合です。
ページ上部「✓」ボタンの横にある「→」ボタンをクリックします。Arduino Microにプログラムの書き込みが行われます。
※プログラム書き込み中はArduino Microとパソコンの接続を切らないでください。
プログラミングエリア下に「Success」と表示されたら正常に書き込みは完了です。
書き込んだプログラムが意図通りに動くか確認します。
パソコンでテキストエディターを開いて、Arduino Microの2ピンに接続しているタクトスイッチAを押してみてください。
「You pressed the button 1 times.」とテキストが打ち込まれれば、ボタンの配線が正しく、プログラムも正常に動いているということになります。
もし動かない場合は、配線をもう一度見直してください。間違えた箇所に接続していませんか? ピン(金具の部分)がしっかりとブレッドボードに刺さっていますか? 確認しても問題がないような場合は、プログラムの間違いがあるかもしれません。再度、上部の「✓」をクリックしてプログラムエラーがないか確認します。
通常キーボードは1つで「あ」や「A」などの1文字だけを打つように設定されています。調整したプログラムは、1つのキーボードに複数のテキスト(文字列)を打つように設定しています。同じように1つのキーボードに、ショートカットキーを設定すれば専用キーボードが作れます。
引き続き、それぞれのキーにショートカットを割り当てるプログラムを作成します。
Arduino Web Editorの左メニューから「SketchBook」をクリックします。SketchBookは、自分が作成したプログラムを保存するエリアです。
Arduinoでは、プログラムをSKETCH(スケッチ)と呼びます。
新しいブログラムを作成する場合、上部の左メニューの右隣にある「NEW SKETCH」をクリックします。
新しく開いたスケッチに以下のプログラムを入力します。
#include "Keyboard.h" const int ButtonAPin = 2; // タクトスイッチAからの入力を受けるピン const int ButtonBPin = 3; // タクトスイッチBからの入力を受けるピン int previousButtonStateA = HIGH; // タクトスイッチAの状態を確認する int previousButtonStateB = HIGH; // タクトスイッチBの状態を確認する void setup() { pinMode(ButtonAPin, INPUT); //2番pinからのデータを受ける pinMode(ButtonBPin, INPUT); //3番pinからのデータを受ける Keyboard.begin(); //キーボードのエミュレーションを開始 } void loop() { int ButtonAState = digitalRead(ButtonAPin); //ButtonAStateにButtonAPinの状態を保存 int ButtonBState = digitalRead(ButtonBPin); //ButtonBStateにButtonBPinの状態を保存 // もし、タクトスイッチAが押されたら if ((ButtonAState != previousButtonStateA) && (ButtonAState == HIGH)) { Keyboard.press(KEY_LEFT_GUI); //キーボード「Command」を押す Keyboard.press(KEY_LEFT_SHIFT); //キーボード「Shift」を押す Keyboard.press('a'); //キーボード「a」を押す delay(10); //10ミリ秒停止 Keyboard.releaseAll(); //キーボードを離す } // もし、タクトスイッチBが押されたら if ((ButtonBState != previousButtonStateB) && (ButtonBState == HIGH)) { Keyboard.press(KEY_LEFT_ALT); //キーボード「Alt」を押す Keyboard.press('y'); //キーボード「Y」を押す delay(10); //10ミリ秒停止 Keyboard.releaseAll(); //キーボードを離す } previousButtonStateA = ButtonAState; previousButtonStateB = ButtonBState; }
コメントアウト(//)で各プログラムの説明はしていますが、簡単に説明します。
サンプルプログラムでは、テキストを出力したのでKeyboard.print()を使用していました。
ショートカットキーを登録する場合は、Keyboard.press()を使用し、キーボードを押している状態を設定します。
Keyboard.press()を使用することで、同時にいくつものキーを押すことが可能になります。
キーボードを離したことを宣言しないと押され続けてしまうので、Keyboard.releaseAll();を使いKeyboard.press()状態をクリアしてあげる必要があります。
ショートカットの説明を行います。
Zoomで自身をミュート(マイクをOFF)、ミュート解除(マイクをON)にするショートカットはMacの場合(Command(⌘)+Shift+A)、Windows(Alt+A)になります。
※サンプルのプログラムはMac版で作成しています。
Zoomで挙手(画面に手を挙げるアイコンが表示され、発言したい旨を伝える)のショートカットは、Macの場合(Option+Y)、Windows(Alt+Y)になります。
プログラムには、Altの場合はKEY_LEFT_ALT、Shiftの場合はKEY_LEFT_SHIFTと記載されています。これはプログラムの上部でincludeしているKeyboard.hというライブラリで定義されているからです。
他にどのようなキーがあるかは、ライブラリを見ると確認できます。
Arduino Web Editor上部の「✓」ボタンをクリックして、プログラムに問題がないか再度確認します。
プログラミングエリア下に「Success」と表示されていればOKです。
※上部「Arduino Micro」と表示された横のポートを設定していないとエラーになります。必ず「Arduino Micro /dev/cu.usbmodemXXXXX」となるように設定します。
プログラムにエラーがなければ、上部「✓」ボタンの右隣にある「→」ボタンをクリックしてArduino Microにプログラムを書き込みます。
書き込みが終わったら、Zoomを立ち上げて動作を確認します。動画のように動いていれば完成です。
ミュート、ミュート解除
挙手
使ってみた感想
Zoomのミュートや挙手は、マウスやキーボードのショートカットでも操作できますが、瞬発的な操作が難しいため、いつもワンテンポ遅れたり、焦ってもたついたりすることが多くありました。
この超ミニミニキーボードで操作してみると瞬発的に反応でき、よりミーティングに参加している感じがしました。
問題としては、ブレッドボードで組んでいるので大きすぎるということと、タクトスイッチがブレッドボードにしっかりと取り付けできないことです。
次のステップアップとして小型化や、基板を作成してみたくなりました。
すでに小型のキーボードはいろいろなものが販売されています。「4-MINI 極小自作キーボードキット」を使えば、手のひらサイズのキーボードを作ることができます。
その他のアイデア:さまざまな入力デバイスを自作してみよう
タクトスイッチを使ってキーボードを作る説明をしてきましたが、タクトスイッチ以外の入力装置や、センサーなどを使ってキーボードを作ることもできます。
■アイデア例:ジョイスティックマウス
ジョイスティックをマウスのように使うことができます。左手で操作できるマウスが欲しいと考えたのですが、細かい操作がジョイスティックでは難しいので、仕事では使えません。ゲームなどではより直感的に操作できます。
■アイデア例:ぬいぐるみキーボード
Twitterでもふもふキーボードというネタが流行った時に、リアルに作成したら面白いかもしれないと思い作成したキーボードです。
猫のぬいぐるみのお腹をもふもふと触ると、テキストで「も」と「ふ」が入力されます。また、顔をなでることで改行されます。
お腹には、大きめのタクトスイッチを使用し、首には曲げセンサーを入れて実現しています。
このように、アイデア次第で仕事に役立つキーボードや面白いキーボードが作れます。自分のアイデアで世界に1つだけのキーボードを作成してみましょう!