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

Realtime MPU-6050/A0 Καταγραφή δεδομένων με Arduino και Android: 7 βήματα (με εικόνες)
Realtime MPU-6050/A0 Καταγραφή δεδομένων με Arduino και Android: 7 βήματα (με εικόνες)

Βίντεο: Realtime MPU-6050/A0 Καταγραφή δεδομένων με Arduino και Android: 7 βήματα (με εικόνες)

Βίντεο: Realtime MPU-6050/A0 Καταγραφή δεδομένων με Arduino και Android: 7 βήματα (με εικόνες)
Βίντεο: Sismometro AJN a 10 Hz 2024, Ιούλιος
Anonim
Realtime MPU-6050/A0 Καταγραφή δεδομένων με Arduino και Android
Realtime MPU-6050/A0 Καταγραφή δεδομένων με Arduino και Android

Με ενδιέφερε να χρησιμοποιήσω το Arduino για μηχανική μάθηση. Ως πρώτο βήμα, θέλω να δημιουργήσω μια οθόνη δεδομένων σε πραγματικό χρόνο (ή πολύ κοντά σε αυτήν) και να καταγράψω με μια συσκευή Android. Θέλω να καταγράψω δεδομένα επιταχυνσιόμετρου από το MPU-6050, οπότε σχεδίασα την κατασκευή για χρήση του HC-05 σε 115200 baud. Με αυτήν τη διαμόρφωση μπορούν να μεταδοθούν 4 κανάλια δεδομένων με 250 δείγματα ανά δευτερόλεπτο.

Η κατασκευή έχει μερικά βήματα:

  • Φτιάξτε την ασπίδα ή το σανίδι
  • Προγραμματίστε το Arduino
  • Φορτώστε την εφαρμογή Android από το Google Play ή διακλαδώστε το GitHub και μεταγλωττίστε την μόνοι σας
  • Συνδέστε το MPU-6050 σε κάτι ενδιαφέρον που δονείται (χρησιμοποίησα αυτοκίνητο R/C)
  • Χρησιμοποιήστε τη συσκευή Android για να συνδεθείτε στο Arduino
  • Σχεδιάστε τα δεδομένα, αποθηκεύστε εάν ενδιαφέρεστε
  • Εισαγάγετε σε Python (ή άλλη πλατφόρμα) για περαιτέρω χρήση

Ας αρχίσουμε!

Βήμα 1: Φτιάξτε την Ασπίδα/το σανίδι

Φτιάξτε την Ασπίδα/το σανίδι
Φτιάξτε την Ασπίδα/το σανίδι
Φτιάξτε την Ασπίδα/το σανίδι
Φτιάξτε την Ασπίδα/το σανίδι

Αυτό είναι το διάγραμμα καλωδίωσης για το Arduino, HC-05 και το MPU-6050. Εκτός από το MPU-6050, έχω την αναλογική είσοδο A0 συνδεδεμένη με αισθητήρα φωτός για να δείξω ότι το ADC λειτουργεί. Οποιοδήποτε σήμα 0-5 volt θα μπορούσε να εισαχθεί στο A0 ADC. Αυτά είναι τα στοιχεία που χρησιμοποίησα για την κατασκευή:

  • Arduino Uno
  • HC-05 (Το HC-06 πρέπει επίσης να λειτουργεί, αλλά η κατασκευή μου ήταν με το HC-05)
  • MPU-6050
  • Φωτοαντίσταση Sparkfun
  • Αντίσταση 10kOhm (καφέ-μαύρο-πορτοκαλί)

Οι περισσότερες μονάδες Bluetooth HC-05 είναι προεπιλεγμένες σε 9600 baud. Για να μεταδοθούν τα δεδομένα με επιτυχία, θα πρέπει να τα επαναπρογραμματίσετε με ρυθμό baud 115200. Υπάρχει ένα καλό HC-05/HC-06 AT Command Instructable που εξηγεί πώς να το κάνετε.

Βήμα 2: Προγραμματίστε το Arduino

Προγραμματίστε το Arduino
Προγραμματίστε το Arduino
Προγραμματίστε το Arduino
Προγραμματίστε το Arduino

Χρησιμοποίησα την έκδοση 1.6.7 του Arduino IDE για να προγραμματίσω το Arduino. Ο κώδικας μπορεί να μεταφορτωθεί από τους συνδέσμους σε αυτό το βήμα ή από το repo του GitHub. Έχω συμπεριλάβει τρεις εκδόσεις: Το Firmware125.ino είναι η έκδοση 125 hertz, το Firmware250.ino είναι η έκδοση των 250 herz και το Firmware500.ino είναι η έκδοση των 500 hertz. Για να φτάσει το Arduino να κάνει ποδήλατο στα 500 hertz, το A0 ADC δεν συλλέγεται.

Το υλικολογισμικό περιλαμβάνει ένα ρολόι εξόδου στο Pin 9 που χρησιμοποίησα για να ελέγξω το χρονοδιάγραμμα. Το ίχνος δείχνει ότι ο χρόνος κύκλου είναι 4 ms (ισοδύναμος με 1/250 hertz). Έχω διαπιστώσει ότι εάν υπάρχουν προβλήματα σειριακής σύνδεσης, ο χρόνος δεν θα είναι ομοιόμορφος.

Ο κώδικας Arduino χρησιμοποιεί κάλυψη bit για να προσθέσει έναν αριθμό καναλιού σε κάθε πακέτο επειδή τα δείγματα μερικές φορές πέφτουν μέσω Bluetooth. Χρησιμοποιώ τα τρία πιο σημαντικά bit για να αποθηκεύσω έναν αριθμό καναλιού. Για υπογεγραμμένους ακέραιους αριθμούς, το πιο σημαντικό bit (MSB) προορίζεται για το πρόσημο. Δεδομένου ότι θέλω να χρησιμοποιήσω το MSB για τη διεύθυνσή μου και όχι το σύμβολο του ακέραιου, πρέπει να μετατρέψω όλες τις υπογεγραμμένες τιμές επιταχυνσιόμετρου σε ακύρωτους ακέραιους αριθμούς. Το κάνω αυτό προσθέτοντας 32768 σε κάθε τιμή (οι μετρήσεις ADC του επιταχυνσιόμετρου MPU είναι +32768 έως -32768) και μεταδίδονται ως ακύρωτοι ακέραιοι αριθμοί:

(χωρίς υπογραφή int) ((μακρύ) iAccelData+32767);

Ο αριθμός καναλιού είναι ο ίδιος για κάθε επιταχυνσιόμετρο και τη θύρα A0, έτσι ώστε ένα πακέτο που έχει πέσει να μπορεί να ανιχνευθεί εάν οι αριθμοί καναλιού είναι εκτός λειτουργίας. Για τα πακέτα που προέρχονται από το Bluetooth στο Arduino, το δυαδικό μοτίβο είναι (τα σημάδια αλλάζουν λίγο):

(xacc 3 bits address = 0x00, 13bit unsigned) (yacc 3 bits address = 0x01, 13bit unsigned) (zacc 3 bits address = 0x02, 13bit unsigned) (3 bits address = 0x03, iadc13bit unsigned)

(xacc 3 bits address = 0x00, 13bit unsigned) (yacc 3 bits address = 0x01, 13bit unsigned) (zacc 3 bits address = 0x02, 13bit unsigned) (3 bits address = 0x03, iadc13bit unsigned) (xacc 3 bits address = 0x00, 13bit χωρίς υπογραφή) (yacc 3 bits address = 0x01, 13bit unsigned) (zacc 3 bits address = 0x02, 13bit unsigned) (3 bits address = 0x03, iadc13bit unsigned)…

Εάν χρησιμοποιείτε κάτι άλλο από την εφαρμογή Accel Plot Android για να διαβάσετε τα δεδομένα Bluetooth, ακολουθούν τα βήματα για να εξαγάγετε τη διεύθυνση (χρησιμοποιώ τα ονόματα μεταβλητών από το αρχείο Accel Plot Bluetooth.java από το repo του GitHub):

- Διαβάστε στο 16 ανυπόγραφο int

- Εξαγάγετε το υψηλό byte και αποθηκεύστε το σε btHigh.

- Εξαγάγετε το χαμηλό byte και αποθηκεύστε το στο btLow.

