- ADC0804 και Raspberry Pi:
- Αισθητήρας θερμοκρασίας LM35:
- Απαιτούμενα στοιχεία:
- Κύκλωμα και επεξήγηση εργασίας:
- Επεξήγηση προγραμματισμού:
Έχουμε καλύψει ως επί το πλείστον όλα τα βασικά στοιχεία που συνδέονται με το Raspberry Pi στη σειρά εκμάθησης Raspberry Pi. Έχουμε καλύψει όλα τα Σεμινάρια με απλό και λεπτομερή τρόπο, έτσι ώστε οποιοσδήποτε, είτε έχει συνεργαστεί με το Raspberry Pi είτε όχι, να μπορεί να μάθει εύκολα από αυτήν τη Σειρά. Και αφού περάσετε όλα τα μαθήματα, θα είστε σε θέση να δημιουργήσετε κάποια έργα υψηλού επιπέδου χρησιμοποιώντας το Raspberry Pi.
Εδώ λοιπόν σχεδιάζουμε την πρώτη εφαρμογή με βάση τα προηγούμενα μαθήματα. Η πρώτη βασική εφαρμογή είναι η θερμοκρασία δωματίου ανάγνωσης από το Raspberry Pi. Και μπορείτε να παρακολουθείτε τις αναγνώσεις στον υπολογιστή.
Όπως συζητήθηκε σε προηγούμενα μαθήματα, δεν υπάρχουν κανάλια ADC που παρέχονται εσωτερικά στο Raspberry Pi. Έτσι, εάν θέλουμε να διασυνδέσουμε οποιονδήποτε αναλογικό αισθητήρα χρειαζόμαστε μια μονάδα μετατροπής ADC Και σε ένα από τα σεμινάριά μας έχουμε το Interfaced ADC0804 chip στο Raspberry Pi για να διαβάσουμε μια αναλογική τιμή. Προχωρήστε λοιπόν πριν χτίσετε αυτό το θερμόμετρο θερμοκρασίας δωματίου.
ADC0804 και Raspberry Pi:
Το ADC0804 είναι ένα τσιπ σχεδιασμένο να μετατρέπει αναλογικό σήμα σε ψηφιακά δεδομένα 8 bit. Αυτό το τσιπ είναι μια από τις δημοφιλείς σειρές ADC. Είναι μια μονάδα μετατροπής 8bit, επομένως έχουμε τιμές ή 0 έως 255 τιμές. Η ανάλυση αυτού του τσιπ αλλάζει με βάση την τάση αναφοράς που επιλέγουμε, θα μιλήσουμε περισσότερο για αυτό αργότερα. Ακολουθεί το Pinout του ADC0804:
Τώρα ένα άλλο σημαντικό πράγμα εδώ είναι, το ADC0804 λειτουργεί στα 5V και έτσι παρέχει έξοδο σε λογικό σήμα 5V. Σε έξοδο 8 ακίδων (που αντιπροσωπεύει 8 bit), κάθε ακίδα παρέχει έξοδο + 5V για να αντιπροσωπεύει τη λογική'1 '. Το πρόβλημα λοιπόν είναι ότι η λογική PI είναι + 3.3v, οπότε δεν μπορείτε να δώσετε λογική +5V στον ακροδέκτη + 3.3V GPIO του PI. Εάν δώσετε + 5V σε οποιονδήποτε ακροδέκτη GPIO PI, η πλακέτα θα υποστεί ζημιά.
Έτσι, στο επίπεδο λογικής σταδιακής από + 5V, θα χρησιμοποιούμε κύκλωμα διαχωριστή τάσης. Έχουμε συζητήσει το Voltage Divider Circuit που το εξετάσαμε προηγουμένως για περαιτέρω διευκρίνιση. Αυτό που θα κάνουμε είναι, χρησιμοποιούμε δύο αντιστάσεις για να διαιρέσουμε τη λογική +5V σε λογικές 2 * 2,5V. Έτσι μετά τη διαίρεση θα δώσουμε λογική + 2.5v στο PI. Έτσι, κάθε φορά που η λογική «1» παρουσιάζεται από το ADC0804 θα δούμε + 2.5V στο PI GPIO Pin, αντί για + 5V.
Αισθητήρας θερμοκρασίας LM35:
Τώρα για την ανάγνωση της θερμοκρασίας δωματίου, χρειαζόμαστε έναν αισθητήρα. Εδώ πρόκειται να χρησιμοποιήσουμε τον αισθητήρα θερμοκρασίας LM35. Η θερμοκρασία μετριέται συνήθως σε «Κελσίου» ή «Φαρενάιτ». Ο αισθητήρας "LM35" παρέχει έξοδο σε βαθμούς Κελσίου.
Όπως φαίνεται στο σχήμα, το LM35 είναι μια συσκευή τύπου τρανζίστορ τριών ακίδων. Οι ακίδες αριθμούνται ως, PIN1 = Vcc - Ισχύς (συνδεδεμένο σε + 5V)
PIN2 = Σήμα ή έξοδος (συνδεδεμένο με τσιπ ADC)
PIN3 = Γείωση (συνδεδεμένο με τη γείωση)
Αυτός ο αισθητήρας παρέχει μεταβλητή τάση στην έξοδο, με βάση τη θερμοκρασία. Για κάθε αύξηση θερμοκρασίας +1 εκατοστημών θα υπάρχει + 10mV υψηλότερη τάση στον πείρο εξόδου. Αν λοιπόν η θερμοκρασία είναι 0◦ εκατονταβάθμια, η έξοδος του αισθητήρα θα είναι 0V, εάν η θερμοκρασία είναι 10◦C, η έξοδος του αισθητήρα θα είναι + 100mV, εάν η θερμοκρασία είναι 25◦C, η έξοδος του αισθητήρα θα είναι + 250mV.
Απαιτούμενα στοιχεία:
Εδώ χρησιμοποιούμε το Raspberry Pi 2 Model B με το Raspbian Jessie OS. Όλες οι βασικές απαιτήσεις υλικού και λογισμικού συζητήθηκαν προηγουμένως, μπορείτε να το αναζητήσετε στην Εισαγωγή Raspberry Pi, εκτός από αυτό που χρειαζόμαστε:
- Σύνδεση ακίδων
- 1ΚΩ αντίσταση (17 τεμάχια)
- 10K ποτ
- Πυκνωτής 0,1 μF
- Πυκνωτής 100μF
- Πυκνωτής 1000μF
- ADC0804 IC
- Αισθητήρας θερμοκρασίας LM35
- Πίνακας ψωμιού
Κύκλωμα και επεξήγηση εργασίας:
Οι συνδέσεις που γίνονται για τη σύνδεση Raspberry με ADC0804 και LM35, φαίνονται στο παρακάτω διάγραμμα κυκλώματος.
Η έξοδος LM35 έχει πολλές διακυμάνσεις τάσης. έτσι χρησιμοποιείται ένας πυκνωτής 100uF για εξομάλυνση της εξόδου, όπως φαίνεται στο σχήμα.
Ο ADC έχει πάντα πολύ θόρυβο, αυτός ο θόρυβος μπορεί να επηρεάσει σημαντικά την απόδοση, οπότε χρησιμοποιούμε πυκνωτή 0.1uF για φιλτράρισμα θορύβου. Χωρίς αυτό θα υπάρξουν πολλές διακυμάνσεις στην έξοδο.
Το τσιπ λειτουργεί σε ρολόι ταλαντωτή RC (Resistor-Capacitor). Όπως φαίνεται στο διάγραμμα κυκλώματος , τα C2 και R20 σχηματίζουν ένα ρολόι. Το σημαντικό πράγμα που πρέπει να θυμάστε εδώ είναι ότι ο πυκνωτής C2 μπορεί να αλλάξει σε χαμηλότερη τιμή για υψηλότερο ρυθμό μετατροπής ADC. Ωστόσο, με μεγαλύτερη ταχύτητα θα υπάρξει μείωση της ακρίβειας. Έτσι, εάν η εφαρμογή απαιτεί μεγαλύτερη ακρίβεια, επιλέξτε τον πυκνωτή με υψηλότερη τιμή και για υψηλότερη ταχύτητα επιλέξτε τον πυκνωτή με χαμηλότερη τιμή.
Όπως ειπώθηκε νωρίτερα, το LM35 παρέχει + 10mV για κάθε εκατοστό. Η μέγιστη θερμοκρασία που μπορεί να μετρηθεί από το LM35 είναι 150ºC. Έτσι θα έχουμε μέγιστο 1,5V στο τερματικό εξόδου LM35. Αλλά η προεπιλεγμένη τάση αναφοράς του ADC0804 είναι + 5V. Επομένως, αν χρησιμοποιήσουμε αυτήν την τιμή αναφοράς, η ανάλυση της εξόδου θα είναι χαμηλή επειδή θα χρησιμοποιούσαμε το μέγιστο (5 / 1,5) 34% του εύρους ψηφιακής εξόδου.
Ευτυχώς, το ADC0804 έχει ένα ρυθμιζόμενο πείρο Vref (PIN9) όπως φαίνεται στο διάγραμμα Pin του παραπάνω. Έτσι θα ορίσουμε το Vref του chip σε + 2V. Για να ρυθμίσετε το Vref + 2V, πρέπει να παρέχουμε τάση + 1V (VREF / 2) στο PIN9. Εδώ χρησιμοποιούμε δοχείο 10K για να ρυθμίσουμε την τάση στο PIN9 έως + 1V. Χρησιμοποιήστε το βολτόμετρο για να λάβετε την ακριβή τάση.
Έχουμε χρησιμοποιήσει προηγουμένως τον αισθητήρα θερμοκρασίας LM35 για να διαβάσουμε τη θερμοκρασία δωματίου με το Arduino και με τον μικροελεγκτή AVR. Ελέγξτε επίσης τη μέτρηση υγρασίας και θερμοκρασίας χρησιμοποιώντας το Arduino
Επεξήγηση προγραμματισμού:
Μόλις όλα συνδεθούν σύμφωνα με το διάγραμμα κυκλώματος, μπορούμε να ενεργοποιήσουμε το PI για να γράψουμε το πρόγραμμα σε PYHTON.
Θα μιλήσουμε για λίγες εντολές που πρόκειται να χρησιμοποιήσουμε στο πρόγραμμα PYHTON, Πρόκειται να εισαγάγουμε αρχείο GPIO από τη βιβλιοθήκη, η παρακάτω λειτουργία μας επιτρέπει να προγραμματίζουμε τις καρφίτσες GPIO του PI. Μετονομάζουμε επίσης "GPIO" σε "IO", οπότε στο πρόγραμμα όποτε θέλουμε να αναφερθούμε στις καρφίτσες GPIO θα χρησιμοποιήσουμε τη λέξη "IO".
εισαγάγετε RPi.GPIO ως IO
Μερικές φορές, όταν οι ακίδες GPIO, τις οποίες προσπαθούμε να χρησιμοποιήσουμε, μπορεί να κάνουν κάποιες άλλες λειτουργίες. Σε αυτήν την περίπτωση, θα λάβουμε προειδοποιήσεις κατά την εκτέλεση του προγράμματος. Η παρακάτω εντολή λέει στο PI να αγνοήσει τις προειδοποιήσεις και να συνεχίσει το πρόγραμμα.
IO.setwarnings (Λάθος)
Μπορούμε να παραπέμψουμε τους ακροδέκτες GPIO του PI, είτε με τον αριθμό καρφίτσας επί του σκάφους είτε με τον αριθμό λειτουργίας τους. Όπως το «PIN 29» στον πίνακα είναι «GPIO5». Λοιπόν, λέμε εδώ ότι θα αντιπροσωπεύσουμε το pin εδώ με «29» ή «5».
IO.setmode (IO.BCM)
Ορίζουμε 8 ακίδες ως καρφίτσες εισόδου. Θα εντοπίσουμε 8 bit δεδομένων ADC από αυτές τις ακίδες.
IO.setup (4, IO.IN) IO.setup (17, IO.IN) IO.setup (27, IO.IN) IO.setup (22, IO.IN) IO.setup (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
Σε περίπτωση που η συνθήκη στα τιράντες είναι αληθινή, οι δηλώσεις μέσα στο βρόχο θα εκτελεστούν μία φορά. Έτσι, εάν ο ακροδέκτης GPIO 19 πηγαίνει ψηλά, τότε οι δηλώσεις εντός του βρόχου IF θα εκτελεστούν μία φορά. Εάν ο ακροδέκτης GPIO 19 δεν πάει ψηλά, δεν θα εκτελεστούν οι δηλώσεις εντός του βρόχου IF.
if (IO.input (19) == True):
Η παρακάτω εντολή χρησιμοποιείται ως βρόχος για πάντα, με αυτήν την εντολή οι δηλώσεις μέσα σε αυτόν τον βρόχο θα εκτελούνται συνεχώς.
Ενώ 1:
Περαιτέρω επεξήγηση του κώδικα δίνεται στην ενότητα κώδικα παρακάτω.
Αφού γράψετε το πρόγραμμα, ήρθε η ώρα να το εκτελέσετε. Πριν από την εκτέλεση του προγράμματος, ας μιλήσουμε για το τι συμβαίνει στο κύκλωμα ως Περίληψη. Ο πρώτος αισθητήρας LM35 ανιχνεύει τη θερμοκρασία δωματίου και παρέχει αναλογική τάση στην έξοδο. Αυτή η μεταβλητή τάση αντιπροσωπεύει τη θερμοκρασία γραμμικά με + 10mV ανά ºC. Αυτό το σήμα τροφοδοτείται σε τσιπ ADC0804, αυτό το τσιπ μετατρέπει την αναλογική τιμή σε ψηφιακή τιμή με 255/200 = 1.275 μέτρηση ανά10mv ή 1.275count για 1degree. Αυτός ο αριθμός μετράται από το PI GPIO. Το πρόγραμμα μετατρέπει την καταμέτρηση σε τιμή θερμοκρασίας και την εμφανίζει στην οθόνη. Η τυπική θερμοκρασία που διαβάζεται από το PI φαίνεται παρακάτω, Εξ ου και εμείς αυτό το όργανο ελέγχου θερμοκρασίας Raspberry Pi.