Bafang BBS0x Motor mit Microcontroller ESP32 und Handy-App steuern


In diesem Artikel stelle ich euch eine Lösung vor mit der ihr das normale Display (SW102, DC18, 750C u.v.a.m.) nicht mehr benötigt. Anstelle des Bafang-Displays könnt ihr euer Handy nutzen. Außerdem könnt ihr direkt mit dem Handy die Motorparameter (viele nennen es auch Programmierung) ändern.

Den Quelltext für das Projekt gebe ich noch nicht heraus. Ich stelle nur die fertig kompilierten Files zur Verfügung.

Dem Controller habe ich den Namen BabaController gegeben.

Grundlagen zum Projekt

Insgesamt besteht das Projekt aus folgenden Komponenten:
  1. Android Handy mit mindestens Android Version 7.
  2. ESP32 Microcontroller
  3. Diverse elektronische Bauteile, Kabel, Gehäuse
  4. Elektronik Schutzlack (wichtig!)
  5. Optional: 433 MHz Fernbedienung (Garagendrücker)
  6. Optional: Bluetooth Fernbedienung
  7. Optional: Kadenzsensor
  8. Optional: Pulsgurt
  9. Optional: bessere Steckverbindungen

Funktionsweise (kurz)

Der ESP32 (Microcontroller) baut eine Verbindung mit dem Motorcontroller auf. Dazu wird der ESP an den 5-Poligen grünen Stecker, an dem normalerweise das Display angeschlossen ist, angesteckt. Ein parallelbetrieb des Bafang-Displays und des Baba-Controllers ist nicht möglich. Der ESP32 stellt einen WLAN Accesspoint bereit. Mit dem Handy verbindet ihr auch mit dem ESP32 Accesspoint und startet meine App auf dem Handy. Die App verbindet sich mit dem Baba-Controller. Sämtliche Motordaten werden vom ESP32 empfangen und an die Handy-App weitergeleitet.

Schaltplan und Bauanleitung Baba-Controller

Teileliste 

1. ESP 32

Getestet mit ESP32-WROOM-32D. Grundsätzlich gehen auch andere ESP32-Modelle. Ihr müsst halt schauen ob euer ESP32 die benötigten PINs hat und es ggf. ausprobieren ob die Firmware mit eurem funktioniert.

 


2. Buzzer

Zum Ausgeben von Signaltönen



3. RX480R-4CH

Das ist ein 4-Kanal 433MHz Empfänger. Dieser empfängt die Signale der Fernbedienung (Garagendrücker).



4. BME280E

Das Modul wird für die Lufttemperatur, Luftdruck, Luftfeuchtigkeit und zur Bestimmung Höhenmeter anhand des Luftdrucks benutzt. Hinweis: aktuell (Ende 2021) ist der BME280 (quadratischer silberner Chip) sehr teuer. Anfang des Jahres hatte ich für 10 Stück noch 20€ inklusive Versand auch China bezahlt. Heute (29.12.2021) soll die gleiche Bestellung über 70€ kosten. Wenn ihr das Ding also nicht günstig bekommt, lasst es erst mal weg!







5. DS18B20 + 4.7kΩ Widerstand

Mit Hilfe des DS18B20 wird die Lufttemperatur bestimmt. Außerdem wird damit der BME280E initialisiert.





6. Spannungswandler

Der Spannungswandler versorgt unseren ESP32 mit der Batteriespannung des E-Bikes. Je nach Batterie sind das zwischen 30Volt bis 60Volt. Ich nutze eine 48Volt Batterie. Diese hat im vollgeladenen Zustand 54,75 Volt. Sollte eure Batterie mehr Volt liefern, müsst ihr einen anderen Spannungswandler nutzen der dazu passt. Ich nutze diesen hier: LM2596 DC DC Step Down Converter



7. Gehäuse

Ich nutze ein kleines fertiges ABS Kunststoffgehäuse und packe alles dort hinein. Die Größe 82x52x35mm ist ausreichend.



8. 5-poliger Stecker und optional einen anderen besseren Stecker

Der ESP wird mit dem 5-poligen Julet Stecker mit dem grünen Anschluss des Motors verbunden. Achtet darauf, wenn ihr euch das 5-polige Kabel besorgt, dass ihr die Pin-Belegung nicht verwechselt. Manchmal bekommt man auch Stecker deren Kabelfarben anders sind wie beim Original. Lasst euch also nicht von der Kabelfarbe irritieren. Nur weil ein Kabel rot ist muss es deshalb nicht der +-Pol sein. Messt jeden Pin nach!