- Ανακτήστε τη διεύθυνση από το btHigh χρησιμοποιώντας: (btHigh >> 5) & 0x07. Αυτή η δήλωση μετατοπίζει btHigh 5 bits προς τα δεξιά μετακινώντας τα τρία bits διευθύνσεων στους χαμηλότερους τρεις καταχωρητές. Το σύμβολο & είναι ένα λογικό ΚΑΙ που αναγκάζει τα bit 4 και πάνω να είναι μηδέν και τα τρία τελευταία bits να ταιριάζουν με τα bits διευθύνσεων. Το αποτέλεσμα αυτής της δήλωσης είναι η διεύθυνσή σας.

Δεν χρειάζεται να ανησυχείτε για την εξαγωγή διεύθυνσης εάν χρησιμοποιείτε το Accel Plot.

Βήμα 3: Φορτώστε την εφαρμογή Android από το Google Play ή διακλαδώστε το GitHub

Φορτώστε την εφαρμογή Android από το Google Play ή διακλαδώστε το GitHub
Φορτώστε την εφαρμογή Android από το Google Play ή διακλαδώστε το GitHub

Έχετε δύο επιλογές για τη φόρτωση της εφαρμογής Android στη συσκευή σας. Εάν θέλετε να αποφύγετε την κωδικοποίηση, μπορείτε να αναζητήσετε "Accel Plot" και η εφαρμογή θα εμφανιστεί στο Google Play store. Ακολουθήστε τις οδηγίες του καταστήματος για εγκατάσταση.

Η επιθυμία μου με αυτό το Instructable είναι πραγματικά να ενθαρρύνω άλλους να κατασκευάσουν έργα, οπότε έχω επίσης δημοσιεύσει τον κώδικα σε ένα repo του GitHub. Θα πρέπει να μπορείτε να το διακλαδίζετε, να το χτίζετε και να το τροποποιείτε όπως κρίνετε κατάλληλο. Δημοσίευσα τον κωδικό κάτω από την άδεια MIT οπότε διασκεδάστε!

Βήμα 4: Συνδεθείτε στο Arduino σε κάτι ενδιαφέρον (χρησιμοποίησα αυτοκίνητο R/C)

Συνδεθείτε στο Arduino σε κάτι ενδιαφέρον (χρησιμοποίησα αυτοκίνητο R/C)
Συνδεθείτε στο Arduino σε κάτι ενδιαφέρον (χρησιμοποίησα αυτοκίνητο R/C)

Θέλω τελικά να χρησιμοποιήσω τη συσκευή για ανίχνευση επιφάνειας δρόμου, οπότε σκέφτηκα ότι ένα μικρό τηλεχειριζόμενο (R/C) αυτοκίνητο θα ήταν κατάλληλο. Νομίζω ότι βοηθάει στο επόμενο βήμα αν τα accels μπορούν να βρίσκονται σε κάτι που κινείται ή δονείται.

Βήμα 5: Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino

Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino
Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino
Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino
Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino
Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino
Χρησιμοποιήστε τη συσκευή Android για σύνδεση στο Arduino

Εάν δεν το έχετε κάνει ήδη, θα πρέπει πρώτα να αντιστοιχίσετε το HC-05 στη συσκευή σας Android. Πιστεύω ότι στις περισσότερες συσκευές μπορείτε να το κάνετε αυτό πηγαίνοντας στις ρυθμίσεις. Η προεπιλεγμένη ακίδα για τις περισσότερες συσκευές HC-05 θα είναι 1234 ή 1111.

Ανοίξτε την εφαρμογή AccelPlot στη συσκευή Android. Όταν ανοίξει η εφαρμογή και προτού συνδεθείτε στο HC-05, μπορείτε να αλλάξετε το ρυθμό δειγματοληψίας (αυτό ορίζεται στον κώδικα Arduino), τις κλίμακες επιταχυνσιόμετρων (επίσης στον κώδικα Arduino) και τον αριθμό των δειγμάτων που θα αποθηκευτούν.

Μόλις γίνουν αυτές οι ρυθμίσεις, κάντε κλικ στο κουμπί "Σύνδεση". Θα πρέπει να εμφανίζει τις συσκευές Bluetooth και η συσκευή σας θα πρέπει να εμφανίζεται στη λίστα. Επιλέξτε το και μόλις ο κώδικας δημιουργήσει τη σύνδεση, θα εμφανιστεί ένα τοστ "Συνδεδεμένο".

