Arduino-gesteuerter Mars Perseverance Rover Nachbau – Schritt-für-Schritt-Anleitung
In diesem Tutorial zeige ich, wie ich einen Nachbau des Mars Perseverance Rovers gebaut habe. Inspiriert vom echten Rover, der aktuell den Mars erkundet, ist dieser Rover so konzipiert, dass ihn jeder – Studenten, Maker, Mechatronik-/Robotik-Enthusiasten – nachbauen kann. Video ansehen oder schriftliche Anleitung unten lesen. Hauptmerkmale: Ackermann-Lenkgeometrie an den 4 Lenkrädern (Vorder- und Hinterachse): Berechnet Lenkwinkel & Radgeschwindigkeiten je nach Kurvenradius. Innenräder: größerer Lenkwinkel, niedrigere Geschwindigkeit; Außenräder: kleinerer Winkel, höhere Geschwindigkeit. Steuerung: Günstiger RC-Sender → Empfänger am Rover → Arduino MEGA. Gehirn = Arduino MEGA, dazu Custom-PCB als Arduino-MEGA-Shield für einfache Verkabelung. FPV-Kamera in Kameramast: Schwenken per NEMA-17-Schrittmotor, Neigen per Servo. Live-Video auf Smartphone. Hinweis: Viele Teile sind rein optisch (Original-Optik), Roboterarm fehlt (geplant für zukünftige Videos). Nun der Bauprozess: Design, Elektronik, Arduino-Programmierung. Entworfen mit 3DEXPERIENCE SolidWorks (Video-Sponsor). 3DEXPERIENCE SolidWorks = SolidWorks mit Cloud-Funktionen über 3DEXPERIENCE-Plattform. Daten/Modelle weltweit jederzeit zugänglich. Plattform enthält Produktivitäts- & Datenmanagement-Apps. Beispiele: Project Planning (Aufgaben, Deadlines, Fortschritt), 3D Markup (Modelle auf jedem Gerät ansehen/kommentieren). Separater Browser-Modellierer SOLIDWORKS xDesign – modellieren überall, jederzeit, jedes Gerät. Ab 2. Jahreshälfte 2022: Maker-Version von 3DEXPERIENCE SolidWorks für 99 $/Jahr. Danke an SolidWorks für Bildungs-Sponsoring. Links zum Testen/Erfahren: Kostenlos testen: www.solidworks.com/HTMTryNow Mehr erfahren: www.solidworks.com/HTMLearnMore 3DEXPERIENCE SOLIDWORKS for Makers: www.solidworks.com/htm Zurück zum Modell: Ziel = Optik so nah wie möglich am Original. Offizielles NASA-3D-Modell heruntergeladen, in Blender geöffnet. Front-, Top-, Seitenansicht als Bilder in SolidWorks importiert. Raddurchmesser = 130 mm → Bilder darauf skaliert. Alle Key-Maße entnommen: Breite, Länge, Höhe, Radabstände, Rocker-Bogie-Maße etc. Nach diesen Maßen & geplanten Motoren/Servos Teile so designed: 3D-druckbar, montierbar, Optik nah am Original. Rocker-Bogie: 20 mm Rundaluprofile. Basisrahmen: 20 mm T-Nut-Profile. 3D-Modell auf Thangs finden, erkunden, herunterladen: STL-Dateien für 3D-Druck: Gedruckt auf Creality CR-10 & CR-10 V3. Für flexible Filament-Räder: Direct-Extruder nötig (CR-10 V3). Beide Drucker: gute Qualität, erschwinglich. Links: Siehe auch: Beste Budget-Oszilloskope für Einsteiger & Maker – 2021 Update Wichtig: Horizontal Expansion im Slicer nutzen (ich: −0,1 mm). Kompensiert Filament-Ausdehnung. Ohne: 20-mm-Loch wird ca. 19,8 mm → Passt nicht. Alle 3D-gedruckten Teile: Viel Druckzeit, aber einziger Weg für Original-Optik. Nur funktionale Teile drucken → Zeit halbieren. Mechanische Komponenten (Elektronik siehe Schaltplan-Bereich): Zusätzlich diverse M4, M5, M6 Schrauben (vollständige Liste unten). Auch im Baumarkt erhältlich. Aluminiumprofile zuschneiden (Metall-Handsäge). 10 T-Nut-Profile (Basis), 8 Rundprofile (Rocker-Bogie) mit folgenden Maßen: T-Nut-Rahmen mit Eckverbindern & Schrauben/Muttern. Ober- & Unterrahmen fertig → Basis vervollständigen: Rocker-Gelenk-Teile (3D-Druck) an Seiten, 3D-gedruckte Winkel vorne/hinten. Befestigung: M3-Schrauben + T-Nut-Muttern. Rocker-Gelenke: M5-Schrauben/Muttern. Abstand Vorderprofil zu Rocker-Gelenk = 134 mm. Hauptlager für Rocker-Bogie einsetzen. Rocker-Gelenkwelle: Befestigung am Chassis per M8-Schraube. Welle hat Nut für M8-Mutter (Sicherung am Chassis). Loch 7,5 mm → fester Sitz Schraube/Welle. Schraube trägt Teil des Gewichts → Verstärkung des 3D-gedruckten Teils. Meistbeanspruchtes Teil! Druckrichtung entscheidend für Festigkeit. Erster Druckversuch (einfach, ohne Support) → Bruch. Kraft wirkt auf Schichtbindung (schwach). Seitlicher Druck: Kraft wirkt auf Wandkonturen → viel stabiler. Weiter: Rocker-Bogie mit Radgelenken & Motorhaltern vormontieren, dann auf Rockerwellen montieren. Löcher für 20-mm-Rundprofile: Presspassung → evtl. Raspel/Schleifpapier nötig. Präzise Bohrungen in Rundprofile: Gerade Linie auf Profil anzeichnen. Profil in 3D-Teile stecken (Markierung durch Bohrung), Bohrpositionen auf beiden Seiten anzeichnen. Gegenseite ebenso. 2,5-mm-Bohrer, dann M3-Schraube schneidet Gewinde in Alu (weicher als Schraube). Methode wichtig für relative Positionierung aller Teile. Bogie-Gelenk: zwei Lager + M8-Schraube. Rocker-Bogie-Anordnung fertig → Lenkradgelenke. Lenkradgelenk = zwei Teile, verschraubt. Verbindung Servohalter ↔ DC-Motorhalter: zwei Lager + M6-Schraube. Schraubenkopf oben: Servohorn per 3D-gedrucktem Kuppler & M3-Schrauben anbringen. Kuppler: Sechskantnut überträgt Servobewegung auf Schraube. Unten anderes Teil aufschrauben. M6-Mutter sichern. Lenkradgelenk fertig – später: zweite M6-Mutter unten gegenkontern nötig. Grund: Servobewegung wird über Mutter auf Motorhalter übertragen – ohne Kontermutter schraubt sich Gelenk lose. Gleiches für andere Ecke. Test: Auf ebene Fläche stellen → alle drei Motorhalter parallel/flach = korrekt montiert. Andere Seite spiegelbildlich (Teile sehen gleich aus, sind aber gespiegelt). Sub-Assemblies auf Rockerwellen am Chassis montieren. Zuvor: Messing-Gewindeeinsätze in Welle einpressen (Lötkolben) → zuverlässige M4-Gewinde. 4 M4-Schrauben pro Seite. Chassis kippt frei → Differential fehlt für Rocker-Bogie-Funktion. Differential verbindet beide Rocker & Chassis: Eine Seite hoch → andere runter → gleichmäßiger Radkontakt. Chassis-Neigung = Mittelwert beider Rocker. Differential-Teile: Differentialstange lang → 3 Stück, verschraubt (auch auf kleinen Druckern druckbar). Mitte: Lagerung mit 2 Lagern + M8-Schraube. Anbindung an Rocker: M8-Gelenkkopf + M8-Gewindestange 50 mm. Gewindestange in 3D-Teil (M8-Mutter einer Seite, andere Seite in Gelenkkopf). Abstand Differential-Link zu Gelenkkopf ~20 mm für waagerechtes Chassis. Verbindung Link ↔ Rockerhebel: 2 Lager + M5-Schraube. Andere Seite analog. Rocker-Bogie fertig: Eine Seite hoch, andere runter – alle Räder am Boden. Chassis bewegt halben Hub. Siehe auch: Arduino Roboterarm & Mecanum-Wheels-Plattform Automatischer Betrieb DC-Motoren: 37 mm Ø, 12 V, Getriebe 50 U/min. Hinweis: 50 U/min etwas schnell – 20 oder 10 U/min empfohlen. Wellenkupplungen für Radbefestigung: M3-Gewindeeinsätze (Kupplungssicherung), M4-Muttern (Radsicherung) – einkleben oder Gewindeeinsätze nutzen. Räder: 2-teilig. Reifen (flexibles Filament, muss nicht), Felge (PLA). Felgen-Nuten greifen in Reifen → Kraftübertragung. Tropfen Kleber an Nuten. 4 M4-Schrauben pro Rad an Kupplung/Motor. Lenk-Servos: High-Torque Digital, 25 kgcm, 4,8–6,8 V. 4 M3-Schrauben in M3-Gewindeeinsätze im Servohalter. Kameraschwenk: NEMA-17-Schrittmotor (austauschbar). Bewegung → oberer Teil via M5-Gewindestange (3D-Kupplung am Motor, Lager + 2 Muttern am bewegten Element). Kameraneigung: Gleicher Servo wie Lenkräder. Viele Kamerateile rein optisch. Montage: diverse M3-Schrauben + Gewindeeinsätze. Echtes FPV-Kamera-Modul: Custom-Halter für Montage am Kameragehäuse. Von oben zugänglich, Snap-Fit-Deckel. Fertige Kameraeinheit: Montage: vordere rechte Chassis-Ecke. Nun: Restliche 3D-Teile (nur Optik) montieren ODER Elektronik anschließen. Ich wählte: Erst Optik fertig, dann Elektronik. Optik-Teile – Details siehe 3D-Modell. Viel Liebe zum Detail für gute Optik. Große Teile, lange Druckzeiten. Schneller Einblick in Montage. Letzte zwei mittlere Top-Panels: Snap-Fit in Rover. Wirken als Haube – abnehmbar für Elektronik-Zugang. Elektronikhalter: zwei 3D-Teile, verschraubt, auf Unterrahmen. Kabellängen pro Motor messen. Direkt an Motoren gelötet (keine Stecker), Schrumpfschlauch isolation. Kabel per Kabelbinder geführt & sauber gehalten. Servos: Servo-Verlängerungskabel bis Elektronikfach. Elektronikhalter hat Schlitze für Kabeldurchführung zur Rover-Mitte. Verkabelung sauber hinter sichtbaren Teilen verlegt. Siehe auch: SCARA Robot | How To Build Your Own Arduino Based Robot Schaltplan: Komponenten: 6 DC-Motoren → 6 DRV8871 (PWM, bis 3,6 A Spitzenstrom). Motoren: 12 V, 1 A Nenn-, 3 A Anlaufstrom. Stromversorgung: 3S LiPo (~12 V). Servos: 4,8–6,8 V → Buck-Converter 12 V → 6 V, ~8 A (Servos stark, ~2 A Anlaufstrom). Kameraschrittmotor: A4988/DRV8825. Zwei Widerstände → Spannungsteiler für Akku-Überwachung. RC-Empfänger an 6 V (Buck), FPV-Kamera + Sender an 12 V (Akku). Für Ordnung: Custom PCB als Arduino MEGA Shield. Enthält: Motortreiber, 3,3-V-Regler, NRF24L01-Anschluss (für alt. Steuerung), DHT22, Kompass, I2C, Serial, 12V/5V/3,3V/GND – zukunftssicher für Upgrades. Bestellt bei PCBWay: Gerber hochladen, Eigenschaften wählen, günstig bestellen. Nur Farbe auf Blau geändert (passend zu Arduino). Gerber hier herunterladen oder via PCBWay Community direkt bestellen. Gerber-Datei für DIY Mars Rover PCB: Nach Tagen: PCB angekommen, Top-Qualität, exakt wie Design. Bestückung einfach (alles beschriftet). Unten: Pinheader für Arduino MEGA, dann Oberseite. Alle Verbindungen als Pinheader (Flexibilität). 3,3-V-Regler & freie Pins nicht bestückt (aktuell ungenutzt). Arduino auf Elektronikhalter schrauben (2 Schrauben), PCB aufstecken. Motoren an Treiber → in PCB. Servos in Servo-Pins, Schrittmotortreiber (1 Jumper für 1/8-Schritt). Funk: FLYSKY RC Sender/Empfänger (günstig, gut). Empfänger → Arduino: Servo-Verlängerungskabel (VCC, GND, Signal). Kommunikation: I-BUS über Serial. Rückkanal (Akku-Spannung an Sender): Sensor-I-BUS an 2. Serial-Port. Buck-Converter: 2 Schrauben. LiPo: 2 Gummibänder (einfach entnehmbar zum Laden). Netzschalter: hinteres rechtes Panel. 20-AWG-Kabel (Strom bis mehrere Ampere). Verbindungen doppelt prüfen – Fehler = Brandgefahr. FPV-Kamera: 12 V + Videosignal an Videosender (auch 12 V). Elektronik fertig. Deckel drauf → Rover fast fertig. Fehlt: Arduino programmieren. Arduino-Code herunterladen: Code-Übersicht Via Umrechnung in Kurvenradius (links/rechts) & Rover-Geschwindigkeit (0–100 %): Kurvenradius Servos via DC-Motoren per Code nicht komplex (Rover hat keine komplexen Funktionen). Zukunft: GPS-Navigation, Sensoren, Roboterarm, Bodenprobenahme etc. Hoffe, Projekt hat gefallen & was Neues vermittelt. Fragen in Kommentaren, Arduino-Projekte-Sammlung anschauen.Überblick






3D-Modell des DIY Mars Rovers







Mars-Rover-Teile 3D-drucken



Teileliste für DIY Mars Rover
Rover zusammenbauen



Rocker-Bogie-Federung zusammenbauen
























Motoren für Mars Rover montieren





Kameraeinheit zusammenbauen





Rest des Rovers montieren





Elektronik



Schaltplan DIY Mars Rover

Custom PCB










DIY Mars Rover programmieren – Arduino Code
IBusBM Library RC-Senderdaten lesen:// Reading the data comming from the RC Transmitter IBus.loop(); ch0 = IBus.readChannel(0); ch1 = IBus.readChannel(1); ch2 = IBus.readChannel(2); ch3 = IBus.readChannel(3); ch6 = IBus.readChannel(6);// Convertign the incoming data // Steering right if (ch0 > 1515) { r = map(ch0, 1515, 2000, 1400, 600); // turning radius from 1400mm to 600mm } // Steering left else if (ch0 < 1485) { r = map(ch0, 1485, 1000, 1400, 600); // turning radius from 600mm to 1400mm } // Rover speed in % from 0 to 100 s = map(ch2, 1000, 2000, 0, 100); // rover speed from 0% to 100%r für Lenkwinkel & Radgeschwindigkeiten (Ackermann):void calculateMotorsSpeed() { // if no steering, all wheels speed is the same - straight move if (ch0 > 1485 && ch0 < 1515) { speed1 = speed2 = speed3 = s; } // when steering, wheels speed depend on the turning radius value else { // Outer wheels, furthest wheels from turning point, have max speed // Due to the rover geometry, all three outer wheels should rotate almost with the same speed. They differe only 1% so we asume they are the same. speed1 = s; // Inner front and back wheels are closer to the turing point and have lower speeds compared to the outer speeds speed2 = s * sqrt(pow(d3, 2) + pow((r - d1), 2)) / (r + d4); // Inner middle wheel is closest to the turning point, has the lowest speed speed3 = s * (r - d4) / (r + d4); } // speed value from 0 to 100% to PWM value from 0 to 255 speed1PWM = map(round(speed1), 0, 100, 0, 255); speed2PWM = map(round(speed2), 0, 100, 0, 255); speed3PWM = map(round(speed3), 0, 100, 0, 255); } void calculateServoAngle() { // Calculate the angle for each servo for the input turning radius "r" thetaInnerFront = round((atan((d3 / (r + d1)))) * 180 / PI); thetaInnerBack = round((atan((d2 / (r + d1)))) * 180 / PI); thetaOuterFront = round((atan((d3 / (r - d1)))) * 180 / PI); thetaOuterBack = round((atan((d2 / (r - d1)))) * 180 / PI); }ServoEasing Library (sanftere Bewegung):// Servo motors servoW1.startEaseTo(97 - thetaOuterFront); servoW3.startEaseTo(97 + thetaOuterBack); servoW4.startEaseTo(94 - thetaInnerFront); servoW6.startEaseTo(96 + thetaInnerBack);analogWrite() (PWM an DRV8871):// Motor Wheel 1 - Left Front analogWrite(motorW1_IN1, speed2PWM); // PWM value digitalWrite(motorW1_IN2, LOW); // Forward
Herstellungsprozess
- Windows IoT Core Rover mit Raspberry Pi 2 bauen – Anfänger bis Fortgeschritten
- Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
- RC Porsche selbst bauen: Arduino-Schritt-für-Schritt-Anleitung
- Zuverlässigen Smart Energy Monitor mit Arduino UNO bauen – Schritt-für-Schritt-Anleitung
- Portables RFID-Türschloss mit Arduino bauen – Schritt-für-Schritt-Anleitung
- Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
- DIY Körpergrößen-Messgerät mit Arduino Nano & Ultraschall – Präzise & Einfach