勝手な電子工作・・

勝手なオリジナル電子工作に関する記事を書きます

Zoom会議用かんたん操作ボタンをArduinoで作る(≒その3)

注文したArduino Pro Microが届きましたので、今度はそれで製作。この「かんたん操作ボタン」を使うと、家族のリモート団らんでの画面操作も楽ちんになります、あたりまえか^^;

f:id:a-tomi:20200510101000j:plain

到着したPro Microはコンパチ機。海外なら4ドル前後ですが日本では千円近くというところでしょうか。小サイズで組込みにも適していますね。これなら今後も少しは使う可能性が高いので今回6つを調達しました。

f:id:a-tomi:20200510101606j:plain

ごていねいに箱(コンパチ箱!?)もついてますよ。

f:id:a-tomi:20200510101726j:plain

下の方に書くプログラムで、まずブレッドボードによるテスト。ヘダーピンなど取りつけずにICクリップワイヤーで接続します。ヘダーピンをつけるとあとで組込む際には邪魔になるわけなので。

テスト接続のためのスルーホール用ワイヤーもありますが、基板の縁に近い穴の場合は、むしろICクリップのほうがしっかり接続できます。次のように。

f:id:a-tomi:20200510102119j:plain

接続先は前回のブレッドボードです。

f:id:a-tomi:20200510102101j:plain

Arduino Leonardo系ですから、Keyboard Libraryを使うと簡単です。ArduinoのモデルとしてはArduino Microを指定し、次のようにプログラムを作りました。(プログラムを更新しておきましたー2020年5月12日 もちろん前のままでも大丈夫です。)

/* ***************************************************
       "Zoom" short-cut buttons with Arduino-Micro
          V00: Initial version             May 9, 2020
          V01,02: Ignore long chattering  May 10, 2020
       Funcion: Provide four short-cut-buttons
        Button 1 for Mute all memabers (on/off)
        Button 2 for View gallery (on/off=speaker)
        Button 3 for Tool-bar (on/off)
        Button 4 for Full-screen (on/off)
      (c) Akira Tominaga, All rights reserved.
 *****************************************************
*/
#include "Keyboard.h"  // for ATmega32U4 only
#define B1 7           // Button 1 for Mute-all
#define B2 8           // Button 2 for View-gallery
#define B3 14          // Button 3 for Toolbar
#define B4 15          // Button 4 for Full-screen 
// Chattering time depends on the Buttons used
#define Cht 30         // chattering time
#define lCht 200       // longer chtrg to ignore *V02
#define typOn 10       // type-on time (mS)
byte  Fk = KEY_F1;     // save area for cur Func key

void setup() { // Setup **************************
  Keyboard.begin();
  // define Buttons and pull them up
  pinMode(B1, INPUT_PULLUP);
  pinMode(B2, INPUT_PULLUP);
  pinMode(B3, INPUT_PULLUP);
  pinMode(B4, INPUT_PULLUP);
}

void loop() {  // Arduino loop ******************
  if (digitalRead(B1) == LOW) { // B1: Mute all members
    delay(Cht);        // ignore chattering
    while (digitalRead(B1) == LOW) {} // wait for btn-off
    Keyboard.press(KEY_LEFT_ALT); // push Alter key
    Keyboard.print("m"); // and type m
    delay(typOn);
    Keyboard.releaseAll();
    delay(lCht);       // avoid longer chattering   *V02
  }

  if (digitalRead(B2) == LOW) { // B2:View gallery or Spkr
    delay(Cht);        // avoid chattering
    while (digitalRead(B2) == LOW) {} // wait button-off
    if (Fk == KEY_F2) { // checck cur func key
      Fk = KEY_F1;     // set F1 if currently F2 used
    } else {
      Fk = KEY_F2;     // set F2 if currently F1 used
    }
    Keyboard.press(KEY_LEFT_ALT); // push Alter key
    Keyboard.press(Fk); // and push Function key 1 or 2
    delay(typOn);
    Keyboard.releaseAll(); // release all keys
    delay(lCht);       // avoid longer chattering   *V02
  }

  if (digitalRead(B3) == LOW) { // B3: Toolbar
    delay(Cht);        // avoid chattering
    while (digitalRead(B3) == LOW) {} // wait button-off
    Keyboard.press(KEY_LEFT_ALT); // push Alter key
    delay(typOn);
    Keyboard.releaseAll(); // release all keys
    delay(lCht);       // avoid longer chattering   *V02
  }

  if (digitalRead(B4) == LOW) { // B4: Full screen
    delay(Cht);        // avoid chattering
    while (digitalRead(B4) == LOW) {} // wait button-off
    Keyboard.press(KEY_LEFT_ALT); // push Alter key
    Keyboard.print("f");  // and type f
    delay(typOn);
    Keyboard.releaseAll(); // release all keys
    delay(lCht);       // avoid longer chattering   *V02
  }
}
// End of program *******************************

どんなスイッチを使っても問題ないように、処理に続いて思い切り長い100mSのDelayを追加してあります。操作性には全く問題ありませんし、これでスイッチの質をいっさい気にしなくて大丈夫でしょう。

