Gute-Laune-Roboter mit DFRobot – fährt und spielt Motivations-Clips

Gute-Laune-Roboter mit DFRobot – fährt und spielt Motivations-Clips

Baue einen kleinen Motivations-Roboter, der selbstständig umherfährt und positive Sprach-Botschaften abspielt: „Alles ist gut!“, „Du bist großartig!“, „Du schaffst das!“ – ideal für Lernpausen, Büro oder Kinderzimmer.

Benötigte Komponenten (DFRobot, nur SKU)

Kategorie Bauteil SKU Hinweis
Controller + Motortreiber Romeo V2 – All-in-One Controller (Arduino-kompatibel) DFR0225 ATmega32u4, integrierter Dual-Motor-Treiber
Fahrgestell „Turtle“: 2WD Mobile Robot Platform ROB0005 Chassis inkl. 2 DC-Motoren, Räder, Stützrolle
Audio DFPlayer Mini MP3-Modul DFR0299 Spielt MP3/WAV von microSD, serielle Steuerung
Lautsprecher Stereo Enclosed Speaker – 3 W 8 Ω FIT0502 Direkt an DFPlayer (SPK+/SPK-)
Interaktion (optional) Gravity: Digital Push Button DFR0029 Manuell „Motivation“ abspielen
Kabel Breadboard Jumper (Male-Male, 30er/40er) FIT0154 Verdrahtung DFPlayer ↔ Romeo
Stromversorgung: Das Chassis besitzt i. d. R. Batteriehalter; alternativ Powerbank → Romeo (USB). Achte auf gemeinsame Masse (GND) zwischen allen Modulen.

Verdrahtung

Motoren (über Romeo V2, integrierter Treiber)

  • Linker Motor an M1-Klemmen des Romeo (Polarität für Fahrtrichtung ggf. tauschen).
  • Rechter Motor an M2-Klemmen des Romeo.
  • Motor-Versorgung laut Chassis (Batterie → Motor-Power-Eingang Romeo). System-USB für Logik beibehalten.

DFPlayer Mini → Romeo (SoftwareSerial)

  • DFPlayer VCC5V, GNDGND
  • DFPlayer TX → Romeo D12 (RX des SoftwareSerial)
  • DFPlayer RX → Romeo D11 (TX des SoftwareSerial)
  • SPK+/SPK- → Lautsprecher FIT0502

Button (optional)

  • Eine Seite des Tasters → D2, andere Seite → GND.
  • Im Code wird INPUT_PULLUP genutzt (LOW = gedrückt).
Audio-Dateien vorbereiten: microSD (FAT32) mit Ordner mp3/ oder Root. Benenne Dateien z. B. 0001.mp30005.mp3 (kurze Mutmacher-Clips).

Arduino-Beispielcode (Romeo V2: Fahren + Sprach-Motivation)


// GoMaker × DFRobot — Gute-Laune-Roboter
// Hardware: Romeo V2 (DFR0225), 2WD Chassis (ROB0005), DFPlayer (DFR0299), Speaker (FIT0502), Button (DFR0029 optional)
//
// Romeo V2 Motor-Pins (PWM-Modus, lt. DFRobot):
// E1=D5 (M1 Speed), E2=D6 (M2 Speed), M1=D4 (Dir), M2=D7 (Dir)

#include <SoftwareSerial.h>
#include "DFRobotDFPlayerMini.h"

const int E1 = 5;   // M1 Speed (PWM)
const int E2 = 6;   // M2 Speed (PWM)
const int M1 = 4;   // M1 Direction
const int M2 = 7;   // M2 Direction

const int PIN_BTN = 2;     // optionaler Trigger (nach GND, Pullup aktiv)
SoftwareSerial mp3Serial(11, 12); // RX, TX  (DFPlayer RX<-11, TX->12)
DFRobotDFPlayerMini mp3;

