Τηλεχειρισμός με υπέρυθρες

rc5_remote_control_system__image_3
rc5_remote_control_system__image_3ir_receiver_board_image_2rc5_remote_control_transmitter_image_2_499497734
5 5 4 Product


Στο τρέχον άρθρο παρουσιάζουμε την κατασκευή ενός συστήματος τηλεχειρισμού 5 καναλιών με υπέρυθρες. Το σύστημα περιλαμβάνει ένα απλό τηλεχειριστήριο υπερύθρων (πομπός) 5 πλήκτρων κι ένα δέκτη υπερύθρων. Στο δέκτη υπάρχουν 5 ηλεκτρονόμοι (ρελέ) που επιτρέπουν τον έλεγχο 5 καναλιών. Το τηλεχειριστήριο (πομπός) βασίζεται στο μικροελεγκτή χαμηλού κόστους PIC12F617 και ο δέκτης στον δημοφιλή μικροελεγκτή PIC16F84A. Το σύστημα χρησιμοποιεί το πρωτόκολλο RC5 που είναι ευρύτατα διαδεδομένο λόγω της αξιοπιστίας και της απλότητάς του.

Πλακέτες τηλεχειρισμού RC5 (Πομπός και δέκτης)
Πλακέτες τηλεχειρισμού RC5 (Πομπός και δέκτης)

Βασικές γνώσεις για τις υπέρυθρες

Η υπέρυθρη ακτινοβολία (υπέρυθρες ακτίνες) είναι ηλεκτρομαγνητική ακτινοβολία με συχνότητες μεταξύ του ηλεκτρομαγνητικού φάσματος των μικροκυμάτων και του φάσματος του ορατού φωτός. Γενικώς, η ακτινοβολία υπερύθρων περιλαμβάνει ένα αρκετά ευρύ φάσμα συχνοτήτων και η συνολική φασματική περιοχή των υπερύθρων ακτίνων μπορεί να διαχωριστεί σε τρεις διακριτές περιοχές που τις ονομάζουμε μακρά - μεσαία και βραχέα περιοχή του υπέρυθρου φάσματος, αντίστοιχα όπως και για τα ραδιοφωνικά κύματα. Η περιοχή των βραχέων υπερύθρων βρίσκεται εγγύτερα στο ορατό φως ενώ η περιοχή των μακρών υπερύθρων είναι πιο κοντά στην περιοχή των μικροκυμάτων. Οι όροι μακρά - μεσσία και βραχέα, αναφέρονται ουσιαστικά στα μήκη κύματος της εκάστοτε περιοχής.

Η φασματική περιοχή των υπερύθρων
Η φασματική περιοχή των υπερύθρων

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

Υπάρχουν πολλά πρωτόκολλα επικοινωνίας για μετάδοση πληροφοριών με υπέρυθρες, όπως τα πρωτόκολλα RC5, RC6, SIRC, NEC, IrDA κ.α.

Η ηλεκτρομαγνητική ακτινοβολία στην περιοχή του υπέρυθρου φάσματος συμπεριφέρεται όπως ακριβώς και το φως και διαδίδεται ευθύγραμμα. Γι΄αυτό άλλωστε μιλάμε για υπέρυθρες "ακτίνες". Λόγω της ευθύγραμμης διάδοσης, οι τηλεχειρισμοί μέσω υπερύθρων απαιτούν οπτική επαφή μεταξύ πομπού και δέκτη. Ωστόσο, οι υπέρυθρες ακτίνες μπορούν να εκτραπούν από την ευθύγραμμη πορεία τους με χρήση ανακλαστήρων  (καθρεπτών) όπως ακριβώς συμβαίνει και με το φως. Επίσης μπορούν να αναμεταδοθούν από ενδιάμεσους επαναλήπτες και υπάρχουν πολλές εταιρείες που παρέχουν επαναλήπτες για τηλεχειρισμούς για την αύξηση της εμβέλειας αλλά και για την υπερπήδηση εμποδίων. 

Το πρωτόκολλο RC5

Το πρωτόκολλο RC-5 αναπτύχθηκε από την εταιρεία Philips στα τέλη της δεκαετίας του 1980 ως ένα ημι-κατοχυρωμένο πρωτόκολλο επικοινωνίας για τηλεχειρισμούς μέσω υπερύθρων σε ηλεκτρονικές συσκευές  ευρείας κατανάλωσης. Το πρωτόκολλο RC-5 έγινε έκτοτε το πιο δημοφιλές πρωτόκολλο για τηλεχειρισμούς με υπέρυθρες σε ερασιτεχνικές κατασκευές ή ανάμεσα στους χομπίστες ηλεκτρονικούς λόγω της απλότητάς του αλλά και λόγω του ότι υπάρχουν και πολλά τηλεχειριστήρια RC5 στην αγορά που μπορούν να συνδυαστούν με ιδιοκατασκευασμένους δέκτες.

