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

Αποκωδικοποιητής αισθητήρα Arduino RF: 5 βήματα
Αποκωδικοποιητής αισθητήρα Arduino RF: 5 βήματα

Βίντεο: Αποκωδικοποιητής αισθητήρα Arduino RF: 5 βήματα

Βίντεο: Αποκωδικοποιητής αισθητήρα Arduino RF: 5 βήματα
Βίντεο: Αισθητήρας DHT11 2024, Ιούλιος
Anonim
Αποκωδικοποιητής αισθητήρα Arduino RF
Αποκωδικοποιητής αισθητήρα Arduino RF

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

Γρήγορα προς τα σήμερα και αυτός ο ασύρματος συναγερμός κάθεται σε ένα κουτί στο υπόγειό μου. Μετά την απόκτηση ενός φθηνού δέκτη RF αποφάσισα να δω αν θα μπορούσα να αποκωδικοποιήσω τα μηνύματα που μεταδίδονται από την ποικιλία των αισθητήρων συναγερμού και των τηλεχειριστηρίων που έχω. Σκέφτηκα ότι δεδομένου ότι όλοι συνεργάστηκαν με το φθηνό κουτί συναγερμού, πρέπει όλοι να χρησιμοποιούν την ίδια μορφή μηνύματος με διαφορετικό αναγνωριστικό. Σύντομα διαπίστωσα ότι είναι παρόμοια μόνο στη γενική δομή των μηνυμάτων. Έτσι, το έργο γρήγορα έγινε από ασήμαντο σε πολύ ενδιαφέρον.

Βήμα 1: Μονάδες αισθητήρα

Ενότητες αισθητήρων
Ενότητες αισθητήρων
Ενότητες αισθητήρων
Ενότητες αισθητήρων
Ενότητες αισθητήρων
Ενότητες αισθητήρων
Ενότητες αισθητήρων
Ενότητες αισθητήρων

Όπως μπορείτε να δείτε στις παραπάνω εικόνες, οι πομποί περιλαμβάνουν αισθητήρες ανοιχτής πόρτας, ανιχνευτές κίνησης, τηλεχειριστήρια όπλισης και ασύρματο πληκτρολόγιο που χρησιμοποιείται για τον προγραμματισμό του κουτιού συναγερμού. Όπως αποδεικνύεται, καμία από αυτές τις συσκευές δεν χρησιμοποιεί το ίδιο μήκος συγχρονισμού ή διάρκεια bit. Το μόνο κοινό, εκτός από το μήκος του μηνύματος, είναι η βασική μορφή των δυαδικών ψηφίων. Κάθε bit καταλαμβάνει μια σταθερή χρονική περίοδο με τη διαφορά μεταξύ μηδέν και ενός να είναι ο κύκλος λειτουργίας των υψηλών/χαμηλών μερίδων.

Η όμορφη κυματομορφή που φαίνεται παραπάνω ΔΕΝ είναι αυτό που έλαβα για πρώτη φορά. Επειδή υπάρχει τόσο μεγάλη κίνηση στη ζώνη συχνοτήτων 433-MHz, έπρεπε να βεβαιωθώ ότι θα ενεργοποιήσω τον αισθητήρα λίγο πριν ορίσω το πεδίο για να κάνω μια μόνο σκανδάλη. Ευτυχώς οι αισθητήρες βγάζουν αρκετά αντίγραφα του μηνύματος δεδομένων όταν είναι ενεργοποιημένα και τα τηλεχειριστήρια και το πληκτρολόγιο συνεχίζουν να βγάζουν μηνύματα όσο πατηθεί ένα πλήκτρο. Χρησιμοποιώντας το πεδίο, μπόρεσα να προσδιορίσω το μήκος συγχρονισμού και τη διάρκεια των bit δεδομένων για κάθε στοιχείο. Όπως αναφέρθηκε προηγουμένως, οι χρόνοι συγχρονισμού είναι διαφορετικοί και οι χρόνοι bit είναι διαφορετικοί, αλλά όλες οι μορφές μηνυμάτων έχουν συγχρονισμό χαμηλού επιπέδου που ακολουθείται από 24 bits δεδομένων και ένα bit stop. Αυτό ήταν αρκετό για να μπορέσω να δημιουργήσω έναν γενικό αποκωδικοποιητή στο λογισμικό χωρίς να χρειάζεται να κωδικοποιήσω όλες τις διαφορετικές λεπτομέρειες για κάθε συσκευή.

Βήμα 2: Υλικό

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

Κατασκεύασα αρχικά έναν αποκωδικοποιητή αισθητήρα χρησιμοποιώντας έναν μικροελεγκτή PIC και γλώσσα συναρμολόγησης. Έπαιξα πρόσφατα με παραλλαγές Arduino, οπότε σκέφτηκα ότι θα δω αν θα μπορούσα να το επαναλάβω. Το απλό σχηματικό φαίνεται παραπάνω και υπάρχει επίσης μια εικόνα του πρωτοτύπου μου. Το μόνο που έκανα ήταν να χρησιμοποιήσω τρία κοινά καλώδια άλματος για να πάω από το Arduino Nano στην πλακέτα δέκτη RF. Το μόνο που χρειάζεται είναι η τροφοδοσία και μια ενιαία γραμμή δεδομένων.

