Πίνακας περιεχομένων:
Βίντεο: Χωρητική αφή με μικροελεγκτή PIC16F886: 3 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Σε αυτό το σεμινάριο θα εξετάσουμε πώς μπορείτε να χρησιμοποιήσετε έναν μικροελεγκτή PIC16F886 για να ανιχνεύσετε διαφορές στην χωρητικότητα, αυτό μπορεί αργότερα να χρησιμοποιηθεί για να πείτε εάν πιέζεται μια επιφάνεια αφής. Είναι καλό να είστε εξοικειωμένοι με τους μικροελεγκτές φωτογραφιών πριν κάνετε αυτό το έργο.
Βήμα 1: Συνδέστε το κύκλωμά σας
Αρχικά, ας ξεκινήσουμε καλωδιώνοντας το κύκλωμα σύμφωνα με το παραπάνω διάγραμμα. Για να φτιάξετε το μαξιλάρι αφής μπορείτε να διπλώσετε αλουμινόχαρτο σε τετράγωνο και να κολλήσετε ταινία σε σύρμα. Μπορείτε να πειραματιστείτε με διαφορετικές τιμές για την αντίσταση 100k, βρήκα ότι τα 100k λειτουργούσαν καλά για μένα.
Ο πείρος RC4 χρησιμοποιείται για την έναρξη φόρτισης/εκφόρτισης της χωρητικότητας που πρέπει να μετρηθεί. Το C12IN0 συνδέεται στην - πλευρά ενός εσωτερικού συγκριτή και ο ακροδέκτης C1IN συνδέεται με την + πλευρά του ίδιου συγκριτή. Ο μικροελεγκτής βλέπει την χωρητικότητα να είναι πλήρως φορτισμένη όταν η τάση C12IN0 φτάσει πάνω από την τάση C1IN. Ο διαχωριστής αντίστασης τάσης διασφαλίζει ότι το C1IN είναι κοντά στα 5 βολτ.
Δεδομένου ότι η επιφάνεια αφής εξαρτάται από την ύπαρξη σημαντικής χωρητικότητας μεταξύ εσάς και της γείωσης του κυκλώματος, υπάρχει πιθανότητα μια μπαταρία να μην λειτουργεί.
Βήμα 2: Το αρχείο κεφαλίδας
Τελειώσατε με όλες τις συνδέσεις; Καλά, θα συνεχίσουμε με το αρχείο κεφαλίδας. Θα χρησιμοποιήσουμε τον μεταγλωττιστή XC8 και όπως υποδηλώνει ο τίτλος, θα δημιουργήσετε τώρα ένα νέο αρχείο κεφαλίδας στο έργο σας και θα αντιγράψετε-επικολλήσετε τον ακόλουθο κώδικα. Μπορείτε επίσης να το αντιγράψετε-επικολλήσετε επάνω από τον κύριο κώδικα χωρίς κανένα αρχείο κεφαλίδας.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int count?
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // χωρητικότητα εκφόρτισης που θα μετρηθεί RC4 = 0. _ καθυστέρηση_ms (DISCHARGE_TIME); // δώστε αρκετή καθυστέρηση για να αποφορτίσετε πλήρως (σχεδόν πλήρως) τον "πυκνωτή" // να καθαρίσετε τη σημαία υπερχείλισης του χρονοδιακόπτη T0IF = 0. // περιμένετε να ξεχειλίσει ο χρονοδιακόπτης, ξεκινήστε την καταμέτρηση από το 0 ενώ (! T0IF); T0IF = 0; // έναρξη χωρητικότητας φόρτισης για μέτρηση RC4 = 1. // περιμένετε να φορτιστεί η χωρητικότητα μέχρι την τάση αναφοράς ενώ (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // επαναφορά timerCount timerCount = 0; overflowCount = 0; Αριθμός επιστροφής? }
int isTouching (int tolerance) {
// μέσος όρος πολλαπλών δειγμάτων διπλός μέσος όρος = 0; για (int i = 0; i calibrationValue+tolerance) μέσο ++; } μέσος όρος /= TOUCH_SAMPLE; // ο μέσος όρος θα είναι ένας αριθμός μεταξύ 0 και 1 εάν (μέσος όρος> 0,2) επιστρέψει 1. επιστροφή 0? }
void calibrate () {
int μέσο = 0; int δείγματα [CALIBRATION_SAMPLE]; // λάβετε μέση τιμή για (int i = 0; i <CALIBRATION_SAMPLE; i ++) {δείγματα = getChargeTime (); μέσος όρος += δείγματα ; } μέσος όρος /= CALIBRATION_SAMPLE; calibrationValue = μέσος όρος; // λάβετε τιμές max/min maxCalibrationValue = δείγματα [0]; minCalibrationValue = δείγματα [0]; για (int i = 0; i maxCalibrationValue) maxCalibrationValue = δείγματα ; εάν (δείγματα <minCalibrationValue) minCalibrationValue = δείγματα ; }}
void setupCapacitiveTouch () {
// ορίζοντας τον πείρο φόρτισης/εκφόρτισης ως έξοδο, στην περίπτωση αυτή είναι RC4 TRISCbits. TRISC4 = 0; // ρύθμιση timer0 T0CS = 0; PSA = 1; // ρύθμιση συγκριτικού C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // εκκαθάριση των μετρήσεων των τιμών count = 0; // εκκαθάριση τιμών βαθμονόμησης calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // εκτέλεση βαθμονόμησης κατά την έναρξη βαθμονόμησης (); }
Βήμα 3: Γράφοντας τον κύριο κώδικα
Ξεκινώντας από τον κύριο κώδικα, θα πρέπει να συμπεριλάβετε το αρχείο κεφαλίδας που δημιουργήθηκε στο προηγούμενο βήμα. Ο παρακάτω κώδικας είναι ένα παράδειγμα του τρόπου με τον οποίο μπορείτε να χρησιμοποιήσετε τη λειτουργία isTouching ως διακόπτη. Στην περίπτωσή μου έδωσα στην κεφαλίδα το όνομα capacitiveTouch.h.
#περιλαμβάνω
#include "capacitiveTouch.h"
// αυτή η μεταβλητή λέει εάν το κουμπί είναι ή δεν είναι ήδη πατημένο
int lastState = 0;
void main () {
// ρύθμιση του RC5 ως εξόδου TRISCbits. TRISC5 = 0; // πρέπει να καλέσετε αυτήν τη συνάρτηση κατά την έναρξη του προγράμματος setupCapacitiveTouch (); _ καθυστέρηση_ms (1000); // βαθμονόμηση μετά την ακριβή ρύθμισή σας βαθμονόμηση (); ενώ (1) {// έλεγχος αν το κουμπί πιέζεται εάν (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; αλλιώς RC5 = 1; lastState = 1; } // έλεγχος αν το κουμπί κυκλοφορεί αλλιώς εάν (lastState == 1 &&! isTouching (15)) lastState = 0; _ καθυστέρηση_ms (20); }}
μετρώ την διάμετρο:
Όταν αυτή η συνάρτηση καλείται μεταβλητές calibrationValue, maxCalibrationValue και minCalibrationValue θα ενημερωθούν. Το calibrationValue χρησιμοποιείται από τη λειτουργία isTouching. Λάβετε υπόψη ότι το touch pad πρέπει να παραμείνει μόνο κατά τη βαθμονόμηση.
setupCapacitiveTouch:
Πρέπει να καλέσετε στην αρχή του προγράμματος σας. Ρυθμίζει τα απαραίτητα bits που χρησιμοποιούνται από τις άλλες συναρτήσεις. Τρέχει επίσης μια καλλιγραφία. Ωστόσο, πήρα καλύτερα αποτελέσματα περιμένοντας ένα δευτερόλεπτο και εκτελούσα ξανά τη βαθμονόμηση ξεχωριστά.
isTouching:
Αυτή η συνάρτηση επιστρέφει 1 αν ανιχνεύσει αύξηση της χωρητικότητας στο C12IN0 και επιστρέφει 0 αν η χωρητικότητα είναι κοντά σε αυτήν που ήταν κατά τη βαθμονόμηση. Με απλά λόγια, εάν κάποιος αγγίξει το pad, η λειτουργία isTouching θα επιστρέψει 1. Η συνάρτηση θέλει επίσης μια παράμετρο ως είσοδο, αυτή είναι η ανοχή για να ενεργοποιηθεί. Όσο υψηλότερη είναι η τιμή ανοχής τόσο λιγότερο ευαίσθητη γίνεται. Στη ρύθμισή μου βρήκα ότι 15 λειτουργούσαν καλά, αλλά επειδή αυτό εξαρτάται από τη συχνότητα του ταλαντωτή και τη χωρητικότητα που προστίθεται όταν το πατάτε, θα πρέπει να πειραματιστείτε με αυτήν την τιμή μέχρι να βρείτε κάτι που λειτουργεί για εσάς.
getChargeTime:
Όταν θέλετε να μάθετε πόσο καιρό θα χρειαστεί για να φορτίσετε την χωρητικότητα στην τάση CVREF, αυτή η συνάρτηση θα το δοκιμάσει και θα επιστρέψει έναν ακέραιο. Για να λάβετε το χρόνο σε δευτερόλεπτα, χρησιμοποιήστε αυτόν τον τύπο: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Αυτός ο τύπος μπορεί επίσης να χρησιμοποιηθεί για να φτάσει την εισαγωγή ανοχής από τη λειτουργία isTouching σε δευτερόλεπτα.
Συνιστάται:
Χωρητική γραφίδα για στυλό μιας χρήσης: 6 βήματα (με εικόνες)
Χωρητική γραφίδα για μολύβι μίας χρήσης: Έχω δώδεκα στυλό σφαιρών Micro Roller Uni-ball. Θέλω να προσθέσω μια χωρητική γραφίδα στο καπάκι σε ένα από αυτά. Στη συνέχεια, το καπάκι και η γραφίδα μπορούν να μετακινηθούν από τη μία πένα στην άλλη στην επόμενη καθώς το καθένα έχει μελάνι. Είμαι ευγνώμων στον Jason Poel Smith για την
Test Bare Arduino, με λογισμικό παιχνιδιών με χωρητική είσοδο & LED: 4 βήματα
Δοκιμή Bare Arduino, με λογισμικό παιχνιδιών με χωρητική είσοδο & LED: " Push-It " Διαδραστικό παιχνίδι με γυμνό πίνακα Arduino, χωρίς εξωτερικά μέρη ή καλωδίωση (χρησιμοποιεί χωρητική είσοδο "αφής"). Εμφανίζεται παραπάνω, δείχνει ότι λειτουργεί σε δύο διαφορετικούς πίνακες. Push-Έχει δύο σκοπούς. Για γρήγορη επίδειξη/v
Έξυπνος διακόπτης χωρίς αφή: 8 βήματα (με εικόνες)
Έξυπνος διακόπτης χωρίς άγγιγμα: Η ανάγκη για κοινωνικές αποστάσεις και ασφαλείς πρακτικές υγείας, όπως η χρήση απολυμαντικών μετά τη χρήση δημόσιων περιβαλλόντων, όπως βρύσες, διακόπτες κ.λπ., είναι πολύ σημαντική για τη μείωση της εξάπλωσης του κορονοϊού. Υπάρχει λοιπόν άμεση ανάγκη στην καινοτομία
AVR Μικροελεγκτή Fuse Bits Διαμόρφωση. Δημιουργία και μεταφόρτωση στη μνήμη flash του μικροελεγκτή του προγράμματος αναβοσβήνει LED .: 5 βήματα
AVR Μικροελεγκτή Fuse Bits Διαμόρφωση. Δημιουργία και μεταφόρτωση στο Flash Memory of Microcontroller του LED Blinking Program: Σε αυτή την περίπτωση θα δημιουργήσουμε απλό πρόγραμμα σε κώδικα C και θα το γράψουμε στη μνήμη του μικροελεγκτή. Θα γράψουμε το δικό μας πρόγραμμα και θα μεταγλωττίσουμε το εξάγωνο αρχείο, χρησιμοποιώντας το Atmel Studio ως ολοκληρωμένη πλατφόρμα ανάπτυξης. Θα διαμορφώσουμε την ασφάλεια bi
Χωρητική διάθεση αφής/Ambilight: 8 βήματα
Capacitive Touch Mood/Ambilight: Αυτό το διδακτικό είναι ένα γρήγορο γράψιμο της εμπειρίας μου δημιουργώντας ένα πολυλειτουργικό φωτισμό διάθεσης. Αναμένεται κάποια βασική γνώση των ηλεκτρονικών κυκλωμάτων. Το έργο δεν έχει ακόμη ολοκληρωθεί, ορισμένα προσθέτουν λειτουργικότητα και πρέπει να γίνουν αλλαγές, αλλά