- Μονάδα πομπού και δέκτη RF 433MHz:
- Ανάγκη κωδικοποιητή και αποκωδικοποιητή:
- Απαιτούμενα στοιχεία:
- Διάγραμμα κυκλώματος:
- Επεξήγηση κώδικα:
Γεια σε όλους, Σήμερα σε αυτό το έργο, θα συνδέσουμε τη μονάδα δέκτη RF και πομπού με τον μικροελεγκτή PIC και θα επικοινωνήσουμε μεταξύ δύο διαφορετικών μικροελεγκτών pic ασύρματα.
Σε αυτό το έργο θα κάνουμε τα εξής: -
- Θα χρησιμοποιήσουμε το PIC16F877A για τον πομπό και το PIC18F4520 για το τμήμα δέκτη.
- Θα συνδέσουμε το πληκτρολόγιο και την οθόνη LCD με τον μικροελεγκτή PIC.
- Από την πλευρά του πομπού, θα συνδέσουμε το πληκτρολόγιο με PIC και θα μεταδώσουμε τα δεδομένα. Από την πλευρά του δέκτη, θα λάβουμε τα δεδομένα ασύρματα και θα δείξουμε ποιο πλήκτρο πιέζεται στην οθόνη LCD.
- Θα χρησιμοποιήσουμε κωδικοποιητή και αποκωδικοποιητή IC για τη μετάδοση δεδομένων 4 bit.
- Η συχνότητα λήψης θα είναι 433Mhz χρησιμοποιώντας φθηνή μονάδα RF TX-RX που διατίθεται στην αγορά.
Πριν πάμε στα σχήματα και τους κωδικούς, ας κατανοήσουμε τη λειτουργία της μονάδας RF με ICs Encoder-Decoder Δείτε επίσης παρακάτω δύο άρθρα για να μάθετε πώς να συνδέετε το LCD και το πληκτρολόγιο με τον μικροελεγκτή PIC:
- Διασύνδεση LCD με μικροελεγκτή PIC χρησιμοποιώντας MPLABX και XC8
- 4x4 Matrix Keypad Interfacing με PIC Microcontroller
Μονάδα πομπού και δέκτη RF 433MHz:
Αυτές είναι οι μονάδες πομπού και δέκτη που χρησιμοποιούμε στο έργο. Είναι η φθηνότερη διαθέσιμη μονάδα για 433 MHz. Αυτές οι μονάδες δέχονται σειριακά δεδομένα σε ένα κανάλι.
Αν δούμε τις προδιαγραφές των ενοτήτων, ο πομπός έχει βαθμολογία για λειτουργία 3,5-12V ως τάση εισόδου και η απόσταση μετάδοσης είναι 20-200 μέτρα. Μεταδίδει σε πρωτόκολλο AM (Audio Modulation) στα 433 MHz συχνότητα. Μπορούμε να μεταφέρουμε δεδομένα με ταχύτητα 4KB / S με ισχύ 10mW.
Στην επάνω εικόνα μπορούμε να δούμε το pin-out της μονάδας Transmitter. Από αριστερά προς τα δεξιά οι ακίδες είναι VCC, DATA και GND. Μπορούμε επίσης να προσθέσουμε την κεραία και να την κολλήσουμε στο σημείο που φαίνεται στην παραπάνω εικόνα.
Για τις προδιαγραφές του Παραλήπτη, ο Δέκτης έχει βαθμολογία 5V dc και 4MA Quiescent current ως είσοδο. Η συχνότητα λήψης είναι 433,92 MHz με ευαισθησία -105DB.
Στην παραπάνω εικόνα μπορούμε να δούμε το pin-out της μονάδας δέκτη. Οι τέσσερις ακίδες είναι από αριστερά προς τα δεξιά, VCC, DATA, DATA και GND. Αυτές οι μεσαίες δύο ακίδες συνδέονται εσωτερικά. Μπορούμε να χρησιμοποιήσουμε οποιοδήποτε ένα ή και τα δύο. Αλλά είναι καλή πρακτική να χρησιμοποιείτε και τα δύο για τη μείωση της ζεύξης θορύβου.
Επίσης, ένα πράγμα δεν αναφέρεται στο φύλλο δεδομένων, ο μεταβλητής επαγωγέας ή POT στο μέσο της μονάδας χρησιμοποιείται για βαθμονόμηση συχνότητας. Εάν δεν μπορούσαμε να λάβουμε τα μεταδιδόμενα δεδομένα, υπάρχουν πιθανότητες ότι οι συχνότητες μετάδοσης και λήψης δεν ταιριάζουν. Αυτό είναι ένα κύκλωμα RF και πρέπει να συντονίσουμε τον πομπό στο τέλειο μεταδιδόμενο σημείο συχνότητας. Επίσης, όπως και ο πομπός, αυτή η μονάδα διαθέτει επίσης θύρα κεραίας. μπορούμε να κολλήσουμε σύρμα σε κουλουριασμένη μορφή για μεγαλύτερη λήψη.
Το εύρος μετάδοσης εξαρτάται από την τάση που παρέχεται στον πομπό και το μήκος των κεραιών και στις δύο πλευρές. Για αυτό το συγκεκριμένο έργο δεν χρησιμοποιήσαμε εξωτερική κεραία και χρησιμοποιήσαμε 5V στην πλευρά του πομπού. Ελέγξαμε με απόσταση 5 μέτρων και λειτούργησε τέλεια.
Οι μονάδες RF είναι πολύ χρήσιμες για ασύρματη επικοινωνία μεγάλων αποστάσεων. Εδώ εμφανίζεται ένα βασικό κύκλωμα πομπού RF και δέκτη. Έχουμε κάνει πολλά έργα χρησιμοποιώντας RF Module:
- Οικιακές συσκευές ελεγχόμενες με RF
- Bluetooth Car Controlled Toy Car χρησιμοποιώντας το Arduino
- RF τηλεχειριστήρια LED που χρησιμοποιούν Raspberry Pi
Ανάγκη κωδικοποιητή και αποκωδικοποιητή:
Αυτός ο αισθητήρας RF έχει μερικά μειονεκτήματα: -
- Μονόδρομη επικοινωνία.
- Μόνο ένα κανάλι
- Παρεμβολή πολύ θορύβου.
Λόγω αυτού του μειονεκτήματος χρησιμοποιήσαμε κωδικοποιητές και αποκωδικοποιητές IC, HT12D και HT12E. Το D σημαίνει αποκωδικοποιητή που θα χρησιμοποιηθεί στην πλευρά του δέκτη και το E σημαίνει κωδικοποιητή που θα χρησιμοποιηθεί στην πλευρά του πομπού. Αυτά τα IC παρέχουν 4 κανάλια. Επίσης, λόγω κωδικοποίησης και αποκωδικοποίησης, το επίπεδο θορύβου είναι πολύ χαμηλό.
Στην παραπάνω εικόνα, το αριστερό είναι HT12D ο αποκωδικοποιητής και το δεξί είναι HT12E, ο κωδικοποιητής. Και τα δύο IC είναι ίδια. Τα Α0 έως Α7 χρησιμοποιούνται για ειδική κωδικοποίηση. Μπορούμε να χρησιμοποιήσουμε καρφίτσες μικροελεγκτή για να ελέγξουμε αυτές τις ακίδες και να ορίσουμε διαμορφώσεις. Οι ίδιες διαμορφώσεις πρέπει να ταιριάζουν από την άλλη πλευρά. Εάν και οι δύο διαμορφώσεις είναι ακριβείς και αντιστοιχισμένες, μπορούμε να λάβουμε δεδομένα. Αυτές οι 8 ακίδες μπορούν να συνδεθούν με Gnd ή VCC ή να παραμείνουν ανοιχτές. Οποιεσδήποτε διαμορφώσεις κάνουμε στον κωδικοποιητή, πρέπει να ταιριάσουμε τη σύνδεση στον αποκωδικοποιητή. Σε αυτό το έργο θα αφήσουμε ανοιχτές αυτές τις 8 ακίδες τόσο για τον κωδικοποιητή όσο και για τον αποκωδικοποιητή. Τα 9 και 18 pin είναι VSS και VDD αντίστοιχα. Μπορούμε να χρησιμοποιήσουμε την καρφίτσα VTHT12D ως σκοπός ειδοποίησης. Για αυτό το έργο δεν το χρησιμοποιήσαμε. Ο ακροδέκτης TE προορίζεται για μετάδοση ενεργοποίησης ή απενεργοποίησης.
Το σημαντικό μέρος είναι ο πείρος OSC όπου πρέπει να συνδέσουμε αντιστάσεις είναι να παρέχουμε ταλάντωση στον κωδικοποιητή και τον αποκωδικοποιητή. Ο αποκωδικοποιητής χρειάζεται μεγαλύτερη ταλάντωση από τον αποκωδικοποιητή. Συνήθως, η τιμή αντίστασης Encoder θα είναι 1Meg και η τιμή αποκωδικοποιητή είναι 33k. Θα χρησιμοποιήσουμε αυτές τις αντιστάσεις για το έργο μας.
Ο ακροδέκτης DOUT είναι ο ακροδέκτης δεδομένων πομπού RF στο HT12E και ο ακροδέκτης DIN στο HT12D χρησιμοποιείται για τη σύνδεση του ακροδέκτη δεδομένων μονάδας RF.
Στο HT12E, το AD8 έως το AD11 είναι είσοδος τεσσάρων καναλιών που μετατρέπεται και μεταδίδεται σειριακά μέσω της μονάδας RF και το ακριβές αντίστροφο συμβαίνει στο HT12D, τα σειριακά δεδομένα που λαμβάνονται και αποκωδικοποιούνται και λαμβάνουμε παράλληλη έξοδο 4 bit στους 4 ακροδέκτες D8 έως D11.
Απαιτούμενα στοιχεία:
- 2 - Πίνακας ψωμιού
- 1 - LCD 16x2
- 1 - Πληκτρολόγιο
- Ζεύγος HT12D και HT12E
- Ενότητα RX-TX RF
- Προεπιλογή 1- 10K
- 2 - 4,7k αντίσταση
- 1- 1Μ Αντίσταση
- 1- 33k αντίσταση
- Κεραμικοί πυκνωτές 2 - 33pF
- 1 - 20Mhz κρύσταλλο
- Bergsticks
- Λίγα μονόκλωνα σύρματα.
- PIC16F877A MCU
- PIC18F4520 MCU
- Ένας βιδωτός οδηγός για τον έλεγχο της συχνότητας, πρέπει να είναι μονωμένος από το ανθρώπινο σώμα.
Διάγραμμα κυκλώματος:
Διάγραμμα κυκλώματος για πλευρά πομπού (PIC16F877A):
Χρησιμοποιήσαμε το PIC16F877A για σκοπούς μετάδοσης. Το πληκτρολόγιο Hex συνδέθηκε στο PORTB και τα 4 κανάλια που συνδέθηκαν στα 4 τελευταία bit του PORTD. Μάθετε περισσότερα σχετικά με τη σύνδεση του πληκτρολογίου 4x4 Matrix εδώ.
Καρφιτσώστε ως εξής-
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Διάγραμμα κυκλώματος για πλευρά δέκτη (PIC18F4520):
Στην παραπάνω εικόνα, εμφανίζεται το κύκλωμα δέκτη. Η οθόνη LCD είναι συνδεδεμένη στο PORTB. Χρησιμοποιήσαμε την εσωτερική ταλαντωτή του PIC18F4520 για το έργο αυτό. Τα 4 κανάλια συνδέονται με τον ίδιο τρόπο που κάναμε προηγουμένως στο κύκλωμα πομπού. Μάθετε περισσότερα σχετικά με τη σύνδεση LCD 16x2 με μικροελεγκτή PIC εδώ.
Αυτή είναι η πλευρά του πομπού -
Και την πλευρά του δέκτη σε ξεχωριστή πλακέτα -
Επεξήγηση κώδικα:
Υπάρχουν δύο μέρη του κώδικα, ένα για τον πομπό και ένα για τον δέκτη. Μπορείτε να κατεβάσετε τον πλήρη κώδικα από εδώ.
Κωδικός PIC16F877A για πομπό RF:
Όπως πάντα πρώτα, πρέπει να ρυθμίσουμε τα bit διαμόρφωσης στον μικροελεγκτή pic, να ορίσουμε μερικές μακροεντολές, συμπεριλαμβανομένων των βιβλιοθηκών και της συχνότητας κρυστάλλου. Η θύρα AD8-AD11 του κωδικοποιητή ic ορίζεται ως RF_TX στο PORTD. Μπορείτε να ελέγξετε τον κωδικό για όλους εκείνους στον πλήρη κώδικα που δίνεται στο τέλος.
Χρησιμοποιήσαμε δύο συναρτήσεις, void system_init (void) και void encode_rf_sender (char data)
Το system_init χρησιμοποιείται για αρχικοποίηση καρφιτσών και αρχικοποιήσεις πληκτρολογίου. Η αρχικοποίηση πληκτρολογίου καλείται από τη βιβλιοθήκη πληκτρολογίων.
Η θύρα πληκτρολογίου ορίζεται επίσης στο πληκτρολόγιο.h. Κάναμε το PORTD ως έξοδο χρησιμοποιώντας TRISD = 0x00 και κάναμε τη θύρα RF_TX ως 0x00 ως προεπιλεγμένη κατάσταση.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; πληκτρολόγιο_ αρχικοποίηση (); }
Στο encode_rf_sender έχουμε αλλάξει την κατάσταση των 4 ακίδων ανάλογα με το κουμπί που πατήθηκε. Έχουμε δημιουργήσει 16 διαφορετικές δεκαεξαδικές τιμές ή καταστάσεις PORTD ανάλογα με το ( 4x4) πατώντας 16 διαφορετικά κουμπιά.void encode_rf_sender (δεδομένα char) { if (data == '1') RF_TX = 0x10; εάν (δεδομένα == '2') RF_TX = 0x20; εάν (δεδομένα == '3') …………... …. ….
Στην κύρια λειτουργία λαμβάνουμε πρώτα τα πατημένα δεδομένα του κουμπιού πληκτρολογίου χρησιμοποιώντας τη λειτουργία switch_press_scan () και αποθηκεύουμε τα δεδομένα σε μεταβλητή κλειδιού. Μετά από αυτό έχουμε κωδικοποιήσει τα δεδομένα χρησιμοποιώντας τη συνάρτηση encode_rf_sender () και αλλάζοντας την κατάσταση PORTD.
Κωδικός PIC18F4520 για δέκτη RF:
Όπως πάντα, ορίσαμε πρώτα τα bit διαμόρφωσης στο PIC18f4520. Είναι λίγο διαφορετικό από το PIC16F877A, μπορείτε να ελέγξετε τον κωδικό στο συνημμένο αρχείο zip.
Περιλάβαμε το αρχείο κεφαλίδας LCD. Ορίζεται το D8-D11 σύνδεση της θύρας του αποκωδικοποιητή IC απέναντι PORTD χρησιμοποιώντας #define RF_RX PORTD γραμμή, σύνδεση είναι ίδια όπως χρησιμοποιούνται στην ενότητα κωδικοποιητή. Η δήλωση θύρας LCD γίνεται επίσης στο αρχείο lcd.c.
#περιλαμβάνω
Όπως αναφέρθηκε πριν είμαστε χρησιμοποιούν εσωτερικά ταλαντωτή για την 18F4520, έχουμε χρησιμοποιήσει το σύστημα _ init λειτουργία όπου διαμορφώνεται το OSCON μητρώο του 18F4520 για να ρυθμίσετε το εσωτερικό ταλαντωτή για 8 MHz. Ρυθμίζουμε επίσης το bit TRIS τόσο για τις καρφίτσες LCD όσο και για τις ακίδες αποκωδικοποιητή. Καθώς το HT - 12D παρέχει έξοδο στις θύρες D8-D11, πρέπει να ρυθμίσουμε το PORTD ως είσοδο για να λάβουμε την έξοδο.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz,, intosc // OSCTUNE = 0b01001111; // Ενεργοποίηση PLL, Max prescaler 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Τελευταίο 4 bit ως bit εισαγωγής. }
Διαμορφώσαμε τον καταχωρητή OSCON στα 8 MHz, κάναμε επίσης τη θύρα B ως έξοδο και τη θύρα D ως είσοδο.
Η παρακάτω λειτουργία γίνεται χρησιμοποιώντας την ακριβή αντίστροφη λογική που χρησιμοποιήθηκε στην προηγούμενη ενότητα πομπού. Εδώ παίρνουμε την ίδια δεκαεξαδική τιμή από τη θύρα D και από αυτήν την εξάγωνη τιμή προσδιορίζουμε ποιος διακόπτης πιέστηκε στην ενότητα πομπού. Μπορούμε να αναγνωρίσουμε κάθε πάτημα πλήκτρου και να υποβάλουμε τον αντίστοιχο χαρακτήρα στην οθόνη LCD.
void rf_analysis (χωρίς υπογραφή char recived_byte) { if (recived_byte == 0x10 ) lcd_data ('1'); εάν (recived_byte == 0x20) lcd_data ('2'); εάν (recived_byte == 0x30) ……. ….. …… ………..
Το lcd_data καλείται από το αρχείο lcd.c.
Στην κύρια λειτουργία αρχικοποιούμε το σύστημα και την οθόνη LCD. Πήραμε μια μεταβλητή byte, και αποθηκεύονται τη δεκαεξαδική τιμή που έλαβε από το λιμάνι Δ. Στη συνέχεια, με τη συνάρτηση rf_analysis μπορούμε να εκτυπώσουμε τον χαρακτήρα σε LCD.
void main (void) { unsigned char byte = 0; system_init (); lcd_init (); ενώ (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); byte = RF_RX; rf_analysis (byte); lcd_com (0xC0); } επιστροφή; }
Πριν το τρέξουμε, έχουμε συντονίσει το κύκλωμα. Πρώτα πατήσαμε το κουμπί « D » στο πληκτρολόγιο. Έτσι, το 0xF0 μεταδίδεται συνεχώς από τον πομπό RF. Στη συνέχεια συντονίσαμε το κύκλωμα του δέκτη έως ότου η οθόνη LCD εμφανίσει τον χαρακτήρα « D ». Μερικές φορές η μονάδα συντονίζεται σωστά από τον κατασκευαστή, μερικές φορές δεν είναι. Εάν τα πάντα είναι σωστά συνδεδεμένα και δεν έχουν πατηθεί το κουμπί στην οθόνη LCD, τότε υπάρχουν πιθανότητες ότι ο δέκτης RF δεν είναι συντονισμένος. Χρησιμοποιήσαμε το μονωμένο κατσαβίδι για τη μείωση των λανθασμένων δυνατοτήτων συντονισμού λόγω της επαγωγής του σώματός μας.
Με αυτόν τον τρόπο μπορείτε να συνδέσετε τη μονάδα RF στον μικροελεγκτή PIC και να επικοινωνήσετε μεταξύ δύο μικροελεγκτών PIC ασύρματα χρησιμοποιώντας τον αισθητήρα RF.
Μπορείτε να κατεβάσετε τον πλήρη κωδικό για πομπό και δέκτη από εδώ, επίσης να δείτε το βίντεο επίδειξης παρακάτω.