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.
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.
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.
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.
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.
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.