Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [ hier ] und treten Sie heute bei!
QMC5883L
Überblick
In diesem Tutorial befassen wir uns mit dem GY-87 IMU-Modul und konzentrieren uns auf das QMC5883L-Magnetometer. Der erste Teil des Tutorials führt Sie durch die Kalibrierung des QMC5883L-Magnetometers, was für genaue Messungen des Magnetfelds unerlässlich ist. Sie lernen, wie man einen Kalibrierungssketch auf Arduino hochlädt, eine Echtzeit-Kalibrierung durchführt und diese Einstellungen in Ihren Projekten anwendet. Der zweite Teil des Tutorials behandelt die Initialisierung des MPU6050 (Beschleunigungsmesser und Gyroskop) und QMC5883L auf einem Arduino Uno unter Verwendung der Adafruit MPU6050- und QMC5883LCompass-Bibliotheken. Sie erfahren, wie man Sensordaten liest und auf dem Seriellen Monitor anzeigt, was eine grundlegende Fähigkeit für Anwendungen in Navigation, Bewegungstracking und Orientierungserkennung ist.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein komplettes Kit zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Elite Explorer Kit |
300+ |
Sie können die Komponenten auch separat über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
- |
|
- |
Verdrahtung
Schaltplan
Bibliothek installieren
Bemerkung
Um die Bibliothek zu installieren, verwenden Sie den Arduino Library Manager.
QMC5883L kalibrieren
Bemerkung
Sie können die Datei
09-gy87_compass_calibration.inodirekt unter dem Pfadelite-explorer-kit-main\basic_project\09-gy87_compass_calibrationöffnen.Oder kopieren Sie diesen Code in die Arduino IDE.
Nachdem Sie den Code hochgeladen haben, öffnen Sie den seriellen Monitor. Befolgen Sie die Anweisungen im seriellen Monitor, um QMC5883L zu kalibrieren. Wenn Sie aufgefordert werden, den Sensor zu bewegen, wird die Kalibrierungsmethode „Achterfigur“ empfohlen. Alternativ können Sie den Sensor einfach parallel zum Boden halten und ihn im Uhrzeigersinn oder gegen den Uhrzeigersinn drehen, bis der serielle Monitor meldet, dass die Kalibrierung abgeschlossen ist.
Sobald alle Kalibrierungsdaten gesammelt wurden, wird das Sketch Ihnen einige Codezeilen geben, die wie compass.setCalibrationOffsets(-375.00, -179.00, 85.00); und compass.setCalibrationScales(1.04, 0.96, 1.01); aussehen. Kopieren Sie diesen Code. Es ist empfehlenswert, ihn für zukünftige Referenzen zu speichern.
Bei Verwendung von QMC5883L: Öffnen Sie den Sketch Ihres Projekts und fügen Sie die kopierte Codezeile direkt unter den Aufruf compass.init() ein. So wie hier:
void initializeQMC5883L() {
compass.init();
// You should replace the code below according to your calibration results
compass.setCalibrationOffsets(-375.00, -179.00, 85.00);
compass.setCalibrationScales(1.04, 0.96, 1.01);
}
Code
Bemerkung
Magnetometer müssen kalibriert(QMC5883L kalibrieren) werden, bevor sie als Kompass verwendet werden können, und müssen waagerecht gehalten und fern von Eisenobjekten, magnetisierten Materialien und stromführenden Drähten gehalten werden.
Bemerkung
Sie können die Datei
09-gy87_qmc5883l.inodirekt unter dem Pfadelite-explorer-kit-main\basic_project\09-gy87_qmc5883löffnen.Oder kopieren Sie diesen Code in die Arduino IDE.
Fügen Sie den Code, den Sie aus den Kalibrierungsschritten erhalten haben, unter die Zeile
compass.init()in der FunktioninitializeQMC5883L()ein.
Code-Analyse
Einbinden von Bibliotheken und Initialisieren von Sensoren Dieser Abschnitt enthält die notwendigen Bibliotheken für die MPU6050- und QMC5883L-Sensoren und initialisiert ihre Objekte.
#include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> #include <QMC5883LCompass.h> Adafruit_MPU6050 mpu; QMC5883LCompass compass;
Setup-Funktion
Initialisiert die serielle Kommunikation, den MPU6050-Sensor und setzt den MPU6050 in den I2C-Bypass-Modus, um direkten Zugriff auf das QMC5883L-Magnetometer zu ermöglichen. Anschließend wird das QMC5883L-Magnetometer initialisiert.
void setup() { // Initialize the serial communication with a baud rate of 9600 Serial.begin(9600); // Initialize the MPU6050 sensor (accelerometer and gyroscope) initializeMPU6050(); // Enable I2C bypass on MPU6050 to directly access the QMC5883L magnetometer mpu.setI2CBypass(true); // Initialize the QMC5883L magnetometer sensor initializeQMC5883L(); }
Loop-Funktion
Liest kontinuierlich Daten vom QMC5883L-Magnetometer und gibt sie auf dem Seriellen Monitor aus.
void loop() { printQMC5883L(); delay(500); }
Initialisieren der QMC5883L-Funktion
Initialisiert und kalibriert das QMC5883L-Magnetometer. Die Kalibrierungswerte sollten auf Grundlage spezifischer Kalibrierungsdaten angepasst werden.(QMC5883L kalibrieren)
void initializeQMC5883L() { compass.init(); // You should replace the code below according to your calibration results compass.setCalibrationOffsets(-549.00, -66.00, 160.00); compass.setCalibrationScales(0.97, 1.02, 1.02); }
QMC5883L-Daten drucken Funktion
Diese Funktion liest die X-, Y-, Z-Werte und den Azimut des Magnetometers und druckt sie auf den Seriellen Monitor.
void printQMC5883L() { Serial.println(); Serial.println("QMC5883L ------------"); int x, y, z, a; char myArray[3]; compass.read(); x = compass.getX(); y = compass.getY(); z = compass.getZ(); a = compass.getAzimuth(); compass.getDirection(myArray, a); Serial.print("X: "); Serial.print(x); Serial.print(" Y: "); Serial.print(y); Serial.print(" Z: "); Serial.print(z); Serial.print(" Azimuth: "); Serial.print(a); Serial.print(" Direction: "); Serial.print(myArray[0]); Serial.print(myArray[1]); Serial.println(myArray[2]); Serial.println("QMC5883L ------------"); Serial.println(); }