Carrera DIY-Zeitmessung: Das große Revival – Jetzt für alle!
Es ist eines meiner absoluten Lieblingsprojekte auf YouTube, und jetzt ist es endlich fertiggestellt. Vor zwei Jahren kamen die Videos leider nicht so an wie erhofft, weshalb ich die Reihe damals pausiert habe. Das hat mir persönlich sehr leidgetan, denn dieses System ist etwas wirklich Tolles für Kinder und alle, die im Herzen Kinder geblieben sind.
Warum der Eigenbau?
Die originale Carrera-App hat uns durch häufige Abstürze frustriert. Wir wollten einfach nur Runden zählen, sehen, wer gewonnen hat, und – wie in Videospielen – die schnellste Runde jagen. Mein System bietet jetzt genau das: präzise Messung, Live-Statistiken, Soundeffekte (wie die bekannten Counter-Strike Sounds) und Sieger-Animationen.
Die Technik: Warum ein eigener Code?
Standardlösungen wie Tasmota oder ESP-Easy haben nicht funktioniert, da ihre Zykluszeiten zu lang waren (ca. 40 ms). Ein Carrera-Auto braucht oft nur 10 bis 15 ms, um den Sensor zu passieren. Mein schlanker Arduino-Code reagiert so schnell, dass kein Impuls verloren geht.
Einstieg in die Arduino-Welt: So nutzt ihr meinen Code
Für alle, die noch nie mit Arduino gearbeitet haben: Keine Sorge! Es ist kein Hexenwerk. Da ich keine fertige .ino Datei zum Download anbiete, sondern den reinen Code, zeige ich euch hier, wie ihr diesen ganz einfach in ein neues Projekt einfügt und auf euren ESP überträgt:
- Software installieren: Ladet euch die Arduino IDE (kostenlos) von arduino.cc herunter und installiert sie.
- Board-Manager vorbereiten: Standardmäßig kennt Arduino den ESP8266/ESP32 nicht. Geht in der Software auf Datei -> Voreinstellungen und fügt unter „Zusätzliche Boardverwalter-URLs“ diesen Link ein:
http://arduino.esp8266.com/stable/package_esp8266com_index.json. - Neues Projekt erstellen:
- Startet die Arduino IDE.
- Geht auf Datei -> Neu.
- Löscht den gesamten Beispiel-Text, der dort erscheint, komplett heraus.
- Kopiert nun meinen Code hier von der Website und fügt ihn in das leere Fenster ein.
- Bibliothek installieren: Mein Sketch benötigt die „PubSubClient“-Bibliothek für MQTT. Geht auf Werkzeuge -> Bibliotheken verwalten, sucht nach „PubSubClient“ (von Nick O’Leary) und installiert diese.
- Anpassen & Hochladen:
- Wählt unter Werkzeuge -> Board euren ESP aus (z. B. „LOLIN(WEMOS) D1 R2 & mini“).
- Tragt eure WLAN-Daten (SSID/Passwort), die IP eures ioBrokers sowie den MQTT-User und das Passwort direkt im Text des Codes ein.
- Schließt den ESP per USB an (achtet auf ein Datenkabel!), wählt unter Werkzeuge -> Port den richtigen Anschluss aus und klickt oben auf den Pfeil nach rechts („Hochladen“).
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
int aktuelleStatusD7 = 0; // current state of the button
int letzterStatusD7 = 0; // previous state of the button
int aktuelleStatusD5 = 0; // current state of the button
int letzterStatusD5 = 0; // previous state of the button
const char* mqtt_server = "192.168.1.164"; //IP von ioBroker bzw. MQTT Server
const char* ssid = "MeineWLAN_SSID"; // WLAN Name / SSID
const char* password = "12345678"; // WLAN Passwort
#define D5 14 //Blaues Auto
#define D7 13 //Rotes Auto
unsigned long previous_dauer_B = 0; // alle XXXX ms Daten per MQTT senden
unsigned long interval_dauer_B = 500; // 500ms
unsigned long previous_dauer_R = 0; // alle XXXX ms Daten per MQTT senden
unsigned long interval_dauer_R = 500; // 500ms
WiFiClient net;
PubSubClient client(net);
//###############################################
void setup() {
Serial.begin(9600);
pinMode(D5, INPUT); //DigitalSignal Auto Rot
pinMode(D7, INPUT); //DigitalSignal Auto Blau
connect();
}
//###############################################
//###############################################
void messenCarrera()
{
if (digitalRead(D7)==HIGH) { //D7 = 1
aktuelleStatusD7 = digitalRead(D7);
if (aktuelleStatusD7 != letzterStatusD7){
client.publish("Carrera/Blau1" , "true");
Serial.println(aktuelleStatusD7);
}
}
else {
if (millis() - previous_dauer_B > interval_dauer_B) {
previous_dauer_B = millis();
aktuelleStatusD7 = digitalRead(D7);
Serial.println(aktuelleStatusD7);
client.publish("Carrera/Blau1" , "false");
}
}
if (digitalRead(D5)==HIGH) { //D7 = 1
aktuelleStatusD5 = digitalRead(D5);
if (aktuelleStatusD5 != letzterStatusD5){
client.publish("Carrera/Rot1" , "true");
Serial.println(aktuelleStatusD5);
}
}
else {
if (millis() - previous_dauer_R > interval_dauer_R) {
previous_dauer_R = millis();
aktuelleStatusD5 = digitalRead(D5);
Serial.println(aktuelleStatusD5);
client.publish("Carrera/Rot1" , "false");
}
}
}
//###############################################
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
messenCarrera(); //Sensor abfrage alle x-ms aufrufen
delay(10);
}
//###############################################
//###############################################
void connect() {
Serial.println("Connecting Wifi");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
WiFi.begin(ssid, password);
}
Serial.println("Connecting MQTT");
client.setServer(mqtt_server, 1883); //Port für MQTT hier eintragen
}
//###############################################
//###############################################
void reconnect() {
while (!client.connected()) {
String clientId = "D1 Mini Regensensor-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str(), "mqttuser", "12345678")) { // "MQTT Username", "Passwort"
Serial.println("Mit MQTT verbunden");
}
else {
Serial.print("failed, reconnect=");
Serial.print(client.state());
Serial.println(" try again in 5s");
delay(5000);
}
}
}
//###############################################So bringt ihr das Projekt im ioBroker an den Start
Damit das System bei euch läuft, sind folgende Schritte nötig:
- Backup einspielen: Nutzt den Backitup-Adapter, um mein Paket einzuspielen. Darin sind die Vis, die Skripte und die Mediendateien enthalten.
- MQTT & Hardware:
- Im ioBroker MQTT-Adapter müssen User („mqttuser“) und Passwort („12345678“) mit dem Arduino-Sketch übereinstimmen.
- Schließt die Sensoren (Lichtschranken/Linienfolger) an die GPIOs D5 und D6 (GPIO 14 und 12) eures ESP an. Diese Pins sind sicher beim Bootvorgang.
- Skripte anpassen:
- Öffnet unter JavaScript die Skripte für das rote und blaue Auto.
- Tragt dort die IP-Adresse eures ioBrokers sowie eure Vis Instanz-ID (im Vis-Editor unter Tools zu finden) ein.



Hier findet ihr das Backup, Vis Projekt, Bilder, Sounds usw. (iobroker_2026_01_08-13_27_31_backupiobroker.tar.gz):
https://drive.google.com/drive/folders/1Jlkrw5MyjMG16stiBABkaHAvQeEBeB6h?usp=sharingHardware-Tipps aus der Praxis
- Sensoren: Ich habe verschiedene Modelle getestet – sowohl einfache Linienfolger als auch spezielle Reflex-Lichtschranken funktionieren prima.
- Störquellen: Achtet darauf, dass der ESP nicht zu nah am Raspberry Pi oder Monitor verbaut ist, da es sonst zu Funkstörungen (EMV) kommen kann.
- Display: Ihr könnt jedes Gerät mit Browser nutzen (Tablet, Smart-TV, Smartphone).
Ausblick & Support
In den nächsten Tagen werde ich den Artikel regelmäßig aktualisieren und ein neues Video dazu hochladen. Habt ihr Verbesserungsvorschläge? Teilt sie gerne mit uns! Bei Fragen erreicht ihr mich am besten per WhatsApp – das ist für den technischen Austausch viel einfacher als E-Mails.
Viel Spaß beim Nachbauen und beim nächsten Rennen!
Gruß Eddy