Το πρωτόκολλο RC5 χρησιμοποιεί διφασική διαμόρφωση (γνωστή και ως κωδικοποίηση Manchester) σε φέρουσα των 36 KHz. Σε πολλές περιπτώσεις όμως χρησιμοποιούνται και φέρουσες των 38 KHz ή 40 KHz, γιατί οι ανιχνευτές υπερύθρων που λειτουργούν στις τελευταίες δύο  συχνότητες είναι πιο διαδεδομένοι σε σχέση με αυτούς  των 36KHz. Οι συχνότητες αυτές δεν αντιστοιχούν φυσικά στο φάσμα των υπερύθρων αλλά αναφέρονται στη συχνότητα με την οποία αναβοσβήνει μία πηγή υπερύθρων ( η καθαυτή συχνότητα των υπερύθρων είναι της τάξης των THz). Ο πομπός δηλαδή χρησιμοποιεί μία φωτεινή πηγή υπερύθρων που αναβοσβήνει με συχνότητα 36, 38 ή 40KHz (36000, 38000, ή 40000 φορές το δευτερόλεπτο). Ο λόγος που χρησιμοποιούμε υπέρυθρο φως που αναβοσβήνει (ριπές) και όχι μία συνεχόμενη φωτεινή ακτίνα είναι για να μπορούμε να διαχωρίζουμε τις υπέρυθρες ακτίνες ενός τηλεχειρισμού από το διάχυτο συνεχές υπέρυθρο φως που υπάρχει ούτως ή άλλως στο περιβάλλον.

Η φέρουσα είναι λοιπόν υπέρυθρο φως που αναβοσβήνει (στα 36, 38 ή 40KHz). Στο πρωτόκολλο RC5, πάνω σε αυτή τη φέρουσα "φορτώνονται" τα δεδομένα σε πακέτα (ακολουθίες) των 14bit. Κάθε bit εκπέμπεται ακριβώς σε 1.778ms. Σε αυτά τα 1.778ms, τον μισό χρόνο εκπέμπεται κανονικά η φέρουσα και τον υπόλοιπο μισό χρόνο δεν εκπέμπεται απολύτως τίποτα (υπάρχει σιγή). Ο χρόνος των 1.778ms στο πρωτόκολλο RC5 είναι γνωστός και ως ο χρόνος συμβόλου (ο χρόνος δηλαδή που απαιτείται για την εκπομπή ενός συμβόλου που για το πρωτόκολλο RC5 ισοδυναμεί με ένα bit).

Για την εκπομπή του λογικού “0”, στο πρώτο μισό του χρόνου συμβόλου εκπέμπεται η φέρουσα και στο δεύτερο μισό υπάρχει σιγή (δεν εκπέμπεται τίποτα). Απεναντίας, για την αποστολή λογικού "1", εκπέμπεται η φέρουσα στο δεύτερο μισό του χρόνου συμβόλου και υπάρχει σιγή στο πρώτο μισό. Πρέπει επίσης να πούμε ότι για τη φέρουσα δεν χρησιμοποιείται κύκλος λειτουργίας 50% (1/2) αλλά 33% (1/3) ή 25% (1/4), για οικονομία ισχύος.

Η διαμόρφωση στο πρωτόκολλο RC5
Το πρωτόκολλο RC5 χρησιμοποιεί δι-φασική διαμόρφωση


Για την φέρουσα των 36 kHz, ο κύκλος (περίοδος επανάληψης της φέρουσας) είναι 27.778 μs και χρειάζονται ακριβώς 64 κύκλοι της φέρουσας για τη μετάδοση ενός bit. Έτσι, ο μισός χρόνος συμβόλου κατά τον οποίο μεταδίδεται η φέρουσα περιέχει 32 κύκλους της φέρουσας δηλαδή αντιστοιχεί σε 32 x 27.778 μs = 889μs. Με κύκλο λειτουργίας 25%, κάθε παλμός της φέρουσας έχει διάρκεια 6.944μs και μεταδίδεται κατά τη διάρκεια ενός κύκλου της φέρουσας.

Στο πρωτόκολλο RC5, τα δεδομένα μεταδίδονται σε πακέτα των 14 bits (συμβόλων) κι ένα πακέτο των 14 bits χρειάζεται ακριβώς 24.889 ms για να μεταδοθεί. Καθ' όλη τη διάρκεια που πατιέται ένα πλήκτρο στο τηλεχειριστήριο, μεταδίδονται συνεχώς πακέτα των 14bit για μια συγκεκριμένη κωδική λέξη που αντιστοιχεί στο εκάστοτε πλήκτρο. Τα όμοια πακέτα των 14bit μεταδίδονται διαδοχικά, το ένα μετά το άλλο (καθ' όλη τη διάρκεια που το πλήκτρο παραμένει πατημένο) κάθε 113.778 ms (4096 / 36 kHz). Ωστόσο, θα πρέπει να πούμε ότι ο ακριβής χρονισμός που έχουμε περιγράψει, στην πραγματικότητα δεν διατηρείται πάντοτε αυστηρά από τους κατασκευαστές. Ο εκάστοτε χρονισμός σε κάθε τηλεχειριστήριο μπορεί να αποκλίνει στα πλαίσια κάποιον ανοχών από τον ιδανικό χρονισμό που περιγράψαμε ως τώρα και οι αποκλίσεις οφείλονται κυρίως σε ιδιαιτερότητες του υλικού που χρησιμοποιείται σε κάθε υλοποίηση.

Συνοψίζοντας, τονίζουμε και πάλι ότι κατά τη μετάδοση ενός bit, η φέρουσα εκπέμπεται για 889us και τα λογικά "0" και "1" εκπέμπονται ως:

  • Λογικό '0' – Η φέρουσα εκπέμπεται για 889us και ακολουθεί σιγή για άλλα 889us. Συνολικά η μετάδοση του λογικού "0" διαρκεί 1.778ms
  • Λογικό '1' – Υπάρχει σιγή για 889us και ακολουθεί εκπομπή της φέρουσας για άλλα 889us. Συνολικά η μετάδοση του λογικού "1" διαρκεί 1.778ms, όπως ακριβώς και για το λογικό "0".