unsigned long lastSpeak = 0;
const unsigned long speakEveryMs = 15000; // alle 15 s ermutigen
uint8_t nextTrack = 1; // 1..5 (zu deinen Dateien passend)

void motorsStop() {
  digitalWrite(E1, LOW);
  digitalWrite(E2, LOW);
}

void motorsForward(uint8_t spdL, uint8_t spdR) {
  analogWrite(E1, spdL); digitalWrite(M1, HIGH);
  analogWrite(E2, spdR); digitalWrite(M2, HIGH);
}

void motorsBackward(uint8_t spdL, uint8_t spdR) {
  analogWrite(E1, spdL); digitalWrite(M1, LOW);
  analogWrite(E2, spdR); digitalWrite(M2, LOW);
}

void motorsTurnLeft(uint8_t spd) {
  analogWrite(E1, spd);  digitalWrite(M1, LOW);
  analogWrite(E2, spd);  digitalWrite(M2, HIGH);
}

void motorsTurnRight(uint8_t spd) {
  analogWrite(E1, spd);  digitalWrite(M1, HIGH);
  analogWrite(E2, spd);  digitalWrite(M2, LOW);
}

void saySomething() {
  mp3.volume(25);                 // 0..30
  mp3.play(nextTrack);            // 0001.mp3 → Track 1
  nextTrack++; if (nextTrack > 5) nextTrack = 1;
}

void setup() {
  for (int p : {E1,E2,M1,M2}) pinMode(p, OUTPUT);
  pinMode(PIN_BTN, INPUT_PULLUP);

  mp3Serial.begin(9600);
  Serial.begin(115200);

  if (!mp3.begin(mp3Serial)) {
    Serial.println("DFPlayer nicht gefunden – Verkabelung/SD pruefen!");
  } else {
    mp3.volume(25);
    Serial.println("DFPlayer bereit.");
  }

  motorsStop();
  lastSpeak = millis();
}

void loop() {
  // Einfaches "Herumfahren": vorwärts → kleiner Bogen → Stopp → rückwärts → Drehen …
  motorsForward(160, 180); delay(1500);
  motorsTurnLeft(160);     delay(500);
  motorsStop();            delay(300);

  motorsBackward(140, 140); delay(800);
  motorsTurnRight(170);     delay(600);
  motorsStop();             delay(400);

  // Zeit-/Taster-Trigger für Motivation
  if (millis() - lastSpeak > speakEveryMs) {
    saySomething();
    lastSpeak = millis();
  }
  if (digitalRead(PIN_BTN) == LOW) {
    delay(20); // Entprellen
    if (digitalRead(PIN_BTN) == LOW) {
      saySomething();
      while(digitalRead(PIN_BTN)==LOW) delay(10);
    }
  }
}
    
Sprachinhalte: Nimm 3–5 kurze MP3-Clips auf (z. B. „Alles wird gut!“, „Super gemacht!“, „Du schaffst das!“) und lege sie als 0001.mp30005.mp3 auf die microSD. Lautstärke im Code mit mp3.volume().

Tipps, Sicherheit & Erweiterungen

  • Traktion: Gummiringe/Reifen sauber halten; bei glattem Boden Geschwindigkeit reduzieren.
  • Rand-Erkennung: Optional Ultraschall/IR für Hindernisse nachrüsten (z. B. vorn mittig).
  • Profile: Unterschiedliche Wiedergabelisten (Motivation, Fokus, Pausen) per Button umschalten.
  • Design: Eine „lächelnde“ Frontplatte mit Papier/3D-Druck verleiht Charakter.
Sicherheit: Haare/Kabel fern von Rädern halten; nur auf ebener Fläche fahren lassen. Bei Batteriebetrieb Polarität beachten; beim USB-Debuggen Motor-Power-Schalter am Romeo beachten.

0 Kommentare

Kommentieren

Bitte beachten Sie, dass Kommentare vor ihrer Veröffentlichung genehmigt werden müssen.