APDahlen Applications Engineer
Arduino Modulino Buttonsモジュールとは何ですか?
Arduino Modulino Buttonsモジュールは、Arduinoの最新のPlug and Make Kitの不可欠なコンポーネントです。 図1に示すように、3つの押ボタンと3つのソフトウェア制御LEDで構成される標準的なユーザーインターフェースを提供しています。
Modulinoのエコシステムは、ハードウェアとソフトウェアの両面から一貫したユーザー体験を提供することで知られています。これは、各Modulinoに搭載された32ビットSTMicroelectronics ARMマイクロコントローラによって実現されています。このマイクロコントローラは、Arduino UNO R4 WiFiのいくつかの機能をModulinoにオフロードします。これにより、ArduinoのプログラマーはQwiicネットワーク上で標準化された通信プロトコルを実装することができます。
図1: 3つの押ボタンと3つの独立制御LEDを搭載したArduino Modulinoボードの画像。左下に32ビットSTM ARMマイクロコントローラが見えます。このModulinoは、Plug and Make Kitのベースにボルトで固定されています。
技術的なヒント: Qwiicは、マイクロコントローラ関連のプロトタイピング用ブレークアウトボードを簡単に接続するための、競合する複数のフォーマットの1つです。また、(条件付きで相互に互換性のある)Stemma QTや、MikroElektronika Clickモジュールにも遭遇するかもしれません。いずれも開発者がブレッドボードなしで接続できるように設計されており、特にピッチの狭い面実装デバイスに有益です。
Arduino Modulino Buttonsに関するソフトウェアの説明
他のすべてのArduino Modulinoボードと同様に、ButtonsはC++オブジェクト指向プログラミング環境のオブジェクトとして実装されています。簡単なコードのリストを以下に示します。Buttonsオブジェクトが構築されていることに注目してください。次の3つのメソッドが利用可能です。
-
update( );このメソッドは、ModulinoからWiFiへのデータ転送を開始するゲッターです。 ボタンの変化が発生したことを示すブール値を返します。 Buttonデータ(ステータス)は、Buttonsオブジェクト内に保持されています。 Buttonデータにアクセスするには、isPressed( )メソッドを使用する必要があります。
-
isPressed( );このメソッドにより、プログラマーはButtonsオブジェクトから個々のButtonデータにアクセスすることができます。Button Aはインデックス0です。
-
setLeds( );このメソッドは、Buttonモジュールの赤色LEDに値を書き込むためのセッターです。A、B、CのLEDそれぞれに対応する3つのパラメータを受け取ります。
#include <Modulino.h>
ModulinoButtons buttons; // Constructor
void setup( ) {
Modulino.begin( );
buttons.begin( );
}
void loop( ) {
if (buttons.update( )) { // Get data from the Modulino and then check for a change
bool btn_A = buttons.isPressed(0); // Pull data from object
bool btn_B = buttons.isPressed(1);
bool btn_C = buttons.isPressed(2);
buttons.setLeds(btn_A, btn_B, btn_C); // Send data to the LEDs
}
}
技術的なヒント: update( )メソッドは、Qwiicネットワークのトラフィックを減らすための賢い方法です。押ボタンのアクティビティを示すブール値を返すため、プログラマーはいつアクションを起こすべきかがわかります。たとえば、前のコードリストでは、ボタンが変更されたときにのみLEDが更新されます。この単純な事実は、I2Cネットワークにモジュールが追加されるにつれてますます重要になります。時間は貴重なリソースであることを忘れないでください。応答性の高いリアルタイムシステムに不可欠なリソースである帯域幅が不足する可能性があります。
Modulino Buttonsのデバウンス方法
マイクロコントローラのプログラマーにとって、スイッチやリレーの接点がボールのように跳ねてから落ち着くという物理的な現象は、扱いが難しいものです。電気的には、この跳ね返りは一連の急激な変化(スパイク)として現れます。高速のデジタル回路では、この跳ね返り信号を複数のスイッチ変化として解釈します。例えば、ボタンが押された回数を数えるルーチンでは、各押下に対して数十回の変化が記録される可能性があります。
Modulino Buzzerプログラマーがデバウンス処理を代行してくれました。このステートメントは、ボタン変更が検出されるたびにトグルするI/Oピンをオシロスコープで監視することで確認できます。このアプリケーションでは、オシロスコープはバウンスのないきれいな信号を示しています。ユーザーがボタンを押してから(押ボタン自体で測定)ピンがトグルするまで、0.5~1ミリ秒の遅延があります。
#include <Modulino.h>
ModulinoButtons buttons; // Constructor
void setup( ) {
Modulino.begin();
buttons.begin();
pinMode(2, OUTPUT);
}
void loop( ) {
static bool X;
if (buttons.update( )) { // Get data from the Modulino and then check for a change
X = !X;
digitalWrite(2, X);
}
}
技術的なヒント: Modulino ButtonsのLEDにはそれぞれ、電流制限用の直列抵抗が必要です。
プルアップ抵抗は各スイッチに必要です。これらのプルアップ抵抗は、外部または、プルアップ抵抗が設定されたマイクロコントローラの内部に配置することができます。外部抵抗は、部品点数が増加するものの、より柔軟な対応が可能です。さらに詳しく検討するには、Arduinoの回路図を参照してください。
通信プロトコル
図1に示されているように、Arduino Modulino製品の多くにはSTM ARMプロセッサが搭載されています。ArduinoライブラリとModulinoのARMマイクロコントローラの両方を完全に制御することで、Arduinoのプログラマーは統一された通信プロトコルを開発しました。フレームのリバースエンジニアリングは各自で行ってください。このテクニックは、Modulino Buzzerチュートリアルで使用されているものと同様です。
おわりに
この短い記事では、レスポンシブなユーザーインターフェースの設計について、その表面をなぞっているに過ぎません。私たちは、Buttonsモジュールの仕組みを探究しましたが、ブロッキングコードを回避するタイミングや方法など、細かい部分については触れていません。例えば、delay( )関数がアクティブになっている場合や、マイクロコントローラが重要なタスクを実行中でビジー状態である場合など、ボタンが押された際にレスポンスを返すのは簡単なことではありません。
ご意見やご質問がございましたら、下記のスペースにコメントを残してください。
ご健闘をお祈りします。
APDahlen
関連情報
関連情報および役立つ情報については、以下のリンクをご参照ください。
著者について
Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことによってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。彼はミネソタ州北部の自宅に戻り、このような記事のリサーチや執筆を楽しんでいます。