Χρησιμοποιήστε το κουμπί πίσω βέλους για να επιστρέψετε στο Accel Plot. Πατήστε το κουμπί "Έναρξη ροής" για να εμφανίσετε δεδομένα από τη συσκευή HC-05. Θα πρέπει επίσης να υπάρχουν διαθέσιμα κουμπιά για την αποθήκευση των δεδομένων ή την αναπαραγωγή του περιεχομένου με διαμόρφωση συχνότητας μέσω της υποδοχής ήχου.

Βήμα 6: Αποκτήστε και σχεδιάστε τα δεδομένα

Image
Image
Εισαγωγή σε Python (ή άλλη πλατφόρμα) για περαιτέρω χρήση
Εισαγωγή σε Python (ή άλλη πλατφόρμα) για περαιτέρω χρήση

Το κουμπί "Έναρξη ροής" πρέπει να είναι ενεργοποιημένο. Πατήστε το για να ξεκινήσει η ροή δεδομένων στην οθόνη.

Το κουμπί "Αποθήκευση δεδομένων" θα ενεργοποιηθεί επίσης, πατήστε το για να αποθηκεύσετε τα δεδομένα.

Το Accel Plot περιλαμβάνει επίσης μια επιλογή για την έξοδο ενός διαμορφωμένου σήματος στα κανάλια ήχου. Τα 2 κανάλια στην εφαρμογή Accel Plot αναφέρονται στα αριστερά και δεξιά κανάλια της υποδοχής εξόδου ήχου στη συσκευή Android. Αυτό είναι χρήσιμο εάν θέλετε να φέρετε τα δεδομένα MPU-6050 σε ένα ξεχωριστό σύστημα καταγραφής δεδομένων, όπως ένα Εθνικό Όργανο.

Το βίντεο δείχνει ένα παράδειγμα του συστήματος που συλλέγει δεδομένα σε ένα αυτοκίνητο Ε/Κ.

Βήμα 7: Εισαγωγή σε Python (ή άλλη πλατφόρμα) για περαιτέρω χρήση

Εισαγωγή σε Python (ή άλλη πλατφόρμα) για περαιτέρω χρήση
Εισαγωγή σε Python (ή άλλη πλατφόρμα) για περαιτέρω χρήση

Τα αρχεία αποθηκεύονται στη συσκευή Android. Τα αρχεία θα αποθηκευτούν στον κατάλογο "AccelPlot" για Android API 18 και άνω. Ο κώδικας τοποθετεί τα αρχεία.dat στο φάκελο "\ Tablet / Documents / AccelPlot" για το API 19 (KitKat 4.4) και νεότερο. Είχα πρόβλημα με ορισμένες συσκευές Android που εμφανίζουν τα αρχεία όταν συνδέονται μέσω USB. Σε ορισμένες περιπτώσεις χρειάστηκε να επανεκκινήσω τη συσκευή Android για να εμφανιστούν. Δεν είμαι σίγουρος γιατί συμβαίνει αυτό, αλλά θα πρέπει να υπάρχουν τέσσερα αρχεία, ένα για κάθε κανάλι. Μπορούν να αντιγραφούν σε έναν τοπικό κατάλογο για επιπλέον εργασία.

Χρησιμοποίησα το Anaconda/Python 2.7 για να ανοίξω τα αρχεία και να εμφανίσω τα δεδομένα. Το αρχείο "ExploratoryAnalysis.ipynb" έχει το αρχείο σημειωματάριου IPython που θα ανοίξει όλα τα αρχεία δεδομένων και θα σχεδιάσει τα δείγματα δεδομένων. Τα δείγματα αρχείων περιλαμβάνονται στο repo του GitHub. Τα δεδομένα αποθηκεύονται ως μεγάλα-endian 4 byte floats ('> f'), οπότε κάθε πρόγραμμα ανάλυσης θα πρέπει να μπορεί να τα ανοίξει.

Έχω επίσης συμπεριλάβει ένα απλούστερο αρχείο που ονομάζεται "ReadDataFiles.ipynb" που δείχνει πώς να διαβάζετε σε ένα μόνο αρχείο κατά όνομα.

Συνιστάται: