SMARS Roboter im Eigenbau – Ein tolles Einsteigerprojekt für Tochter und Papa

Seit meiner Kindheit fasziniert mich Technik. Mit 10 Jahren habe ich meine ersten Roboter mit Fischertechnik gebaut – heute hole ich mir dieses Gefühl zurück und möchte es gemeinsam mit meiner Tochter erleben.

Das fertige Fahrzeug. Die mechanische Zusammensetzung machte unsere Tochter. Elektronikeinbau von mir. Programm und Doku von Google Gemini

Mein aktuelles Projekt ist der SMARS-Roboter – ein kompakter, 3D-gedruckter Kettenroboter, der sich hervorragend als Einstieg in die Welt der Robotik und dem Umgang mit KI eignet.

Da wir das Projekt mit der Gemini KI von Google entwickelten, waren wir nach ca. 2 Tagen inklusive dieser Doku fertig.

Was ist SMARS?

SMARS steht für Screwless Modular Assemblable Robotic System. Es handelt sich um ein modulares, meist schraubenloses (oder minimal verschraubtes) Robotersystem, das vor allem durch seine einfache Bauweise und Erweiterbarkeit überzeugt. Perfekt für Einsteiger, Maker und Familien.

Benötigte Teile (Stückliste)

1x SMARS Modell2x M4x25 Schraube
2x N20 Getriebemotor 6V 150 U/min2x M4 Sicherungsmutter
1x Arduino Motor-Shield9V-Stecker
1 x Mikrocontroller Board LGT8F328P9V Akku
2 x Ultraschall-Sensor4x Dupont-Kabel

Nächste Schritte

  1. 3D-Druck der Teile durch Papa. Materialauswahl, Design- und Farbzusammenstellung von der Tochter.
  2. Zusammenbau des Chassis, Ketten und Einbau der Motoren von der Tochter
  3. Verkabelung mit Motor-Shield und Ultraschallsensor durch Papa
  4. Programmierung macht Gemini nach Projektdiskussion.
  5. Testing macht die Tochter
  6. Dokumentation macht Gemini nach Projektabschluss

Nachdem ich nur das technische Verständnis habe und meine Tochter nur Freude an der Zusammenarbeit, diskutieren wir die gesammte Thematik mit Google Gemini und lassen uns den Code und die Doku erstellen, die wir im Detail anpassen.

1. Systembeschreibung

Dieser SMARS (Screwless Modular Automated Robot System) wurde als Lernprojekt für den LGT8F328P Mikrocontroller konzipiert. Er verfügt über eine Bluetooth-Schnittstelle zur Fernsteuerung und ein Ultraschallsystem, das Kollisionen beim Vorwärtsfahren durch eine softwarebasierte Sperre aktiv verhindert.


2. Hardware-Konfiguration

A. Hauptkomponenten

  • Controller: LGT8F328P (AZ-Delivery)
  • Motor-Treiber: L293D Motor Shield
  • Antrieb: 2x N20 Getriebemotoren (6V)
  • Sensorik: 2x HC-SR04 Ultraschallmodule (APKLVSR)
  • Bluetooth: HC-05l

B. Pin-Belegung (Anschlussplan)

Wir nutzen die Analog-Pins als digitale Ein-/Ausgänge, um die für das Shield und den USB-Upload reservierten digitalen Pins nicht zu stören.

BluetoothmodulMotorplatineFunktionFarbe
Bluetooth (RX)A5Datenübertragung zum Handyschwarz
Bluetooth (TX)A4Datenempfang vom Handyweiss
GNDGNDMassegrau
VCC5VSpannungviolett
Ultraschall vorne (deaktiviert)MotorplatineFunktionFunktion
VCC5VSpannunggelb
Ultraschall (vorne) TrigA0Impuls-Auslöser Vorwärtsorange
Ultraschall (vorne) EchoA1Echo-Empfänger Vorwärtsrot
GNDGNDMassebraun
Ultraschall hintenMotorplatineFunktionFunktion
VCC5VSpannunggelb
Ultraschall (hinten) TrigA2Impuls-Auslöser Rückwärtsorange
Ultraschall (hinten) EchoA3Echo-Empfänger Rückwärtsrot
GNDGNDMassebraun
Motorplatine
Motor LinksM1Anschluss an Klemme M1 (außen)
Motorplatine
Motor RechtsM2Anschluss an Klemme M2 (außen)

Wichtig: Der mittlere Pin der 5er-Schraubklemme (GND) bleibt für die Motoren frei. Plus und Minus der Motoren werden an die jeweiligen Außenpaare von M1 und M2 geklemmt.


3. Software-Setup


Die Software Arduino IDE kann HIER herunter geladen werden.

A. Arduino IDE Vorbereitung

  1. Unter Datei > Einstellungen folgende URL bei „Zusätzliche Boardverwalter-URLs“ einfügen:
    https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
  2. Unter Werkzeuge > Board > Boardverwalter das Paket LGT8fx suchen und installieren.
  3. Unter Sketch > Bibiliothek einbinden > Bibliothek verwalten die Bibliothek Adafruit Motor Shield library in der Version 1.0.1 installieren.

B. Board-Einstellungen

  • Board: LGT8F328
  • Clock: 32 MHz (Internal)
  • Variant: 32pin-LQFP
  • Baud: 115200

Um den Mikrocontroller mit dem PC zu verbinden, folgt man diesen Schritten. Da wir das Modell LGT8F328P von AZ-Delivery verwendest, gibt es eine kleine Besonderheit beim Kabel und bei der Treibersoftware.


4. Die physische Verbindung

  • Kabel: Man benötigt ein USB 2.0 A/USB 2.0 B
  • Anschluss: Stecke das kleine Ende in die USB-Buchse des Mikrocontrollers und das große Ende in einen freien USB-Port deines Computers.
  • Strom: Sobald die Verbindung steht, sollte eine kleine orange und grüne LED auf dem Board aufleuchten. Das zeigt dir, dass der PC das Board mit Strom versorgt.

5. Der richtige Treiber

Das Board verwendet meist den CH340-Chip für die USB-Kommunikation.

  • Windows 10/11: Erkennt diesen Chip oft automatisch.
  • Falls nicht: Muss man den „CH340 Treiber“ installieren, damit der PC erkennt, dass ein Mikrocontroller angeschlossen ist. Ohne diesen Treiber erscheint das Board nicht in der Auswahl der Arduino IDE.

6. Den „Port“ in der Software wählen

Sobald das Board angeschlossen ist, muss man der Arduino IDE sagen, wo sie den Code hinschicken soll:

  1. Öffne die Arduino IDE.
  2. Gehe oben im Menü auf Werkzeuge.
  3. Fahre mit der Maus über Port.
  4. Dort erscheint nun ein Eintrag wie COM3 (die Nummer kann variieren). Setze dort per Klick ein Häkchen.
    • Tipp: Wenn du unsicher bist, welcher Port es ist, ziehe das Kabel kurz ab und schau, welcher COM-Port aus der Liste verschwindet.
  5. Stelle bei Uploadspeed 115200 Baud eiin

7. Board-Einstellungen kontrollieren

Damit die Übertragung klappt, müssen die Einstellungen für den LGT8F328P korrekt sein. Um das Programm aufzuspielen, habe ich nur das Mikrocontroller-Board ohne Motorplatine angesteckt und nach der Programmierung zusammen gebaut.


8. Vollständiger Programm-Code

Nachdem meine C++ Kenntnisse schon etwas eingerostet sind, darf die Gemini KI von Google das für mich erledigen. Ich sage ihr nur, was ich wie machen will und da wir das ganze Projekt mit ihr entwickelt haben, kennt sie sämtliche Parameter. Es fällt ihr nicht schwer funktionierenden Code zu entwickeln.

C++

#include <AFMotor.h>
#include <SoftwareSerial.h>
AF_DCMotor motorL(1); 
AF_DCMotor motorR(2);
SoftwareSerial bluetooth(A4, A5); 
const int trigV = A0; const int echoV = A1; 
// Variable, um zu speichern, ob wir gerade "Vorwärts" fahren
bool faehrtVorwaerts = false; 
void setup() {
  bluetooth.begin(9600);
  pinMode(trigV, OUTPUT); pinMode(echoV, INPUT);
}
long messung(int t, int e) {
  digitalWrite(t, LOW); delayMicroseconds(2);
  digitalWrite(t, HIGH); delayMicroseconds(10);
  digitalWrite(t, LOW);
  long dauer = pulseIn(e, HIGH, 30000); 
  if (dauer == 0) return 999; 
  return dauer * 0.034 / 2;
}
void loop() {
  long abstandV = messung(trigV, echoV);
  // Sensor-Sicherheits-Check: Nur aktiv, wenn wir vorwärts fahren!
  if (faehrtVorwaerts && abstandV <= 15) {
    stopp();
    faehrtVorwaerts = false; // Sicherheits-Stopp
  }
  // Bluetooth Steuerung
  if (bluetooth.available()) {
    char taste = bluetooth.read();
    
    motorL.setSpeed(130); 
    motorR.setSpeed(250);
    
    if (taste == 'F') { 
      if (abstandV > 15) {
        faehrtVorwaerts = true; // Status auf "Vorwärts" setzen
        motorL.run(FORWARD); motorR.run(FORWARD);
      } else {
        stopp();
      }
    } 
    else if (taste == 'B') { faehrtVorwaerts = false; motorL.run(BACKWARD); motorR.run(BACKWARD); } 
    else if (taste == 'L') { faehrtVorwaerts = false; motorL.run(BACKWARD); motorR.run(FORWARD); } 
    else if (taste == 'R') { faehrtVorwaerts = false; motorL.run(FORWARD); motorR.run(BACKWARD); } 
    else if (taste == 'S') { faehrtVorwaerts = false; stopp(); }
  }
}
void stopp() {
  motorL.run(RELEASE);
  motorR.run(RELEASE);
}

5. Funktionsprüfung & Wartung

  • Richtungskontrolle: Fährt der Roboter bei „Vorwärts“ rückwärts, tauscht die zwei Kabel des betroffenen Motors in der Schraubklemme.
  • Sensortest: Bewegt eine Hand vor die Sensoren. Die Motoren müssen bei weniger als 15 cm Abstand sofort abschalten.
  • Stromversorgung: Für den kabellosen Betrieb muss der gelbe PWR-Jumper auf dem Motor-Shield gesteckt sein.

6. Software

Am Mobiltelfon verwende ich das Serial Bluetooth Terminal aus dem Google Appstore. Das Pairing funktioniert im Bluetooth LE Mode auf Anhieb. Man scannt nach Geräten und findet das Gerät HC-05. Im Terminal kann man Buttons für die Steuerbefehle definieren. Man drückt ohne Verbindung zum Fahrzeug auf die Steuerungstasten und bezeichnet den Button und weist ihm den Steuerbefehl zu.

Vorwärts → F
Rückwärts → B
Links → L
Rechts → R
Stopp → S