Στο RC5, σε κάθε πάτημα ενός πλήκτρου στο τηλεχειριστήριο εκπέμπονται πακέτα των 14 bits. Τα 14bits σε κάθε πακέτο περιλαμβάνουν κατά σειρά:

  • Δύο αρχικά bits (τα S1 και S2) που και τα δύο αντιστοιχούν σε λογικό '1'*
  • Ένα bit που αντιστρέφεται σε κάθε πάτημα ενός πλήκτρου στο τηλεχειριστήριο (το bit T - toggle). Ο κυρίαρχος ρόλος του T bit είναι για να μπορεί ο δέκτης να διαχωρίζει το συνεχόμενο πάτημα ενός πλήκτρου από το επαναλαμβανόμενο πάτημα, δηλαδή να ξεχωρίζει ένα απλό "κλικ" από ένα διπλό "κλικ".
  • Ακολουθούν 5-bit διευθυνσιοδότησης (ID) για την αποστολή της διεύθυνσης του δέκτη για τον οποίο προορίζονται τα δεδομένα. Αυτά τα 5 bit διευθυνσιοδότησης αντιστοιχούν στη διεύθυνση της συσκευής (δέκτη) για την οποία προορίζονται τα δεδομένα που αποστέλλει ο πομπός. Με αυτό τον τρόπο, μέσα σε έναν χώρο (ένα δωμάτιο για παράδειγμα), ένα τηλεχειριστήριο μπορεί να ελέγχει πολλούς διαφορετικούς δέκτες απευθυνόμενο κάθε φορά σε διαφορετική διεύθυνση παραλήπτη. Συνολικά υπάρχουν 25 διαφορετικές διευθύνσεις, δηλαδή μπορούν να υποστηριχτούν 32 διαφορετικές συσκευές στον ίδιο χώρο.
  • Μετά τη διεύθυνση, αποστέλλονται 6-bit εντολής (command). Τα bit εντολής μεταφέρουν στην πραγματικότητα την εντολή που προορίζεται για τον εκάστοτε δέκτη, δηλαδή μεταφέρουν τα πραγματικά δεδομένα που αποστέλλονται στον δέκτη. Με 6-bits εντολών μπορούν να υποστηριχτούν 26 =64 διαφορετικές εντολές.

* Αξίζει να σημειώσουμε σε αυτό το σημείο ότι κατόπιν της αρχικής δημιουργίας του πρωτοκόλλου RC5 από τη Philips, διαπιστώθηκε ότι για πολλές εφαρμογές δεν αρκούν οι 64 εντολές και έτσι αποφασίστηκε να χρησιμοποιείται όποτε χρειάζεται και ένα 7ο bit για τις εντολές για να υποστηρίζονται συνολικά 27=128 εντολές. Έτσι δημιουργήθηκε το λεγόμενο "εκτεταμένο πρωτόκολλο RC5" το οποίο όμως για να είναι συμβατό με το αρχικό πρωτόκολλο δεν εκπέμπει 7 bit εντολής αλλά απεναντίας χρησιμοποιεί το bit S2 ως το έβδομο bit σε κάθε εντολή. Δηλαδή και το εκτεταμένο πρωτόκολλο χρησιμοποιεί 6 bits εντολής, απλά χρησιμοποιεί και το S2 ως επιπρόσθετο έβδομο bit για κάθε εντολή, γι' αυτό πρέπει να δίνεται προσοχή στη χρήση - ερμηνεία του S2 bit που ποικίλει αναλόγως αν χρησιμοποιούμε το κλασσικό ή το "εκτεταμένο" πρωτόκολλο RC5. 

;Ένα πακέτο των 14 bit στο πρωτόκολλο RC5
Παράδειγμα αποστολής ενός πακέτου των 14 bit στο πρωτόκολλο RC5 για αποστελλόμενη διεύθυνση 07h (00111b) και αποστελλόμενη εντολή 03h (000011b)

Η παραπάνω εικόνα απεικονίζει ένα τυπικό πακέτο στο RC5:

  • Χρειάζονται 5.333 ms για την εκπομπή των bit έναρξης S1, S2 και του T bit. Παρατηρείστε ότι αφού το πρώτο bit, το S1, είναι λογικό "1", η εκπομπή του πακέτου αρχίζει με σιγή. Επομένως, ο δέκτης αντιλαμβάνεται την έναρξη αποστολής του πακέτου με καθυστέρηση 889μs (αφού περάσουν τα πρώτα 889μs).
  • Χρειάζονται 8.889 ms για την εκπομπή των 5 bits της διεύθυνσης.
  • Χρειάζονται 10.667 ms για την εκπομπή των 6 bits εντολών.
  • Για την εκπομπή όλου του πακέτου χρειάζονται συνολικά 24.889 ms.

Το T bit χρησιμοποιείται για να μπορεί ο δέκτης να διαχωρίζει το συνεχόμενο πάτημα ενός πλήκτρου από το επαναλαμβανόμενο πάτημα, δηλαδή να ξεχωρίζει ένα απλό "κλικ" από ένα διπλό "κλικ". Αν ένα πλήκτρο του τηλεχειριστηρίου κρατηθεί πατημένο, τότε ο πομπός στέλνει το ίδιο πακέτο επαναλαμβανόμενα κάθε 114ms. Καθόσον το πλήκτρο στο τηλεχειριστήριο παραμένει πατημένο, το T bit παραμένει στην ίδια λογική κατάσταση καθ' όλη τη διάρκεια που εκπέμπονται τα επαναλαμβανόμενα πακέτα. Η ερμηνεία της αποστολής επαναλαμβανόμενων πακέτων επαφίεται στο δέκτη.

