Πίνακας περιεχομένων:
- Βήμα 1: Αποκτήστε τα αγαθά
- Βήμα 2: Συνδέστε τα μέρη
- Βήμα 3: Γράψτε τον κωδικό
- Βήμα 4: Κώδικας και αντίο
Βίντεο: AVR/Arduino RFID Reader Με κωδικό UART σε C: 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:39
Το RFID είναι η τρέλα, που βρίσκεται παντού - από συστήματα αποθέματος έως συστήματα αναγνωριστικών σήματος. Εάν έχετε πάει ποτέ σε ένα πολυκατάστημα και περπατήσατε σε αυτά που φαίνονται με ανιχνευτές μετάλλων στα σημεία εισόδου/εξόδου, τότε έχετε δει RFID. Υπάρχουν πολλά μέρη για να βρείτε καλές πληροφορίες σχετικά με τη ρύθμιση του RFID και αυτό το εκπαιδευτικό πρόγραμμα εστιάζει στην εγκατάσταση του Parallax RFID reader (Serial TTL) σε AVR, με έμφαση στον κωδικό C που απαιτείται για την ανάγνωση της σειριακής εισόδου. Ο κωδικός είναι σε C και δεν χρησιμοποιεί εξωτερικές βιβλιοθήκες. Στην πραγματικότητα, μιλάει 2400 baud απευθείας χωρίς τη χρήση UART συγχρονίζοντας με το ρυθμό baud του αναγνώστη RFID και διαβάζοντας την ψηφιακή ακίδα με την οποία είναι συνδεδεμένη. Ενθουσιασμένος? Και εγώ.
Βήμα 1: Αποκτήστε τα αγαθά
Θα χρειαστείτε την παρακάτω λίστα μερών:
- RFID Reader (Parallax #28140 39,99 $)
- Ετικέτα RFID (Parallax #32397 0,99 $)
- Κλώνος AVR ή Arduino (εάν χρησιμοποιείτε AVR μετοχών, θα χρειαστείτε επίσης έναν πυκνωτή max232, 5 x 1uF και μια υποδοχή DE9)
- Χαρτόνι χωρίς κόλλα
Προαιρετικός
- Κεφαλίδα 4 θέσεων
- Σύρμα
(και το max232 κ.λπ. για επικοινωνία των πληροφοριών ετικέτας) Μπορείτε επίσης να συνδέσετε την αγαπημένη σας οθόνη LCD αντί να στείλετε δεδομένα ετικετών μέσω RS232.
Βήμα 2: Συνδέστε τα μέρη
Η πλευρά υλικού των πραγμάτων είναι αρκετά εύκολη. Αντί να βάλω τον αναγνώστη RFID απευθείας στο ψωμί μου, επέλεξα να φτιάξω ένα γρήγορο καλώδιο για να μπορέσω να μετακινήσω τον αναγνώστη RFID λίγο καλύτερα. Γι 'αυτό, μόλις έκοψα 4 θέσεις από μια θηλυκή κεφαλίδα λωρίδας για την οποία είχα ξαπλώσει και συγκολλήθηκε σε τρία καλώδια. Ηλεκτρική ταινία ολοκλήρωσε τον σύνδεσμο γκέτο. Ο αναγνώστης RFID έχει 4 συνδέσεις:
- Vcc
- ΕΠΙΤΡΕΠΩ
- ΕΞΩ
- Gnd
Όπως πιθανώς το μαντέψατε, συνδέστε το Vcc σε +5V και το Gnd στη γείωση. Επειδή ο αναγνώστης RFID καταναλώνει τόση ενέργεια, μπορείτε να χτυπήσετε τον πείρο ΕΝΕΡΓΟΠΟΙΗΣΗ για να τον απενεργοποιήσετε και να τον ενεργοποιήσετε σε διάφορα διαστήματα. Απλώς επέλεξα να το συνεχίσω. Επειδή είναι ανεστραμμένο, το τραβάτε LOW για να το ενεργοποιήσετε. Εναλλακτικά, μπορείτε να το συνδέσετε με τη γείωση. Το συνέδεσα με το PIND3 για να μου δώσει επιλογές ενεργοποίησης/απενεργοποίησης εάν το αποφασίσω. Το pin OUT είναι το σημείο όπου ο αναγνώστης στέλνει τα σειριακά του δεδομένα αφού διαβάσει μια ετικέτα. Το συνέδεσα με το PIND2. Σημείωση, στο Σύμπαν της Παράλλαξης, το κόκκινο σημαίνει πάω. Δηλαδή, ένα πράσινο LED σημαίνει ότι η μονάδα είναι ανενεργή και αδρανής, ενώ ένα κόκκινο LED σημαίνει ότι η μονάδα είναι ενεργή. * ανασήκωσε τους ώμους* Πήγαινε φιγούρα.
Βήμα 3: Γράψτε τον κωδικό
Για να διαβάσετε τα δεδομένα από τον αναγνώστη RFID, πρέπει να γνωρίζετε πότε έχει υποβληθεί μια ετικέτα, να αφαιρέσετε τα δεδομένα από τη σειριακή θύρα και μετά να τα στείλετε κάπου.
Μορφή δεδομένων αναγνώστη RFID
Ο αναγνώστης RFID Parallax στέλνει δεδομένα με σταθερό, παγετώδη ρυθμό 2400 baud. Μια ετικέτα RFID είναι 10 byte. Για να είναι δυνατή η ανίχνευση/διόρθωση σφαλμάτων, καθώς ο αναγνώστης θα μπορούσε να απενεργοποιηθεί από τυχαίο θόρυβο, το RFID των 10 byte περιορίζεται από ένα φύλακα έναρξης και διακοπής. Το φύλακα εκκίνησης είναι η τροφοδοσία γραμμής (0x0A) και το φρουρό στάσης είναι η επιστροφή μεταφοράς (0x0D). Μοιάζει με αυτό:
[Έναρξη Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Σταματήστε το Sentinel]Αυτά είναι τα τρία βασικά βήματα.
Μάθετε πότε έχει υποβληθεί μια ετικέτα
Χρησιμοποίησα μια διακοπή αλλαγής καρφιτσών στο AVR που ειδοποιεί το υλικολογισμικό ότι έχει συμβεί μια αλλαγή σε μια παρακολουθούμενη καρφίτσα. Η διαμόρφωση του AVR για αυτό είναι εύκολη και απαιτεί ρύθμιση της σημαίας, ειδοποίηση του MCU ποια καρφίτσα θέλετε να παρακολουθήσετε και ρύθμιση του bit καθολικής διακοπής. Διαμόρφωση PCINT
BSET (PCICR, PCIE2); // αλλαγή καρφιτσών καταχωρητή ελέγχου διακοπής pcie2 BSET (PCMSK2, PCINT18); // ενεργοποίηση διακοπής αλλαγής καρφίτσας για PCINT18 (PD2) BSET (SREG, 7). // Ορίστε SREG I-bitΓράψτε τη ρουτίνα της υπηρεσίας διακοπής Θέλετε να διατηρήσετε το ISR σας σύντομο, οπότε στο διάνυσμα διακοπής μου διαβάζω ολόκληρο το byte, κομμάτι προς bit και αποθηκεύω το byte σε έναν γενικό πίνακα πτητικών χαρακτήρων. Κάνω τα εξής σε κάθε διακοπή:
- Ελέγξτε για να βεβαιωθείτε ότι είμαι στην αρχή
- Κεντράρετε το χρονισμό στον μεσαίο παλμό στα 2400 baud (η ταχύτητα του αναγνώστη RFID)
- Παραλείψτε το bit έναρξης και κάντε παύση στη μέση του επόμενου bit
- Διαβάστε κάθε κομμάτι σε έναν μη υπογεγραμμένο ακέραιο
- Όταν έχω 8 bit, βάλτε το byte σε έναν πίνακα χαρακτήρων
- Όταν συλλέξω 12 byte, ενημερώστε το MCU ότι η ετικέτα έχει διαβαστεί για ανίχνευση σφαλμάτων.
Τροποποίησα τον κώδικα SoftSerial από τον Mikal Hart ο οποίος τροποποίησε τον κώδικα από τον David Mellis για τις πειραματικά καθορισμένες καθυστερήσεις στις σειριακές ρουτίνες.
Αναλύστε την έξοδο RS232
Η ρουτίνα PCINT περιέχει τον κώδικα για την ανάγνωση της εξόδου RS232 από τον αναγνώστη RFID. Όταν έχω πάρει 12 byte (10-byte RFID συν φύλακες) θέτω το bDataReady σε 1 και αφήνω τον κύριο βρόχο να επεξεργαστεί τα δεδομένα και να τα εμφανίσει.
// αυτός είναι ο χειριστής διακοπήςISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Το bit εκκίνησης είναι χαμηλής απόδοσης. uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Κέντρο στο bit εκκίνησης για (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // παραλείψτε λίγο, αδελφέ… αν (BCHK (PIND, RFID_IN)) BSET (bit, x); αλλιώς BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // παράλειψη bit bit RFID_tag [rxIdx] = bit; ++ rxIdx; εάν (rxIdx == 12) bDataReady = 1;}
Εμφάνιση της ετικέτας σας
Στον κύριο (), κατά τη διάρκεια του (για πάντα) βρόχου, ελέγχω αν έχει οριστεί το bDataReady, σηματοδοτώντας ότι έχει αποσταλεί ολόκληρη η δομή RFID. Στη συνέχεια, ελέγχω αν είναι έγκυρη ετικέτα (δηλαδή οι χαρακτήρες έναρξης και διακοπής είναι 0x0A και 0x0D, αντίστοιχα), και αν ναι, το στέλνω έξω από τη σύνδεση RS232.
για (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Έναρξη byte:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nΣτάση byte:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); για (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); εάν (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}
Βήμα 4: Κώδικας και αντίο
Αυτή η σελίδα περιέχει ένα αρχείο zip με τον σχετικό κωδικό. Γράφτηκε στο AVR Studio 4.16. Εάν χρησιμοποιείτε σημειωματάριο, έκλειψη ή vi (ή κάτι άλλο) προγραμματιστή, θα χρειαστεί να αντιγράψετε ένα αξιόπιστο Makefile στον κατάλογο και να προσθέσετε αυτά τα αρχεία στην αρχική γραμμή. Επίσης, σημειώστε ότι ο χρόνος για την ενότητα σειριακής ανάγνωσης βασίζεται σε MCU 16MHz. Εάν τρέχετε σε διαφορετική συχνότητα ρολογιού, θα χρειαστεί να προσδιορίσετε πειραματικά τις συντονισμένες καθυστερήσεις για να επικεντρωθούν στους παλμούς του ρυθμού baud. Ελπίζω ότι αυτό το εκπαιδευτικό σας βοήθησε με κάποιο τρόπο. Αν έχετε οποιεσδήποτε προτάσεις για το πώς θα μπορούσε να βελτιωθεί, μη διστάσετε να μου πείτε!
Συνιστάται:
Κλειδαριά πόρτας προστατευμένη με κωδικό πρόσβασης στο Tnikercad: 4 βήματα
Κλειδαριά πόρτας προστατευμένη με κωδικό πρόσβασης στο Tnikercad: Για αυτό το έργο, θα λάβουμε είσοδο από ένα πληκτρολόγιο, θα επεξεργαστούμε αυτήν την είσοδο ως θέση γωνίας και θα μετακινήσουμε έναν σερβοκινητήρα με βάση την τριψήφια γωνία που αποκτήθηκε. Χρησιμοποίησα ένα πληκτρολόγιο 4 x 4, αλλά αν έχετε πληκτρολόγιο 3x4, έχει πολύ παρόμοια σύνδεση, οπότε θα μπορούσε να είναι
Πώς να ανεβάσετε τον κωδικό C στο AVR χρησιμοποιώντας το Arduino Uno ως προγραμματιστή: 6 βήματα
Πώς να ανεβάσετε τον κωδικό C σε ِ AVR χρησιμοποιώντας το Arduino Uno ως προγραμματιστή: HI σε όλους: D Εδώ θα μοιραστώ έναν απλό τρόπο προγραμματισμού οποιουδήποτε τσιπ AVR χρησιμοποιώντας το Arduino Uno R3 Το μόνο που χρειάζεστε για να εγγράψετε τον κωδικό στον μικροελεγκτή σας είναι το Arduino Uno αντί να αγοράσετε συγκεκριμένα προγραμματιστής που κόστισε πολύ
Light Jewel ✽ Ελέγξτε τη λωρίδα LED χωρίς Arduino και κωδικό: 5 βήματα (με εικόνες)
Light Jewel ✽ Ελέγξτε τη λωρίδα LED χωρίς Arduino και κωδικό: Αυτή είναι μια έξυπνη λάμπα που αλλάζει τη φωτεινότητα διπλώνοντας το επάνω κομμάτι. Έννοια: Αυτή είναι μια φιλική προς το χρήστη λάμπα για όποιον απολαμβάνει να διαβάζει σε ένα χαλαρωτικό περιβάλλον. Προσπαθήστε να απεικονίσετε ανθρώπους που κάθονται στο γραφείο δίπλα σε ένα παράθυρο με μερικές υπέροχες γεύσεις
Η θύρα NODEMcu USB δεν λειτουργεί; Ανεβάστε τον κωδικό χρησιμοποιώντας μονάδα USB σε μονάδα TTL (FTDI) σε μόλις 2 βήματα: 3 βήματα
Η θύρα NODEMcu USB δεν λειτουργεί; Ανεβάστε τον Κώδικα χρησιμοποιώντας τη μονάδα USB σε TTL (FTDI) σε μόλις 2 βήματα: Κουραστήκατε να συνδέεστε σε πολλά καλώδια από μονάδα USB σε μονάδα TTL στο NODEMcu, ακολουθήστε αυτήν την οδηγία, για να ανεβάσετε τον κώδικα σε μόλις 2 βήματα. Εάν η θύρα USB του Το NODEMcu δεν λειτουργεί, τότε μην πανικοβληθείτε. Είναι μόνο το τσιπ προγράμματος οδήγησης USB ή η υποδοχή USB
Arduino Plant Irrigator, χωρίς κωδικό: 11 βήματα
Arduino Plant Irrigator, Code Free: Σε αυτό το διδακτικό χτίζουμε ένα ρομπότ ποτίσματος, το οποίο ποτίζει τα φυτά σας τη μέρα, όταν το χώμα στεγνώσει αρκετά. Αυτό είναι ένα κλασικό έργο που βασίζεται στο Arduino, αλλά αυτή τη φορά χρησιμοποιούμε μια οπτική γλώσσα προγραμματισμού, την XOD, η οποία κάνει τον προγραμματισμό να λειτουργεί