9. Optionale Steckverbindungen

Ich empfehle den original 5-poligen Stecker mit einem anderen Kabel und Schraubstecker zu verbinden. Der original Julet Stecker ist nicht besonders robust. Müsst ihr diesen mehrfach trennen/stecken, geht dieser leicht kaputt. Zusätzlich habe ich bei mir den DS18B20 und den BME280 über solch einen Stecker angebunden, damit ich diesen Sensor auch abmachen und säubern kann. Dafür nutze ich einen weißen Stecker, wie unten auf den Fotos zu sehen ist.



Fernbedienung (Garagentüröffner)

Das Umschalten am Handy oder über eine Bluetooth Fernbedienung ist nicht komfortabel. Ich empfehle dazu eine 433 MHz Fernbedienung (Garagentüröffner) zu nutzen. Aber Vorsicht: der Garagendrücker benötigt einen eindeutigen Code. Wird der vom Werk vergebene Code benutzt ist dieser nicht eindeutig. Fährst du zusammen mit jemandem der auch einen BabaController hat und er hat ebenfalls die Werkseinstellungen auf seinem Garagendrücker schaltet ihr euch gegenseitig die Assistlevel um. Benutzt also unbedingt einen eigenen Code für alle 4 Tasten. Notfalls baue dir ein Programmiergerät dafür. Hier ein Beispiel für einen Drücker. Es gibt davon extrem viele. Dieser hier ist Wasserdicht und funktioniert sehr zuverlässig. Die Batterie hält bei mir seit 10 Monaten. Ich befestigen den Drücker einfach mit schwarzem Heißkleber zwischen Griff und Bremshebel. Wie der RX480E und die Fernbedienung gekoppelt werden, könnt ihr hier nachlesen.

Bluetooth Fernbedienung

Die Bluetooth Fernbedienung ist grundsätzlich reiner Luxus und kostet ca. 10€ (China). Diese wird mit dem Handy gekoppelt und wird dort quasi also normale Tastatur angemeldet. Meine App kann auf die Tasten < > + - und Play/Stopp reagieren. D. h. ihr könnt damit die Assist Level schalten und Sprachkommandos starten. So könnt ihr nach Drücken der Taste Play z. B. den Befehl "Ende" sprechen und der Trip wird beendet. Oder den Sprachbefehl "Markierung schöne Sitzgelegenheit hier" dann wird im GPX-File ein Waypoint gesetzt mit dem Text "schöne Sitzgelegenheit hier". Auch Bluetooth Fernbedienungen gibt es wie Sand am mehr. Die hier abgebildete hält bei mir schon viele Monate jedem Wetter stand.

Pulsgurt

Gibt es ja viele auf dem Markt. Getestet habe ich mit einem Gurt für ca. 10€ von Tchibo (Restekiste) und für ca. 18€ von Magene (in China). Der Gurt muss den Service 0x180D bieten, dann sollte er funktionieren. Wenn er trotzdem nicht geht, schreibt mir, dann kann ich da sicherlich was machen.



Kadenzsensor

Leider liefert der Bafang BBS Motor nicht direkt die Kadenzwerte - frage mich warum, ist aber so. Also braucht ihr dafür einen zusätzlichen Sensor. Ich nutze dazu mehrfach den Sensor von CYCPLUS (kostet ca. 10€/Stück in China). Der CYCPLUS funktioniert sehr gut, nur von der Befestigung mit einem Gummi (Beiliegend) muss ich abraten. Ich empfehle das Ding mit Kabelbinder festzumachen. Die Batterie mehrere Monate. Der Sensor muss den Service 0x1523 bieten, dann sollte er funktionieren. Wenn nicht, schreibt mir, vielleicht kann ich da was machen.


Elektronik Schutzlack

Der Spannungswandler, der Sensor BME280 und der RX480 müssen dringend mit Elektronik Schutzlack versehen werden um diese gegen Wasser/Dunst resistent zu machen. Meine erste Version des BabaControllers war innerhalb 2 Wochen defekt weil sich Kondenzwasser auf den Bauteilen abgesetzt hatte und diese oxidiert waren, obwohl ich das Gehäuse abgedichtet hatte. Also überzieht diese Bauteile nach dem Löten mit Schutzlack, sonst werden ihr garantiert nicht lange spaß an diesem Projekt haben.

Verkabelung

Hier ein Schaubild zur Übersicht. Achtet darauf alle Teile ordentlich zu verlöten. Anfangs nutze ich Steckverbindungen. Es hat sich jedoch gezeigt, dass diese nur wenige Geländefahrten überstehen. Deshalb die dringende Empfehlung alles verlöten und am besten über jede Lötstelle Schrumpfschlauch ziehen.

Bevor ihr den Spannungswandler an den ESP32 anlötet, legt zuerst die Batteriespannung an und stellt den Ausgang des Spannungswandlers auf 5V ein - sonst überlebt der ESP32 keine Sekunde!

Ihr müsst extrem vorsichtig vorgehen. Auch nur der kleinste Kurzschluss auf den Leitungen die vom Bafang Motor kommen und euer Motor Controller ist hin. Überprüft alle Kabel extrem sorgfältig. Arbeitet niemals am BabaController wenn ihr mit dem Bafang Motor verbunden seit.

Ich übernehme keinerlei Haftung für Schäden jeglicher Art!


Die Verbindungen im Detail:

ESP32 Pin 21 -> BME SDA
ESP32 Pin 22 -> BME SCL
ESP32 GND -> BME GND
ESP32 3v3 -> BME 3v3
ESP32 GND -> Buzzer - (Minus)
ESP32 Pin 2 -> Buzzer + (Plus)
ESP32 Pin 19 -> Bafang TX (grünes Kabel)
ESP32 Pin 23 -> Bafang RX (weißes Kabel)
ESP32 Pin 12 -> RX480 D0
ESP32 Pin 14 -> RX480 D1
ESP32 Pin 27 -> RX480 D2
ESP32 Pin 26 -> RX480 D3
ESP32 Pin 13 -> DS18B20 DQ (mittler Pin 2)
ESP32 Pin 13 -> 4,7kΩ Widerstand
ESP32 GND -> 4,7kΩ Widerstand
ESP32 3v3 -> DS18B20 VDD (rechter Pin 3)
ESP32 GND -> DS18B20 GND (linker Pin 1)
Bafang 5-poliger Julet Stecker -> braunes Kabel mit orangem Kabel verbinden.
Bafang 5-poliger Julet Stecker oranges Kabel (+48V) mit DC DC Step Down Konverter + (Plus) verbinden
Bafang 5-poliger Julet Stecker schwarzes Kabel (GND) mit DC DC Step Down Konverter - (GND) verbinden
Ausgangsspannung des DC DC Step Down Konvertes auf 5V einstellen!
ESP32 VIN (5V Eingang) mit DC DC Step Down Ausgang verbinden
ESP32 GND mit DC DC Step Down GND Ausgang verbinden.
Nicht GND des Bafang mit GND Ausgang des DC/DC Konverters verbinden!

Hier ein paar Fotos vom fertig zusammengebauten BabaController. Ihr könnt natürlich auch ein anderes Gehäuse nehmen, es muss halt nur alles reinpassen. Grundsätzlich könnt ihr auch einen kleineren ESP32 nehmen. Achtet halt darauf ob die von mir genutzten GPIO Pins verfügbar sind. Dann sollte es auch mit einem anderen ESP32 kein Problem geben.

Fertiger BabaController: weißes Kabel = BMP280 + DS18B20, schwarzes Kabel geht zum Bafang


Ich nutze Verpackungsschaumstoff zum den ESP darin etwas zu fixieren. Die Vibrationen auf einem Fahrrad sind nicht zu unterschätzen. Ihr müsst alles so befestigen, dass sich nichts los rüttelt oder durchscheuert

Zu sehen der ESP, vorne unten der RX480, rechts unten der Spannungswandler

Links der Spannungswandler, oben der RX480, beides mit Heißkleber fixiert.

Bekannte Probleme

Keine ... bis auf den BME280. Schaut euch mal folgende 2 Foto an ...

Das winzige silberne Teil mit einem kleinen Loch darin ist der BMP280 Sensor


Verdreckter BMP280 Sensor

Der BME280 muss, damit er richtig messen kann, auch quasi an der Luft hängen. Leider führt das aber dazu, dass er auch jede Menge Dreck abbekommt, wenn man durch das Gelände fährt. Ihr seht auf dem Foto diesen dicken Klumpen Matsch, der klebt genau auf dem Sensorchip. Resultat: die Messergebnisse sind alle vollkommen daneben. Der Luftdruck, Luftfeuchtigkeit und Temperatur werden nicht mehr richtig gemessen. Weil der Luftdruck nicht richtig ist, ist dann natürlich auch die Höhenmeterberechnung vollkommen daneben. Leider habe ich dafür noch nicht die optimale Lösung gefunden. Falls ihr Vorschläge habt, nur her damit!


Kommentare

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog