
Wir haben eine tolle Anleitung gefunden: https://mad-ee.com/easy-inexpensive-hoverboard-motor-controller/. Dort wird ausführlich beschrieben, wie man den Motorcontroller anschließt.
Weitere Informationen sind hier zu finden: https://github.com/EFeru/hoverboard-firmware-hack-FOC Mehr Infos dazu im Wiki: https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki/Firmware-Compatibility
![]() |
![]() |
Die Bilder sind von dieser Seite hier: https://mad-ee.com/easy-inexpensive-hoverboard-motor-controller/
Ganz wichtig sind Sicherheitsvorkehrungen:


![]() |
![]() |
12.01.2024 Wir wollen den Motorcontroller an den Motor und den Hall Sensor anschließen. Leider passt der Adapter vom Motor nicht auf den Motorcontroller. Daher haben wir das Kabel abgeschnitten und Franziska hat den richtigen Adapter angelötet. Damit keine Kurzschlüsse entstehen, hat Franzi Schrumpfschlauch verwendet.
Wir haben die Farben wie folgt zusammen geschlossen:
schwarz,grün,weiß,gelb,rot
09.02.2024: Heute wolllen wir den dritten Anstecker unseres Controllers verkabeln. Außerdem wollen wir testen ob das Rad funktioniert. Dazu brauchen wir ein Netzteil und Messspitzen.
Um den Motor zu kontrollieren (bremsen, Gas geben) müssen wir zwei ungefähr 20cm lange Kabel abisolieren und verzinnen diese müssen wir dann an einen Schalter (Gas) und an einen Taster(bremsen) anlöten.
grau: 5V -> Taster (bremsen) -> blau: brake weiß: GND -> Schalter (Gas) -> braun: direction
Jetzt löten wir an ein Potentiometer die drei Farben lila, rot und schwarz. Schwarz und rot kommen an die Außenseiten und lila in die Mitte.
08.03.2024:
22.03.2024: Heute wollen wir den Motor zum laufen bringen. Dafür müssen wir an unserer Fernbedienung einen RJ45 anbringen und die Kabel löten dazu brauchen wir den Plan den wir letztes Mal reingestellt haben. Ganz wichtig dabei ist CTRL=0-5V jetzt wollen wir Strom anschließen und damit das Kunstwerk zum laufen bringen. und es geklappt!
28.02.2025 Gelb, grün, weiß (rechter Reifen).
02.05.2025 Kabel für Reifen: schwarz - braun - schwarz grün - grün - grün weiß - blau gelb - orange - gelb rot - weißorange - rot
![]() |
![]() |
![]() |
Erste Idee war ein Holzbrett mit Poti (Geschwindigkeit), je ein Schalter für die Richtung jedes Motors sowie eine Bremse. Schöner wäre natürlich ein Joystick, etwa dieser HIER
Poti vor/zurück:
Mitte: 40kO, vorne: 50kO, hinten: 0kO
blau: grün nichts, rot nichts, gelb nichts, weiß nichts, schwarz nichts
grün: rot nichts, gelb nichts, weiß nichts, schwarz nichts
rot: gelb nichts, weiß nichts, schwarz nichts
gelb: weiß nichts, schwarz nichts
weiß: schwarz nichts
int x;
int y;
void setup() {
// put your setup code here, to run once:
pinMode(A0, INPUT);
pinMode(A1, INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
x = analogRead(A0);
Serial.println(x);
y = analogRead(A1);
Serial.println(y);
delay(50);
}
Nächstes Mal: Gehäuse lasercutten und Verkabelung am Arduino NANO, Motor treiber per PWM ansteuern
#define MOTOR_L 3
#define MOTOR_R 4
#define POTI_X A0
#define POTI_Y A1
#define DIR_COMPENSATION 0
#define POTI_X_DEADPOINT 2048
#define POTI_X_DEADPOINT_DELTA 100
#define POTI_X_MAX 4096
#define POTI_X_MIN 0
#define POTI_Y_DEADPOINT 2048
#define POTI_Y_DEADPOINT_DELTA 100
#define POTI_Y_MAX 4096
#define POTI_Y_MIN 0
void setup() {
// put your setup code here, to run once:
pinMode(POTI_X, INPUT);
pinMode(POTI_Y, INPUT);
pinMode(MOTOR_L, OUTPUT);
pinMode(MOTOR_R, OUTPUT);
Serial.begin(9600);
}
float calc_speed(int poti_value) {
int position = poti_value - POTI_X_DEADPOINT;
if (position > POTI_X_DEADPOINT_DELTA * -1 && position < POTI_X_DEADPOINT_DELTA) {
return 0;
}
float speed;
if (position > POTI_X_DEADPOINT) {
speed = position / (POTI_X_MAX - POTI_X_DEADPOINT);
} else {
speed = position / (POTI_X_MIN - POTI_X_DEADPOINT) * -1;
}
return speed;
}
float calc_dir(int poti_value) {
int position = poti_value - POTI_Y_DEADPOINT;
if (position > POTI_Y_DEADPOINT_DELTA * -1 && position < POTI_Y_DEADPOINT_DELTA) {
return 0;
}
float dir;
if (position > POTI_Y_DEADPOINT) {
dir = position / (POTI_Y_MAX - POTI_Y_DEADPOINT);
} else {
dir = position / (POTI_Y_MIN - POTI_Y_DEADPOINT) * -1;
}
dir += DIR_COMPENSATION;
return dir;
}
void calc_motor_speeds(int speed, int dir, int &motor_L, int &motor_R) {
motor_L = speed;
motor_R = speed;
if (dir > 0) {
// Right
motor_R += dir * -1;
if (motor_L + dir < 1) {
motor_L += dir;
}
} else if (dir < 0) {
// left
motor_L += dir;
if (motor_R + dir * -1 < 1) {
motor_R += dir * -1;
}
}
}
void loop() {
// put your main code here, to run repeatedly:
int x = analogRead(POTI_X);
int y = analogRead(POTI_Y);
int speed = calc_speed(y);
int dir = calc_dir(x);
int motor_L, motor_R;
calc_motor_speeds(speed, dir, motor_L, motor_R);
analogWrite(MOTOR_L, motor_L);
analogWrite(MOTOR_R, motor_R);
Serial.println(motor_L);
Serial.println(motor_R);
delay(50);
}