- Απαιτούμενα υλικά:
- Διάγραμμα κυκλώματος:
- Ενεργοποίηση της εγκατάστασής σας:
- Προγραμματισμός του Arduino:
- Προετοιμασία της εφαρμογής Android χρησιμοποιώντας Επεξεργασία:
- Εργασία του κλινόμετρου Arduino:
Το MPU6050 είναι ένα επιταχυνσιόμετρο 3 αξόνων IC και ένα γυροσκόπιο 3 αξόνων που συνδυάζονται σε μία μονάδα. Στεγάζει επίσης έναν αισθητήρα θερμοκρασίας και ένα DCM για την εκτέλεση μιας σύνθετης εργασίας. Το MPU6050 χρησιμοποιείται συνήθως στην κατασκευή Drone και άλλων απομακρυσμένων ρομπότ, όπως ένα αυτο-εξισορροπημένο ρομπότ. Σε αυτό το έργο θα μάθουμε πώς να χρησιμοποιούμε το MPU6050 είναι ενσωματωμένο ένα Inclinometer ή Spirit Leveler. Όπως γνωρίζουμε, χρησιμοποιείται ένα κλινικόμετρο για να ελέγξει αν μια επιφάνεια είναι τέλεια ισοπεδωμένη ή όχι, διατίθεται είτε ως φούσκα sprit είτε ως ψηφιακά μέτρα. Σε αυτό το έργο, πρόκειται να δημιουργήσουμε ένα ψηφιακό Inclinometer που μπορεί να παρακολουθείται χρησιμοποιώντας μια εφαρμογή Android. Ο λόγος για τη χρήση μιας απομακρυσμένης οθόνης όπως ένα κινητό τηλέφωνο είναι ότι μπορούμε να παρακολουθήσουμε τις τιμές από το MPU6050 χωρίς να χρειαστεί να κοιτάξουμε το υλικό, αυτό θα ήταν πολύ βολικό όταν το MPU6050 τοποθετηθεί σε drone ή σε κάποιες άλλες δυσπρόσιτες τοποθεσίες.
Απαιτούμενα υλικά:
- Arduino Pro-mini (5V)
- MPU6050 Gyro Sensor
- Μονάδα Bluetooth HC-05 ή HC-06
- Πίνακας FTDI
- Ψωμί
- Σύνδεση καλωδίων
- Έξυπνο τηλέφωνο
Διάγραμμα κυκλώματος:
Το πλήρες διάγραμμα κυκλώματος για αυτό το έργο Arduino Tilt Sensor φαίνεται παρακάτω. Έχει μόνο τρία συστατικά και μπορεί εύκολα να κατασκευαστεί πάνω από το breadboard.
Το MPU6050 επικοινωνεί με τη βοήθεια του I2C και ως εκ τούτου ο πείρος SDA συνδέεται με τον πείρο A4 του Arduino που είναι ο πείρος SDA και ο πείρος SCL συνδέεται με τον πείρο A5 του Arduino. Η μονάδα Bluetooth HC-06 λειτουργεί με τη βοήθεια της σειριακής επικοινωνίας, επομένως ο ακροδέκτης Rx του Bluetooth είναι συνδεδεμένος στον ακροδέκτη D11 και ο ακροδέκτης Tx του Bluetooth είναι συνδεδεμένος στον ακροδέκτη D10 του Arduino. Αυτοί οι ακροδέκτες D10 και D11 θα διαμορφωθούν ως σειριακός ακροδέκτης προγραμματίζοντας το Arduino. Η μονάδα HC-05 και η μονάδα MSP6050 λειτουργούν σε + 5V και ως εκ τούτου τροφοδοτούνται από τον πείρο Vcc του Arduino όπως φαίνεται παραπάνω.
Χρησιμοποίησα κάποια καλώδια σύνδεσης breadboard και έχτισα τη διάταξη πάνω από ένα μικρό breadboard. Μόλις ολοκληρωθούν οι συνδέσεις, ο πίνακας μου μοιάζει με αυτό παρακάτω.
Ενεργοποίηση της εγκατάστασής σας:
Μπορείτε είτε να ενεργοποιήσετε το κύκλωμα σας μέσω της πλακέτας προγραμματισμού FTDI όπως έχω κάνει, είτε να χρησιμοποιήσετε μια μπαταρία 9V ή έναν προσαρμογέα 12V και να το συνδέσετε στον ακροδέκτη Raw του Arduino pro mini Το Arduino Pro-mini διαθέτει έναν ενσωματωμένο ρυθμιστή τάσης που θα μετατρέψει αυτήν την εξωτερική τάση ρυθμιζόμενη + 5V.
Προγραμματισμός του Arduino:
Μόλις το υλικό είναι έτοιμο, μπορούμε να ξεκινήσουμε τον προγραμματισμό του Arduino. Όπως πάντα, ο πλήρης κωδικός για αυτό το έργο βρίσκεται στο κάτω μέρος αυτής της σελίδας. Αλλά για να κατανοήσω καλύτερα το έργο, έχω σπάσει τον κώδικα σε μικρές ανατροπές και τους εξήγησα ως βήματα παρακάτω.
Το πρώτο βήμα θα ήταν η διασύνδεση του MPU6050 με το Arduino. Για αυτό το έργο πρόκειται να χρησιμοποιήσουμε τη βιβλιοθήκη που ανέπτυξε ο Korneliusz, η οποία μπορείτε να κατεβάσετε από τον παρακάτω σύνδεσμο
MPU6050 Liberty - Korneliusz Jarzebski
Πραγματοποιήστε λήψη του αρχείου ZIP και προσθέστε το στο Arduino IDE σας. Στη συνέχεια, μεταβείτε στο Αρχείο-> Παραδείγματα-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Αυτό θα ανοίξει το παράδειγμα προγράμματος που χρησιμοποιεί τη βιβλιοθήκη που μόλις κατεβάσαμε. Έτσι, κάντε κλικ στην αποστολή και περιμένετε να μεταφορτωθεί το πρόγραμμα στο Arduino Pro mini. Μόλις ολοκληρωθεί αυτό, ανοίξτε τη σειριακή οθόνη και ρυθμίστε το ρυθμό baud σε 115200 και ελέγξτε αν λαμβάνετε τα ακόλουθα.
Αρχικά, και οι τρεις τιμές θα είναι μηδενικές, αλλά καθώς μετακινείτε το breadboard σας, μπορείτε να παρατηρήσετε ότι αυτές οι τιμές αλλάζουν. Εάν αλλάξουν αυτό σημαίνει ότι η σύνδεσή σας είναι σωστή, διαφορετικά ελέγξτε τις συνδέσεις σας. Αφιερώστε λίγο χρόνο εδώ για να παρατηρήσετε πώς οι τρεις τιμές Pitch Roll και Yaw ποικίλλουν ανάλογα με τον τρόπο με τον οποίο κλίνετε τον αισθητήρα σας. Εάν μπερδευτείτε, πατήστε το κουμπί επαναφοράς στο Arduino και οι τιμές θα αρχικοποιηθούν ξανά στο μηδέν, στη συνέχεια, γείρετε τον αισθητήρα προς τη μία κατεύθυνση και ελέγξτε ποιες τιμές ποικίλλουν. Η παρακάτω εικόνα θα σας βοηθήσει να κατανοήσετε καλύτερα.
Από αυτές τις τρεις παραμέτρους ενδιαφερόμαστε μόνο για Roll and Pitch. Η τιμή Roll θα μας πει για την κλίση στο Χ-άξονα και την αξία Pitch θα μας πει για την κλίση στο Υ-άξονα. Τώρα που έχουμε κατανοήσει τα βασικά, ας ξεκινήσουμε να προγραμματίζουμε το Arduino για να διαβάσουμε αυτές τις τιμές και να το στείλουμε στο Arduino μέσω Bluetooth. Όπως πάντα ας ξεκινήσουμε συμπεριλαμβάνοντας όλες τις βιβλιοθήκες που απαιτούνται για αυτό το έργο
#περιλαμβάνω
Στη συνέχεια αρχικοποιούμε τη σειρά λογισμικού για τη μονάδα Bluetooth. Αυτό είναι δυνατό λόγω της βιβλιοθήκης Serial λογισμικού στο Arduino, οι καρφίτσες IO μπορούν να προγραμματιστούν να λειτουργούν ως σειριακές καρφίτσες. Εδώ χρησιμοποιούμε τις ψηφιακές καρφίτσες D10 και D11, όπου D10 id Rx και D11 είναι Tx.
ΛογισμικόSerial BT (10, 11); // RX, TX
Στη συνέχεια, αρχικοποιούμε τις μεταβλητές και τα αντικείμενα που απαιτούνται για το πρόγραμμα και προχωράμε στη λειτουργία setup () όπου καθορίζουμε το ρυθμό baud για το Serial monitor και το Bluetooth. Για τα HC-05 και HC-06, ο ρυθμός baud είναι 9600, οπότε είναι υποχρεωτικό να χρησιμοποιείται το ίδιο. Στη συνέχεια ελέγξουμε εάν ο δίαυλος IIC του Arduino είναι συνδεδεμένος στο MPU6050, αν όχι, εκτυπώνουμε ένα προειδοποιητικό μήνυμα και παραμένουμε εκεί όσο η συσκευή είναι συνδεδεμένη. Μετά από αυτό, βαθμονομούμε το Γύρο και ορίζουμε τις τιμές κατωφλίου χρησιμοποιώντας τις αντίστοιχες συναρτήσεις του όπως φαίνεται παρακάτω.
άκυρη ρύθμιση () {Serial.begin (115200); BT.begin (9600); // ξεκινήστε την επικοινωνία Bluetooth στο 9600 baudrate // Αρχικοποιήστε το MPU6050 ενώ (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Δεν ήταν δυνατή η εύρεση ενός έγκυρου αισθητήρα MPU6050, ελέγξτε την καλωδίωση!"); καθυστέρηση (500) } mpu.calibrateGyro (); // Βαθμονομήστε το γυροσκόπιο κατά την έναρξη mpu.setThreshold (3); // Ελέγχει την ευαισθησία}
Η γραμμή " mpu.calibrateGyro ();" βαθμονομήστε το MPU6050 για τη θέση στην οποία βρίσκεται. Αυτή η γραμμή μπορεί να κληθεί πολλές φορές μέσα στο πρόγραμμα όποτε το MPU6050 πρέπει να βαθμονομηθεί και όλες οι τιμές πρέπει να οριστούν στο μηδέν. "Mpu.setThreshold (3);" Αυτή η λειτουργία ελέγχει πόσο ποικίλλει η τιμή για την κίνηση στον αισθητήρα, μια πολύ χαμηλή τιμή θα αυξήσει τον θόρυβο, οπότε προσέξτε ενώ παίζετε με αυτό.
Μέσα στον κενό βρόχο (), διαβάζουμε επανειλημμένα τις τιμές του γυροσκοπίου και του αισθητήρα θερμοκρασίας υπολογίζουμε την τιμή του βήματος, του ρολού και του χασμουρητού, το στέλνουμε στη μονάδα Bluetooth. Οι ακόλουθες δύο γραμμές θα διαβάσουν τις πρώτες τιμές Γυρο και την τιμή θερμοκρασίας
Διάνυσμα norm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Στη συνέχεια, υπολογίζουμε το pitch, roll και yaw πολλαπλασιάζοντας με το χρονικό βήμα και προσθέτοντάς το στις προηγούμενες τιμές. Το TimeStep δεν είναι παρά το διάστημα μεταξύ διαδοχικών μετρήσεων.
pitch = pitch + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Για να κατανοήσουμε καλύτερα το βήμα του χρόνου ας ρίξουμε μια ματιά στην παρακάτω γραμμή. Αυτή η γραμμή τοποθετείται για να διαβάσει τις τιμές από το MPU6050 ακριβώς σε ένα διάστημα 10mS ή 0,01 δευτερόλεπτο. Δηλώνουμε λοιπόν την τιμή του TimeStep ως 0,01. Και χρησιμοποιήστε την παρακάτω γραμμή για να κρατήσετε το πρόγραμμα αν υπάρχει, εάν απομένει περισσότερο χρόνο. (millis () - timer ()) δίνει το χρόνο που απαιτείται για την εκτέλεση του προγράμματος μέχρι στιγμής. Απλώς αφαιρούμε με 0,01 δευτερόλεπτα και για τον υπόλοιπο χρόνο κρατάμε το πρόγραμμα μας εκεί χρησιμοποιώντας τη λειτουργία καθυστέρησης
καθυστέρηση ((timeStep * 1000) - (millis () - timer));
Μόλις ολοκληρώσουμε την ανάγνωση και τον υπολογισμό των τιμών, μπορούμε να τις στείλουμε στο τηλέφωνό μας μέσω Bluetooth. Αλλά υπάρχει μια παγίδα εδώ. Η λειτουργική μονάδα Bluetooth που χρησιμοποιούμε μπορεί να στείλει μόνο 1 byte (8 bit) που μας επιτρέπει να στέλνουμε αριθμούς μόνο από 0 έως 255. Επομένως, πρέπει να χωρίσουμε τις τιμές μας και να τον χαρτογραφήσουμε εντός αυτού του εύρους. Αυτό γίνεται με τις ακόλουθες γραμμές
if (roll> -100 && roll <100) x = χάρτης (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = χάρτης (pitch, -100, 100, 100, 200); εάν (temp> 0 && temp <50) t = 200 + int (temp);
Όπως μπορείτε να το καταλάβετε, η τιμή του ρολού χαρτογραφείται σε 0 έως 100 στη μεταβλητή x και το βήμα χαρτογραφείται σε 100 έως 200 στη μεταβλητή y και το temp χαρτογραφείται σε 200 και πάνω στη μεταβλητή t. Μπορούμε να χρησιμοποιήσουμε τις ίδιες πληροφορίες για να ανακτήσουμε τα δεδομένα από αυτά που έχουμε στείλει. Τέλος γράφουμε αυτές τις τιμές μέσω του Bluetooth χρησιμοποιώντας τις ακόλουθες γραμμές.
BT.write (x); BT.write (y); BT.write (t);
Εάν έχετε κατανοήσει το πλήρες πρόγραμμα, μετακινηθείτε προς τα κάτω για να ρίξετε μια ματιά στο πρόγραμμα και να το ανεβάσετε στον πίνακα Arduino.
Προετοιμασία της εφαρμογής Android χρησιμοποιώντας Επεξεργασία:
Η εφαρμογή android για αυτό το Inclinometer Arduino αναπτύχθηκε χρησιμοποιώντας το Processing IDE. Αυτό μοιάζει πολύ με το Arduino και μπορεί να χρησιμοποιηθεί για τη δημιουργία εφαρμογών συστήματος, εφαρμογών Android, σχεδιασμών ιστοσελίδων και πολλά άλλα. Έχουμε ήδη χρησιμοποιήσει την επεξεργασία για να αναπτύξουμε μερικά από τα άλλα δροσερά έργα μας που παρατίθενται παρακάτω
- Παιχνίδι Ping Pong χρησιμοποιώντας το Arduino
- Ραδιόφωνο FM ελεγχόμενο από έξυπνο τηλέφωνο χρησιμοποιώντας επεξεργασία.
- Σύστημα ραντάρ Arduino χρησιμοποιώντας αισθητήρα επεξεργασίας και υπερήχων
Ωστόσο, δεν είναι δυνατό να εξηγηθεί ο πλήρης κωδικός σχετικά με τον τρόπο δημιουργίας αυτής της εφαρμογής. Έτσι έχετε δύο τρόπους για να το ξεπεράσετε. Είτε μπορείτε να κατεβάσετε το αρχείο APK από τον παρακάτω σύνδεσμο και να εγκαταστήσετε την εφαρμογή Android απευθείας στο τηλέφωνό σας. Ή μετακινηθείτε παρακάτω για να βρείτε τον πλήρη κώδικα επεξεργασίας και να μάθετε μόνοι σας πώς λειτουργεί
Μέσα στο αρχείο ZIP, μπορείτε να βρείτε ένα φάκελο που ονομάζεται δεδομένα που αποτελείται από όλες τις εικόνες και άλλες πηγές που πρόκειται να φορτωθούν στην εφαρμογή Android. Η παρακάτω γραμμή αποφασίζει σε ποιο όνομα θα συνδεθεί αυτόματα το Bluetooth
bt.connectToDeviceByName ("HC-06");
Μέσα στη συνάρτηση draw () , τα πράγματα θα εκτελεστούν επανειλημμένα εδώ σχεδιάζουμε τις εικόνες, προβάλλουμε το κείμενο και κινούμε τις μπάρες με βάση τις τιμές που σχηματίζουν τη μονάδα Bluetooth. Μπορείτε να ελέγξετε τι συμβαίνει σε κάθε λειτουργία διαβάζοντας το πρόγραμμα.
void draw () // Ο άπειρος βρόχος {φόντο (0); imageMode (ΚΕΝΤΡΟ); εικόνα (λογότυπο, πλάτος / 2, ύψος / 1,04, πλάτος, ύψος / 12); load_images (); textfun (); getval (); }
Τέλος, υπάρχει ένα πιο σημαντικό πράγμα που πρέπει να εξηγήσουμε, να θυμάστε ότι χωρίζουμε την τιμή του βήματος, του ρολού και του temp σε 0 έως 255. Επομένως, εδώ το επαναφέρουμε ξανά στις κανονικές τιμές αντιστρέφοντας το αντίστροφα σε κανονικές τιμές.
εάν (πληροφορίες <100 && info> 0) x = χάρτης (πληροφορίες, 0, 100, - (πλάτος / 1,5) / 3, + (πλάτος / 1,5) / 3); // x = πληροφορίες; αλλιώς εάν (πληροφορίες <200 && info> 100) y = χάρτης (πληροφορίες, 100, 200, - (πλάτος / 4,5) / 0,8, + (πλάτος / 4,5) / 0,8); // y = πληροφορίες; αλλιώς εάν (πληροφορίες> 200) temp = info -200; println (temp, x, y);
Υπάρχουν πολύ καλύτεροι τρόποι για τη λήψη δεδομένων από μια μονάδα Bluetooth στο τηλέφωνο, αλλά επειδή πρόκειται για ένα έργο χόμπι που τα έχουμε αγνοήσει, μπορείτε να σκάψετε βαθιά αν ενδιαφέρεστε.
Εργασία του κλινόμετρου Arduino:
Αφού ετοιμαστείτε με το υλικό και την εφαρμογή, ήρθε η ώρα να διασκεδάσετε με αυτό που έχουμε δημιουργήσει. Ανεβάστε τον κωδικό Arduino στον πίνακα, μπορείτε επίσης να αφαιρέσετε τα σχόλια στις σειρές Serial.println και να ελέγξετε αν το υλικό λειτουργεί όπως αναμένεται χρησιμοποιώντας τη σειριακή οθόνη. Τέλος πάντων, αυτό είναι εντελώς προαιρετικό.
Μόλις μεταφορτωθεί ο κωδικός, ξεκινήστε την εφαρμογή Android στο κινητό σας τηλέφωνο. Η εφαρμογή θα πρέπει να συνδεθεί αυτόματα με τη μονάδα HC-06 και θα εμφανιστεί η ένδειξη "Σύνδεση σε: HC-06" στην κορυφή της εφαρμογής όπως φαίνεται παρακάτω.
Αρχικά, όλες οι τιμές θα είναι μηδενικές εκτός από την τιμή θερμοκρασίας. Αυτό συμβαίνει επειδή το Arduino έχει βαθμονομήσει το MPU-6050 για αυτήν τη θέση ως αναφορά, τώρα μπορείτε να γείρετε το υλικό και να ελέγξετε ότι οι τιμές στην εφαρμογή για κινητά αλλάζουν επίσης μαζί με την κινούμενη εικόνα. Η πλήρης λειτουργία της εφαρμογής βρίσκεται στο παρακάτω βίντεο. Τώρα μπορείτε να τοποθετήσετε το ψωμί οπουδήποτε και να ελέγξετε αν η επιφάνεια είναι τέλεια ισοπεδωμένη.
Ελπίζω να καταλάβατε το έργο και να μάθετε κάτι χρήσιμο από αυτό. Εάν έχετε οποιαδήποτε αμφιβολία, χρησιμοποιήστε την παρακάτω ενότητα σχολίων ή τα φόρουμ για να το επιλύσετε.