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.
Mein aktuelles Projekt ist der SMARS-Roboter – ein kompakter, 3D-gedruckter Kettenroboter, der sich hervorragend als Einstieg in die Welt der Robotik eignet.
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 Modell | 2x M4x25 Schraube |
| 2x N20 Getriebemotor 6V 150 U/min | 2x M4 Sicherungsmutter |
| 1x Arduino Motor-Shield | 9V-Stecker |
| 1 x Mikrocontroller Board LGT8F328P | 9V Akku |
| 2 x Ultraschall-Sensor | 4x Dupont-Kabel |
Nächste Schritte (die ich plane)
- 3D-Druck der Teile (keine oder nur wenige Supports nötig)
- Zusammenbau des Chassis und Einbau der Motoren
- Verkabelung mit Motor-Shield und Ultraschallsensor
- Programmierung (erste Version: Hindernis erkennen & ausweichen)
- Erweiterungen: Bluetooth-Steuerung, OLED-Display, Lichteffekte etc.
Nachdem ich nur das technische Verständnis habe, diskutiere ich die gesammte Thematik mit Google Gemini und lasse mir den Code und die Doku erstellen, die ich im Detail anpasse.
Ich habe den Roboter etwas abgeändert und ihm für die Fahrt rückwärts ein zweites Ultraschallmodul spendiert, damit er in diese Richtung ebenfalls stehen bleibt, wenn er ein Hindernis feststellt.
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 duales Ultraschallsystem, das Kollisionen beim Vorwärts- und Rückwä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-05 oder HC-06 Modul
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.
| Komponente | Pin | Funktion |
| Bluetooth (TX) | A4 | Datenempfang vom Handy |
| Bluetooth (RX) | A5 | Datenübertragung zum Handy |
| Ultraschall (Vorne) Trig | A0 | Impuls-Auslöser Vorwärts |
| Ultraschall (Vorne) Echo | A1 | Echo-Empfänger Vorwärts |
| Ultraschall (Hinten) Trig | A2 | Impuls-Auslöser Rückwärts |
| Ultraschall (Hinten) Echo | A3 | Echo-Empfänger Rückwärts |
| Motor Links | M1 | Anschluss an Klemme M1 (außen) |
| Motor Rechts | M2 | Anschluss 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
- Unter Datei > Einstellungen folgende URL bei „Zusätzliche Boardverwalter-URLs“ einfügen:
https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json - Unter Werkzeuge > Board > Boardverwalter das Paket LGT8fx suchen und installieren.
- 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: 16 MHz (Internal)
- Variant: 32pin-LQFP
Um den Mikrocontroller mit deinem PC zu verbinden, folgst du diesen Schritten. Da du 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 rote 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:
- Öffne die Arduino IDE.
- Gehe oben im Menü auf Werkzeuge.
- Fahre mit der Maus über Port.
- Dort erscheint nun ein Eintrag wie
COM3oderCOM4(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.
7. Board-Einstellungen kontrollieren
Damit die Übertragung klappt, müssen die Einstellungen für den LGT8F328P korrekt sein (wie in deiner Dokumentation beschrieben):
8. Vollständiger Programm-Code
Nachdem meine C++ Kenntnisse schon etwas eingerostet sind, darf die Gemini für mich erledigen. Ich sage ihm nur, was ich wie machen will.
C++
#include <AFMotor.h>
#include <SoftwareSerial.h>
// Motoren an M1 und M2 initialisieren
AF_DCMotor motorL(1);
AF_DCMotor motorR(2);
// Bluetooth an A4 (TX) und A5 (RX)
SoftwareSerial bluetooth(A4, A5);
// Sensor-Pins definieren
const int trigV = A0; const int echoV = A1; // Vorne
const int trigH = A2; const int echoH = A3; // Hinten
void setup() {
bluetooth.begin(9600);
pinMode(trigV, OUTPUT); pinMode(echoV, INPUT);
pinMode(trigH, OUTPUT); pinMode(echoH, INPUT);
// Geschwindigkeit (0-255)
motorL.setSpeed(180);
motorR.setSpeed(180);
}
// Funktion zur Messung der Distanz in cm
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); // Timeout nach 30ms
if (dauer == 0) return 999; // Falls kein Echo, Weg frei annehmen
return dauer * 0.034 / 2;
}
void loop() {
long abstandV = messung(trigV, echoV);
long abstandH = messung(trigH, echoH);
if (bluetooth.available()) {
char taste = bluetooth.read();
if (taste == 'F') { // Vorwärts
if (abstandV > 15) {
motorL.run(FORWARD); motorR.run(FORWARD);
} else {
stopp();
}
}
else if (taste == 'B') { // Rückwärts
if (abstandH > 15) {
motorL.run(BACKWARD); motorR.run(BACKWARD);
} else {
stopp();
}
}
else if (taste == 'L') { // Drehung Links
motorL.run(BACKWARD); motorR.run(FORWARD);
}
else if (taste == 'R') { // Drehung Rechts
motorL.run(FORWARD); motorR.run(BACKWARD);
}
else if (taste == 'S') { // Manueller Stopp
stopp();
}
}
// Aktive Sicherheit: Stoppt sofort, wenn ein Hindernis zu nah kommt
if ((abstandV <= 15) || (abstandH <= 15)) {
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.











You must be logged in to post a comment.