Εάν διαβάσετε το Εγχειρίδιο μου στο "3-σε-1 Χρόνος και εμφάνιση καιρού" θα δείτε ότι χρησιμοποιώ έναν κοινό δέκτη RXB6, 433-MHz. Μπορεί να είστε σε θέση να κάνετε τους πραγματικά φθηνούς δέκτες να λειτουργήσουν στο μικρό εύρος που απαιτείται για αυτό το έργο, αλλά εξακολουθώ να συνιστώ τη χρήση ενός δέκτη υπερ-ετεροδυνίου.

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

Το λογισμικό μετατρέπει τα ληφθέντα bits σε εμφανιζόμενους χαρακτήρες ASCII. Εξάγει την τιμή του μήκους συγχρονισμού και τα μήκη των 1 και 0 μπιτ. Επειδή γνώριζα ήδη τα μήκη συγχρονισμού και τις μορφές bit, θα μπορούσα να είχα γράψει το λογισμικό ειδικά για αυτά. Αντ 'αυτού, αποφάσισα να δω αν θα μπορούσα να το γράψω για να ταξινομήσω τα μήκη συγχρονισμού και να εντοπίσω αυτόματα τα bit δεδομένων. Αυτό θα διευκολύνει την τροποποίηση σε περίπτωση που θέλω να προσπαθήσω να εντοπίσω άλλες μορφές κάποια στιγμή. Είναι σημαντικό να σημειωθεί ότι το λογισμικό δεν γνωρίζει εάν το πρώτο κομμάτι ενός μηνύματος είναι 1 ή 0. Υποθέτει ότι είναι 1, αλλά, αν διαπιστώσει ότι θα έπρεπε να ήταν μηδέν, θα αντιστρέψει το bit στο ολοκληρωμένο μήνυμα πριν το στείλετε έξω από τη σειριακή θύρα.

Οι χρόνοι του παλμού συγχρονισμού και των δυαδικών ψηφίων δεδομένων προσδιορίζονται χρησιμοποιώντας την εξωτερική είσοδο διακοπής INT0 για να ενεργοποιήσετε ένα χειριστή διακοπών. Το INT0 μπορεί να ενεργοποιηθεί σε άνοδο, πτώση ή και στις δύο άκρες ή σε σταθερό χαμηλό επίπεδο. Το λογισμικό διακόπτεται και στις δύο άκρες και μετρά το χρονικό διάστημα που ο παλμός παραμένει χαμηλός. Αυτό απλοποιεί τα πράγματα επειδή το μήνυμα έναρξης/συγχρονισμού είναι ένας παλμός χαμηλού επιπέδου και τα bit μπορούν να προσδιοριστούν με βάση τον χρόνο χαμηλού επιπέδου τους.

Ο χειριστής διακοπών καθορίζει πρώτα εάν η καταγεγραμμένη καταμέτρηση είναι αρκετά μεγάλη ώστε να είναι παλμός έναρξης/συγχρονισμού. Οι διάφορες συσκευές που διαθέτω χρησιμοποιούν παλμούς συγχρονισμού 4, 9, 10 και 14 χιλιοστών του δευτερολέπτου. Οι δηλώσεις καθορισμού για τις ελάχιστες/μέγιστες επιτρεπόμενες τιμές συγχρονισμού βρίσκονται στο λογισμικό και έχουν οριστεί επί του παρόντος για 3 και 16 χιλιοστά του δευτερολέπτου. Οι χρόνοι bit διαφέρουν επίσης μεταξύ των αισθητήρων, οπότε ο αλγόριθμος για την αποκωδικοποίηση των bit πρέπει να το λάβει υπόψη. Ο χρόνος bit του πρώτου bit αποθηκεύεται όπως ο χρόνος ενός επόμενου bit που έχει σημαντική διαφορά από το πρώτο bit. Μια άμεση σύγκριση των επόμενων χρόνων δυαδικών ψηφίων δεν είναι δυνατή, οπότε χρησιμοποιείται ένας ορισμός "fudge factor" ("Παραλλαγή"). Η αποκωδικοποίηση δυαδικών ψηφίων ξεκινά υποθέτοντας ότι το πρώτο bit δεδομένων καταγράφεται πάντα ως λογική 1. Αυτή η τιμή αποθηκεύεται και στη συνέχεια χρησιμοποιείται για τον έλεγχο των επόμενων bit. Εάν ένας μετέπειτα αριθμός δεδομένων bit βρίσκεται μέσα στο παράθυρο διακύμανσης της αποθηκευμένης τιμής, τότε καταγράφεται επίσης ως λογική 1. Εάν είναι έξω από το παράθυρο διακύμανσης της αποθηκευμένης τιμής, τότε καταγράφεται ως λογική 0. Αν η λογική 0 ο χρόνος δυαδικών ψηφίων είναι μικρότερος από τον πρώτο χρόνο bit και, στη συνέχεια, μια σημαία έχει οριστεί για να πει στο λογισμικό ότι τα byte πρέπει να αντιστραφούν πριν από την εμφάνιση. Η μόνη περίπτωση που αυτός ο αλγόριθμος αποτυγχάνει είναι όταν τα bit σε ένα μήνυμα είναι όλα 0. Μπορούμε να δεχτούμε αυτόν τον περιορισμό επειδή αυτό το είδος μηνύματος δεν έχει νόημα.