Ο πομπός υπερύθρων (τηλεχειριστήριο)

Παρόλο που υπάρχουν πάρα πολλά έτοιμα τηλεχειριστήρια RC5 στην αγορά και σίγουρα μπορείτε να βρείτε ένα σε χαμηλή τιμή, μπορείτε να κατασκευάσετε το δικό σας τηλεχειριστήριο υπερύθρων για να μάθετε και να διασκεδάσετε. Επιπλέον, η κατασκευή παρέχει ικανοποίηση και μοναδική ηθική επιβράβευση.

The IR remote control transmitter
Το τηλεχειριστήριο υπερύθρων RC5 - 5 πλήκτρων

Για την κατασκευή ενός τηλεχειριστηρίου RC5 - 5 πλήκτρων χρησιμοποιούμε την τεχνική PWM (Pulse-Width Modulation - Διαμόρφωση Εύρους Παλμών). Με την τεχνική PWM δημιουργούμε τη φέρουσα και στη συνέχεια παράγουμε ένα σήμα PCM (Pulse Code Modulation - Κωδικοποίηση με παλμούς)  το οποίο εκπέμπεται μέσω LED υπερύθρων. Με την τεχνική PCM δημιουργούμε ένα εκπεμπόμενο σήμα το οποίο μπορεί εύκολα να ανιχνευτεί στο δέκτη και να διαχωριστεί από το θόρυβο του περιβάλλοντος. Στο δέκτη το σήμα ανιχνεύεται με τη βοήθεια ενός φίλτρου διέλευσης ζώνης συχνοτήτων και αποδιαμορφώνεται για να ανακτηθούν τα εκπεμπόμενα πακέτα. Στο πρωτόκολλο RC5 ορίζεται φέρουσα των 36KHz για τον πομπό, επομένως και το φίλτρο διέλευσης ζώνης συχνοτήτων στο δέκτη αναμένεται να έχει την ίδια κεντρική συχνότητα.

Κωδικοποίηση με παλμούς - PCM, στο RC5
Η διαμόρφωση PCM, στο πρωτόκολλο RC5, επιτυγχάνεται με το σήμα PWM της φέρουσας και μία λογική πύλη AND

Στο δικό μας πομπό χρησιμοποιούμε φέρουσα 38 KHz και όχι 36KHz που επισήμως προβλέπεται στο RC5. Το κάνουμε αυτό διότι οι ανιχνευτές υπερύθρων στα 38KHz είναι πιο συνηθισμένοι από αυτούς των 36ΚΗz και μπορούμε να τους βρούμε εύκολα στο εμπόριο. Η επιλογή μας αυτή είναι μία παρέκκλιση από το πρότυπο RC5, ωστόσο πρόκειται για μία κοινή πρακτική που υιοθετείται από πολλούς κατασκευαστές τηλεχειρισμών με RC5. Στην πράξη, είναι πολύ συνηθισμένο να χρησιμοποιούνται συχνότητες για τη φέρουσα από τα 32 έως τα 39KHz. Στο δικό μας τηλεχειριστήριο, η επιλογή της συχνότητας γίνεται μέσω κώδικα και οιανδήποτε αλλαγή είναι εξίσου εύκολη με την αλλαγή μερικών γραμμών κώδικα.

Στο τηλεχειριστήριο χρησιμοποιούμε έναν μικροελεγκτή ο οποίος την περισσότερη ώρα βρίσκεται σε αδράνεια και καταναλώνει σχεδόν μηδαμινή ισχύ, προκειμένου η μπαταρία του τηλεχειριστηρίου να διαρκεί πολύ καιρό. Ο μικροελεγκτής μεταβαίνει σε κανονική λειτουργία μόνο όταν πατηθεί κάποιο πλήκτρο. Τότε, παράγει και εκπέμπει το σήμα PCM μέσω LED υπερύθρων και έπειτα μεταβαίνει και πάλι σε κατάσταση αδράνειας όταν ο χρήστης απελευθερώσει το πλήκτρο. Η βασική λειτουργία του μικροελεγκτή, στο τηλεχειριστήριο υπερύθρων, συνοψίζεται παρακάτω:

Ο αλγόριθμος τοy τηλεχειριστηρίου RC5
Ο αλγόριθμος που υλοποιείται στο τηλεχειριστήριο RC5

Χρησιμοποιούμε την εσωτερική βαθμίδα PWM του μικροελεγκτή για να παράγουμε μία φέρουσα των 38 kHz με το σωστό κύκλο λειτουργίας. Έπειτα, η φέρουσα πολλαπλασιάζεται με τα δεδομένα με μία ιδεατή πύλη λογικού "Και" - πύλη "ΑND" που υλοποιείται μέσω κώδικα. Από τον πολλαπλασιασμό (που ουσιαστικά είναι ενεργοποίηση - απενεργοποίηση) παράγονται ριπές που δημιουργούν το σήμα PCM. Όλα γίνονται μέσω κώδικα και παράγονται πακέτα των 14-bit σύμφωνα με το πρωτόκολλο RC5 σε κάθε πάτημα ενός πλήκτρου στο τηλεχειριστήριο. Η χρήση PWM και η δημιουργία κυματομορφών μέσω κώδικα προσφέρει μεγάλη ευελιξία και η τεχνική θα μπορούσε να χρησιμοποιηθεί ακόμη και για την υλοποίηση άλλων πρωτοκόλλων, πλην του RC5, με το ίδιο υλικό (hardware). 

Στο ηλεκτρονικό σχηματικό του τηλεχειριστηρίου, μπορείτε να δείτε ότι η κωδικοποίηση σύμφωνα με το πρωτόκολλο RC5, γίνεται ουσιαστικά από τον μικροελεγκτή PIC12F617. Οι παραγόμενες κυματομορφές οδηγούνται τελικά σε δύο LED υπερύθρων, μέσω ενός τρανζίστορ NPN που παρέχει το κατάλληλο ρεύμα για την οδήγηση των LED. Επιλέξαμε να χρησιμοποιήσουμε δύο LED υπερύθρων αντί για ένα, προκειμένου να αυξήσουμε την εμβέλεια του τηλεχειριστηρίου. Με την επιλογή μας αυτή, η εμβέλεια του τηλεχειριστηρίου ξεπερνά τα 20m.

Τα LED υπερύθρων που χρησιμοποιούμε στο τηλεχειριστήριο είναι τύπου TSAL6100. Πρόκειται για LED υψηλής ισχύος που παράγονται από την εταιρεία Vishay. Τα συγκεκριμένα LED εκπέμπουν υπέρυθρο φως στα 940 nm. Για μέγιστη απόδοση και στο δέκτη χρησιμοποιούμε έναν ανιχνευτή υπερύθρων που λειτουργεί στο ίδιο μήκος κύματος (940nm).

Ο ακροδέκτης GP2 του μικροελεγκτή χρησιμοποιείται ως έξοδος για το σήμα PCM και οι ακροδέκτες GP0, GP1, GP3, GP4 και GP5 χρησιμοποιούνται ως είσοδοι για τα πλήκτρα του τηλεχειριστηρίου. Για τους ακροδέκτες GP0, GP1, GP4 και GP5, υπάρχουν εσωτερικές αντιστάσεις πρόσδεσης με την τροφοδοσία (pull-ups) εντός του μικροελεγκτή. Ωστόσο, δεν υπάρχει εσωτερική αντίσταση pull-up για τον ακροδέκτη GP3 γι΄αυτό και χρησιμοποιούμε την αντίσταση R2 ως εξωτερική αντίσταση πρόσδεσης με την τροφοδοσία (pull-up).

Η κατανάλωση ρεύματος του τηλεχειριστηρίου είναι γύρω στα 35nA και 20mA, σε αδράνεια και κατά τη διάρκεια εκπομπής σήματος, αντίστοιχα. Με αυτή την κατανάλωση, 3 μπαταρίες AAA, αναμένεται να διαρκέσουν για μερικά χρόνια.

RC5 transmitter schematic
Το ηλεκτρονικό κύκλωμα του τηλεχειριστηρίου RC5


Ο δέκτης υπερύθρων

Ο δέκτης χρησιμοποιεί έναν ανιχνευτή υπερύθρων στα 940nm. Ο ίδιος ανιχνευτής περιλαμβάνει ένα εσωτερικό φίλτρο διέλευσης ζώνης στα 38KHz, προκειμένου να ανταποκρίνεται μόνο σε υπέρυθρο φως που αναβοσβήνει στα 38KHz και να μην επηρεάζεται από το διάχυτο υπέρυθρο φως που υπάρχει στο περιβάλλον.

Η έξοδος του ανιχνευτή υπερύθρων, υπό κανονικές συνθήκες παραμένει σε λογικό 1. Μεταβαίνει σε λογικό 0 μόλις ανιχνεύσει υπέρυθρο φως στα 940nm, το οποίο αναβοσβήνει στα 38KHz. Η μετάβαση από το 1 στο 0 (αρνητικό μέτωπο παλμού), σηματοδοτεί ότι ο πομπός εκπέμπει τη φέρουσα μετά από ένα χρονικό διάστημα που παρέμενε αδρανής. Μία μετάβαση από 0 σε 1 (θετικό μέτωπο παλμού) σηματοδοτεί τη μετάβαση του πομπού στην αδράνεια, κατόπιν εκπομπής της φέρουσας για κάποιο χρονικό διάστημα.

The IR receiver
Ο δέκτης υπερύθρων του τηλεχειρισμού

Στην πραγματικότητα, ο ανιχνευτής υπερύθρων αντιστρέφει το λαμβανόμενο σήμα. Η αδράνεια (απουσία εκπομπής) μετατρέπεται σε λογικό 1 και η εκπομπή σήματος σε λογικό 0 (λογική αντιστροφή του σήματος).

Η δομή του υλικού (hardware)
Οι βαθμίδες του τηλεχειρισμού

Για την αποκωδικοποίηση του λαμβανόμενου σήματος χρησιμοποιούμε τον μικροελεγκτή PIC16F84A στο δέκτη. Ένας ακροδέκτης εισόδου - εξόδου (IO pin) του μικροελεγκτή συνδέεται απευθείας με την έξοδο του ανιχνευτή υπερύθρων. Οι παλμοί από την έξοδο του ανιχνευτή προκαλούν διακοπές (interrupts) στο μικροελεγκτή. Το λογισμικό που "τρέχει" ο μικροελεγκτής του δέκτη υλοποιεί μία τυπική μηχανή καταστάσεων - ελεγχόμενη από διακοπές (interrupt driven state-machine) για να αποκωδικοποιεί τα λαμβανόμενα πακέτα RC5 βάσει των χρόνων που διαρκούν οι λαμβανόμενοι παλμοί. 

