2022/04/06

Digisparkでマクロパッドを作った: オンライン会議向けのマイクミュートやカメラのON/OFF操作デバイス

概要

Digispark互換ボードを使用してマクロパッドを作成しました. このマクロパッドはPCにはUSBキーボードとして認識され,各タクトスイッチを押下すると,プログラムで予め設定したキーボード操作がPCに対して実行されます.タクトスイッチは2つしかありませんが,短押しと長押しの使い分けも可能です. 例えばZoomやMicrosoft Teamsなどのオンライン会議アプリケーションのショートカットキーを設定しておけば,ワンタッチでマイクのミュートをON/OFFすることができます.

Digisparkで作成したマクロパッド (電源ON時)

PCにUSBケーブルで接続するとDigispark上の電源確認用の赤色LEDとP1に接続された赤色LEDおよび,P1に外付けした青色LEDが点灯します. P1に接続されたLEDは,ゆっくりと輝度を変化させながら点滅します.

Digisparkで作成したマクロパッド (電源OFF時)

開発環境

DigisparkはAttiny85を搭載した小型マイコンボードです. USBによるプログラム転送および通信が可能です. Arduino IDEを使用して開発できます. 今回は数年前にAitendoで処分価格で販売されていたDigispark互換ボードを使用しました.

Digispark ATTiny85マイコンモジュール [M8520SU-MCUM]
Arduino IDE Arduino 1.8.19
Arduino Boards Manager Digistump AVR Boards: Digispark (Default - 16.5mhz)
Arduino Library: FastLED Version 3.5.0
Arduino Library: OneButton Version 2.0.4

Digisparkのセットアップは下記を参照してください.

UbuntuでDigisparkを認識しない場合は,下記を参照してください.

回路

回路図

部品点数は非常に少ないです. Digisparkのピン配置については,公式Webページを参照してください.

回路図

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
SW1, SW2 タクトスイッチ 各社 2 30円 (互換品)
LED1 LED 各社 青色 1 18円 (互換品)
R1 炭素皮膜抵抗 各社 1/4W 1kΩ 1 1円 (互換品)
その他 ユニバーサル基板, スズメッキ線など 適量

作成例

マクロパッドの基板

エンクロージャ

エンクロージャ(ケース)は,作成した基板に合わせて3Dプリンタで出力しました. モデリング環境は下表のとおりです.ソフトウェアは全てフリーウェアです. FreeCADでモデリングしたものをSTLでエクスポートし,Ultimaker CuraでスライスしてGコードを生成しています.

OS Ubuntu 20.04.4 LTS
FreeCAD 0.18.4
Ultimaker Cura 4.11.0
FreeCADによるマクロパッドのエンクロージャのモデリング

ソースコード

オリジナルソースコード

GitHub Gistにて公開されている下記のソースコードを改変して使用しました.Zoomのミュートボタンとして使用するためのキーボード操作が設定されています.

なお,Zoomのショートカットキー一覧は下記で確認できます.

タクトスイッチに割り当てるキーボード操作のカスタマイズ

私はMicrosoft Teamsで使用したかったため,下記を参照してキーボード操作の設定を変更しました.

ほとんどのキーはDigiKeyboardライブラリに定義されていますが,定義されていないキーもあります.定義がない場合は,下記資料のTable 12: Keyboard/Keypad Pageを参照して定義する必要があります.

Microsoft Teams向けに改変したソースコードは下記です.1つのタクトスイッチはマイクミュートのON/OFF操作,もう1つのタクトスイッチはカメラのON/OFF操作に割り当てました.

オンライン会議アプリケーションのほかにも,さまざまなアプリケーションのショートカットキーに割り当てることが可能です.例えば,下記のプラグインと組み合わせることでGoogle Chromeのタブのミュート操作もできました.

2022/03/26

NFSマウント後にDockerサービスが起動するように設定する

概要

私はDockerコンテナにdocker runコマンドの-v, --volumeコマンドでNFS上のディレクトリをマウントしています. この状態でOSを再起動すると,DockerサービスがNFSのマウント前に起動してしまい,Dockerコンテナが正常にrestartできない問題が発生していました. 本記事ではこの問題の解決方法として,systemdのdrop-inファイルを使用して,NFSがマウントされるまでDockerサービスが起動しないように設定する方法をメモしておきます.

本記事の解決方法に行き着くにあたっては,下記の記事が参考になりました.

私の開発環境は下記のとおりです.

OS Ubuntu 20.04.4 LTS (amd64)
Docker version 20.10.14, build a224086

NFSクライアントの設定

/etc/fstabには下記のように設定しています.systemdによるリモートファイルシステムの自動マウントの設定です.

設定変更した場合は,OSの再起動もしくはsudo mount /mnt/nas/dataでNFSをマウントします.

下記のコマンドで/mnt/nas/dataのマウントに対応するsystemdユニットを探します.ディレクトリパスのスラッシュ (/)をハイフン (-)に置き換えたものになっているようでした.

Dockerサービスの設定

drop-inファイルを格納するディレクトリを作成して,テキストエディタでdrop-inファイルを新規作成します.

drop-inファイル,wait-for-nfs.confには下記のように設定を記述します. 設定の詳しい解説については,概要に記載した参考記事をご覧ください.

Dockerサービスの再起動と動作確認

Dockerサービスを再起動します.Drop-Inの項目で,drop-inファイルを認識しているか確認します. 問題がなければ,OSを再起動した後は,NFSがマウントされてからDockerサービスが起動するようになっています.

2022/03/02

KATO 103系を増備しました

概要

2022年2月25日にKATOからウグイス色とスカイブルー色の103系が発売されました. 私は以前販売されていた「10-311 新103系 ブルー 4両セット」を持っていますが,今回の製品はこれらの一部仕様やパッケージを変更したものという認識です. この4両セットに増結する車両が欲しいと思っていたので,今回は「10-1744A 103系〈スカイブルー〉 中間車3両セット」を購入しました. 色の表記がブルーとスカイブルーで異なりますが,どちらも同じ色を指しています. ここでは,車両以外に購入した関連製品についてメモしておきます.

今回の製品に含まれる各車両の仕様は,下記のPDFファイルで確認できます.製品に添付されている説明書のPDFファイルです.

10-311 新103系 ブルー 4両セット

旧製品の各車両の仕様を下表にまとめます.

所属表記は「関スイ」,室内灯の取り付けにも対応しています.

旧製品が販売されていた頃の室内灯は11-204 (11-206) 新室内灯セットしかなく,これは光源がLEDではなく麦球でした. 互換性があるため,現行の11-211 (11-212) LED室内灯クリアも取り付け可能です.

旧製品では1両目と4両目の車両番号が一緒ですね.

車両 車両品番 品名 車両番号 標準装備
1両目 4001-1 クハ103ATC クハ103-786 ヘッド/テールライト点灯
2両目 4002-1 モハ102 モハ102-856
3両目 4003-1 モハ103 モハ103-699 モーター付き動力車
4両目 4001-1 クハ103ATC クハ103-786 ヘッド/テールライト点灯
関連製品

今回,中間車3両セットの購入を契機に揃えたものを紹介します. リンクはAmazon.co.jpもしくは記事作成時点で購入可能な通販サイトの商品ページへのリンクです.

KATOカプラー以外はまだ取り付けできていないので,取り付けしたら紹介する予定です.

2022/02/26

NVIDIA DeepStreamの推論結果をRedisに送信するサンプルアプリケーションの実行環境を構築する

概要

NVIDIA DeepStream SDKには,推論結果をサーバに送信するためのGst-nvmsgbrokerプラグインが用意されています. このGst-nvmsgbrokerプラグインはRedisのほか,プロトコルアダプタライブラリを使用することで,Kafka,Azure IoTやAMQPなどの各種プロトコルに対応します.

Gst-nvmsgbrokerプラグインを使用したサンプルアプリケーションとプロトコルアダプタライブラリはいくつか用意されていますが,これらのライブラリには各種サーバへの接続方法の記載はあれど,各種サーバの構築方法は紹介されていません. 私はRedisも含めてデータベースの構築や運用の経験がなかったので,サンプルアプリケーションを実行するまでに結構時間がかかってしまいました. そこで本記事では,私が構築したNVIDIA DeepStreamの推論結果をRedisに送信するサンプルアプリケーションの実行環境について紹介します.

本記事で紹介する実行環境は,GitHubで公開しています.See README.md for a quick start in English.

私の開発環境は下記のとおりです.

OS Ubuntu 20.04.3 LTS (amd64)
GPU GeForce GTX 1070 Ti
Driver Version 510.47.03
CUDA Version 11.6
Docker version 20.10.12, build e91ed57
docker-compose version 1.29.2, build 5becea4c
DeepStream nvcr.io/nvidia/deepstream:6.0-devel
Gst-nvmsgbrokerプラグインを使用したサンプルアプリケーション

列挙しておきます.非公式のものも含めて他にもある場合はコメントで教えていただけると幸いです. この記事ではC実装のdeepstream-test4を取り上げますが,C実装のdeepstream-test5やPython実装のdeepstream-test4も今回構築した実行環境で試すことができます.

実行環境の構成

実行環境はdocker-compose.ymlにまとめています.3つのDockerコンテナが起動します.

  • redis
    • RedisのDockerコンテナです
  • redisinsight
    • ウェブブラウザからアクセスして使用する,RedisのGUIツール,RedisInsightのDockerコンテナです.必須ではありませんが,サンプルアプリケーションの動作確認に便利です
  • nvds
    • DeepStreamのDockerコンテナです.C実装のdeepstream-test4のビルド済みバイナリとソースコードも含まれています
実行方法
  1. GitHubからdocker-compose.ymlをダウンロードします.
  2. Dockerコンテナを起動します.初回はDockerイメージのダウンロードがあり起動に時間を要する場合があります
  3. Redisが使用できるかどうか確認します.テストデータの登録と取得を行います
  4. テストデータの登録結果をRedisInsightで確認します
    • ウェブブラウザで http://localhost:8001 にアクセスします
    • 「EULA AND PRIVACY SETTINGS」が表示されたら,内容にしたがってCONFIRMを押下します
    • RedisInsightのスクリーンショット
    • Redisに接続します.「I already have a database」を選択します
    • RedisInsightのスクリーンショット
    • 「Connect to a Redis Database」を選択します
    • RedisInsightのスクリーンショット
    • 下図のように入力し,ADD REDIS DATABASEを押下します
    • RedisInsightのスクリーンショット
    • Redisデータベース,localが追加されました.localを選択します
    • RedisInsightのスクリーンショット
    • 左のメニューからBrowserを選択すると,testKeyが登録されていることがわかります.なお下図では他にds-metaが登録されていますが,これは以降の手順でサンプルアプリケーションを実行した後で登録されるものです
    • RedisInsightのスクリーンショット
  5. サンプルアプリケーションを実行します.入力動画はDockerイメージに含まれるサンプル動画を使用します.実行中は物体検出結果を表示するウィンドウが表示され,自動的に終了します
  6. 推論結果がRedisに送信されていることをCUIで確認します."ds-meta"のKeyが増えています
  7. 推論結果がRedisに登録されていることをRedisInsightで確認します
    • ウェブブラウザで http://localhost:8001 にアクセスし,Redisデータベースのlocalを選択します
    • 左のメニューからStreamsを選択すると,ds-metaが登録されていることがわかります.metadataに推論結果が含まれています
    • RedisInsightのスクリーンショット
関連プロジェクト

推論結果の送信先としてRedisではなくKafkaを使用する場合の実行環境も構築しました.下記で公開しています.

製品紹介