Όλοι οι αισθητήρες που με ενδιαφέρουν έχουν μήκος μηνύματος 24 bits δεδομένων αλλά το λογισμικό δεν περιορίζεται σε αυτό το μήκος. Υπάρχει ένα buffer για έως και επτά bytes (θα μπορούσαν να προστεθούν περισσότερα) και ορίζει το ελάχιστο και το μέγιστο μήκος μηνύματος σε byte. Το λογισμικό έχει ρυθμιστεί για να συλλέγει τα bit, να τα μετατρέπει σε byte, να τα αποθηκεύει προσωρινά και στη συνέχεια να τα εξάγει σε μορφή ASCII μέσω της σειριακής θύρας. Το συμβάν που ενεργοποιεί την έξοδο του μηνύματος είναι η λήψη ενός νέου παλμού έναρξης/συγχρονισμού.

Βήμα 4: Καταγραφή δεδομένων

ΦΟΡΤΩΣΗ ΔΕΔΟΜΕΝΩΝ
ΦΟΡΤΩΣΗ ΔΕΔΟΜΕΝΩΝ

Το λογισμικό έχει ρυθμιστεί για να εξάγει τα μετατρεπόμενα δεδομένα ως χαρακτήρες ASCII μέσω της σειριακής εξόδου (TX) του Arduino. Όταν έφτιαξα την έκδοση PIC, χρειάστηκε να συνδεθώ με ένα τερματικό πρόγραμμα στον υπολογιστή για να εμφανιστούν τα δεδομένα. Ένα πλεονέκτημα του Arduino IDE είναι ότι έχει ενσωματωμένη λειτουργία Serial Monitor. Ρύθμιση του ρυθμού σειριακής θύρας στα 115.2k και έπειτα ρύθμιση του παραθύρου Serial Monitor στον ίδιο ρυθμό. Το στιγμιότυπο οθόνης εδώ δείχνει μια τυπική οθόνη με εξόδους από μια ποικιλία αισθητήρων που έχω. Όπως μπορείτε να δείτε, τα δεδομένα μερικές φορές δεν είναι τέλεια, αλλά μπορείτε εύκολα να προσδιορίσετε ποια θα είναι η πραγματική τιμή κάθε αισθητήρα.

Βήμα 5: Δείγμα λογισμικού δέκτη

Δείγμα λογισμικού δέκτη
Δείγμα λογισμικού δέκτη

Έχω συμπεριλάβει ένα δείγμα καταλόγου λογισμικού που δείχνει πώς μπορείτε να χρησιμοποιήσετε τις συλλεγμένες πληροφορίες για να λάβετε ένα συγκεκριμένο σύνολο κωδικών για την εφαρμογή σας. Αυτό το παράδειγμα έχει δημιουργηθεί για να μιμηθεί μία από τις απομακρυσμένες πρίζες μου Etekcity. Η μία εντολή ανάβει το LED που είναι ενσωματωμένο στο Nano (D13) και η άλλη εντολή σβήνει το LED. Εάν δεν έχετε ενσωματωμένο LED στο Arduino, προσθέστε την αντίσταση και το LED όπως φαίνεται στο διάγραμμα. Σε μια πραγματική εφαρμογή, αυτή η λειτουργία θα ενεργοποιούσε/απενεργοποιούσε την ηλεκτρική πρίζα (χρησιμοποιώντας ρελέ ή τριακ). Οι χρόνοι συγχρονισμού, οι χρόνοι δυαδικών ψηφίων και τα αναμενόμενα byte δεδομένων καθορίζονται από πριν για ευκολία στην τροποποίηση. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε από τις υπόλοιπες γραμμές δεδομένων για να ενεργοποιήσετε/απενεργοποιήσετε τα πράγματα κ.λπ. για τη συγκεκριμένη εφαρμογή σας. Απλώς προσθέστε τους ισχύοντες κωδικούς εντολών και αντικαταστήστε τη λογική ενεργοποίησης/απενεργοποίησης LED στο "loop" για να ταιριάξει στις ανάγκες σας.

Συνιστάται: