In diesem Build untersuchen wir, wie man den integrierten 9-Achsen-Bewegungssensor von CodeCell verwendet, um Roll-, Nick- und Gierwinkel zu erfassen und diese Winkel zur Steuerung eines Servomotors zu verwenden. Dieses Projekt zeigt, wie man interaktive bewegungsbasierte Steuerungen erstellt, die sich perfekt für Robotik, Kardanringe oder jedes Projekt eignen, das eine reaktionsschnelle Rotationssteuerung erfordert.
Die CodeCell ist mit einem BNO085-Bewegungssensor ausgestattet, der präzise Bewegungserkennungsfunktionen bietet, einschließlich Roll-, Nick- und Gierwinkel. Durch das Auslesen dieser Winkel können Sie interaktive Bewegungssteuerungen für verschiedene Anwendungen erstellen, z. B. zum Stabilisieren von Plattformen oder zum Erzeugen einer Reaktion auf die Geräteausrichtung.
Der Bewegungssensor BNO085 liest die Daten von Beschleunigungsmesser, Gyroskop und Magnetometer und berechnet die Rotationsvektoren. Diese Vektoren werden an die CodeCell gesendet, die sie dann in Winkeldaten umwandelt, um Roll-, Nick- und Gierungswinkel basierend auf der Ausrichtung des Geräts im Raum zu ermitteln. Diese Winkel stellen die Drehung des Geräts entlang dreier Achsen dar. In diesem Beispiel verwenden wir den Nickwinkel, um die Position eines Servomotors zu steuern, sodass dieser dynamisch auf Änderungen der Ausrichtung reagieren kann.
In diesem Beispiel überwacht die CodeCell kontinuierlich den Neigungswinkel. Der Neigungswert wird verwendet, um die Position des Servomotors festzulegen, sodass er sich je nach Neigung des Geräts drehen kann. Diese grundlegende Funktionalität kann erweitert werden, um komplexere Interaktionen zu ermöglichen, z. B. die Steuerung mehrerer Servos, die Stabilisierung einer Plattform oder das Hinzufügen von reaktionsfähigen Bewegungen zu einem Roboter.
Unten finden Sie den Beispielcode, der Ihnen den Einstieg erleichtert. Stellen Sie sicher, dass Ihre CodeCell ordnungsgemäß über USB-C angeschlossen ist. Stellen Sie außerdem sicher, dass Ihr Servomotor über USB-C mit Strom versorgt werden kann, und fügen Sie seine Winkelgrenzen dem Code hinzu.
Für dieses Beispiel müssen Sie die ESp32Servo-Bibliothek herunterladen, um den Servomotor mit Ihrer CodeCell zu steuern. Folgen Sie den Kommentaren im Code, um jeden Schritt zu verstehen.
#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. Ensure Tools/USB_CDC_On_Boot is enabled if using Serial
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()) {
// 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);
Servowinkel = (180 - Servowinkel);
// 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
}
}
servo_angle
festgelegten Grenzwerte anpassen. In diesem Beispiel verwenden wir einen Mikroservo mit einem Bereich von 60 Grad. Beachten Sie, dass einige Servomotoren mechanisch nicht linear sind, sodass Sie möglicherweise auch deren winkelmechanischen Fehler kompensieren müssen.Dieses Projekt führt in die Grundlagen der Verwendung von Rotationssensoren mit CodeCell zur Steuerung eines Servos ein und eröffnet zahlreiche Möglichkeiten für bewegungsreaktive Projekte. Experimentieren Sie mit dem Code, optimieren Sie die Einstellungen und erstellen Sie Ihre eigenen dynamischen Builds!
Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!
© 2024 Microbots.