Schritt 18: Programm der Arm.
Hier finden Sie die Skizze, die den Roboterarm im Github Repository unter DynamixShield/Skizzen/Roboterarm steuert. Ich erkläre kurz die wichtigsten Teile der Skizze.
1. zuerst müssen Sie die DynamixSerial-Klasse aufnehmen. Diese Klasse ist, was Sie zur Kommunikation mit dem Dynamixel Servos verwenden.
#include
2. als nächstes haben wir einige Variablen, die Pins für den Joystick und Drucksensoren zuzuweisen und zu verfolgen die Servo-Bewegungen.
#define SERVO_COUNT 5
#define AXIS_COUNT 4
Diese konstanten wird sich nicht ändern. Sie werden verwendet, um Namen zu geben
an den Pins verwendet:
const Int x1Pin = A0;
const Int y1Pin = A1;
const Int x2Pin = A2;
const Int y2Pin = A3;
const Int PressurePin = A11;
Index des Arrays AxisPos, die steuert, Greifer öffnen/schließen
const Int GripperCloseIdx = 1;
const Int GripperOpenIdx = 3;
const Int GripperIdx = 4;
Int ServoPos [SERVO_COUNT];
Int ServoDir [SERVO_COUNT];
Int ServoAdd [SERVO_COUNT];
Int AxisID [AXIS_COUNT];
Int AxisPos [AXIS_COUNT];
Int GripPressure = 0;
3. dann erklären wir die DynamixelSerial-Klasse. Diese Klasse setzt voraus, dass es Serial1 für Mitteilungen an die Dynamixel Servos verwendet wird. Jedoch, wenn Sie einen seriellen Anschluss hier Hardware übergeben können Sie überschreiben. Dies ist die Software auf eigene Projekte verwendet werden kann, die nicht den DynamixShield verwenden.
DynamixelSerial Dynamixel;
(4) die nächste wichtigste Teil ist das Setup. Wir starten unsere Debuggen serieller Verbindung und dann beginnen die DynamixelSerial-Klasse. Der Standardwert ist maximal 1 Mbaud Kommunikation und die Pin, die es verwendet, um die Halbduplex-Dynamixel Protokoll Steuern wird basierend auf dem Brett, die du verwendest. So weiter eine Due es Pin 22 ist, aber es ist auf den Nullpunkt Pin 2. Allerdings haben Sie auch die Option zur Angabe dieser Parameter im Aufruf an die Begin-Methode überschreiben, was für kundenspezifische Projekte verwendet wird.
#ifdef ENABLE_DEBUG
Serial.Begin(57600);
während (!) Seriell);
Serial.println ("Start-Setup");
#endif
(Dynamixel.Begin); oder Dynamixel.begin (1000000, 22);
5. Setup hat dann einige Code zurücksetzen alle Servos auf ihre Standardposition für Bewegung bereit. Es wird auch alle Variablen auf ihren Standardzustand zurückgesetzt.
6. die wichtigsten Verarbeitungsschleife ist ziemlich einfach. Er fordert nur processJoysticks() und dann Verzögerungen 20 Millisekunden.
leere Schleife () {}
processJoysticks();
Verzögerung (20);
}
7. die Process-Joystick-Methode hat eine Schleife, die durchläuft jeder Joystick-Achse und liest den analogen Wert aus den Joystick.
void processJoysticks() {}
String ServoPosReport = "", ServoAddReport = "", AxisReport = "";
das analoge Wert zu lesen:
für (Int ich = 0; ich
AxisPos [i] = analogRead(axisID[i]);
8. es skaliert dann den Wert aus den Joystick, die zwischen 255 und 755 in einen Wert von-5 bis 5. Wenn der Wert größer als 1020 ist dann bedeutet dies, wir unten auf dem Joystick drängen, um die Greiferbacken zu schließen, so lassen wir die Process-Greifer-Methode damit umzugehen.
Wenn es größer als 1020 ist ist die Taste gedrückt wird.
Wenn (AxisPos [i] < 1020) {}
ServoAdd [i] = Karte (AxisPos [i], 255, 755, -5, 5);
}
Else {}
ServoAdd [i] = 0;
}
9. dann wir die Bewegung der Servos Position aufwerten.
Wenn ((ServoPos [i] + servoAdd[i]) > = 0 & & (ServoPos [i] + ServoAdd [i] < 1024)) {}
ServoPos [i] += (ServoDir [i] * servoAdd[i]);
}
10. dann hätten wir Bewegung auf dieser Achse setzen wir die neue Position des Servos.
Wenn (ServoAdd [i]! = 0) {}
Dynamixel.moveSpeed (i + 1, ServoPos [i], 150); Delay(10);
}
11. Schließlich nennt es ProcessGripper. Dass Methoden beginnt durch das analoge Signal für den Drucksensor zu lesen.
void ProcessGripper (String & ServoPosReport, String & ServoAddReport) {}
GripPressure = analogRead(pressurePin);
12. Herunterdrücken der rechten Joystick schließt die Girpper unten am linken Joystick drücken, öffnet sich. Die Methode prüft dies durch den Anblick, wenn die Achsenposition des engen oder offene Greifer 1023 entspricht. Dies ist der Wert vom Joystick zu lesen, wenn Sie nach unten darauf drängen. Wenn es ausfällt, dann setzen wir das Servo hinzufügen um plus oder minus 10 sein. Andernfalls wird null hinzugefügt.
Wenn (AxisPos [GripperCloseIdx] == 1023) {}
Wenn (GripPressure < 850) {}
ServoAdd [GripperIdx] =-10;
}
}
ElseIf (AxisPos [GripperOpenIdx] == 1023) {}
ServoAdd [GripperIdx] = 10;
}
Else {}
ServoAdd [GripperIdx] = 0;
}
13. dann setzen wir die Servoposition, solange es innerhalb von 0 und 512 bleibt. Der Greifer kann nicht mehr verschoben.
Wenn ((ServoPos [GripperIdx] + servoAdd[gripperIdx]) > = 0
& & (ServoPos [GripperIdx] + ServoAdd [GripperIdx] < = 512)) {}
ServoPos [GripperIdx] += (ServoDir [GripperIdx] * servoAdd[gripperIdx]);
}
14. schließlich, wenn wir die Position hinzugefügt müssen wir die neue Servoposition des Greifers festgelegt.
Wenn (ServoAdd [GripperIdx]! = 0) {}
Dynamixel.moveSpeed (GripperIdx + 1, ServoPos [GripperIdx], 150);
}
Und das war's. Es gibt einige andere Dinge in der Skizze, die ich hier nicht behandelt wurde, aber das ist vor allem für debugging-Zwecke. Sie können das Debuggen durch uncommenting die //#define ENABLE_DEBUG 1 Zeile am oberen aktivieren. Dies druckt, was, wie Sie die Skizze geschieht. Der Arduino IDE verwenden, um die Skizze in Ihren Mikrocontroller zu programmieren und dann laufen lässt unseren neuen Roboterarm!