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

AVR/Arduino RFID Reader Με κωδικό UART σε C: 4 βήματα
AVR/Arduino RFID Reader Με κωδικό UART σε C: 4 βήματα

Βίντεο: AVR/Arduino RFID Reader Με κωδικό UART σε C: 4 βήματα

Βίντεο: AVR/Arduino RFID Reader Με κωδικό UART σε C: 4 βήματα
Βίντεο: Distributed Control With opendSUSE and Arduino part 3 2024, Νοέμβριος
Anonim
AVR/Arduino RFID Reader Με κωδικό UART σε C
AVR/Arduino RFID Reader Με κωδικό UART σε C

Το 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. Ελπίζω ότι αυτό το εκπαιδευτικό σας βοήθησε με κάποιο τρόπο. Αν έχετε οποιεσδήποτε προτάσεις για το πώς θα μπορούσε να βελτιωθεί, μη διστάσετε να μου πείτε!

Συνιστάται: