Πώς να απαλλαγείτε από την αναπήδηση επαφών κατά τη σύνδεση ενός κουμπιού στο Arduino

Πίνακας περιεχομένων:

Πώς να απαλλαγείτε από την αναπήδηση επαφών κατά τη σύνδεση ενός κουμπιού στο Arduino
Πώς να απαλλαγείτε από την αναπήδηση επαφών κατά τη σύνδεση ενός κουμπιού στο Arduino

Βίντεο: Πώς να απαλλαγείτε από την αναπήδηση επαφών κατά τη σύνδεση ενός κουμπιού στο Arduino

Βίντεο: Πώς να απαλλαγείτε από την αναπήδηση επαφών κατά τη σύνδεση ενός κουμπιού στο Arduino
Βίντεο: Αντιδράσεις και απελπισία από τους επαγγελματίες σε όλη την Ελλάδα 2024, Δεκέμβριος
Anonim

Έχουμε ήδη εξετάσει τη σύνδεση ενός κουμπιού στο Arduino και αγγίξαμε το θέμα των επαφών "αναπήδησης". Αυτό είναι ένα πολύ ενοχλητικό φαινόμενο που προκαλεί επαναλαμβανόμενα πατήματα κουμπιών και δυσκολεύει τον προγραμματισμό των κλικ στα κουμπιά. Ας μιλήσουμε για το πώς να απαλλαγούμε από την αναπήδηση επαφών.

Εφέ αναπήδησης επαφών
Εφέ αναπήδησης επαφών

Απαραίτητη

  • - Arduino;
  • - κουμπί αφής
  • - αντίσταση με ονομαστική τιμή 10 kOhm,
  • - Δίοδος εκπομπής φωτός;
  • - καλώδια σύνδεσης.

Οδηγίες

Βήμα 1

Η ανάκαμψη επαφής είναι ένα συνηθισμένο φαινόμενο σε μηχανικούς διακόπτες, μπουτόν, διακόπτες εναλλαγής και ρελέ. Λόγω του γεγονότος ότι οι επαφές γίνονται συνήθως από μέταλλα και κράματα που έχουν ελαστικότητα, όταν είναι φυσικά κλειστά, δεν δημιουργούν αμέσως αξιόπιστη σύνδεση. Μέσα σε σύντομο χρονικό διάστημα, οι επαφές κλείνουν πολλές φορές και απωθούν μεταξύ τους. Ως αποτέλεσμα, το ηλεκτρικό ρεύμα παίρνει μια τιμή σταθερής κατάστασης όχι άμεσα, αλλά μετά από μια σειρά από σκαμπανεβάσματα. Η διάρκεια αυτού του παροδικού εφέ εξαρτάται από το υλικό επαφής, το μέγεθος και το σχεδιασμό. Η εικόνα δείχνει ένα τυπικό παλμογράφο όταν οι επαφές του κουμπιού αφής είναι κλειστές. Μπορεί να φανεί ότι ο χρόνος από τη στιγμή της μετάβασης στη σταθερή κατάσταση είναι αρκετά χιλιοστά του δευτερολέπτου. Αυτό ονομάζεται "αναπήδηση".

Αυτό το φαινόμενο δεν είναι αισθητό σε ηλεκτρικά κυκλώματα για τον έλεγχο φωτισμού, κινητήρων ή άλλων αδρανειακών αισθητήρων και συσκευών. Αλλά σε κυκλώματα όπου υπάρχει γρήγορη ανάγνωση και επεξεργασία πληροφοριών (όπου οι συχνότητες είναι της ίδιας τάξης με τους παλμούς "αναπήδησης" ή υψηλότερες), αυτό είναι ένα πρόβλημα. Συγκεκριμένα, το Arduino UNO, το οποίο λειτουργεί στα 16 MHz, είναι εξαιρετικό στη λήψη αναπήδησης επαφών, αποδεχόμενος μια ακολουθία αυτών και μηδενικών αντί ενός απλού διακόπτη 0 προς 1.

Επαφή αναπήδησης όταν πατάτε ένα κουμπί
Επαφή αναπήδησης όταν πατάτε ένα κουμπί

Βήμα 2

Ας δούμε πώς η αναπήδηση επαφής επηρεάζει τη σωστή λειτουργία του κυκλώματος. Ας συνδέσουμε το κουμπί ρολογιού στο Arduino χρησιμοποιώντας ένα κύκλωμα αντίστασης προς τα κάτω. Πατώντας το κουμπί, θα ανάψουμε το LED και θα το αφήσουμε μέχρι να πατηθεί ξανά το κουμπί. Για λόγους σαφήνειας, συνδέουμε ένα εξωτερικό LED στον ψηφιακό ακροδέκτη 13, αν και μπορεί να απορριφθεί το ενσωματωμένο.

Σύνδεση κουμπιού σε Arduino χρησιμοποιώντας κύκλωμα αντίστασης pull-up
Σύνδεση κουμπιού σε Arduino χρησιμοποιώντας κύκλωμα αντίστασης pull-up

Βήμα 3

Για να επιτευχθεί αυτό το έργο, το πρώτο πράγμα που έρχεται στο μυαλό:

- θυμηθείτε την προηγούμενη κατάσταση του κουμπιού.

- σύγκριση με την τρέχουσα κατάσταση ·

