RC Rollenprüfstand – Arduino Nano Speed Tester für RC Fahrzeuge
Ein selbst entwickelter Rollenprüfstand zur Geschwindigkeitsmessung von RC Autos.
Mit diesem Prüfstand lässt sich die Geschwindigkeit von RC Fahrzeugen einfach und reproduzierbar auf der Rolle messen. Die Drehzahl der Prüfrolle wird über einen inkrementellen Drehgeber mit 600 P/R (AB-Ausgang) erfasst und durch einen Arduino Nano ausgewertet. Die aktuelle Geschwindigkeit wird auf einem kompakten 1,3" OLED Display angezeigt.
Der Aufbau ist speziell für RC Modellbau entwickelt und eignet sich ideal zum Vergleichen von Fahrzeugen, Übersetzungen, Reifen oder Setup-Änderungen.
Die Messung erfolgt über die Drehzahl der Prüfrolle. Durch den bekannten Rollendurchmesser berechnet der Arduino die Geschwindigkeit in km/h. Inkrementelle Drehgeber dieser Bauart werden häufig zur Erfassung von Drehzahl, Winkel und Geschwindigkeit eingesetzt.
Funktionen
✅ Geschwindigkeitsmessung in km/h
✅ Echtzeit-Anzeige über 1,3" OLED Display
✅ Arduino Nano Steuerung
✅ Inkrementeller Drehgeber 600 P/R AB
✅ Kompakte Bauweise für RC Fahrzeuge
✅ Einfache Montage und Nachbau möglich
Benötigte Elektronik
- Arduino Nano
- 1,3" OLED Display (I2C)
- Inkrementeller Drehgeber DC 5–24V / 600 P/R AB
- Spannungsversorgung 5V
Verwendeter Drehgeber:
https://www.amazon.de/dp/B0DJ76RVTJ
Zusätzlich benötigte Bauteile
- 1x 8 mm Welle 250mm lang
- Wellenadapter (flexibel) 6mm auf 8mm
- 3x Schrauben M3 x 10 mm
- 4x Kugellager 608 passend zur 8 mm Welle
Druckempfehlung
- Material: PLA / PETG
- Layerhöhe: 0,2 mm
- Wandlinien: 3–4
- Füllung: 30 % oder mehr empfohlen
- Mechanisch belastete Teile bevorzugt aus PETG drucken
Hintergrund
Der Prüfstand wurde entwickelt, um RC Fahrzeuge schnell und unkompliziert testen zu können. Gerade bei Wettbewerbsfahrzeugen sind kleine Änderungen an Motor, Übersetzung oder Reifen oft schwer einzuschätzen – mit diesem Aufbau bekommt man direkt messbare Ergebnisse.
Das Projekt ist komplett DIY und kann beliebig erweitert werden, z.B. um:
- Maximalgeschwindigkeit
- Beschleunigungsmessung
- Datenlogging
- Temperatur- und Spannungsmessung
- PC/Tablet-Auswertung
Viel Spaß beim Nachbauen und Weiterentwickeln! 🏎️
Verkabelung
Encoder
Rot -> 5V
Schwarz -> GND
Grün -> D2
Weiß -> frei
6,8kΩ PullUp -> zwischen D2 und 5V
OLED SH1106
VCC -> 3,3V
GND -> GND
SDA -> A4
SCL -> A5
Arduino Code
/*
RC Rollenprüfstand
Arduino Nano
SH1106 OLED 128x64 I2C
Encoder:
600 PPR
Kanal A -> D2
FALLING
Rolle:
60mm Durchmesser
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define OLED_ADDR 0x3C
Adafruit_SH1106G display(
128,
64,
&Wire
);
// Encoder
#define ENCODER_PIN 2
#define PPR 600
// Rolle
#define ROLLEN_DURCHMESSER_MM 60.0
volatile unsigned long impulse = 0;
unsigned long letzteMessung = 0;
float speedKmh = 0;
float rpm = 0;
float maxSpeed = 0;
// ----------------------
// Encoder Interrupt
// ----------------------
void encoderISR()
{
impulse++;
}
// ----------------------
// Berechnung
// ----------------------
void berechneWerte()
{
noInterrupts();
unsigned long imp = impulse;
impulse = 0;
interrupts();
float umdrehungen =
(float)imp / PPR;
float strecke =
umdrehungen *
PI *
(ROLLEN_DURCHMESSER_MM / 1000.0);
// Messzeit 100ms
speedKmh =
(strecke / 0.1)
* 3.6;
rpm =
umdrehungen * 600.0;
}
// ----------------------
// OLED Anzeige
// ----------------------
void zeigeOLED()
{
display.clearDisplay();
display.setTextColor(
SH110X_WHITE
);
display.setTextSize(1);
display.setCursor(0,0);
display.print(
"RC Rollenpruefstand"
);
display.setTextSize(3);
display.setCursor(0,14);
display.print(
speedKmh,
1
);
display.setTextSize(1);
display.setCursor(92,28);
display.print(
"km/h"
);
display.setCursor(0,45);
display.print(
"RPM: "
);
display.print(
rpm,
0
);
display.setCursor(70,45);
display.print(
"MAX:"
);
display.print(
maxSpeed,
1
);
display.display();
}
// ----------------------
// Setup
// ----------------------
void setup()
{
Serial.begin(115200);
pinMode(
ENCODER_PIN,
INPUT_PULLUP
);
attachInterrupt(
digitalPinToInterrupt(ENCODER_PIN),
encoderISR,
FALLING
);
display.begin(
OLED_ADDR,
true
);
display.clearDisplay();
display.display();
Serial.println(
"RC Rollenpruefstand gestartet"
);
}
// ----------------------
// Loop
// ----------------------
void loop()
{
if(
millis() - letzteMessung >= 100
)
{
letzteMessung = millis();
berechneWerte();
if(
speedKmh > maxSpeed
)
{
maxSpeed = speedKmh;
}
zeigeOLED();
Serial.print(
"Speed: "
);
Serial.print(
speedKmh,
1
);
Serial.print(
" km/h RPM: "
);
Serial.print(
rpm,
0
);
Serial.print(
" MAX: "
);
Serial.println(
maxSpeed,
1
);
}
}
CODE FOR Mph only
/*
RC Rollenprüfstand
Arduino Nano
SH1106 OLED 128x64 I2C
Anzeige:
- Geschwindigkeit (mph)
- Rollen RPM
- Maximalgeschwindigkeit
Encoder:
600 PPR
Kanal A -> D2
FALLING
Rolle:
60 mm Durchmesser
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define OLED_ADDR 0x3C
Adafruit_SH1106G display(128, 64, &Wire);
// Encoder
#define ENCODER_PIN 2
#define PPR 600
// Rolle
#define ROLLEN_DURCHMESSER_MM 60.0
volatile unsigned long impulse = 0;
unsigned long letzteMessung = 0;
float speedMph = 0.0;
float rpm = 0.0;
float maxSpeed = 0.0;
//------------------------------------------------
// Encoder Interrupt
//------------------------------------------------
void encoderISR()
{
impulse++;
}
//------------------------------------------------
// Geschwindigkeit berechnen
//------------------------------------------------
void berechneWerte()
{
noInterrupts();
unsigned long imp = impulse;
impulse = 0;
interrupts();
// Umdrehungen in 100 ms
float umdrehungen = (float)imp / PPR;
// Strecke in Metern
float strecke =
umdrehungen *
PI *
(ROLLEN_DURCHMESSER_MM / 1000.0);
// Geschwindigkeit in m/s
float speedMs = strecke / 0.1;
// mph
speedMph = speedMs * 2.236936;
// Rollen-RPM
rpm = umdrehungen * 600.0;
}
//------------------------------------------------
// OLED
//------------------------------------------------
void zeigeOLED()
{
display.clearDisplay();
display.setTextColor(SH110X_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.print("RC Rollenpruefstand");
display.setTextSize(3);
display.setCursor(0, 14);
display.print(speedMph, 1);
display.setTextSize(1);
display.setCursor(98, 28);
display.print("mph");
display.setCursor(0, 45);
display.print("RPM:");
display.print(rpm, 0);
display.setCursor(70, 45);
display.print("MAX:");
display.print(maxSpeed, 1);
display.display();
}
//------------------------------------------------
// Setup
//------------------------------------------------
void setup()
{
Serial.begin(115200);
pinMode(ENCODER_PIN, INPUT_PULLUP);
attachInterrupt(
digitalPinToInterrupt(ENCODER_PIN),
encoderISR,
FALLING);
display.begin(OLED_ADDR, true);
display.clearDisplay();
display.display();
Serial.println("RC Rollenpruefstand gestartet");
}
//------------------------------------------------
// Loop
//------------------------------------------------
void loop()
{
if (millis() - letzteMessung >= 100)
{
letzteMessung = millis();
berechneWerte();
if (speedMph > maxSpeed)
{
maxSpeed = speedMph;
}
zeigeOLED();
Serial.print("Speed: ");
Serial.print(speedMph, 1);
Serial.print(" mph RPM: ");
Serial.print(rpm, 0);
Serial.print(" MAX: ");
Serial.println(maxSpeed, 1);
}
}
