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

Έλεγχος Servo χρησιμοποιώντας MPU6050 μεταξύ Arduino και ESP8266 με βήματα HC-12: 6
Έλεγχος Servo χρησιμοποιώντας MPU6050 μεταξύ Arduino και ESP8266 με βήματα HC-12: 6

Βίντεο: Έλεγχος Servo χρησιμοποιώντας MPU6050 μεταξύ Arduino και ESP8266 με βήματα HC-12: 6

Βίντεο: Έλεγχος Servo χρησιμοποιώντας MPU6050 μεταξύ Arduino και ESP8266 με βήματα HC-12: 6
Βίντεο: Generation Next Virtual Classrooms | Arduino Αισθητήρες και Περιφερειακά 2 2024, Νοέμβριος
Anonim
Έλεγχος Servo χρησιμοποιώντας MPU6050 μεταξύ Arduino και ESP8266 με HC-12
Έλεγχος Servo χρησιμοποιώντας MPU6050 μεταξύ Arduino και ESP8266 με HC-12

Σε αυτό το έργο, ελέγχουμε τη θέση ενός σερβοκινητήρα χρησιμοποιώντας τα mpu6050 και HC-12 για επικοινωνία μεταξύ Arduino UNO και ESP8266 NodeMCU.

Βήμα 1: ΣΧΕΤΙΚΑ ΜΕ ΑΥΤΟ ΤΟ ΕΡΓΟ

Είναι ένα άλλο έργο IoT βασισμένο στο HC-12 RF-module. Εδώ, τα δεδομένα imu (mpu6050) από το arduino χρησιμοποιούνται για τον έλεγχο του σερβοκινητήρα (συνδεδεμένος με τον Nodemcu). Εδώ, η απεικόνιση δεδομένων εκτελείται επίσης από την πλευρά του arduino όπου τα δεδομένα βήματος mpu6050 (περιστροφή γύρω από τον άξονα x) απεικονίζονται με ένα σκίτσο επεξεργασίας (συζητήθηκε αργότερα). Βασικά αυτό το έργο είναι λίγο προθέρμανση για να θυμάστε διάφορες πτυχές του ελέγχου Imu & Servo με Arduino και ESP8266 nodemcu.

ΣΚΟΠΟΣ

Ο στόχος αυτού του αρκετά σαφούς, Ελέγχουμε τη θέση του Servo μοτέρ χρησιμοποιώντας την τιμή βήματος της IMU. Και όλα μαζί αυτή η κλίση και η συγχρονισμένη θέση κινητήρα απεικονίζεται με την επεξεργασία.

Βήμα 2: Απαιτείται υλικό

Μονάδα NodeMCU ESP8266 12E Wifi

Χαρτόνι χωρίς κόλλα

Σύρμα βραχυκυκλωτήρα

MPU6050 accelo+γυροσκόπιο

Ενότητες HC-12 RF (ζεύγος)

Σερβοκινητήρας SG90

Βήμα 3: Κύκλωμα & συνδέσεις

Κύκλωμα & Συνδέσεις
Κύκλωμα & Συνδέσεις
Κύκλωμα & Συνδέσεις
Κύκλωμα & Συνδέσεις

Οι συνδέσεις είναι κατευθείαν. Μπορείτε να τροφοδοτήσετε το σερβο με 3,3V του Nodemcu. Μπορείτε επίσης να χρησιμοποιήσετε το Vin για να τροφοδοτήσετε το σερβο αν το nodemcu σας έχει τόση τάση σε αυτόν τον πείρο. Αλλά οι περισσότεροι πίνακες Lolin δεν έχουν 5V στο Vin (εξαρτάται από τον κατασκευαστή).

Αυτά τα διαγράμματα κυκλώματος γίνονται με τη χρήση EasyADA.

Βήμα 4: ΕΡΓΑΣΙΑ

ΕΡΓΑΖΟΜΕΝΟΣ
ΕΡΓΑΖΟΜΕΝΟΣ

Μόλις ξεκινήσει το σκίτσο του arduino, θα στείλει τη γωνία κλίσης (που κυμαίνεται από -45 έως 45) στον δέκτη hc12 του Nodemcu που αντιστοιχίζεται με τη θέση Servo 0 έως 180 μοιρών. Εδώ χρησιμοποιήσαμε τη γωνία κλίσης από -45 έως +45 μοίρα, ώστε να μπορούμε εύκολα να τη χαρτογραφήσουμε στη θέση Servo.

Τώρα, σκέφτεστε γιατί μπορούμε απλά να χρησιμοποιήσουμε τη μέθοδο του χάρτη ως εξής:-

int pos = χάρτης (val, -45, 45, 0, 180);

Επειδή η αρνητική γωνία που στέλνει ο πομπός hc12 λαμβάνεται ως:

1ο ημίχρονο: (T) 0 έως 45 => 0 έως 45 (R)

2ο ημίχρονο: (T) -45 έως -1 => 255 έως 210 (R)

Πρέπει λοιπόν να το αντιστοιχίσετε στο 0 έως 180 ως

εάν (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;

Αποφεύγω τη μέθοδο του χάρτη λόγω κάποιου άσχετου σφάλματος. Μπορείτε να το δοκιμάσετε και να σχολιάσετε ότι λειτουργεί μαζί σας

εάν (val> = 0 && val <= 45) pos = χάρτης (val, 0, 45, 90, 180); else pos = χάρτης (val, 255, 210, 0, 90); // Το 4ο όρισμα μπορεί να είναι 2 (μπορείτε να ελέγξετε)

MPU6050 Υπολογισμός γωνίας κλίσης

Χρησιμοποιώ βιβλιοθήκη MPU6050_tockn η οποία βασίζεται στην παροχή ακατέργαστων δεδομένων από το IMU.

int pitchAngle = mpu6050.getAngleX ()

Αυτό θα μας δώσει τη γωνία περιστροφής γύρω από τον άξονα x. Όπως είδατε στο σχήμα, το imu μου είναι κάθετα τοποθετημένο στο breadboard, οπότε μην συγχέετε με το pitch and roll. Στην πραγματικότητα θα πρέπει πάντα να βλέπετε τον άξονα τυπωμένο στον πίνακα ανάρτησης.

Μέσω αυτής της βιβλιοθήκης, δεν χρειάζεται να ασχολείστε με τα εσωτερικά ηλεκτρονικά της ανάγνωσης συγκεκριμένων καταχωρητών για συγκεκριμένη λειτουργία. καθορίζετε μόνο τη δουλειά και τελειώσατε!

Btw αν θέλετε να υπολογίσετε μόνοι σας τη γωνία. Μπορείτε εύκολα να το κάνετε ως εξής:

#περιλαμβάνω

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (true); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, true)? AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Temp = Wire.read () << 8 | Wire.read (); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();

int xAng = χάρτης (AcX, minVal, maxVal, -90, 90); int yAng = χάρτης (AcY, minVal, maxVal, -90, 90); int zAng = χάρτης (AcZ, minVal, maxVal, -90, 90); x = RAD_TO_DEG * (atan2 (-yAng, -zAng)+PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng)+PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng)+PI); Serial.print ("AngleX ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }

Αλλά, δεν είναι απαραίτητο να γράψετε τόσο πολύ κώδικα για να πάρετε τη γωνία. Πρέπει να γνωρίζετε τα γεγονότα πίσω από τη σκηνή, αλλά η χρήση βιβλιοθήκης άλλων ανθρώπων είναι πολύ αποτελεσματική σε πολλά έργα. Μπορείτε να διαβάσετε σχετικά με αυτό το imu και άλλες προσεγγίσεις για να λάβετε περισσότερα φιλτραρισμένα δεδομένα από τον ακόλουθο σύνδεσμο: Explore-mpu6050.

Ο κώδικας arduino μου στο άκρο μετάδοσης έχει μόνο 30 γραμμές με τη βοήθεια της βιβλιοθήκης MPU6050_tockn, οπότε η χρήση μιας βιβλιοθήκης είναι καλή εκτός αν δεν χρειάζεστε κάποιες βασικές αλλαγές στη λειτουργικότητα του IMU. Μια βιβλιοθήκη με το όνομα I2Cdev του Jeff Rowberg είναι πολύ χρήσιμη εάν θέλετε κάποια φιλτραρισμένα δεδομένα χρησιμοποιώντας το DMP (motionηφιακός επεξεργαστής κίνησης) της IMU.

Ενσωμάτωση με την Επεξεργασία

Εδώ η Επεξεργασία χρησιμοποιείται για την απεικόνιση των δεδομένων περιστροφής σχετικά με τον άξονα x της IMU όπως υπολογίζεται από τα ακατέργαστα δεδομένα που προέρχονται από το MPU6050. Λαμβάνουμε τα εισερχόμενα ακατέργαστα δεδομένα στο SerialEvent με τον ακόλουθο τρόπο:

void serialEvent (Serial myPort) {

inString = myPort.readString (); δοκιμάστε {// Αναλύστε τα δεδομένα // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (σειρές δεδομένων [i+1]); }} else {println (inString); }}} catch (εξαίρεση ε) {println ("Caught Exception"); }}

Εδώ μπορείτε να δείτε την απεικόνιση στην εικόνα που επισυνάπτεται σε αυτό το βήμα. Τα δεδομένα θέσης που λαμβάνονται στο άκρο nodemcu φαίνονται επίσης στη σειριακή οθόνη, όπως φαίνεται στην εικόνα.

Βήμα 5: ΚΩΔ

Έχω επισυνάψει το αποθετήριο github. Μπορείτε να το κλωνοποιήσετε και να το πιρούνι για να το χρησιμοποιήσετε στα έργα σας.

my_code

Το repo περιλαμβάνει 2 σκίτσα arduino για πομπό (arduino+IMU) & δέκτη (Nodemcu+Servo).

Και ένα σκίτσο επεξεργασίας. Ορίστε το repo αν αυτό σας βοηθήσει στο έργο σας.

Σε αυτό το διδακτικό, R- Δέκτης & Τ-Πομπός

Βήμα 6: ΕΠΙΔΕΙΞΗ ΒΙΝΤΕΟ

Θα επισυνάψω το βίντεο αύριο. Ακολουθήστε με για να ειδοποιηθείτε.

Σας ευχαριστώ όλους!

Συνιστάται: