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

ESP32 Capacitive Touch Input Using "Metallic Hole Plugs" for Buttons: 5 Steps (with Pictures)
ESP32 Capacitive Touch Input Using "Metallic Hole Plugs" for Buttons: 5 Steps (with Pictures)

Βίντεο: ESP32 Capacitive Touch Input Using "Metallic Hole Plugs" for Buttons: 5 Steps (with Pictures)

Βίντεο: ESP32 Capacitive Touch Input Using
Βίντεο: Breadboard capacitive touch sensor tutorial 2024, Ιούλιος
Anonim
Image
Image
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Καθώς οριστικοποιούσα αποφάσεις σχεδιασμού για ένα επερχόμενο έργο βασισμένο στο ESP32 WiFi Kit 32 που απαιτούσε είσοδο τριών κουμπιών, ένα αξιοσημείωτο πρόβλημα ήταν ότι το WiFi Kit 32 δεν διαθέτει ένα μόνο μηχανικό κουμπί, αλλά μόνο τρία μηχανικά κουμπιά, για είσοδο. Ωστόσο, το WiFi Kit 32 έχει πολλές χωρητικές εισόδους αφής, οπότε αφιέρωσα λίγο χρόνο στη συναρμολόγηση υλικού, στη συγγραφή λογισμικού και στη δοκιμή ενός σχεδίου εισόδου τριών κουμπιών, χρησιμοποιώντας τη λειτουργία χωρητικής αφής ESP32 και τρία βύσματα μεταλλικών οπών 3/8 "" κουμπιά.

Όπως έχει ανακαλύψει οποιοσδήποτε έχει πειραματιστεί με τις χωρητικές εισόδους αφής ESP32, οι είσοδοι αφής είναι σίγουρα αρκετά θορυβώδεις ώστε να απαιτούν φιλτράρισμα για αξιόπιστη ανίχνευση εισόδου. Για να ελαχιστοποιήσω τον συνολικό αριθμό εξαρτημάτων για το επερχόμενο έργο, διαπίστωσα ότι ένα απλό ψηφιακό φίλτρο με διακοπή (περισσότερο ως «απόρριψη» παρά ως φίλτρο, αλλά παρεκκλίνω), σε αντίθεση με την προσθήκη υλικού εξωτερικού φίλτρου, θα μπορούσε να ησυχάσει τις θορυβώδεις εισόδους Ε Και μετά από δοκιμές, έγινε προφανές ότι οι χωρητικές είσοδοι ESP32, τρία μεταλλικά βύσματα 3/8 "και κάποιο ψηφιακό λογισμικό" φιλτραρίσματος ", θα παρείχαν πράγματι μια αξιόπιστη είσοδο τριών κουμπιών για το σχέδιο.

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

Και ως συνήθως, μάλλον ξέχασα ένα ή δύο αρχεία ή ποιος ξέρει τι άλλο, οπότε αν έχετε οποιεσδήποτε ερωτήσεις, μη διστάσετε να με ρωτήσετε καθώς κάνω πολλά λάθη.

Και μια τελευταία σημείωση, δεν λαμβάνω καμία αποζημίωση σε οποιαδήποτε μορφή, συμπεριλαμβανομένων αλλά χωρίς περιορισμό σε δωρεάν δείγματα, για οποιοδήποτε από τα εξαρτήματα που χρησιμοποιούνται σε αυτό το σχέδιο

Βήμα 1: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Ο σχεδιασμός χρησιμοποιεί το ακόλουθο υλικό:

  • Ένα, WiFi Kit 32.
  • Τρία βύσματα μεταλλικών οπών 3/8 ".
  • Μήκος τριών, 4 "σύρματος 28awg.

Για τη συναρμολόγηση του υλικού, έκανα τα ακόλουθα βήματα:

  • Απογυμνώστε και κονσερβοποιήσατε τα άκρα κάθε μήκους σύρματος 4 "όπως φαίνεται.
  • Συγκολλήθηκε το πρώτο καλώδιο στην καρφίτσα 13 του ESP32 (είσοδος TOUCH4 ή "T4").
  • Συγκολλήθηκε το δεύτερο καλώδιο στην καρφίτσα 12 του ESP32 (είσοδος TOUCH5 ή "T5").
  • Συγκολλήθηκε το τρίτο καλώδιο στην καρφίτσα 14 του ESP32 (η είσοδος TOUCH6 ή "T6").
  • Κολλήστε ένα από καθένα από τα τρία βύσματα 3/8 "μεταλλικών οπών στα ελεύθερα άκρα των τριών μηκών καλωδίων.

Βήμα 2: Λογισμικό

Λογισμικό
Λογισμικό

Το αρχείο "Buttons.ino" είναι ένα αρχείο περιβάλλοντος Arduino που περιέχει το λογισμικό για το σχεδιασμό. Εκτός από αυτό το αρχείο, θα χρειαστείτε τη βιβλιοθήκη γραφικών "U8g2lib" για την οθόνη WiFi Kit32 OLED (ανατρέξτε στη διεύθυνση https://github.com/olikraus/u8g2/wiki για περισσότερες πληροφορίες σχετικά με αυτήν τη βιβλιοθήκη).

Με τη βιβλιοθήκη γραφικών U8g2lib εγκατεστημένη στον κατάλογο Arduino και το "Buttons.ino" φορτωμένο στο περιβάλλον Arduino, μεταγλωττίστε και κατεβάστε το λογισμικό στο ESP32.

Μόλις γίνει λήψη και εκτέλεση, η επάνω γραμμή της οθόνης θα πρέπει να διαβάζει "Κουμπιά" με τη δεύτερη γραμμή της οθόνης να γράφει "1 2 3" ως ενδείξεις κουμπιών. Κάτω από κάθε ένδειξη κουμπιού 1, 2, 3 υπάρχουν οι μη φιλτραρισμένες τιμές ανάγνωσης αφής και κάτω από κάθε μία από αυτές οι ενδείξεις πατήματος κουμπιού ("1" για πατημένο, "0" για μη πατημένο). Όπως φαίνεται στο βίντεο (και όπως επιβεβαιώθηκε μακροχρόνια δοκιμή), το φίλτρο λογισμικού παρέχει αξιόπιστη ανίχνευση εισόδου κουμπιού χωρίς ψευδή ενεργοποίηση.

Βήμα 3: Σχετικά με το Λογισμικό

Το λογισμικό περιέχει τρεις κύριες ενότητες κώδικα. το Arduino απαιτούσε ενότητες "setup ()" και "loop ()" και μια ενότητα "Interrupts". Η ενότητα εγκατάστασης () περιέχει τον κωδικό που είναι απαραίτητος για την προετοιμασία OLED και διακοπή υπηρεσιών. Οι λειτουργίες εγκατάστασης OLED περιγράφονται στον παραπάνω σύνδεσμο. Οι λειτουργίες ρύθμισης της υπηρεσίας διακοπής έχουν ως εξής:

  • Το "timerLoopSemaphore = xSemaphoreCreateBinary ()" δημιουργεί ένα σηματοφόρο για το "InterruptService ()" (η ρουτίνα της υπηρεσίας διακοπής) για την ενημέρωση του βρόχου () όταν είναι καιρός να εκτελεστεί ένα πέρασμα βρόχου.
  • "timerInterruptService = timerBegin (0, 80, true)" δημιουργεί ένα χρονόμετρο χρησιμοποιώντας χρονοδιακόπτη υλικού 0 με προεπιλογή 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" επισυνάπτει το InterruptService () στο χρονόμετρο.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" ορίζει το ρυθμό υπηρεσίας διακοπής στα 1000hz.
  • "timerAlarmEnable (timerInterruptService)" εκκινεί το ξυπνητήρι χρονοδιακόπτη και συνεπώς διακόπτει την υπηρεσία.

Με την ολοκλήρωση της εγκατάστασης, ο βρόχος () εισάγεται και σταματά αμέσως στη γραμμή:

εάν (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), Ο βρόχος σημασίας () θα περιμένει σε αυτό το σημείο μέχρι να φτάσει ο σηματοδότης από το InterruptService (). Όταν φτάσει ο σηματοφόρος, ο κώδικας βρόχου () εκτελείται, ενημερώνοντας την οθόνη OLED με τα δεδομένα του κουμπιού και, στη συνέχεια, επιστρέφοντας στην κορυφή για να περιμένει ξανά τον επόμενο σηματοφόρο. Με το InterruptService () να λειτουργεί στα 1000hz και την τιμή LOOP_DELAY 30, ο βρόχος () εκτελείται κάθε 30ms ή με ρυθμό ενημέρωσης οθόνης 33,333hz. Ενώ πρόκειται για υψηλότερο ρυθμό ανανέωσης οθόνης από αυτόν που απαιτείται για τις περισσότερες εφαρμογές ESP32, χρησιμοποίησα αυτήν τη ρύθμιση για να απεικονίσω την απόκριση του φίλτρου. Έκανα δοκιμή και προσδιόρισα ότι ο χρόνος που απαιτείται για την εκτέλεση ενός πάσου βρόχου () ήταν 20ms.

Το InterruptService () καλείται από το χρονόμετρο που δημιουργείται στη ρύθμιση () με ρυθμό 1000hz. Όταν καλείται, ενημερώνει δύο κάτω μετρητές, το nLoopDelay και το nButtonDelay. Όταν το nLoopDelay μετρηθεί αντίστροφα στο μηδέν, στέλνει τον σηματοφόρο που επιτρέπει τον βρόχο () να εκτελέσει ένα μόνο πέρασμα και στη συνέχεια επαναφέρει το nLoopDelay. Όταν το nButtonDelay μετρηθεί αντίστροφα στο μηδέν, επαναφέρεται επίσης και τότε εκτελείται το κουμπί "φίλτρα".

Κάθε φίλτρο κουμπιών έχει έναν μοναδικό μετρητή φίλτρου (π.χ. nButton1Count, nButton2Count και nButton3Count). Εφόσον η τιμή εισαγωγής αφής που έχει εκχωρηθεί στο κουμπί είναι μεγαλύτερη ή ίση με την καθορισμένη τιμή κατωφλίου (BUTTON_THRESHHOLD), ο μετρητής φίλτρου που έχει εκχωρηθεί στο κουμπί και το κουμπί παραμένουν μηδενικοί. Εάν η τιμή εισαγωγής αφής που έχει εκχωρηθεί στο κουμπί είναι μικρότερη από το καθορισμένο όριο, ο μετρητής φίλτρου που εκχωρείται στο κουμπί αυξάνεται κατά ένα κάθε 20ms. Όταν ο μετρητής φίλτρου υπερβαίνει την τιμή φίλτρου κουμπιού (BUTTON_FILTER), το κουμπί θεωρείται "πατημένο". Το αποτέλεσμα αυτής της μεθόδου είναι να δημιουργήσει ένα φίλτρο που απαιτεί 80ms (20ms nButtonDelay * 4ms nButtonCountN όπου N είναι ο αριθμός κουμπιού) συνεχόμενων τιμών εισαγωγής αφής κάτω από το καθορισμένο όριο για να θεωρηθεί ότι το κουμπί έχει πραγματικά πατηθεί. Οποιαδήποτε στιγμή μικρότερη από 80ms θεωρείται "σφάλμα" και απορρίπτεται από το φίλτρο.

Δεδομένης αυτής της σύντομης περιγραφής, αν έχετε οποιεσδήποτε ερωτήσεις, μη διστάσετε να τις ρωτήσετε και θα κάνω ό, τι μπορώ για να τις απαντήσω.

Ελπίζω να το απολαύσατε!

Βήμα 4: Το "Επερχόμενο Έργο"

ο
ο

Το επερχόμενο έργο, "Intelligrill® Pro", είναι μια οθόνη καπνιστών με διπλό αισθητήρα θερμοκρασίας που περιλαμβάνει:

  • Υπολογισμοί ανιχνευτή θερμοκρασίας Steinhart-Hart (σε αντίθεση με τους πίνακες "αναζήτησης") για μεγαλύτερη ακρίβεια.
  • Προβλεπόμενος χρόνος για την ολοκλήρωση του καθετήρα 1 που ενσωματώνει την αυξημένη ακρίβεια που προκύπτει από τους υπολογισμούς Steinhart-Hart.
  • Ένας δεύτερος ανιχνευτής, ο αισθητήρας 2, για την παρακολούθηση της θερμοκρασίας του καπνιστή (περιορίζεται από 32 έως 399 μοίρες).
  • Χωρητικά χειριστήρια εισαγωγής αφής (όπως σε αυτό το Instructable).
  • Απομακρυσμένη παρακολούθηση WIFI (με σταθερή διεύθυνση IP, επιτρέπει την παρακολούθηση της προόδου του καπνιστή από οπουδήποτε υπάρχει διαθέσιμη σύνδεση στο Διαδίκτυο).
  • Εκτεταμένο εύρος θερμοκρασίας (πάλι 32 έως 399 μοίρες).
  • Ηχητικοί συναγερμοί ολοκλήρωσης τόσο στον πομπό Intelligrill® όσο και στις περισσότερες συσκευές παρακολούθησης με δυνατότητα WiFi.
  • Ένδειξη θερμοκρασίας είτε σε βαθμούς F είτε σε βαθμούς C.
  • Μορφή ώρας σε HH: MM: SS ή HH: MM.
  • Ένδειξη μπαταρίας είτε σε βολτ είτε σε % φορτισμένη.
  • Και σύντομα, έξοδος PID για καπνιστές με βάση το τρυπάνι.

Το "Intelligrill® Pro" δοκιμάζεται για να γίνει το πιο ακριβές, γεμάτο δυνατότητες και αξιόπιστο HTML με βάση το Intelligrill® που έχω σχεδιάσει.

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

Και πάλι, ελπίζω να το απολαύσετε!

Βήμα 5: Επόμενο: Αναλογική είσοδος θερμοκρασίας ESP32 NTP με διόρθωση Steinhart-Hart

Ετοιμαστείτε να ξεσκονίσετε τα βιβλία άλγεβρας για αυτό.

Συνιστάται: