物理的なボタンまたはスイッチを含むArduinoプロジェクトを操作する場合、開発者が直面する一般的な課題の1つは、バウンスを扱うことです。スイッチバウンスは、複数の意図しないトリガーにつながる可能性があり、プロジェクトで不安定な動作を引き起こす可能性があります。このブログ投稿では、バウンスが何であるか、なぜ問題があるのかを掘り下げ、スイッチを撤回するための効果的な方法を探求し、Arduinoアプリケーションで信頼できる正確な入力測定値を確保します。
スイッチバウンスの理解
プッシュボタンなどの機械スイッチは、ユーザー入力のArduinoプロジェクトで広く使用されています。ただし、これらのスイッチは、押したり解放されたりしたときに常に連絡を取り合わせてきれいにするとは限りません。代わりに、彼らは「跳ね返る」傾向があり、沈殿する前に数回接続を急速に作り、破壊します。この現象は、スイッチバウンスとして知られています。
スイッチが跳ね返ると、Arduinoはそれを複数の迅速なプレスまたは放出と解釈し、複数のLEDフラッシュ、不安定なモーターの動き、センサーからの不安定な測定値などの意図しない動作につながる可能性があります。デバウンドは、これらの迅速で意図しない信号を除外するプロセスであり、各物理アクションが単一のクリーン入力信号に対応することを確認します。
スイッチを飾る方法
スイッチをデバウンドするには、ハードウェアのデバウニングとソフトウェアのデバウニングの2つの主要な方法があります。各方法には利点とユースケースがあり、時には最適な結果を得るために組み合わされることもあります。
1。ハードウェアのデバウンシング
ハードウェアのデバウンスには、物理コンポーネントを使用してスイッチ信号を安定させることが含まれます。最も一般的なハードウェアアプローチは、抵抗器、コンデンサ、または特殊なデバウンスICを利用しています。
RC(抵抗器 - キャパシタ)デバウニング
RC回路は、バウンスするスイッチによって引き起こされる急速な遷移を滑らかにすることができます。これがあなたがそれをセットアップする方法です:
/* RC Debounce Circuit */
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
このセットアップでは、抵抗器とコンデンサがボタンと直列に接続されています。ボタンを押すと、コンデンサが電荷を充電し、電圧を滑らかにし、誤ったトリガーを引き起こす可能性のある急速な変動を防ぎます。
2。ソフトウェアのデバウンド
ソフトウェアのデバウニングは、バウンスによって引き起こされる信号の急速な変化をフィルタリングするロジックを実装することにより、Arduinoコードで処理されます。この方法は柔軟性があり、追加のハードウェアコンポーネントは必要ありません。
ソフトウェアのデバウンスの例
Arduinoでデバウニングするソフトウェアを実装する方法の簡単な例を次に示します。
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
int buttonState; // Current state of the button
int lastButtonState = LOW; // Previous state of the button
unsigned long lastDebounceTime = 0; // Last time the button state changed
unsigned long debounceDelay = 50; // Debounce time in milliseconds
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
}
lastButtonState = reading;
}
このコードで:
- プログラムは、ボタンの現在の状態を読み取ります。
- 状態が最後の読み取りから変更された場合、デバウンスタイマーをリセットします。
- 国家がデバウンス遅延(この場合は50ミリ秒)よりも長く一貫している場合にのみ、プログラムは新しい状態を有効であると受け入れ、それに基づいて行動します。
3.デバウンスにライブラリを使用します
より複雑なプロジェクトの場合、またはデバウンスを簡素化するには、次のような専用ライブラリを使用できます バウンス 図書館。ライブラリは、デバウンスロジックを処理し、プロジェクトの他の側面に集中できるようにします。
バウンスライブラリを使用した例
まず、Arduino Library Managerを介してBounce Libraryをインストールします。次に、次のコードを使用します。
#include
const int buttonPin = 2;
const int ledPin = 13;
Bounce debouncer = Bounce();
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
debouncer.attach(buttonPin);
debouncer.interval(25); // Debounce interval in milliseconds
}
void loop() {
debouncer.update();
if (debouncer.fell()) { // When button is pressed
digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}
}
このアプローチは、デバウンスロジックを簡素化し、コードをクリーンにし、保守しやすくします。
適切なデバウンド方法を選択します
ハードウェアとソフトウェアのデバウニングの選択は、特定のニーズと制約に依存します。
- ハードウェアのデバウンド: ソフトウェアのオーバーヘッドを最小限に抑えたり、複数のスイッチを使用したりするときに最小限に抑えたいプロジェクトに最適です。マイクロコントローラーに到達する前に信号がきれいになることを保証します。
- ソフトウェアのデボンシング: 特にいくつかのボタンを備えた単純なプロジェクトでは、より柔軟で費用対効果が高くなります。これにより、コードを介してデバウンスタイミングを簡単に調整できます。
- ライブラリベースのデバウニング: 複雑なプロジェクトに最適な場合、または時間を節約してホイールの再発明を避けたい場合。ライブラリは、堅牢でテストされたデバウンスソリューションを提供します。
デバウンドスイッチのベストプラクティス
- プルアップまたはプルダウン抵抗を使用します。 プルアップまたはプルダウン抵抗を使用して、ボタン入力が既知の状態にあることを確認してください。これにより、フローティング入力が防止され、ノイズが減少し、偽トリガーが削減されます。
- 一貫したデバウンスタイミング: ハードウェアまたはソフトウェアのデバウンドを使用するかどうかにかかわらず、一貫したdebounce間隔を維持して、さまざまなボタンや条件で信頼できるパフォーマンスを確保します。
- 必要に応じてメソッドを組み合わせます。 高感度のアプリケーションについては、ハードウェアとソフトウェアの両方のデバウニングを組み合わせて、最高の信頼性を実現することを検討してください。
結論
デバウンドスイッチは、ユーザーの入力を含む信頼できるArduinoプロジェクトを開発する上で重要なステップです。ハードウェアソリューション、ソフトウェアアルゴリズム、既存のライブラリを活用するかどうかにかかわらず、効果的なデバウンスメカニズムを実装すると、誤ったトリガーや不安定な行動に対処することのフラストレーションから救われます。スイッチの跳ね返りの原則を理解し、適切なデバウンド技術を適用することにより、Arduinoの作品のパフォーマンスと信頼性を高めることができます。