Kun työskentelet Arduino -projektien kanssa, joihin liittyy fyysisiä painikkeita tai kytkimiä, yksi yhteinen haaste kehittäjät kohtaavat kytkimen pomppimisen. Vaihda pomppiminen voi johtaa useisiin tahattomiin liipaisimiin, mikä aiheuttaa epätasaista käyttäytymistä projekteissasi. Tässä blogiviestissä pohdimme, mikä kytkin pomppii, miksi se on ongelmallista, ja tutkimme tehokkaita menetelmiä kytkimien poistamiseksi, varmistamalla luotettavia ja tarkkoja syöttölukemia Arduino -sovelluksissasi.
Ymmärtäminen kytkin pomppimista
Mekaanisia kytkimiä, kuten painostonia, käytetään laajasti Arduino-projekteissa käyttäjän syöttöihin. Nämä kytkimet eivät kuitenkaan aina tee ja rikkoa kosketusta puhtaasti painettaessa tai vapautettaessa. Sen sijaan heillä on taipumus "pomppia", tekemällä nopeasti yhteyden useita kertoja ennen asettua. Tämä ilmiö tunnetaan kytkimen pomppimiseksi.
Kun kytkin pomppii, Arduino voi tulkita sitä useina nopeaina puristimina tai vapautuksina, mikä johtaa tahattomiin käyttäytymiseen, kuten useiden LED -välähdyksiin, virheellisiin moottoriliikkeisiin tai anturien epämääräisiin lukemiin. Vetoaminen on näiden nopeiden, tahattomien signaalien suodattamisprosessi varmistaakseen, että kukin fyysinen toiminta vastaa yhtä puhdasta tulosignaalia.
Menetelmät kytkimistä
Kytkimien poistamiseen on kaksi ensisijaista menetelmää: laitteistojen vähentäminen ja ohjelmistojen deborointi. Jokaisella menetelmällä on etuja ja käyttötapauksiaan, ja joskus ne yhdistetään jopa optimaalisiin tuloksiin.
1. Laitteiden deboring
Laitteistojen vähentäminen sisältää fyysisten komponenttien käytön kytkimen signaalin vakauttamiseksi. Yleisimmät laitteistolähestymistavat hyödyntävät vastuksia, kondensaattoreita tai erikoistuneita Debounce ICS: ää.
RC (vastus-capacitor) Debouncing
RC -piiri voi tasoittaa kytkimen pomppimisen aiheuttamat nopeat siirtymät. Näin voit asettaa sen:
/* 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);
}
}
Tässä asennuksessa vastus ja kondensaattori on kytketty sarjaan painikkeella. Kun painiketta painetaan, kondensaattori latautuu, tasoittaa jännitettä ja estää nopeat vaihtelut, jotka voivat aiheuttaa vääriä laukaisevia tekijöitä.
2. Ohjelmistokeskustelu
Ohjelmistokeskustelu käsitellään Arduino -koodissasi toteuttamalla logiikkaa, joka suodattaa kytkimen pomppimisen aiheuttamat nopeat signaalin muutokset. Tämä menetelmä on joustava eikä vaadi lisälaitteistokomponentteja.
Esimerkki ohjelmistojen deboringista
Tässä on yksinkertainen esimerkki siitä, kuinka ohjelmistojen deborcing toteuttaa Arduinossa:
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;
}
Tässä koodissa:
- Ohjelma lukee painikkeen nykytilaa.
- Jos valtio on muuttunut viimeisestä lukemisesta, se nollaa Debance -ajastimen.
- Vain jos valtio pysyy johdonmukaisena kauemmin kuin deborisoivan viive (tässä tapauksessa 50 millisekuntia), ohjelma hyväksyy uuden valtion pätevänä ja toimii sen perusteella.
3. Kirjastojen käyttäminen debuotointiin
Monimutkaisempiin projekteihin tai vähentämiseen, voit käyttää omistettuja kirjastoja, kuten Pomppia kirjasto. Kirjastot käsittelevät dieto -logiikkaa, jonka avulla voit keskittyä projektisi muihin näkökohtiin.
Esimerkki Bounce -kirjastolla
Asenna ensin Bounce -kirjasto Arduino Library Manager -sovelluksen kautta. Käytä sitten seuraavaa koodia:
#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
}
}
Tämä lähestymistapa yksinkertaistaa debanisoivan logiikan, mikä tekee koodinpuhdistuksesta ja ylläpidettävemmäksi.
Oikean Debouncing -menetelmän valitseminen
Valinta laitteistojen ja ohjelmistojen deborcingin välillä riippuu erityistarpeistasi ja rajoituksista:
- Laitteistojen deboring: Ihanteellinen projekteihin, joissa haluat minimoida ohjelmistojen yleiskustannukset tai työskennellessäsi useiden kytkimien kanssa. Se varmistaa, että signaalit ovat puhtaita ennen kuin ne saavuttavat mikrokontrollerin.
- Ohjelmiston debounging: Joustavampi ja kustannustehokkaampi, etenkin yksinkertaisilla projekteilla, joissa on muutamalla painikkeella. Sen avulla voit säätää dekoivan ajoitusta helposti koodin avulla.
- Kirjastopohjainen Debouncing: Paras monimutkaisille projekteille tai kun haluat säästää aikaa ja välttää pyörän keksimistä. Kirjastot tarjoavat vankkoja ja testattuja Debounce -ratkaisuja.
Parhaat käytännöt vaihtamiskytkimille
- Käytä pull-up- tai vetävää vastuksia: Varmista, että painikkeen tulot ovat tunnetussa tilassa pull-up- tai alasvetovastusten avulla. Tämä estää kelluvia tuloja, vähentäen kohinaa ja vääriä liipaisimia.
- Johdonmukainen dekoiton ajoitus: Pidä johdonmukaiset debount -väliavut käyttämällä laitteistoa tai ohjelmistojen vähentämistä luotettavan suorituskyvyn varmistamiseksi eri painikkeiden ja olosuhteiden välillä.
- Yhdistä tarvittaessa menetelmät: Erittäin arkaluontoisissa sovelluksissa harkitse sekä laitteistojen että ohjelmistojen vähentämisen yhdistämistä korkeimman luotettavuuden saavuttamiseksi.
Johtopäätös
Debouncing -kytkimet ovat ratkaiseva askel luotettavien Arduino -projektien kehittämisessä, joihin liittyy käyttäjän panoksia. Valitsetko laitteistoratkaisuja, ohjelmistoalgoritmeja tai hyödyntämällä olemassa olevia kirjastoja, tehokkaiden debounssimekanismien toteuttaminen säästää turhautumista väärien liipaisimien ja epämääräisten käyttäytymisten käsittelemisestä. Ymmärtämällä kytkimen pomppimisen periaatteet ja soveltamalla asianmukaisia Debouncing -tekniikoita, voit parantaa Arduino -luomuksesi suorituskykyä ja luotettavuutta.