- Πως δουλεύει
- Απαιτούμενα συστατικά
- Σχηματικά
- Κωδικός Arduino Osclloscope
- Σενάριο Python (Plotter)
- Κωδικός Arduino
- Arduino Oscilloscope in Action
Το παλμογράφο είναι ένα από τα πιο σημαντικά εργαλεία που θα βρείτε στον πάγκο εργασίας οποιουδήποτε μηχανικού ή κατασκευαστή ηλεκτρονικών. Χρησιμοποιείται κυρίως για την προβολή κυματομορφής και για τον προσδιορισμό των επιπέδων τάσης, της συχνότητας, του θορύβου και άλλων παραμέτρων των σημάτων που εφαρμόζονται στην είσοδό της που ενδέχεται να αλλάξουν με την πάροδο του χρόνου. Χρησιμοποιείται επίσης από ενσωματωμένους προγραμματιστές λογισμικού για εντοπισμό σφαλμάτων κώδικα και τεχνικούς για την αντιμετώπιση προβλημάτων ηλεκτρονικών συσκευών κατά την επισκευή. Αυτοί οι λόγοι καθιστούν το παλμογράφο απαραίτητο εργαλείο για κάθε μηχανικό. Το μόνο ζήτημα είναι ότι μπορεί να είναι πολύ ακριβά, τα παλμογράφοι που εκτελούν τις πιο βασικές λειτουργίες με τη μικρότερη ακρίβεια μπορούν να είναι τόσο ακριβά όσο 45 έως 100 $, ενώ οι πιο προηγμένοι και αποδοτικοί έχουν κόστος άνω των 150 $. Σήμερα θα δείξω πώς να χρησιμοποιήσω το Arduinoκαι ένα λογισμικό, το οποίο θα αναπτυχθεί με την αγαπημένη μου γλώσσα προγραμματισμού Python, για τη δημιουργία ενός χαμηλού κόστους, 4-καναλιών παλμογράφο Arduino ικανό να εκτελεί τις εργασίες για τις οποίες μερικά από τα φθηνά παλμογράφο αναπτύσσονται όπως η εμφάνιση κυματομορφών και ο προσδιορισμός των επιπέδων τάσης για σήματα.
Πως δουλεύει
Υπάρχουν δύο μέρη για αυτό το έργο.
- Ο μετατροπέας δεδομένων
- Ο σχεδιαστής
Οι παλμογράφοι γενικά περιλαμβάνουν την οπτική αναπαράσταση ενός αναλογικού σήματος που εφαρμόζεται στο κανάλι εισόδου του. Για να το επιτύχουμε αυτό, πρέπει πρώτα να μετατρέψουμε το σήμα από αναλογικό σε ψηφιακό και μετά να σχεδιάσουμε τα δεδομένα. Για τη μετατροπή, θα αξιοποιήσουμε τον ADC (μετατροπέας αναλογικού σε ψηφιακό) στον μικροελεγκτή atmega328p που χρησιμοποιείται από το Arduino για τη μετατροπή των αναλογικών δεδομένων στην είσοδο σήματος σε ψηφιακό σήμα. Μετά τη μετατροπή, η τιμή ανά ώρα αποστέλλεται μέσω UART από το Arduino στον υπολογιστή, όπου το λογισμικό σχεδιασμού που θα αναπτυχθεί χρησιμοποιώντας python θα μετατρέψει την εισερχόμενη ροή δεδομένων σε κυματομορφή σχεδιάζοντας κάθε δεδομένα ενάντια στο χρόνο.
Απαιτούμενα συστατικά
Απαιτούνται τα ακόλουθα στοιχεία για την κατασκευή αυτού του έργου.
- Arduino Uno (Μπορεί να χρησιμοποιηθεί οποιαδήποτε από τις άλλες σανίδες)
- Ψωμί
- Αντίσταση 10k (1)
- LDR (1)
- Καλώδια αλτών
Απαιτούμενα λογισμικά
- Arduino IDE
- Πύθων
- Βιβλιοθήκες Python: Pyserial, Matplotlib, Drawnow
Σχηματικά
Το σχήμα για τον παλμογράφο Arduino είναι απλό. Το μόνο που χρειάζεται να κάνουμε είναι να συνδέσουμε το σήμα που θα εξεταστεί με τον καθορισμένο αναλογικό πείρο του Arduino. Ωστόσο, θα χρησιμοποιήσουμε το LDR σε μια απλή ρύθμιση διαιρέτη τάσης για να δημιουργήσουμε το προς εξέταση σήμα, έτσι ώστε η παραγόμενη κυματομορφή να περιγράφει το επίπεδο τάσης, με βάση την ένταση του φωτός γύρω από το LDR.
Συνδέστε τα στοιχεία όπως φαίνεται στα παρακάτω σχήματα.
Μετά τη σύνδεση, η εγκατάσταση θα ήθελε την παρακάτω εικόνα.
Με όλες τις συνδέσεις ολοκληρωμένες, μπορούμε να προχωρήσουμε στη σύνταξη του κώδικα.
Κωδικός Arduino Osclloscope
Θα γράφουμε κωδικούς για καθένα από τα δύο τμήματα. Για τον Plotter όπως αναφέρθηκε προηγουμένως, θα συντάξουμε ένα σενάριο python που θα δέχεται τα δεδομένα από το Arduino μέσω UART και Plots, ενώ για τον μετατροπέα, θα γράφουμε ένα σκίτσο Arduino που θα λαμβάνει τα δεδομένα από το ADC και θα το μετατρέπει σε επίπεδα τάσης που αποστέλλονται στον σχεδιαστή.
Σενάριο Python (Plotter)
Δεδομένου ότι ο κώδικας python είναι πιο περίπλοκος, θα ξεκινήσουμε με αυτόν.
Θα χρησιμοποιήσουμε μερικές βιβλιοθήκες όπως: drawow, Matplotlib και Pyserial με το σενάριο python όπως αναφέρθηκε προηγουμένως. Το Pyserial μας επιτρέπει να δημιουργήσουμε ένα σενάριο python που μπορεί να επικοινωνεί μέσω της σειριακής θύρας, το Matplotlib μας δίνει τη δυνατότητα να δημιουργούμε οικόπεδα από τα δεδομένα που λαμβάνονται μέσω της σειριακής θύρας και το drawow παρέχει ένα μέσο για να ενημερώσουμε την πλοκή σε πραγματικό χρόνο.
Υπάρχουν διάφοροι τρόποι για να εγκαταστήσετε αυτά τα πακέτα στον υπολογιστή σας, με τον ευκολότερο να είναι μέσω pip . Το Pip μπορεί να εγκατασταθεί μέσω γραμμής εντολών σε παράθυρα ή μηχανή linux. Το PIP είναι συσκευασμένο με python3, οπότε θα σας συμβουλεύσω να εγκαταστήσετε το python3 και να επιλέξετε το πλαίσιο για την προσθήκη python στη διαδρομή. Εάν αντιμετωπίζετε προβλήματα με την εγκατάσταση pip, ανατρέξτε σε αυτόν τον επίσημο ιστότοπο python για συμβουλές.
Με το pip εγκατεστημένο, μπορούμε τώρα να εγκαταστήσουμε τις άλλες βιβλιοθήκες που χρειαζόμαστε.
Ανοίξτε τη γραμμή εντολών για χρήστες παραθύρων, τερματικό για χρήστες linux και εισαγάγετε τα ακόλουθα.
pip εγκατάσταση pyserial
Με αυτό, εγκαταστήστε το matplotlib χρησιμοποιώντας το;
εγκατάσταση pip matplotlib
Το Drawnow εγκαθίσταται μερικές φορές παράλληλα με το matplotlib, αλλά για να είμαστε σίγουροι, τρέξτε.
pip drawowow
Με την εγκατάσταση ολοκληρωμένη, είμαστε πλέον έτοιμοι να γράψουμε το σενάριο python.
Το σενάριο python για αυτό το έργο είναι παρόμοιο με αυτό που έγραψα για το Raspberry Pi Based Oscilloscope.
Ξεκινάμε εισάγοντας όλες τις βιβλιοθήκες που απαιτούνται για τον κώδικα.
εισαγωγή χρόνου εισαγωγής matplotlib.pyplot ως plt από drawow import * import pyserial
Στη συνέχεια, δημιουργούμε και αρχικοποιούμε τις μεταβλητές που θα χρησιμοποιηθούν κατά τη διάρκεια του κώδικα. Ο πίνακας val θα χρησιμοποιηθεί για την αποθήκευση των δεδομένων που λαμβάνονται από τη σειριακή θύρα και το cnt θα χρησιμοποιηθεί για την καταμέτρηση. Τα δεδομένα στην τοποθεσία 0 θα διαγράφονται μετά από κάθε 50 μετρήσεις δεδομένων. Αυτό γίνεται για να διατηρούνται τα δεδομένα που εμφανίζονται στον παλμογράφο.
val = cnt = 0
Στη συνέχεια, δημιουργούμε το σειριακό αντικείμενο θύρας μέσω του οποίου το Arduino θα επικοινωνεί με το σενάριο python. Βεβαιωθείτε ότι η θύρα com που καθορίζεται παρακάτω είναι η ίδια θύρα μέσω της οποίας η πλακέτα Arduino επικοινωνεί με το IDE. Ο ρυθμός 115200 baud που χρησιμοποιήθηκε παραπάνω χρησιμοποιήθηκε για τη διασφάλιση υψηλής ταχύτητας επικοινωνίας με το Arduino. Για την αποφυγή σφαλμάτων, η σειριακή θύρα Arduino πρέπει επίσης να έχει τη δυνατότητα επικοινωνίας με αυτόν τον ρυθμό baud.
θύρα = σειριακό. Κεραία ('COM4', 115200, χρονικό όριο = 0,5)
Στη συνέχεια, κάνουμε το οικόπεδο διαδραστικό χρησιμοποιώντας?
pltion ()
πρέπει να δημιουργήσουμε μια συνάρτηση για να δημιουργήσουμε την πλοκή από τα δεδομένα που λαμβάνονται, δημιουργώντας το ανώτερο και το ελάχιστο όριο που περιμένουμε, το οποίο στην περίπτωση αυτή είναι 1023 με βάση την ανάλυση του ADD του Arduino. Επίσης, ορίζουμε τον τίτλο, επισημαίνουμε κάθε άξονα και προσθέτουμε ένα μύθο για να διευκολύνουμε τον εντοπισμό της πλοκής.
#create the function function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro) - ', label =' Channel 0 ') plt.legend (loc =' κάτω δεξιά ')
Με αυτό, είμαστε πλέον έτοιμοι να γράψουμε τον κύριο βρόχο που παίρνει τα δεδομένα από τη σειριακή θύρα όταν είναι διαθέσιμο και σχεδιάζει. Για συγχρονισμό με το Arduino, αποστέλλονται δεδομένα χειραψίας στο Arduino από το σενάριο python για να δείξει την ετοιμότητά του για ανάγνωση δεδομένων. Όταν το Arduino λαμβάνει τα δεδομένα χειραψίας, απαντά με δεδομένα από το ADC. Χωρίς αυτήν τη χειραψία, δεν θα είμαστε σε θέση να σχεδιάσουμε τα δεδομένα σε πραγματικό χρόνο.
while (True): port.write (b's ') #handshake με Arduino if (port.inWaiting ()): # if the arduino replies value = port.readline () # διαβάστε την απάντηση εκτύπωσης (τιμή) #print ώστε να μπορούμε παρακολουθήστε τον αριθμό = int (τιμή) # μετατροπή των ληφθέντων δεδομένων σε ακέραια εκτύπωση («Κανάλι 0: {0}». μορφή (αριθμός)) # Αναστολή για μισό δευτερόλεπτο. time.sleep (0,01) val.append (int (number)) drawow (makeFig) #update plot για να αντικατοπτρίζει νέα είσοδο δεδομένων plt.pause (.000001) cnt = cnt + 1 εάν (cnt> 50): val.pop (0) # διατηρήστε το οικόπεδο φρέσκο διαγράφοντας τα δεδομένα στη θέση 0
Ο πλήρης κωδικός python για τον παλμογράφο arduino δίνεται στο τέλος αυτού του άρθρου που φαίνεται παρακάτω.
Κωδικός Arduino
Ο δεύτερος κωδικός είναι το σκίτσο Arduino για τη λήψη των δεδομένων που αντιπροσωπεύουν το σήμα από το ADC και, στη συνέχεια, περιμένετε να λάβετε το σήμα χειραψίας από το λογισμικό σχεδίασης. Μόλις λάβει το σήμα χειραψίας, στέλνει τα ληφθέντα δεδομένα στο λογισμικό σχεδιαστών μέσω UART.
Ξεκινάμε δηλώνοντας τον ακροδέκτη του αναλογικού πείρου του Arduino στον οποίο θα εφαρμοστεί το σήμα.
int sensorpin = A0;
Στη συνέχεια, αρχικοποιούμε και ξεκινάμε σειριακή επικοινωνία με ρυθμό baud 115200
void setup () { // αρχικοποίηση σειριακής επικοινωνίας στα 115200 bits ανά δευτερόλεπτο για να ταιριάζει με αυτό του python script: Serial.begin (115200); }
Τέλος, η συνάρτηση voidloop () που χειρίζεται την ανάγνωση των δεδομένων και στέλνει τα δεδομένα μέσω σειριακού στον σχεδιαστή.
void loop () { // διαβάστε την είσοδο στον αναλογικό πείρο 0: float sensorValue = analogRead (sensorpin); δεδομένα byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); καθυστέρηση (10) // καθυστέρηση μεταξύ των αναγνώσεων για σταθερότητα } }
Ο πλήρης κωδικός παλμογράφου Arduino δίνεται παρακάτω, καθώς και στο τέλος αυτού του άρθρου που φαίνεται παρακάτω.
int sensorpin = A0; void setup () { // αρχικοποίηση σειριακής επικοινωνίας στα 115200 bits ανά δευτερόλεπτο για να ταιριάζει με αυτό του python script: Serial.begin (115200); } void loop () { // διαβάστε την είσοδο στον αναλογικό πείρο 0: ################################# ###################### float sensorValue = analogRead (sensorpin); δεδομένα byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); καθυστέρηση (10) // καθυστέρηση μεταξύ των αναγνώσεων για σταθερότητα } }
Arduino Oscilloscope in Action
Ανεβάστε τον κώδικα στη ρύθμιση Arduino και εκτελέστε το σενάριο python. Θα πρέπει να δείτε ότι τα δεδομένα αρχίζουν να ρέουν μέσω της γραμμής εντολών του python και η πλοκή ποικίλλει ανάλογα με την ένταση του φωτός, όπως φαίνεται στην παρακάτω εικόνα.
Έτσι λοιπόν, το Arduino μπορεί να χρησιμοποιηθεί ως παλμογράφος, μπορεί επίσης να γίνει χρησιμοποιώντας Raspberry pi, ελέγξτε εδώ το πλήρες σεμινάριο για το παλμογράφο βασισμένο στο Raspberry Pi.