勝手な電子工作・・

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

Zoom会議用かんたん操作ボタンをArduinoで作る(まとめ)

Zoom会議の操作を楽ちんにするボタンを、今回はBeetleで作りました。前回の記事(Zoom会議用・・・その3)の最後に少し書いておきましたが、BeetleとはArduino Leonardo互換(というよりサブセット)の小さな基板です。今回作ったのは写真の右側のもので、これで3個目(しつこいですね^^;)。

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

前の記事に付け足そうかとも思いましたが、この「勝手な電子工作」の記事がちょうど50作目になるようなので、別建てにして書くことにしました。

BeetleはPCのUSB端子に直接差し込める小さな基板で、下の写真のようなATmega32U4のブレークアウトボードです。Arduino-IDEではLeonardoとしてプログラミングをすることができます。

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

今eBayをちらりとみると、数年前より少し値上がりしたようですが、1個500円程度です。日本のアマゾンでみると6倍ほどの価格のものが見られます、たまたまかもしれませんが。

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

最近は新型コロナの影響による輸送の混乱のためか、若干の送料がかかる品が増えました。しかし複数買えば価格も安い(たとえば2PCSとつけて検索すれば出る)ので、後のために少し補給をしておきたくなり、つい注文してしまいました。

このUSB基板をどんなケースに収めるかですが、FRISKのケースは大きすぎて、USB端子に刺してつかうには幅・厚さともいまひとつです。オリジナルの簡単な方法は、配線してホットメルトをつけ、透明ビニールシートを巻きつけるというやり方です。勝手な知恵ですが、こうすると最終的にしっかりと丈夫にできます。あたりまえですが余計なケースは要りません。こういうのにぴったり。

巻くだけといっても、必要な時にマイコンボードがそのまま取り出せるように作ります。なので直接巻くのではなく、小さなストライプ基板をかませてその基盤側にだけホットメルトをつけます。

汚い手書きですみませんが次の案のように。こうするとケーブル接続も丈夫にできます。

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

Beetleのピンは、連続するD11、D10、D9、A0(D18)を使うことにします。そして右にあるグランドピンからひっぱってきて、隣のストライプをグラウンドにします。

まず、ストライプ基板をカットしておきます。

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

そして背中合わせの形にして、スズメッキ線で取り付けます。

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

こうしておけば、万一あとでBeetleを取り外す場合でも、5か所のはんだを吸い取るだけでOKなので。

そしてホットメルト(ホットボンドともいいますかね)をつけるのですが、ケーブル固定用に次の熱軟化樹脂を粘土として併用すると、私のような不器用者でもうまくできます。これは120℃ぐらいにセットしたヒートガンを使うと早く加工できます。

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

配線は、シールド被覆のあるUSBケーブルなら、中に4線+グラウンド線がしっかり収まっていますので適当ですしノイズを拾いません。はんだ付けしたら、ストライプ基板の銅箔面側だけにホットメルトを少し塗り、それを起点に透明ビニールシートを2回ほど巻きつけ、最後はホットメルトで同じ面へ止めます。そして冷めたら不要箇所をニッパーで切りとれば出来上がりです。ほら、こんな感じ。

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

横から見るとこんなかっこう。

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

貼り付け面側のみかけは少しきたないですが次。

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

ケーブル取り付け部も頑丈にできあがります。そしてケーブルの片側をスイッチに配線します。

作ったArduinoスケッチは次です。

/* **************************************************
       "Zoom" short-cut buttons with Beetle
          V00: Initial version           May 10, 2020
       Funcion: Provides four short-cut-buttons
          Button 1 for Mute all members (on/off)
          Button 2 for View gallery (on/off=speaker) 
          Button 3 for Tool-bar (on/off)
          Button 4 for Full-screen (on/off)
       Remarks: Apply Leonardo to build w/Arduino IDE
      (c) Akira Tominaga, All rights reserved.
 ****************************************************
*/
#include "Keyboard.h"   // for Leonardo(ATmega32U4) only
#define B1 11           // Button 1 for Mute-all
#define B2 10           // Button 2 for View-gallery
#define B3 9            // Button 3 for Toolbar
#define B4 18  //=A0    // Button 4 for Full-screen 
// Chattering time depends on the Buttons used
#define Cht 30          // chattering time
#define lCht 200        // longer chtrg to ignore
#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);        // avoid 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
  }

  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
  }

  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(10);
    Keyboard.releaseAll(); // release all keys
    delay(lCht);       // avoid longer chattering
  }

  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
  }
}
// End of program *******************************

 これをArduino-IDEで本体に直接書き込めば全てできあがります。何も問題なく動作をしています。しめしめ、持ち運びも簡単。

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

もしもち運び用としてまた作るときは、スイッチをもっと軽くしたい(しつこい?)。

 

今回はチャタリングが相当長くても大丈夫なコーディングにしたのですが、それには次のわけがあります。以下余計な話ではありますが、たまには失敗するのです^^;

スイッチを思い切り軽くしようと思い、実はまず次のキーパッドでトライしました。

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

このキーパッドは裏の剥離紙をはがすと、貼り付け面がこうなっています。

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

このパッドのリードフィルムは長すぎて邪魔です。120度ていど折りまげても接続には問題ないことを確認し、もう少しだけ折って蛇腹の形にたたみこんで、小ボックスにとりつけてみました。

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

なかなか小さくて薄くスマートです。箱は秋月で扱っている小さなものです。裏から見ると次。

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

これを試してみたところ、スイッチのノイズが大。そこでチャタリング許容時間を伸ばしたら一見問題なさそうでした。

ところがです。1つのキーが効かないのです。調べたら、なんとリードフィルム内で断線してます。いくら現代のキーパッドでも、こんな折りたたみ方をしたらやっぱりだめですねえ。実は折りたたむのも、ヒートガンを少し使ったりして結構大変でした。それではあたりまえでしょうね。

というわけで、長いチャタリングに耐えるプログラムテストの役割は果たしたのでした^^;

 

話を戻して、肝心のZoom会議はというと、会議中に複数のキーからなるショートカットが使える人はよほど器用な方だと思います。たった4キーであっても、よく使うオンオフ操作ボタンがあると、操作全体がとても楽です。とくにホストの場合はめっちゃ楽。

 

さて、このシリーズ記事*の最初に挑戦したUNOは、そのうちにFlipで元のUNOに戻すことにするかもしれません。後で作った2つの装置を暫らく使い続けるわけなので。

ということで、今回のシリーズのまとめはこのへんで終わりたいと思います。

最後までご覧頂き有難うございました。

 

*このシリーズ記事のバックナンバーは次です(インデックスが整ってなくてすみません)。 

Zoom用かんたん操作ボタンをArduino-UNOで作る(その1) - 勝手な電子工作・

Zoom用かんたん操作ボタンをArduino-UNOで作る(その2)やったね! - 勝手な電子工作・・

Zoom会議用かんたん操作ボタンをArduinoで作る(≒その3) - 勝手な電子工作・・

 

© 2020 Akira Tominaga, All rights reserved.