そしてスイッチ用の箱を加工し、前から目をつけていたスイッチを使い、そのケース中にマイコンも収容しました。よって使用時はこれとPCをUSBケーブルでつなぐだけ。

f:id:a-tomi:20200510103454j:plain

キートップは紙に印刷して収容しました。

意味はこれまでどおりです。

f:id:a-tomi:20200510103616j:plain

以上です・・・。これでは工作好きの方には物足りないでしょう。「どこが工作なの?」というぐらい簡単。よって、このプラスチックケースの加工のことを少し書いておくことにします。

 

そもそもこの特定のキーはとりつけるネジ間隔が80mmもあるし、昔のキーなので高さがやけに高く、なかなか適当なケースはありません。厚さ(深さ)30mm以上ないとどうにもなりません。3Dプリンターで作ればよいのでしょうがそこまではちょっと・・。それなら取付を汎用ケースの外側にするか、と考えつきました。そして手持ちを探したら適当なケースがありました。

f:id:a-tomi:20200510104226j:plain

50x90x26mmで昔の「タカチGC50」を少し厚くしたような感じ。(ちなみに今のタカチGC50は30x90で深さは時代を反映してずっと浅いです、念のため。)これは台湾製ですが精度も高くよくできています。台北に出張の折にたまに時間があると勝手に光華商場を見物して楽しんでいました。そこで購入したものと思います。表示された台湾ドルはその頃の日本円換算で100円ほどか。

シュリンクラップに包まれラベルに連絡先まで書いてあります!好感がもてますね。

f:id:a-tomi:20200510105242j:plain

どう加工するかと言えば、お決まりの穴をあけてつなぐやり方。とはいえ今回は部品で見えなくなる穴なので、精度や直線などを気にせずに気楽にできますね。表面の他の部分に傷さえつけなければ良いわけなので、表面はマスキングテープで保護しておいて作業します。

f:id:a-tomi:20200510110030j:plain


穴をつないだところ。荒っぽいですが仕上げ不要、これで十分。

f:id:a-tomi:20200510110146j:plain

そしてスイッチを取付。

f:id:a-tomi:20200510110231j:plain

この中にPro Microをどう取り付けるかが悩ましいところ。ピン数か所をスズメッキ線で半田づけした基板をケースの底にねじ付けすることにしました。

まずは蛇の目基板を加工。

f:id:a-tomi:20200510110416j:plain

Pro Microの複数のピンをスズメッキ線で基板へ配線(固定を兼ねます)してから、その基盤を2mmφネジ4つでケースの底に取り付けることにしました。取付後は下の写真です。

その際、マイクロUSB-B型端子がきれいに外へ出るよう、その穴をまず先に加工してから、基板の最終的な取り付け位置を決めてネジ穴をあけて取り付けます。そしてスイッチ側から、基盤表面に出しておいたスズメッキ線の端へと配線します。

こうしておけばしっかり取り付けでき、もし後で不要になったらPro Microは簡単に取り出せます。

ところでですが、ATmega32U4の弱プルアップされたインピーダンスは20kΩ程度はあるので、環境の余計な電界ノイズを拾うことがないよう、はい線は一応束ねておきます。

 

f:id:a-tomi:20200510110601j:plain

表面が黒なので見えにくいですが、USB端子は次のような感じで穴の真ん中にうまく出ています。

f:id:a-tomi:20200510110804j:plain

後はPCとこのUSBをUSBケーブルで接続し、Arduino-IDEを使って先ほどのスケッチを書きこめば、あっという間に出来上がりです。最後にケースの付属ネジ4本を締めます。たぶんもう開けることはないでしょう。

ついでに書いておくべきことを思い出しました。スケッチの作成で注意する点としては、Arduino-Leonardo系に共通のことなのですが、テスト段階でやたらとキーボードへの信号を出しっぱなしにしないことです。もしそうやるとシリアル接続がそれに占拠されてスケッチの書き込みができなくなりますから。スイッチなど何かのトリガーでしかキーボード信号を出さないようにするということですね。

もし仮にそれに気づかず失敗をしたら、ATmega32U4を復活するにはリセット(!Reset端子をグランドに接続するとリセットです)を何度かかけながら、運よく書き込めるタイミングでの書き込みを何度かトライするしかなくなると思います。

 

さて、これで「かんたん操作ボタン」記事は終わり、、かと言えばそうでもありません。

手持ちArduinoの在庫を確かめていたら、"Beetle"を見つけてしまいました。かつてKBハッカー用とか称されて盛んに使われていたもの。マイコンは同じATmega32U4です。

f:id:a-tomi:20200510112258j:plain

これの手持ちは残り2個だけですが、今回の用途にはこんなに気の利いた基板もないものです!組み込む必要すらなく、単にキーからこれへ配線をしてそのままPCのUSBに突っ込むだけですから!考えることは、たぶんこのBeetleのケースをどうするかだけです^^。

そのうちにやってみたいと思います。うまく出来たらここに書き足すか、別記事として書こうかと・・。

 

©2020 Akira Tominaga, All rights reserved.