Ένα κομμάτι του κώδικα έχει γραφτεί για τη βαθμονόμηση του δέκτη σε κάθε λαμβανόμενο πακέτο.Η βαθμονόμηση γίνεται κάθε φορά, δεδομένου ότι οι ακριβείς χρόνοι εκπομπής κάθε bit ενδέχεται να ποικίλουν από εκπομπή σε εκπομπή και να παρεκλίνουν από το χρονισμό που προβλέπεται στο πρότυπο RC5, στα πλαίσια πάντοτε κάποιον ανοχών. Σε κάθε λαμβανόμενο πακέτο καθορίζονται οι αποδεχτές ανοχές, προκειμένου ένα λαμβανόμενο πακέτο να θεωρείται έγκυρο ή άκυρο.

Το ηλεκτρονικό κύκλωμα του δέκτη τηλεχειρισμού RC5
Το ηλεκτρονικό κύκλωμα του δέκτη τηλεχειρισμού

Ο ακριβής χρονισμός που προβλέπεται από το πρωτόκολλο RC5 δεν τηρείται αυστηρά από όλους τους κατασκευαστές τηλεχειριστηρίων για λόγους δομής του υλικού (hardware). Επίσης, αρκετά τηλεχειριστήρια χρησιμοποιούν κεραμικούς συντονιστές (ceramic resonators) για το χρονισμό, οι οποίοι δεν παρέχουν ακρίβεια και ενδέχεται να ολισθαίνουν λόγω θερμοκρασίας, υγρασίας ή γήρανσης. Επίσης σε κάθε εκπομπή ενδέχεται να υπάρχει και ο λεγόμενος θόρυβος φάσης (jitter) και επομένως ενδέχεται όλα τα ίδια bit να μην έχουν ακριβώς τον ίδιο χρονισμό (να διαρκούν διαφορετικό χρόνο). Προκειμένου λοιπόν ο δέκτης μας να υποστηρίζει όλα τα τηλεχειριστήρια RC5, ρυθμίζουμε μέσω του λογισμικού να υπάρχει μία αποδεκτή ανοχή στο χρονισμό της τάξης του 12%.

Ο χρονισμός των bits και οι ανοχές υπολογίζονται κατά τη διάρκεια της βαθμονόμησης  από τον υφιστάμενο χρονισμό των δύο πρώτων bit (των S1 και S2) σε κάθε πακέτο. Δεδομένου ότι αυτά τα δύο αρχικά bit στο αρχικό πρωτόκολλο RC5 είναι πάντοτε σε λογικό 1, χρησιμοποιούμε έναν εσωτερικό χρονιστή του μικροελεγκτή για να μετρήσουμε τη διάρκεια τους και βάσει της μέτρησης μας εκτιμούμε στη συνέχεια το χρόνο που αναμένεται να διαρκεί η αποστολή του κάθε bit. Στην πράξη, χρησιμοποιούμε τον εσωτερικό χρονιστή 0 (timer 0) του μικροελεγκτή γαι να μετρήσουμε το χρόνο που μεσολαβεί μεταξύ των δύο πρώτων διακοπών (interrupts) που λαμβάνουν χώρα κατά τα δύο πρώτα αρνητικά μέτωπα σε κάθε λαμβανόμενο πακέτο των 14 bit. Χρησιμοποιούμε το μετρούμενο χρόνο ως αναφορά για τον αναμενόμενο χρονισμό των επόμενων bit και επιπλέον λαμβάνουμε υπόψη μία πρόσθετη ανοχή γύρω στο 12%. Η ανοχή προκύπτει από μία γρήγορη διαίρεση του μετρούμενο χρόνου διάρκειας του κάθε bit με το 8, η οποία διαίρεση υλοποιείται στην πράξη με μία δεξιά ολίσθηση κατά 3 θέσεις.

Οι πρώτες καταστάσεις της "μηχανής καταστάσεων" αφορούν τη βαθμονόμηση, όπως έχουμε αναφέρει έως στιγμής. Μετά τη βαθμονόμηση, που ολοκληρώνεται λίγο μετά από το δεύτερο λαμβανόμενο μέτωπο παλμού, η μηχανή καταστάσεων μεταβαίνει σε επόμενα στάδια (καταστάσεις) για να αποκωδικοποιήσει σε πραγματικό χρόνο τα επόμενα 12bit του εκάστοτε πακέτου. Οι διαδοχικές καταστάσεις στις οποίες μεταβαίνει η μηχανή καθορίζονται από έναν μετρητή που αυξάνεται κατά ένα σε κάθε αποκωδικοποίηση ενός bit. 

Η αποκωδικοποίηση αναφέρεται στη διαδικασία αναγνώρισης  τoυ κάθε bit με την αποδιαμόρφωση της διφασικής διαμόρφωσης (Manchester decoding demodulation). Χρησιμοποιούμε έναν αλγόριθμο αναγνώρισης που βασίζεται στην ανίχνευση του χρόνου διάρκειας αποστολής του κάθε bit. Περιγράφουμε τον αλγόριθμο αυτό , εδώ:

Χρησιμοποιώντας διακοπές (interrupts) που λαμβάνουν χώρα κατά τη διάρκεια των αρνητικών μετώπων του λαμβανόμενου αντεστραμμένου πακέτου RC5 (στην έξοδο του ανιχνευτή υπερύθρων), στην πράξη μπορούμε να ανιχνεύσουμε 3 διαφορετικές δυνατές περιπτώσεις για το χρονικό διάστημα που μεσολαβεί μεταξύ διαδοχικών διακοπών. Το χρονικό αυτό διάστημα μπορεί να αντιστοιχεί στη χρονική διάρκεια 1 bit, 1.5 bit ή 2 bit. Για τη μέτρηση του χρόνου μεταξύ δύο διαδοχικών αρνητικών μετώπων χρησιμοποιείται ο εσωτερικός χρονιστής 0 (timer 0) του μικροελεγκτή σε λειτουργία μετρητή. Σε κάθε μέτρηση, η μετρούμενη τιμή αποθηκεύεται σε μία μεταβλητή και έπειτα ο χρονιστής μηδενίζεται για να ξεκινήσει η επόμενη μέτρηση. Η διάρκεια κάθε παλμού καθορίζεται από την τιμή του μετρητή και έχοντας γνώση του προηγούμενου παλμού, μπορούμε να ανιχνεύσουμε το εκάστοτε λαμβανόμενο bit. Καθώς η αποκωδικοποίηση λαμβάνει χώρα, τα αποτελέσματα καταχωρούνται σειριακά σε έναν καταχωρητή.  

  • Αν ο μετρούμενος χρόνος μεταξύ των δύο τελευταίων διαδοχικών αρνητικών μετώπων είναι ίσος με το χρόνο διάρκειας 1 bit, τότε το σημαίνει ότι το εκάστοτε λαμβανόμενο bit είναι ίδιο με το προηγούμενο.
  • Αν ο μετρούμενος χρόνος μεταξύ των δύο τελευταίων διαδοχικών αρνητικών μετώπων είναι ίσος με το χρόνο διάρκειας 1.5 bit, τότε το σημαίνει ότι το εκάστοτε λαμβανόμενο bit είναι το αντίστροφο σε σχέση με το προηγούμενο (0 αν το προηγούμενο ήταν 1 ή 1 αν το προηγούμενο ήταν 0).
  • Αν ο μετρούμενος χρόνος μεταξύ των δύο τελευταίων διαδοχικών αρνητικών μετώπων είναι ίσος με το χρόνο διάρκειας 2bit, τότε σημαίνει ότι το προηγούμενο bit που ελήφθη ήταν λογικό 1 και ακολούθησαν δύο διαδοχικές αντιστροφές. Δηλαδή, μετά από το λογικό 1 στάλθηκαν άλλα δύο bit, ένα λογικό 0 και ένα λογικό 1.
Αποδιαμόρφωση βάσει των λαμβανόμενων αρνητικών μετώπων
Αποδιαμόρφωση βάσει των λαμβανόμενων αρνητικών μετώπων

Αν συμβεί το τελευταίο bit σε ένα πακέτο των 14bit να είναι το λογικό 0, τότε δεν υπάρχει αρνητικό μέτωπο στο τέλος του πακέτου και ο timer 0 υπερχειλίζει μετά από μερικά milliseconds. Σε μία τέτοια περίπτωση, επαληθεύουμε μέσω του κώδικα το σωστό πλήθος των bit που έχουν ληφθεί προκειμένου να είμαστε σίγουροι για τον αν εκπέμφηκε όλο το πακέτο ή αν απλώς ο πομπός "έσβησε" πριν προλάβει να αποστείλει όλα τα δεδομένα. Αν ο έλεγχος αποδειχθεί σωστός, προσθέτουμε ένα λογικό "0" στο τέλος της λαμβανόμενης ακολουθίας διαφορετικά το τελευταίο πακέτο απορρίπτεται. Μετά και τη λήψη του τελευταίου bit στο λαμβανόμενο πακέτο, ο μετρητής καταστάσεων μηδενίζεται και η μηχανή μεταβαίνει στην αρχική της κατάσταση για να είναι έτοιμη για τη λήψη του επόμενου πακέτου. Επίσης,με τη λήψη έκαστου πακέτου, ο μικροελεγκτής αξιοποιεί τα λαμβανόμενα bit διεύθυνσης και ελέγχου (adrress και control bits) προκειμένου να ενεργοποιήσει ή απενεργοποιήσει τους αντίστοιχους ηλεκτρονόμους, όπως απαιτείται από την εντολή που έλαβε από το τηλεχειριστήριο. 

Κωδικοί εντολών και διευθύνσεων που χρησιμοποιούμε στην κατασκευή μας

Ο δέκτης της κατασκευής μας αναγνωρίζει 7 εντολές. Δεδομένου ότι υπάρχουν 5 κανάλια (ηλεκτρονόμοι), οι πέντε εντολές σηματοδοτούν την αλλαγή κατάστασης σε κάθε αντίστοιχο ηλεκτρονόμο (μετάβαση από on σε off και αντίστροφα) και οι εναπομένουσες 2 εντολές χρησιμοποιούνται για την ενεργοποίηση ή απενεργοποίηση όλων των ηλεκτρονόμων ταυτόχρονα. 

Προκειμένου ο δέκτης μας να είναι συμβατός με τηλεχειριστήρια RC5 που κυκλοφορούν στο εμπόριο και να μπορεί να λειτουργεί εξίσου καλά με αυτά όπως και με το δικό μας τηλεχειριστήριο, διαλέξαμε κάποιους κώδικες εντολών που τυπικά χρησιμοποιούνται από τα περισσότερα τηλεχειριστήρια. Η επιλογή των κωδικών έγινε αφού αγοράσαμε μερικά τηλεχειριστήρια RC5 που κυκλοφορούν στο εμπόριο και ερευνήσαμε ποιους κωδικούς χρησιμοποιούν, δηλαδή ερευνήσαμε ποιοι από τους 26 διαφορετικοί κωδικοί εντολών στο RC5 είναι οι πιο κοινά χρησιμοποιούμενοι.

Διαπιστώσαμε ότι οι 7 πιο συχνά χρησιμοποιούμενοι κωδικοί εντολών είναι οι 21h, 20h, 11h, 10h, 0Dh, 0Ch, 01h και η τυπική χρησιμοποιούμενη διεύθυνση αποστολής είναι η 00h. Έτσι αποφασίσαμε να χρησιμοποιήσουμε τους συγκεκριμένους 7 κωδικούς και στο δικό μας δέκτη, καθώς και τη διεύθυνση 00h . Οι επιλογές μας αυτές δηλώνονται στον κώδικα των μικροελεγκτών και μπορούν εύκολα να τροποποιηθούν αν κάποιος επιθυμεί να χρησιμοποιήσει διαφορετικούς κωδικούς από αυτούς που εμείς επιλέξαμε.

Αξίζει να σημειώσουμε ότι ο δέκτης υποστηρίζει 7 εντολές, ενώ απεναντίας το τηλεχειριστήριο μας (ο πομπός) υποστηρίζει μόνο 5 εντολές για την ενεργοποίηση ή απενεργοποίηση των ηλεκτρονόμων, δεδομένου ότι έχει μόνο 5 πλήκτρα. Επομένως για να χρησιμοποιηθούν οι 2 πρόσθετες εντολές που αφορούν την ενεργοποίηση ή απενεργοποίηση όλων των ηλεκτρονόμων ταυτόχρονα θα πρέπει είτε να χρησιμοποιήσετε ένα τηλεχειριστήριο RC5 που θα προμηθευτείτε από την αγορά και που θα έχει τουλάχιστο 7 πλήκτρα ή να τροποποιήσετε τον κώδικα στον πομπό ή στο δέκτη. 

Basic TV - remote control
Ένα τυπικό τηλεχειριστήριο RC5 που προμηθευτήκαμε για 5$

Ο κώδικας εντολών των μικροελεγκτών είναι γραμμένος σε γλώσσα C και για τις 7 διαφορετικές εντολές που υποστηρίζονται έχουμε γράψει 7 διαφορετικές δηλώσεις "if". Επομένως, μπορείτε εύκολα να κάνετε τροποποιήσεις όσον αφορά τους χρησιμοποιούμενους κωδικούς αλλά μπορείτε επίσης εύκολα να προσθέσετε κι άλλες εντολές αν το επιθυμείτε. Η ενσωμάτωση και άλλων υποστηριζόμενων εντολών στο δέκτη είναι απλώς θέμα προσθήκης επιπρόσθετων δηλώσεων "if" στις ήδη υφιστάμενες.


Πως να φτιάξετε τον τηλεχειρισμό υπερύθρων

Για να φτιάξετε τον τηλεχειρισμό, πρώτα απ' όλα θα πρέπει να προμηθευτείτε τα εξαρτήματα που χρησιμοποιούμε. Για τους κωδικούς και τις τιμές εξαρτημάτων μπορείτε να ανατρέξετε στα σχηματικά. Στη συνέχεια θα πρέπει να συναρμολογήσετε τα εξαρτήματα πάνω σε τυπωμένα κυκλώματα (πλακέτες) ή σε μία πλακέτα - δοκιμών.

Αν επιθυμείτε να χρησιμοποιήσετε τυπωμένα κυκλώματα, μπορείτε είτε να φτιάξετε τα δικά σας ή μπορείτε εναλλακτικά να χρησιμοποιήσετε τα τυπωμένα κυκλώματα που έχουμε φτιάξει εμείς και που τα σχέδια τους παρατίθενται παρακάτω. 

Αφού συναρμολογήσετε τα κυκλώματα, θα πρέπει να προγραμματίσετε τους μικροελεγκτές χρησιμοποιώντας έναν κατάλληλο προγραμματιστή και τον κώδικα μηχανής για κάθε μικροελεγκτή που παρέχεται σε αρχεία .hex, παρακάτω. Για τον προγραμματισμό των πρωτοτύπων που βλέπεται στις φωτογραφίες, εμείς χρησιμοποιήσαμε τον προγραμματιστή PICKIT 3 – της Microchip.

Για να φτιάξετε τον τηλεχειρισμό, κανονικά δεν χρειάζεστε τον πηγαίο κώδικα, παρά μόνο τον κώδικα μηχανής (τη μεταγλώτιση του κώδικα) που σας παρέχουμε στα αρχεία  τύπου hex. Ωστόσο, αν επιθυμείτε να κάνετε αλλαγές, διορθώσεις, προσθήκες ή να φτιάξετε τηλεχειρισμούς RC5 με περισσότερα κανάλια, τότε θα χρειαστείτε και τον πηγαίο κώδικα. 


Συνημμένα

Το τυπωμένο κύκλωμα και οδηγός συναρμολόγησης για τον πομπό

Το τυπωμένο κύκλωμα και οδηγός συναρμολόγησης για το δέκτη

Ο κώδικας μηχανής του πομπού (hex file - machine code). Χρησιμοποιήστε αυτό το αρχείο για να προγραμματίσετε τον PIC12F617.

Ο κώδικας μηχανής του δέκτη (hex file - machine code). Χρησιμοποιήστε αυτό το αρχείο για να προγραμματίσετε τον PIC16F84A.

Ο Πηγαίος Κώδικας του πομπού σε C (κατόπιν πληρωμής - εξαιρούνται επιλεγμένες ομάδες χρηστών)

Ο πηγαίος κώδικας του δέκτη σε C (κατόπιν πληρωμής - εξαιρούνται επιλεγμένες ομάδες χρηστών)