Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
Komponenten und Zubehör
| Arduino MKR1000 | × | 1 |
Benötigte Werkzeuge und Maschinen
- Lasercutter (beliebig)
Apps und Online-Dienste
- MATLAB
- Arduino IDE
Über dieses Projekt
Einführung
Ich wollte unbedingt einen Roboterarm komplett von Grund auf selbst entwerfen. Es gibt viele Open-Source-Designs, aber ich fand es reizvoll, einen von Grund auf zu designen, zu bauen und zu programmieren (und es war es).
Ich werde sowohl die Design- als auch die Programmierphase beleuchten, wobei der Fokus auf der Programmierung liegt, da es nicht nur um das Steuern von Servowinkeln geht.
Video des finalen Projekts: MathWorks Video
Ich verwendete Simulink, um einen Arduino MKR1000 zu programmieren, der als MCU den Roboterarm steuert. Anschließend fügte ich die Möglichkeit hinzu, den Arm von praktisch überall über ThingSpeak – eine offene IoT-Plattform mit MATLAB-Analytik – zu steuern.
Benötigte Hardware
- 15″ × 20″ Sperrholz, 3 mm (1/8 Zoll) dick
- Arduino MKR1000
- 5× GS9025MG Servos
- 2,1 mm DC-Hohlsteckerbuchse (brotboard-tauglich)
- 6 V DC-Hohlstecker-Netzteil
- Jumper-Kabel
- 3× 2N2222A Transistoren
- 10× M2 Muttern
- 10× M2 × 10 Schrauben
- 40× M3 Muttern
- 40× M3 × 25 Schrauben
Verwendete Software
- MATLAB
- Simulink
- MATLAB Support Package for Arduino Hardware
- Simulink Support Package for Arduino Hardware
- MATLAB Support Package for ThingSpeak
Design
Um die Kosten niedrig zu halten, entwarf ich den Arm für Hobbyservos, speziell das Modell GS-9025MG. Das begrenzte das Endgewicht und die Größe, da Mikroservos nicht viel Drehmoment aufbringen und daher keine schweren Hebelarme heben können.
Ein Prototyp aus 6 mm (1/4 Zoll) Sperrholz erwies sich als zu schwer für die Servos. Ich verkürzte die Arme und nutzte 3 mm (1/8 Zoll) Sperrholz – das löste das Steuerproblem. Das Design erstellte ich in Fusion 360, exportierte es als DXF-Datei und ließ es laserschneiden.
Eine kontinuierliche DC-Spannung aus der Steckdose war nötig, da der Strombedarf aus Akkupacks sehr hoch war und diese schnell leerte.
Zur Motorsteuerung: Der Arduino MKR1000 hat 4 PWM-Pins, aber ich benötigte 5 für die 5 Servos. Ich wurde kreativ: Ein PWM-Pin steuert 2 Servos, und ein digitaler Pin schaltet per Transistor zwischen den beiden Servos um, sodass immer nur einer aktiv ist.
Schaltung dafür:
Verkabelung der Servos zum Arduino:
Programmierung
Die Programmierung hatte zwei Phasen: Prototyping (Aufbau und Ansteuern der Servos auf bestimmte Winkel) und präzise Steuerung (Anfahren von XY-Koordinaten via ThingSpeak).
Prototyping
Mit Schiebern und Konstanten-Blöcken konnte ich die Servos auf dem Arduino auf bestimmte Winkel fahren. Dieses Modell nutzte ich, um die Abweichungen zwischen Soll- und Ist-Winkeln sowie die zulässigen Winkelbereiche jedes Servos zu ermitteln.
Die Blöcke mit Zahnrad-Symbol sind die PWM-Schreibblöcke für die Servo-Winkel (0–180°).
Für die inverse Kinematik eines 2D-planaren Arms verwendete ich die Formeln von appliedgo.net/roboticarm – eine sehr gute Erklärung.
Präzise Steuerung
Obwohl komplexer, ist die Logik dieselbe: Ausgabeblöcke sind weiterhin die Servo-Schreibblöcke. Die Eingaben kommen nun nicht mehr von Schiebern, sondern werden vom ThingSpeak-Kanal gelesen. Die Eingaben sind X- und Y-Position des Arms, die über den MATLAB-Funktionsblock loc2angles in Sollwinkel umgerechnet werden. Der angles2loc-Block oben überwacht per Vorwärtskinematik, ob die Servowinkel die korrekte Eingabeposition ergeben.
Ein cooles Simulink-Tool nutzte ich: External Mode. Damit kann man das System überwachen, während es auf dem Arduino läuft.
Die Blöcke mit der grauen Wolke sind die ThingSpeak-Read-Blöcke aus dem Simulink Support Package für Arduino. Man gibt Channel-ID, Datenfeldnummer und Read-API-Key ein, und der Block liefert die Daten aus diesem Kanal und Feld.
ThingSpeak nutzen: Channel erstellen und verwenden
- Gehen Sie zu thingspeak.com
- Klicken Sie oben rechts auf „Sign in“ und melden Sie sich mit Ihrem kostenlosen MathWorks-Konto an.
- Auf dem Dashboard „New Channel“ klicken.
- Daten wie folgt ausfüllen (nur diese Felder sind nötig):
- Unten auf „Save channel“ klicken.
- Channel erstellt.
- Im MATLAB-Befehlsfenster oder per MATLAB Mobile App Daten schreiben:
thingSpeakWrite(chID, [0.6963.94 -12 0 0], 'WriteKey', APIKEY, 'Fields', [1 2 3 4 5]);
Die Werte im zweiten Argument ändern die entsprechenden Felder. Danach sehen die Channel-Daten so aus:
Modell ausführen
Nach ThingSpeak-Setup: In Simulink auf „Model Configuration Parameters“ (kleines Zahnrad oben), „Hardware Implementation“ wählen, „Hardware Board“ auf Arduino MKR1000 setzen. Unter „Target Hardware Resources“ → „WiFi Properties“ WLAN-Zugangsdaten eintragen.
Grüner „Run“-Button = External Mode; Blauer „Deploy“-Button = Auf Hardware flashen.
Wenn das Modell läuft, können Sie per MATLAB oder MATLAB Mobile neue Daten in die ThingSpeak-Felder schreiben und zusehen, wie sich der Roboterarm bewegt!
Code
MATLAB Central File Exchange: Controlling a Robotic Arm from Anywhere Using IoT
Herstellungsprozess
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
- Arduino Rover per Firmata & Xbox One Gamepad steuern
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- Intelligenter Arduino-Roboterarm bauen: Einfaches DIY-Tutorial