- Απαιτούμενο υλικό:
- Ενότητα ADC0804 Single Channel 8-bit ADC:
- Διάγραμμα κυκλώματος και επεξήγηση:
- Προγραμματισμός του Raspberry Pi:
- Εμφάνιση τιμής αισθητήρα Flex σε LCD χρησιμοποιώντας Raspberry Pi:
Το Raspberry Pi είναι ένας πίνακας βασισμένος σε επεξεργαστή αρχιτεκτονικής ARM σχεδιασμένος για ηλεκτρονικούς μηχανικούς και χομπίστες. Το PI είναι μια από τις πιο αξιόπιστες πλατφόρμες ανάπτυξης έργων εκεί έξω τώρα. Με υψηλότερη ταχύτητα επεξεργαστή και 1 GB RAM, το PI μπορεί να χρησιμοποιηθεί για πολλά έργα υψηλού προφίλ, όπως η επεξεργασία εικόνας και το Internet of Things. Υπάρχουν πολλά ωραία πράγματα που μπορούν να γίνουν με ένα PI, αλλά ένα λυπηρό χαρακτηριστικό είναι ότι δεν διαθέτει ενσωματωμένη μονάδα ADC.
Μόνο, αν το Raspberry Pi μπορούσε να συνδεθεί με αισθητήρες, μπορεί να γνωρίσει τις παραμέτρους του πραγματικού κόσμου και να αλληλεπιδράσει με αυτό. Οι περισσότεροι από τους αισθητήρες εκεί είναι αναλογικός αισθητήρας και ως εκ τούτου πρέπει να μάθουμε να χρησιμοποιούμε μια εξωτερική μονάδα IC ADC με Raspberry Pi για διασύνδεση αυτών των αισθητήρων. Σε αυτό το έργο θα μάθουμε πώς μπορούμε να διασυνδέσουμε το Flex Sensor με το Raspberry Pi και να εμφανίσουμε τις τιμές του στην οθόνη LCD.
Απαιτούμενο υλικό:
- Raspberry Pi (οποιοδήποτε μοντέλο)
- ADC0804 IC
- Οθόνη LCD 16 * 2
- Αισθητήρας Flex
- Αντιστάσεις και πυκνωτές
- Breadboard ή perf board.
Ενότητα ADC0804 Single Channel 8-bit ADC:
Πριν προχωρήσουμε περαιτέρω, ας μάθουμε για αυτό το ADC0804 IC και πώς να το χρησιμοποιήσουμε με βατόμουρο pi. Το ADC0804 είναι ένα μόνο κανάλι 8-bit IC, που σημαίνει ότι μπορεί να διαβάσει μία μόνο τιμή ADC και να το αντιστοιχίσει σε 8-bit ψηφιακών δεδομένων. Αυτά τα ψηφιακά δεδομένα 8-bit μπορούν να διαβαστούν από το Raspberry Pi, επομένως η τιμή θα είναι 0-255, καθώς το 2 ^ 8 είναι 256. Όπως φαίνεται στα pinouts του IC παρακάτω, οι καρφίτσες DB0 έως DB7 χρησιμοποιούνται για την ανάγνωση αυτών των ψηφιακών αξίες.
Τώρα ένα άλλο σημαντικό πράγμα εδώ είναι, το 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 στο Raspberry Pi. Έτσι, κάθε φορά που η λογική «1» παρουσιάζεται από το ADC0804 θα δούμε + 2.5V στο PI GPIO Pin, αντί για + 5V. Μάθετε περισσότερα για το ADC εδώ: Εισαγωγή στο ADC0804.
Ακολουθεί η εικόνα του ADC Module χρησιμοποιώντας το ADC0804 που έχουμε δημιουργήσει στο Perf Board:
Διάγραμμα κυκλώματος και επεξήγηση:
Το πλήρες διάγραμμα κυκλώματος για διασύνδεση του Flex Sensor με το Raspberry Pi φαίνεται παρακάτω. Η εξήγηση του ίδιου έχει ως εξής.
Αυτό το κύκλωμα αισθητήρα raspberry pi flex μπορεί να φαίνεται λίγο περίπλοκο με πολλά καλώδια, αλλά αν ρίξετε μια πιο προσεκτική ματιά, τα περισσότερα καλώδια συνδέονται απευθείας από την οθόνη LCD και 8-bit στο Raspberry pi. Ο παρακάτω πίνακας θα σας βοηθήσει κατά την πραγματοποίηση και την επαλήθευση των συνδέσεων.
Όνομα καρφιτσώματος |
Αριθμός Pin Raspberry |
Όνομα GPIO Raspberry Pi |
LCD Vss |
Καρφίτσα 4 |
Εδαφος |
LCD Vdd |
Καρφίτσα 6 |
Vcc (+ 5V) |
LCD Vee |
Καρφίτσα 4 |
Εδαφος |
LCD Rs |
Καρφίτσα 38 |
GPIO 20 |
LCD RW |
Καρφίτσα 39 |
Εδαφος |
LCD Ε |
Καρφίτσα 40 |
GPIO 21 |
LCD D4 |
Καρφίτσα 3 |
GPIO 2 |
LCD D5 |
Καρφίτσα 5 |
GPIO 3 |
LCD D6 |
Καρφίτσα 7 |
GPIO 4 |
LCD D7 |
Καρφίτσα 11 |
GPIO 17 |
ADC0804 Vcc |
Καρφίτσα 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Pin 19 (έως 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (έως 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (έως 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (έως 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (έως 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (έως 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (έως 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (έως 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Καρφίτσα 15 |
GPIO 22 |
Μπορείτε να χρησιμοποιήσετε την παρακάτω εικόνα για να προσδιορίσετε τους αριθμούς pin στο Raspberry από τότε.
Όπως όλες οι μονάδες ADC, το IC ADC0804 απαιτεί επίσης ένα σήμα ρολογιού για να λειτουργήσει, ευτυχώς αυτό το IC έχει μια εσωτερική πηγή ρολογιού, οπότε πρέπει απλώς να προσθέσουμε το κύκλωμα RC στο CLK in και CLK R όπως φαίνεται στο κύκλωμα. Έχουμε χρησιμοποιήσει μια τιμή 10K και 105pf, αλλά μπορούμε να χρησιμοποιήσουμε οποιαδήποτε τιμή κοντά όπως 1uf, 0.1uf, 0.01uf θα πρέπει επίσης να λειτουργήσει.
Στη συνέχεια, για να συνδέσουμε τον αισθητήρα Flex χρησιμοποιήσαμε ένα πιθανό κύκλωμα διαχωριστή χρησιμοποιώντας μια αντίσταση 100K. Καθώς ο αισθητήρας Flex κάμπτεται, η αντίσταση απέναντί της θα ποικίλλει και έτσι η πιθανή πτώση στην αντίσταση. Αυτή η πτώση μετριέται από το ADC0804 IC και τα δεδομένα 8-bit δημιουργούνται ανάλογα.
Δείτε άλλα έργα που σχετίζονται με το Flex Sensor:
- Flex Sensor Interfacing with AVR Microcontroller
- Angry Bird Game Controller με βάση το Arduino χρησιμοποιώντας Flex Sensor
- Servo Motor Control από Flex Sensor
- Δημιουργία τόνων πατώντας Fingers χρησιμοποιώντας το Arduino
Προγραμματισμός του Raspberry Pi:
Μόλις τελειώσουμε με τις συνδέσεις, θα πρέπει να διαβάσουμε την κατάσταση αυτών των 8-bit χρησιμοποιώντας το Raspberry Pi και να τα μετατρέψουμε σε δεκαδικά ώστε να μπορούμε να τα χρησιμοποιήσουμε. Το πρόγραμμα για να κάνετε το ίδιο και να εμφανίσετε τις προκύπτουσες τιμές στην οθόνη LCD δίνεται στο τέλος αυτής της σελίδας. Περαιτέρω ο κώδικας εξηγείται σε μικρά σκουπίδια παρακάτω.
Χρειαζόμαστε μια βιβλιοθήκη LCD για διασύνδεση LCD με Pi. Γι 'αυτό χρησιμοποιούμε τη βιβλιοθήκη που αναπτύχθηκε από το shubham, η οποία θα μας βοηθήσει να συνδέσουμε μια οθόνη LCD 16 * 2 με ένα Pi σε λειτουργία τεσσάρων καλωδίων. Επίσης, χρειαζόμαστε βιβλιοθήκες για να κάνουμε χρήση των καρφιτσών χρόνου και Pi GPIO.
Σημείωση : Το lcd.py πρέπει να ληφθεί από εδώ και να τοποθετηθεί στον ίδιο κατάλογο όπου είναι αποθηκευμένο αυτό το πρόγραμμα. Μόνο τότε ο κωδικός θα μεταγλωττιστεί.
εισαγωγή lcd # Εισαγωγή της βιβλιοθήκης LCD από [email protected] ώρα εισαγωγής # ώρα εισαγωγής Εισαγωγή RPi.GPIO ως GPIO #GPIO θα αναφέρεται μόνο ως GPIO
Οι ορισμοί των ακίδων LCD εκχωρούνται στις μεταβλητές όπως φαίνεται παρακάτω. Σημειώστε ότι αυτοί οι αριθμοί είναι οι αριθμοί pin GPIO και όχι οι πραγματικοί αριθμοί pin. Μπορείτε να χρησιμοποιήσετε τον παραπάνω πίνακα για να συγκρίνετε τους αριθμούς GPIO με τους αριθμούς pin. Το δυαδικό πίνακα θα περιλαμβάνει όλους τους αριθμούς πινέζων δεδομένων και τα μπιτ πίνακα θα αποθηκεύουν την προκύπτουσα τιμή όλων των ακίδων GPIO.
# Ορισμοί ακίδωνLCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarys = (10,9,11,5,6,13,19,26) # Η σειρά αριθμών ακίδων συνδέεται στο DB0- DB7 bits = # προκύπτουσες τιμές δεδομένων 8-bit
Τώρα, πρέπει να καθορίσουμε τους ακροδέκτες εισόδου και εξόδου. Οι επτά πείροι δεδομένων θα είναι ο πείρος εισόδου και ο πείρος σκανδάλης (RST και INTR) θα είναι ο πείρος εξόδου. Μπορούμε να διαβάσουμε τις τιμές δεδομένων 8-bit από τον πείρο εισόδου μόνο αν ενεργοποιήσουμε τον πείρο εξόδου υψηλό για ένα συγκεκριμένο χρόνο σύμφωνα με το φύλλο δεδομένων. Από τη στιγμή που έχουν δηλώσει τα δυαδικά καρφίτσες σε σειρά binarys μπορούμε να χρησιμοποιήσουμε ένα για το βρόχο για την κήρυξη όπως φαίνεται παρακάτω.
για δυαδικό σε δυαδικά: GPIO.setup (δυαδικό, GPIO.IN) #Όλες οι δυαδικές ακίδες είναι καρφίτσες εισόδου # Καρφίτσα ενεργοποίησης GPIO.setup (22, GPIO.OUT) # WR και INTR ακίδες
Τώρα χρησιμοποιώντας τις εντολές βιβλιοθήκης LCD μπορούμε να αρχίσουμε την ενότητα LCD και να εμφανίσουμε ένα μικρό εισαγωγικό μήνυμα όπως φαίνεται παρακάτω.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Μήνυμα mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
Μέσα στο άπειρο , ενώ βρόχο, έχουμε αρχίσει να διαβάζει τις δυαδικές τιμές τους μετατρέψετε σε δεκαδικό και να ενημερώσετε το αποτέλεσμα στην οθόνη LCD. Όπως ειπώθηκε νωρίτερα, προτού διαβάσουμε τις τιμές ADC , πρέπει να κάνουμε τον πείρο ενεργοποίησης να είναι υψηλός για ένα συγκεκριμένο χρόνο για να ενεργοποιήσουμε τη μετατροπή ADC. Αυτό γίνεται χρησιμοποιώντας τις ακόλουθες γραμμές.
GPIO.output (22, 1) #Turn ON Trigger time.sleep (0.1) GPIO.output (22, 0) # Turn Turn Trigger
Τώρα, πρέπει να διαβάσουμε τις καρφίτσες 8 δεδομένων και να ενημερώσουμε το αποτέλεσμα στη σειρά bit. Για να το κάνουμε αυτό, χρησιμοποιούμε ένα βρόχο για να συγκρίνουμε κάθε πείρο εισόδου με True και False Εάν ισχύει ο αντίστοιχος πίνακας δυαδικών ψηφίων θα φτιαχτεί ως 1 άλλος θα γίνει 0. Αυτό ήταν όλα τα δεδομένα 8-bit που θα γίνουν 0 και 1 αντίστοιχα των τιμών που διαβάζονται.
# Διαβάστε τις καρφίτσες εισόδου και ενημερώστε το αποτέλεσμα σε συστοιχία bit για i στην περιοχή (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Μόλις ενημερώσουμε τον πίνακα bit, θα πρέπει να μετατρέψουμε αυτόν τον πίνακα σε δεκαδική τιμή. Αυτό δεν είναι παρά δυαδική σε δεκαδική μετατροπή. Για δυαδικά δεδομένα 8-bit, το 2 ^ 8 είναι 256. Έτσι θα λάβουμε δεκαδικά δεδομένα από 0 έως 255. Στο python ο χειριστής "**" χρησιμοποιείται για να βρει τη δύναμη οποιασδήποτε τιμής. Δεδομένου ότι τα bits ξεκινούν με MSB το πολλαπλασιάζουμε με 2 ^ (θέση 7). Με αυτόν τον τρόπο μπορούμε να μετατρέψουμε όλες τις δυαδικές τιμές σε δεκαδικά δεδομένα και μετά να τις εμφανίσουμε στην οθόνη LCD
# υπολογισμός της δεκαδικής τιμής χρησιμοποιώντας συστοιχία bit για i στο εύρος (8): δεκαδικό = δεκαδικό + (bits * (2 ** (7-i)))
Μόλις γνωρίζουμε την δεκαδική τιμή, είναι εύκολο να υπολογίσουμε την τιμή τάσης. Απλά πρέπει να το πολλαπλασιάσουμε με 19.63. Διότι για ένα 8-bit 5VADC κάθε bit είναι μια αναλογία 19,3 milli volt. Η προκύπτουσα τιμή τάσης είναι η τιμή της τάσης που εμφανίστηκε στους ακροδέκτες Vin + και Vin- του ADC0804 IC.
# υπολογισμός τιμής τάσης Τάση = δεκαδικό * 19,63 * 0,001 # μία μονάδα είναι 19,3mV
Χρησιμοποιώντας την τιμή της τάσης μπορούμε να προσδιορίσουμε πώς κάμπτεται ο αισθητήρας κάμψης και σε ποια κατεύθυνση έχει λυγίσει. Στις παρακάτω γραμμές μόλις συγκρίνω τις τιμές τάσης ανάγνωσης με προκαθορισμένες τιμές τάσης για να δείξω τη θέση του αισθητήρα Flex στην οθόνη LCD.
# συγκρίνετε τάση και κατάσταση εμφάνισης του αισθητήρα mylcd.setCursor (1,1) if (Τάση> 3,8): mylcd.Print ("Bent Forward") elif (Τάση <3,5): mylcd.Print ("Bent Backward") άλλο: mylcd.Print ("Σταθερό")
Παρομοίως, μπορείτε να χρησιμοποιήσετε την τιμή τάσης για να εκτελέσετε οποιαδήποτε εργασία που θέλετε να εκτελέσει το Raspberry Pi.
Εμφάνιση τιμής αισθητήρα Flex σε LCD χρησιμοποιώντας Raspberry Pi:
Η εργασία του έργου είναι πολύ απλή. Αλλά βεβαιωθείτε ότι έχετε κατεβάσει το αρχείο κεφαλίδας lcd.py και το έχετε τοποθετήσει στον ίδιο κατάλογο όπου υπάρχει το τρέχον πρόγραμμά σας. Στη συνέχεια, κάντε τις συνδέσεις που φαίνονται στο διάγραμμα κυκλώματος χρησιμοποιώντας ένα breadboard ή μια πλακέτα perf και εκτελέστε το παρακάτω πρόγραμμα στο Pi σας και θα πρέπει να δουλέψετε. Η ρύθμιση θα πρέπει να φαίνεται κάπως έτσι παρακάτω.
Όπως φαίνεται, η οθόνη LCD θα εμφανίσει την δεκαδική τιμή, την τιμή τάσης και τη θέση του αισθητήρα. Απλώς λυγίστε τον αισθητήρα προς τα εμπρός ή προς τα πίσω και θα πρέπει να μπορείτε να δείτε την τάση και την δεκαδική τιμή να μεταβάλλονται, θα εμφανιστεί επίσης ένα κείμενο κατάστασης. Μπορείτε να συνδέσετε οποιονδήποτε αισθητήρα και να παρατηρήσετε ότι η τάση απέναντι σε αυτό μεταβάλλεται.
Η πλήρης εργασία του σεμιναρίου βρίσκεται στο παρακάτω βίντεο. Ελπίζω να καταλάβατε το έργο και να απολαύσατε κάτι παρόμοιο. Εάν έχετε οποιαδήποτε αμφιβολία, αφήστε τους στην ενότητα σχολίων ή στα φόρουμ και θα προσπαθήσω το καλύτερό μου για να τους απαντήσω.