- εάν η κατάσταση έχει αλλάξει, τότε αλλάζουμε την κατάσταση του LED.

Ας γράψουμε ένα τέτοιο σκίτσο και να το φορτώσουμε στη μνήμη του Arduino.

Όταν το κύκλωμα είναι ενεργοποιημένο, το αποτέλεσμα της επαφής αναπήδησης είναι αμέσως ορατό. Εκδηλώνεται στο γεγονός ότι το LED δεν ανάβει αμέσως μετά το πάτημα του κουμπιού, ή ανάβει και στη συνέχεια σβήνει, ή δεν σβήνει αμέσως μετά το πάτημα του κουμπιού, αλλά παραμένει αναμμένο. Γενικά, το κύκλωμα δεν λειτουργεί σταθερά. Και αν για μια εργασία με ενεργοποίηση της λυχνίας LED αυτό δεν είναι τόσο κρίσιμο, τότε για άλλες, πιο σοβαρές εργασίες, είναι απλώς απαράδεκτο.

Σκίτσο πατήματος κουμπιού επεξεργασίας χωρίς να λαμβάνεται υπόψη η αναπήδηση επαφών
Σκίτσο πατήματος κουμπιού επεξεργασίας χωρίς να λαμβάνεται υπόψη η αναπήδηση επαφών

Βήμα 4

Θα προσπαθήσουμε να διορθώσουμε την κατάσταση. Γνωρίζουμε ότι η ανάκαμψη της επαφής συμβαίνει μέσα σε λίγα χιλιοστά του δευτερολέπτου μετά το κλείσιμο μιας επαφής. Ας περιμένουμε, ας πούμε, 5ms μετά την αλλαγή της κατάστασης του κουμπιού. Αυτή τη φορά για ένα άτομο είναι σχεδόν μια στιγμή και το πάτημα ενός κουμπιού από ένα άτομο διαρκεί συνήθως πολύ περισσότερο - αρκετές δεκάδες χιλιοστά του δευτερολέπτου. Και το Arduino λειτουργεί τέλεια με τόσο σύντομα χρονικά διαστήματα, και αυτά τα 5ms θα του επιτρέψουν να διακόψει την ανάκαμψη των επαφών από το πάτημα ενός κουμπιού.

Σε αυτό το σκίτσο, θα δηλώσουμε τη διαδικασία debounce () ("bounce" στα Αγγλικά είναι απλά "bounce", το πρόθεμα "de" σημαίνει την αντίστροφη διαδικασία), στην είσοδο της οποίας παρέχουμε την προηγούμενη κατάσταση του κουμπιού. Εάν το πάτημα ενός κουμπιού διαρκεί περισσότερο από 5 msec, τότε είναι πραγματικά ένα πάτημα.

Ανιχνεύοντας τον τύπο, αλλάζουμε την κατάσταση του LED.

Ανεβάστε το σκίτσο στον πίνακα Arduino. Όλα είναι πολύ καλύτερα τώρα! Το κουμπί λειτουργεί χωρίς αποτυχία, όταν πατηθεί, το LED αλλάζει κατάσταση, όπως θέλαμε.

Σκίτσο επεξεργασίας ενός κουμπιού, λαμβάνοντας υπόψη την αναπήδηση επαφών
Σκίτσο επεξεργασίας ενός κουμπιού, λαμβάνοντας υπόψη την αναπήδηση επαφών

Βήμα 5

Παρόμοια λειτουργικότητα παρέχεται από ειδικές βιβλιοθήκες όπως η βιβλιοθήκη Bounce2. Μπορείτε να το κατεβάσετε από τον σύνδεσμο στην ενότητα "Πηγές" ή στον ιστότοπο https://github.com/thomasfredericks/Bounce2. Για να εγκαταστήσετε τη βιβλιοθήκη, τοποθετήστε τη στον κατάλογο βιβλιοθηκών του περιβάλλοντος ανάπτυξης Arduino και επανεκκινήστε το IDE.

Η βιβλιοθήκη "Bounce2" περιέχει τις ακόλουθες μεθόδους:

Bounce () - αρχικοποίηση του αντικειμένου "Bounce".

κενό διάστημα (ms) - ορίζει το χρόνο καθυστέρησης σε χιλιοστά του δευτερολέπτου.

void attach (αριθμός pin) - ορίζει τον πείρο στον οποίο είναι συνδεδεμένο το κουμπί.

int update () - ενημερώνει το αντικείμενο και επιστρέφει αληθές εάν η κατάσταση του pin έχει αλλάξει, και ψευδώς διαφορετικά.

int read () - διαβάζει τη νέα κατάσταση του πείρου.

Ας ξαναγράψουμε το σκίτσο μας χρησιμοποιώντας τη βιβλιοθήκη. Μπορείτε επίσης να θυμηθείτε και να συγκρίνετε την προηγούμενη κατάσταση του κουμπιού με την τρέχουσα, αλλά ας απλοποιήσουμε τον αλγόριθμο. Όταν πατηθεί το κουμπί, θα μετρήσουμε τις πιέσεις και κάθε περίεργο πάτημα θα ανάψει το LED και κάθε ομοιόμορφο πάτημα θα το σβήσει. Αυτό το σκίτσο φαίνεται συνοπτικό, εύκολο στην ανάγνωση και εύκολο στη χρήση.

Συνιστάται: