In dieser Anleitung erfahren Sie, wie Sie mit der CodeCell einen Servomotor steuern. Außerdem erfahren Sie, wie Sie die Winkelposition des Servos mithilfe der CodeCell steuern können. Dies ist besonders nützlich für Roboteranwendungen wie Kardanringe oder die Winkelstabilitätskontrolle.
Ein Servomotor ist ein Drehantrieb, der eine präzise Steuerung der Winkelposition ermöglicht. Er besteht aus einem Motor mit Getriebe und einem Sensor zur Positionsrückmeldung und wird häufig in der Robotik, Automatisierung und Stabilisierung eingesetzt.
CodeCell ist mit einem BNO085-Bewegungssensor ausgestattet, der Daten von Beschleunigungsmesser, Gyroskop und Magnetometer kombiniert, um Rotationsvektoren zu berechnen. Diese Vektoren werden von CodeCell verarbeitet, um Roll-, Nick- und Gierwinkel basierend auf der räumlichen Ausrichtung des Geräts zu ermitteln.
In diesem Beispiel überwacht unsere CodeCell kontinuierlich den Neigungswinkel, um die Position eines Servomotors zu steuern und dynamisch auf Ausrichtungsänderungen zu reagieren. Der Neigungswert dient zur Einstellung der Servomotorposition, sodass dieser sich je nach Neigung des Geräts drehen kann.
Unten finden Sie einen Beispiel-Codeausschnitt für den Einstieg. Stellen Sie sicher, dass Ihre CodeCell ordnungsgemäß über USB-C angeschlossen ist. Überprüfen Sie außerdem, ob Ihr Servomotor über USB-C mit Strom versorgt werden kann (CodeCell kann über USB-C bis zu 500 mA und über eine Batterie bis zu 1500 mA liefern). Passen Sie die Winkelgrenzen im Code entsprechend an.
Für dieses Beispiel müssen Sie die Bibliothek „ESP32Servo“ installieren, um den Servomotor mit Ihrer CodeCell zu steuern. Folgen Sie den Kommentaren im Code, um die einzelnen Schritte 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. Enable Tools/USB_CDC_On_Boot 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(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);
// Limit the servo angle to the range 0-60 degrees
if (servo_angle > 60) {
Servowinkel = 60;
} sonst wenn (Servowinkel < 0) {
Servowinkel = 0;
}
anders{
//Überspringen
}
Serial.println(servo_angle); // Drucke den Servowinkel zum Debuggen
myservo.write(servo_angle); // Servoposition einstellen
}
}
Diese grundlegende Funktionalität kann erweitert werden, um komplexere Interaktionen zu erstellen, wie zum Beispiel:
servo_angle
festgelegten Grenzwerte anpassen. In diesem Beispiel verwenden wir einen Mikroservo mit einem 60-Grad-Bereich. Einige Servomotoren sind mechanisch nicht linear, daher müssen Sie möglicherweise Winkelfehler kompensieren.Dieses Projekt zeigt, wie Sie einen Servomotor mit CodeCell und dessen Bewegungssensorfunktionen steuern. Experimentieren Sie mit dem Code, erstellen Sie eigene Projekte und besuchen Sie das CodeCell GitHub Repository für weitere Codebeispiele und technische Dokumentation!
Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!
© 2025 Microbots.