Hogyan lehet megfelelően elszámolni a kapcsolókat, hogy elkerüljék az Arduinóban a hamis kiváltókat

Amikor az Arduino projektekkel, amelyek fizikai gombokkal vagy kapcsolókkal foglalkoznak, az egyik közös kihívás fejlesztője a Switch Pouncing kezelésével foglalkozik. A kapcsoló pattogó több nem szándékos triggerhez vezethet, ami szokatlan viselkedést okozhat a projektekben. Ebben a blogbejegyzésben belemerülünk arra, hogy mi a pattogó, miért problematikus, és felfedezzük a kapcsolók elszámolásának hatékony módszereit, biztosítva a megbízható és pontos bemeneti leolvasásokat az Arduino alkalmazásokban.

A kapcsoló visszapattanásának megértése

A mechanikus kapcsolókat, például a nyomógombokat széles körben használják az Arduino projektekben a felhasználói bemenetekhez. Ezek a kapcsolók azonban nem mindig készítik és törik a kapcsolatot, amikor megnyomják vagy elengedik. Ehelyett hajlamosak "ugrálni", a csatlakozás gyorsan elkészítésére és megszakítására, mielőtt letelepedtek. Ezt a jelenséget Switch pattogónak nevezik.

Amikor egy kapcsoló visszapattan, az Arduino több gyors sajtó vagy felszabadulásként értelmezheti azt, ami nem kívánt viselkedéshez vezet, mint például több LED -es villanás, szokatlan motoros mozgások vagy érzékelők szokatlan leolvasása. A debouning a gyors, nem szándékos jelek kiszűrésének folyamata annak biztosítása érdekében, hogy minden fizikai művelet megfeleljen egyetlen, tiszta bemeneti jelnek.

A kapcsolók elszámolásának módszerei

Két elsődleges módszer létezik a kapcsolók elszámolására: a hardver -debouning és a szoftverek debouningja. Minden módszernek megvannak az előnyei és a felhasználási esetek, és néha még az optimális eredmények elérése érdekében is kombinálják őket.

1.

A hardver kioldása magában foglalja a fizikai összetevők használatát a kapcsoló jel stabilizálására. A leggyakoribb hardveres megközelítések ellenállókat, kondenzátorokat vagy speciális elszámolási IC -ket használnak.

RC (ellenállás-kondenzátor)

Az RC áramkör ki tudja simítani a kapcsoló visszapattanása által okozott gyors átmeneteket. Így állíthatja be:


/* 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);
  }
}

Ebben a beállításban az ellenállás és a kondenzátor sorozatban van csatlakoztatva a gombbal. A gomb megnyomásakor a kondenzátor tölti a feszültséget és megakadályozva a gyors ingadozásokat, amelyek hamis kiváltókat okozhatnak.

2.

A szoftver -debouncing -t az Arduino -kódban kezeli azáltal, hogy olyan logikát hajt végre, amely kiszűri a Switch Pouncing által okozott gyors változásokat. Ez a módszer rugalmas, és nem igényel további hardver összetevőket.

Példa a szoftverek kioldására

Íme egy egyszerű példa arra, hogyan lehet végrehajtani az Arduino -ban a szoftver -leírást:


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;
}

Ebben a kódban:

  • A program elolvassa a gomb aktuális állapotát.
  • Ha az állam megváltozott az utolsó olvasathoz képest, akkor visszaállítja a debound időzítőt.
  • Csak akkor, ha az állam hosszabb ideig marad konzisztens, mint a debound késleltetés (ebben az esetben 50 milliszekundum) elfogadja az új államot érvényesnek, és hatnak rajta.

3. Könyvtárak használata a kifogásoláshoz

A bonyolultabb projektekhez vagy a debouning egyszerűsítéséhez használhat dedikált könyvtárakat, mint például a Ugrál könyvtár. A könyvtárak kezelik a debound logikát, lehetővé téve a projekt más aspektusaira összpontosítást.

Példa a Bounce Library használatával

Először telepítse a Bounce könyvtárat az Arduino Könyvtárkezelőn keresztül. Ezután használja a következő kódot:


#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
  }
}

Ez a megközelítés leegyszerűsíti a debound logikát, így a kód tisztább és karbantarthatóbbá válik.

A megfelelő leírási módszer kiválasztása

A hardver és a szoftver -debouning közötti választás az Ön egyedi igényeitől és korlátaitól függ:

  • HARDVER KEZELÉS: Ideális olyan projektekhez, ahol minimalizálni szeretné a szoftvert, vagy ha több kapcsolóval dolgozik. Ez biztosítja, hogy a jelek tisztaak legyenek, mielőtt elérik a mikrovezérlőt.
  • Szoftver -debouning: Rugalmasabb és költséghatékonyabb, különösen az egyszerű projektek esetében, amelyek néhány gombbal vannak. Ez lehetővé teszi, hogy a debound időzítését a kódon keresztül könnyen beállítsa.
  • Könyvtár-alapú elszámolás: A legjobb a komplex projektekhez, vagy ha időt takaríthat meg, és kerülje a kerék feltalálását. A könyvtárak robusztus és tesztelt elszámolási megoldásokat kínálnak.

A kapcsolók kifogásának legjobb gyakorlatai

  • Használjon húzó- vagy legördülő ellenállást: Győződjön meg arról, hogy a gomb bemenetei ismert állapotban vannak-e a pull-up vagy a legördülő ellenállások használatával. Ez megakadályozza a lebegő bemeneteket, a zajcsökkentő zajt és a hamis kiváltókat.
  • Konzisztens elszámolási időzítés: Akár hardver, akár szoftver -leírást használ, tartson fenn következetes elszámolási intervallumokat, hogy biztosítsa a megbízható teljesítményt a különböző gombok és feltételek között.
  • Ha szükséges, kombináljon módszereket: A nagyon érzékeny alkalmazások esetén fontolja meg a hardver és a szoftver kioldásának kombinálását a legnagyobb megbízhatóság elérése érdekében.

Következtetés

A debouncing kapcsolók döntő lépés a megbízható Arduino projektek kidolgozásában, amelyek magukban foglalják a felhasználói bemeneteket. Függetlenül attól, hogy hardvermegoldásokat, szoftver algoritmusokat választ, vagy kihasználja a meglévő könyvtárakat, a hatékony decound mechanizmusok bevezetése megmenti Önt a hamis kiváltókkal és a szokatlan viselkedéssel való kapcsolattartás frusztrációjától. Ha megérti a kapcsoló visszapattanásának elveit és a megfelelő leírási technikák alkalmazását, javíthatja az Arduino alkotásainak teljesítményét és megbízhatóságát.

Hagyj egy megjegyzést

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.