Programmierbarer 3-Achs-Roboterarm – Lokal & Fernsteuerung per Arduino & Bluetooth
Komponenten und Materialien
| Arduino Mega 2560 | × | 1 |
| SainSmart DIY 3-Achs Palettier-Roboterarm für Arduino UNO/MEGA2560 | × | 1 |
| MeArm DIY Roboterarm Kit | × | 1 |
| HC-06 Bluetooth Modul | × | 1 |
| Adafruit RGB Backlight LCD 16x2 | × | 1 |
| Android Gerät | × | 1 |
| Drehpotentiometer 10 kOhm | × | 4 |
| SparkFun Taster 12mm | × | 3 |
| LEDs (Rot, Blau, Grün, Gelb) | × | 4 |
Apps und Online-Dienste
- Arduino IDE
- MIT App Inventor 2
Projektbeschreibung
Ziel dieses Tutorials ist die schrittweise Entwicklung eines Projekts zur Steuerung und Programmierung eines Roboterarms, der die Grundfunktionen eines Industrieroboters simuliert.
Schritt 1: Spezifikationen
Der Roboter hat zwei Grundfunktionen:
- Programmieren: Armpositionen in 3 Dimensionen aufzeichnen (jeder Eintrag = ein "Schritt")
- Ausführen: Aufgezeichnete Positionen nacheinander abfahren. Lauf bis "ABORT"-Befehl.
Hauptmerkmale:
- Steuerung von Robotern mit 3 oder 4 DOF (Freiheitsgraden)
- Lokaler und Remote-Betrieb (via Android-Gerät)
- Umschaltung zwischen Local/Remote während der Programmierung möglich
- Benutzerfeedback über farbige LEDs, 2-Zeilen-LCD und Summer
- Alarm auch fern auslösbar
Schritt 2: Das Projekt
Das Blockdiagramm zeigt die Stückliste. Arduino MEGA gewählt, um I/O-Port-Sorgen zu vermeiden (UNO würde mit Port-Expander z. B. 74138 Decoder funktionieren).
Erster Prototyp in "Local Mode" programmiert. Bluetooth via HC-06. Android-App "MJRoBot Arduino Robot Arm Control" wurde mit MIT App Inventor 2 entwickelt – kostenlos im Google Play Store.
Schritt 3: Projektentwicklung
Roboterarme werden nach Gelenken/ DOF klassifiziert:
- Basis/Hüfte: Dreht Arm 180° oder 360° (hier 180° Servo)
- Schulter: Hebt/Senkt Arm vertikal
- Ellbogen: Bewegt Arm vorwärts/rückwärts
- Greifer/Klaue: Öffnet/schließt zum Greifen
Schritt 4: Schaltung
Servomotoren treiben die Gelenke an, direkt am Arduino angeschlossen. Für Basis-Drehmoment/Präzision sind Schrittmotoren üblich. Servowahl ist kritisch (billige MG995 oft minderwertig – hier für Testzwecke okay).
Servo-Stromversorgung (5-6V extern) getrennt von Arduino. 470µF Kondensatoren zwischen VCC/GND minimieren Motor-Rauschen. Alle GNDs verbinden!
Bei Servo-Vibrationen: Code-Delays anpassen (Servos brauchen Zeit zum Positionieren). Digital (300Hz) vs. Analog (50Hz) Servos beachten – Standard Servo.h ist für analoge Servos.
Schritt 5: Code-Struktur
Viele Variablen → Definitionen in ArmDefine.h auslagern. Enthält Min/Max/Startwinkel für Servos. Zwei Parameter-Sets für getestete Arme (nur eines verwenden):
// MeArm 4-DOF
#define minGrip 15
#define minBase 0
#define minShou 60
#define minElbw 60
#define maxGrip 45
#define maxBase 170
#define maxShou 180
#define maxElbw 150
#define midGrip 30
#define midBase 87
#define midShou 138
#define midElbw 100
/* SS 3-DOF
#define minGrip 75
#define minBase 5
#define minShou 5
#define minElbw 0
#define maxGrip 125
#define maxBase 150
#define maxShou 155
#define maxElbw 0
#define midGrip 100
#define midBase 90
#define midShou 90
#define midElbw 0
*/
Eigene Parameter finden: Potis auf Mittelstellung, PWM Defaults (Max=255, Min=0, Mid=126). Dann Poti für Poti verstellen und im Serial Monitor/LCD min/max Werte notieren, bei denen Arm sauber arbeitet. Diese Werte in ArmDefine.h eintragen.
Positions-Speicherung in Arrays (max 100 Schritte):
int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0;
Hinweis: Positionen nicht persistent (EEPROM möglich für Speicherung über Neustart hinaus).
Schritt 6: Programmlogik
Haupt-Loop stark vereinfacht:
void loop() {
checkBTcmd();
defineLocalRemote();
execTaskCmd = digitalRead(execTaskPin);
if (execTaskCmd == HIGH || command == "runon") {
RunProgram();
} else {
recArmPosition();
}
command = "";
}
- checkBTcmd(): Baut String aus BT-Zeichen zusammen → Variable
command - defineLocalRemote(): Prüft
commandauf Moduswechsel (Local↔Remote) oder Alarm - RunProgram(): Vorbereitung (LEDs), ruft ExecuteTask() auf
- ExecuteTask(): Erhöht
positionIndex, sendet Positionen einzeln viaarmPosition(grip, base, shoulder, elbow) - recArmPosition(): Liest Potis (Local) oder Android-Slider (Remote), steuert Servos via
armPosition(). Bei "SAVE"/"PROGRAMM" wird Position in Arrays gespeichert.
Code aufgeteilt in 4 Dateien:
- MJRoBot_Arm_Robot_Task_Prgm.ino – Setup, Loop, Hauptfunktionen
- General_Functions.ino – BT-Lesen, Sound, Entprellung
- Arm_Ctrl_and_Display.ino – Poti/Slider-Lesen, Servo-Ansteuerung, Display
- ArmDefine.h – Konstanten
Video zeigt 4-DOF MeArm per Android-App ferngesteuert.
Vollständiger Quellcode auf GitHub: https://github.com/Mjrovai/MJRoBot-Programmed-Arm
Schritt 7: Fazit
Hoffentlich hilft dieses Projekt beim Einstieg in Elektronik, Robotik und IoT! Mehr Projekte auf MJRoBot.org.
Grüße vom anderen Ende der Welt! Bis zum nächsten Tutorial!
Marcelo
Code-Ausschnitte
Servo-Parameter (ArmDefine.h)
// MeArm 4-DOF #define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 #define maxShou 180 #define maxElbw 150 #define midGrip 30 #define midBase 87 #define midShou 138 #define midElbw 100
Positions-Arrays
int gripPosition[100]; int basePosition[100]; int shouPosition[100]; int elbwPosition[100]; int positionIndex = 0;
Haupt-Loop
void loop() {
checkBTcmd();
defineLocalRemote();
execTaskCmd = digitalRead(execTaskPin);
if (execTaskCmd == HIGH || command == "runon") {
RunProgram();
} else {
recArmPosition();
}
command = "";
}
GitHub
https://github.com/Mjrovai/MJRoBot-Programmed-Arm
Schaltplan
Roboterarm Schaltplan: GitHub Link
Herstellungsprozess
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- Wie Industrieroboterarme die Fertigung transformieren: Wesentliche Vorteile erklärt
- Roboter-Manipulatoren vs. Roboterarme: Wichtige Unterschiede erklärt
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
- Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- Intelligenter Arduino-Roboterarm bauen: Einfaches DIY-Tutorial