Come Eliminare Il Rimbalzo Dei Contatti Quando Si Collega Un Pulsante Ad Arduino

Sommario:

Come Eliminare Il Rimbalzo Dei Contatti Quando Si Collega Un Pulsante Ad Arduino
Come Eliminare Il Rimbalzo Dei Contatti Quando Si Collega Un Pulsante Ad Arduino

Video: Come Eliminare Il Rimbalzo Dei Contatti Quando Si Collega Un Pulsante Ad Arduino

Video: Come Eliminare Il Rimbalzo Dei Contatti Quando Si Collega Un Pulsante Ad Arduino
Video: Tre modi per collegare un pulsante ad Arduino #17 2024, Novembre
Anonim

Abbiamo già esaminato il collegamento di un pulsante all'Arduino e toccato la questione dei contatti "rimbalzanti". Questo è un fenomeno molto fastidioso che provoca pressioni ripetute dei pulsanti e rende difficile la gestione programmatica dei clic sui pulsanti. Parliamo di come sbarazzarsi del rimbalzo del contatto.

Effetto rimbalzo del contatto
Effetto rimbalzo del contatto

Necessario

  • -Arduino;
  • - pulsante tattile;
  • - resistore con un valore nominale di 10 kOhm;
  • - Diodo ad emissione luminosa;
  • - fili di collegamento.

Istruzioni

Passo 1

Il rimbalzo dei contatti è un fenomeno comune negli interruttori meccanici, pulsanti, interruttori a levetta e relè. A causa del fatto che i contatti sono generalmente realizzati in metalli e leghe che hanno elasticità, quando sono fisicamente chiusi, non stabiliscono immediatamente una connessione affidabile. In un breve periodo di tempo, i contatti si chiudono più volte e si respingono. Di conseguenza, la corrente elettrica assume un valore stazionario non istantaneamente, ma dopo una serie di alti e bassi. La durata di questo effetto transitorio dipende dal materiale del contatto, dalle dimensioni e dal design. L'illustrazione mostra un tipico oscillogramma quando i contatti del pulsante tattile sono chiusi. Si può vedere che il tempo dal momento del passaggio allo stato stazionario è di diversi millisecondi. Questo si chiama "rimbalzo".

Questo effetto non è evidente nei circuiti elettrici per controllare l'illuminazione, i motori o altri sensori e dispositivi inerziali. Ma nei circuiti in cui c'è una lettura e un'elaborazione rapida delle informazioni (dove le frequenze sono dello stesso ordine degli impulsi di "rimbalzo" o superiori), questo è un problema. In particolare, l'Arduino UNO, che opera a 16 MHz, è eccellente nel catturare il rimbalzo dei contatti accettando una sequenza di uno e zero invece di un singolo interruttore da 0 a 1.

Rimbalzo del contatto quando si preme un pulsante
Rimbalzo del contatto quando si preme un pulsante

Passo 2

Vediamo come il rimbalzo del contatto influisce sul corretto funzionamento del circuito. Colleghiamo il pulsante dell'orologio ad Arduino usando un circuito di resistori pull-down. Premendo il pulsante, accenderemo il LED e lo lasceremo acceso fino a quando non verrà premuto nuovamente il pulsante. Per chiarezza, colleghiamo un LED esterno al pin digitale 13, sebbene si possa fare a meno di quello integrato.

Collegamento di un pulsante a un Arduino utilizzando un circuito resistore pull-up
Collegamento di un pulsante a un Arduino utilizzando un circuito resistore pull-up

Passaggio 3

Per svolgere questo compito, la prima cosa che viene in mente:

- ricordare lo stato precedente del pulsante;

- confrontare con lo stato attuale;

- se lo stato è cambiato, allora cambiamo lo stato del LED.

Scriviamo uno schizzo del genere e carichiamolo nella memoria di Arduino.

Quando il circuito è acceso, l'effetto del rimbalzo del contatto è immediatamente visibile. Si manifesta nel fatto che il led non si accende subito dopo aver premuto il pulsante, oppure si accende e poi si spegne, oppure non si spegne subito dopo aver premuto il pulsante, ma rimane acceso. In generale, il circuito non funziona stabilmente. E se per un'attività con l'accensione del LED questo non è così critico, allora per altri compiti più seri, è semplicemente inaccettabile.

Schizzo della pressione del pulsante di elaborazione senza tenere conto del rimbalzo del contatto
Schizzo della pressione del pulsante di elaborazione senza tenere conto del rimbalzo del contatto

Passaggio 4

Cercheremo di sistemare la situazione. Sappiamo che il rimbalzo del contatto si verifica entro pochi millisecondi dopo la chiusura del contatto. Aspettiamo, diciamo, 5 ms dopo aver modificato lo stato del pulsante. Questa volta per una persona è quasi un istante e la pressione di un pulsante da parte di una persona di solito richiede molto più tempo - diverse decine di millisecondi. E Arduino funziona alla grande con periodi di tempo così brevi e questi 5 ms gli consentiranno di interrompere il rimbalzo dei contatti dalla pressione di un pulsante.

In questo sketch dichiareremo la procedura debounce() ("bounce" in inglese è solo "bounce", il prefisso "de" indica il processo inverso), al cui input forniamo lo stato precedente del pulsante. Se la pressione di un pulsante dura più di 5 msec, allora è davvero una pressione.

Rilevando la pressione, cambiamo lo stato del LED.

Carica lo schizzo sulla scheda Arduino. Adesso è tutto molto meglio! Il pulsante funziona a colpo sicuro, quando viene premuto, il LED cambia stato, come volevamo.

Schizzo dell'elaborazione della pressione di un pulsante, tenendo conto del rimbalzo del contatto
Schizzo dell'elaborazione della pressione di un pulsante, tenendo conto del rimbalzo del contatto

Passaggio 5

Funzionalità simili sono fornite da librerie speciali come la libreria Bounce2. Puoi scaricarlo dal link nella sezione "Fonti" o sul sito https://github.com/thomasfredericks/Bounce2. Per installare la libreria, posizionala nella directory delle librerie dell'ambiente di sviluppo Arduino e riavvia l'IDE.

La libreria "Bounce2" contiene i seguenti metodi:

Bounce() - inizializzazione dell'oggetto "Bounce";

void interval (ms) - imposta il tempo di ritardo in millisecondi;

void attach (numero pin) - imposta il pin a cui è collegato il pulsante;

int update() - aggiorna l'oggetto e restituisce true se lo stato del pin è cambiato, false in caso contrario;

int read() - legge il nuovo stato del pin.

Riscriviamo il nostro schizzo usando la libreria. Puoi anche ricordare e confrontare lo stato passato del pulsante con quello attuale, ma semplifichiamo l'algoritmo. Quando il pulsante viene premuto, conteremo le pressioni e ogni pressione dispari accenderà il LED e ogni pressione pari lo spegnerà. Questo schizzo sembra conciso, facile da leggere e facile da usare.

Consigliato: