In dieser Anleitung erfahren Sie, wie Sie mit der CodeCell die Rotation direkt messen, indem Sie den Roll-, Nick- und Gierwinkel ablesen. Das Verständnis dieser Winkel ist entscheidend für Anwendungen wie Robotik, Drohnen und Bewegungsverfolgung, bei denen präzise Orientierungsdaten benötigt werden.
CodeCell ist mit einem Bewegungssensor BNO085 ausgestattet, der Daten von Beschleunigungsmesser, Gyroskop und Magnetometer zur Berechnung von Rotationsvektoren kombiniert. Diese Vektoren helfen dabei, die Ausrichtung des Geräts im Raum in Bezug auf Roll-, Nick- und Gierbewegungen zu bestimmen:
Durch die kontinuierliche Überwachung dieser Werte bietet CodeCell Orientierungsfeedback in Echtzeit und ist daher für eine Vielzahl bewegungsbasierter Anwendungen nützlich.
Um die Drehwinkel zu lesen, folgen Sie diesem einfachen Beispiel. Dieser Code initialisiert den Bewegungssensor von CodeCell und gibt kontinuierlich die Roll-, Nick- und Gierwerte auf dem seriellen Monitor aus.
#include <CodeCell.h>
CodeCell myCodeCell;
float Roll = 0.0;
float Pitch = 0.0;
float Yaw = 0.0;
void setup() {
Serial.begin(115200); // Set Serial baud rate to 115200. Ensure Tools/USB_CDC_On_Boot is enabled if using Serial.
myCodeCell.Init(MOTION_ROTATION); // Initializes Rotation Sensing
}
void loop() {
if (myCodeCell.Run(10)) { // Run every 10Hz
myCodeCell.Motion_RotationRead(Roll, Pitch, Yaw);
Serial.printf("Roll: %.2f°, Pitch: %.2f°, Yaw: %.2f°\n", Roll, Pitch, Yaw);
}
}
Erläuterung des Codes:
Initialisieren Sie den CodeCell-Bewegungssensor, um Rotationswerte zu lesen.
Lassen Sie den Sensor mit 10 Hz (alle 100 ms) laufen, um aktuelle Daten zu erhalten.
Drucken Sie die Roll-, Nick- und Gierwinkel in Grad auf dem seriellen Monitor.
Dies bietet eine genaue Möglichkeit, die Ausrichtung von CodeCell in Echtzeit zu messen.
Eine praktische Anwendung des Auslesens von Roll-, Nick- und Gierwinkel ist die Steuerung eines Servomotors basierend auf der Ausrichtung von CodeCell. Das folgende Beispiel bildet den Nickwinkel auf die Position des Servos ab.
#include <CodeCell.h>
#include <ESP32Servo.h>
CodeCell myCodeCell;
Servo myservo;
float Roll = 0.0;
float Pitch = 0.0;
float Yaw = 0.0;
int servo_angle = 0;
void setup() {
Serial.begin(115200); // Set Serial baud rate to 115200
myCodeCell.Init(MOTION_ROTATION); // Initializes rotation sensing
myservo.attach(1); // Attaches the servo on pin 1 to the servo object
}
void loop() {
if (myCodeCell.Run(10)) {
// Read rotation angles from the BNO085 sensor
myCodeCell.Motion_RotationRead(Roll, Pitch, Yaw);
// Convert the pitch angle to a servo angle
servo_angle = abs((int)Pitch);
servo_angle = (180 - servo_angle);
// Begrenzen Sie den Servowinkel auf den Bereich 0-60 Grad
wenn (Servowinkel > 60) {
Servowinkel = 60;
} sonst wenn (Servowinkel < 0) {
Servowinkel = 0;
}
Serial.println(servo_angle); // Drucke den Servowinkel zum Debuggen
myservo.write(servo_angle); // Servoposition einstellen
}
}
Erläuterung:
Ordnet den Nickwinkel zu, um die Servoposition zu steuern.
Begrenzt den Servowinkel auf einen sicheren Bereich (0–60 Grad), um übermäßige Bewegungen zu vermeiden.
Verwendet 10-Hz-Updates, um eine gleichmäßige Reaktion zu gewährleisten.
Durch das direkte Auslesen von Roll-, Nick- und Gierbewegungen können Sie mit CodeCell erweiterte bewegungsbasierte Anwendungen freischalten. Passen Sie die Beispiele an und integrieren Sie sie in Ihre eigenen Projekte. Weitere Beispiele und technische Dokumentation finden Sie im CodeCell GitHub Repository !
Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!
© 2025 Microbots.