Ansteuerung Dynamixel-Servo AX mit Arduino

Dieses Mal ein kurzer Zwischenbericht bei der möglichen nächsten Umstellung meines Roboter minibot.

Da ROS sehr viele fertige Pakete zur Ansteuerung von Aktoren gibt, und diese dann auch gleich Positionsdaten liefern, entschied ich mich zum Kauf meiner ersten (teuren) Dynamixel-Servos – konkret: Dynamixel AX-12W.

Der 12W unterscheidet sich gegenüber dem 12A hauptsächlich dadurch, dass er aufgrund seiner hohen Drehzahl für einen Roboter-Antrieb also Motor-Ersatz besser geeignet ist.

Die Dynamixel-Servos zeichnet unter anderem ein spezielles serielles Protokoll aus, über dass sie angesteuert werden und viele Informationen zurückliefen. Auch können Sie alle per „daisy chaining“ alle in Reihe geschaltet werden und nutzen nur eine(!) Leitung mit Masse zur Kommunikation.

Als erster Test diente der Einfachheit ein Arduino – auch wenn sie später ja mit einem Raspberry Pi gesteuert werden sollen.

Nach längerer Suche und mehreren Tests, war ich mit dieser Library bei GitHub erfolgreich.

Verwendet habe ich im ersten Versuch das Beispiel Blink.ino genutzt. Dieses lässt die im Servo verbaute LED blinken:

/*
 * Example of a simple Blink using the AX-12A built-in LED
 */

#include "Arduino.h"
#include "AX12A.h"

#define DirectionPin 	(10u)
#define BaudRate  		(1000000ul)
#define ID				(1u)

void setup()
{
	ax12a.begin(BaudRate, DirectionPin, &Serial);
}

void loop()
{
	ax12a.ledStatus(ID, ON);
	delay(1000);
	ax12a.ledStatus(ID, OFF);
	delay(1000);
}

Entgegen dem Original musste ich bei mir noch die Zeile

#include "../../src/AX12A.h"

nach

#include "AX12A.h"

ändern.

Als nächstes sollte sich der Servo natürlich (endlos) drehen. Dieses ging (mit der gleichen Änderung beim #include-Befehl von oben) genau so einfach mit dem Beispiel EndlessMove.ino.

Und so sieht das ganze in Aktion aus:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert