UPDATE: Ein Nachfolgerprojekt ist gerade am Entstehen. Diesmal mit Schaltplänen und noch größerem Umfang. Es findet auch ein Wechsel vom Arduino auf den NodeMcu statt (Code bleibt weiterhin Arduino).
Nachfolgeprojekt auf GIT
Vor langer langer Zeit habe ich hier mal mein Projekt vorgestellt. Es geht darum am Motorrad die Kette automatisiert wegstreckenabhängig zu ölen und die Heizgriffe automatisch abhängig von der Außentemperatur zu regeln.
Die aktuellen Zustände sollen an einem Display ablesbar sein und irgendwie muss man das Ding dann auch noch Parametrieren.
Meine vorherige Lösung war ein Arduino UNO mit einem DOGM163 (also Textlcd) und einem DS18B20 für die Temperaturmessung. Dazu zwei Logiklevel Mosfets zur Ansteuerung der Griffe und der Pumpe.
Zwei Taster am Display dienten dazu per Menüführung die Einstellungen zu machen.
Das Ergebnis war jetzt einige Jahre (ich glaube 4) in meinem Motorrad verbaut und hat ordentlich funktioniert.
Warum jetzt nochmal von vorn?
- Das Display ist ungeschickt. Die Ziffern sind zu klein und die Informationen in reiner Textform nicht immer sinnvoll. Außerdem geht mir so langsam die Oberfläche kaputt und es wird schlecht lesbar. Das will ich jetzt anders machen.
- Die Taster am Display sind sinnlos. Das braucht man nicht und die Einstellerei geht mit anderen Mitteln deutlich besser.
- Es sind einige Funktionen integriert, die nicht wirklich Sinn machen (z.B. progressive Kettenölung)
- Es fehlen Funktionen, die Sinn machen würden (z.B. verzögerte Kettenölung abhängig von der Geschwindigkeit)
-
- und das ist der Hauptgrund - will ich das Projekt diesmal so realisieren, dass es auch einfach nachgebaut werden kann.
Features:
- Automatische Ölung der Kette durch Pumpe gemäß einstellbarer Wegstrecke
- Verzögernug der Ölung, bis das passende Geschwindigkeitsfenster erreicht ist. (je schneller man fährt, desto schneller ist die Kette und umso mehr wird vom frischen Öl sofort abgeschleudert. Daher versuche ich einen Zeitpunkt zum ölen zu finden, wenn die Kette langsam genug ist. Natürlich wird nach einer gewissen Zeit unabhänig von der Geschwindigkeit geölt)
- Automatische Aktivierung und Regelung der Heizgriffe abhängig von der Außentemperatur. Die Regelung erfolgt linear.
- Anzeige der Zustandsinformationen in einem Display (Außentemperatur, anliegende Heizleistung, aktuelle Geschwindigkeit, aktuelle Wegstrecke und Anzeige des Notlaufmodus, wenn das Tachosignal fehlt)
- Einstellung der Parameter über Bluetooth (Android App, aber auch über andere serielle Übertragung möglich)
Nötige Hardware:
- Arduino Nano (china clone)
- DS18B20
- Dog s102
- HC-06 Bluetooth Adapter
- 2x IRF 3708 (als Treiber)
- 4,7k Widerstand (Pullup für den Dallas)
- BAT42 (Tachosignal)
- 1n Kondensator (ebenfalls Tacho)
Spannungsschutz
- Zener Diode 5W, 15V
- 47mü Drossel
- 10mü Kondensator
Dazu noch bischen Kabelkram zum verdrahten.
Preislich sollte sich das Ganze in Grenzen halten.
Arduino ca. 8€, DS als wasserdicht 4€, das OLED 10-11€, Bluetooth 7-8€. Der Rest ist Kleinkrust.
Man sollte also mit knapp über 35€ für die Steuerung ansich hinkommen. Fehlt halt dann noch Gehäusekram (Display und Controller) und dann halt Griffe sowie Pumpe.
Warum hab ich mich für das OLED entschieden?
Ganz einfach: Es gibt keine anderen kleine I2C fähigen Displays. Ich hab noch ein DOGS102 zur Hand. Das muss man aber 1. beschalten (3 Kondensatoren), 2. Steuersignale wandeln (es will 3,3V) und 3. mit ganzen 7 Adern anbinden anstatt mit nur 4. Die ganze Kabelarbeit ist sowieso schon fummelig genug.
Außerdem ist 128x64 denke ich ein ganz gängiges format (findet man viele Displays), so dass man ohne große Codeänderung auch ein anderes Display verwenden könnte (das Layout würde passen).
Im Endeffekt soll man den Controller modular verwenden können. Wer kein Display will/braucht, schließt halt einfach keins an. Wer nur die Heizung will, lässt halt den Öler weg, wer nur ölen will, lässt halt die Heizung weg.
Updates und Änderungen sind jederzeit einfach zu machen, sofern man den Arduino nicht festlötet. Abziehen, an den PC hängen, hochladen und fertig.
Leider hab ich gestern mein Display geschrottet (ohne dritte Hand an so nem Miniding löten ist halt einfach nix) und jetzt muss ich warten, bis das Neue da ist. Daher gibts jetzt auch noch keine Bilder, wie die Sache nachher aussehen wird. Das kommt dann ein wenig später.
Hier ein paar Bilderchen
Fliegender Aufbau der Schaltung mit Potis zum simulieren der Temperatur und der Geschwindigkeit
So sieht das Display im Gehäuse aus, wenn es noch nicht vergossen ist
Und hier das fertig vergossene Display. Hat leider nicht 100%ig geklappt, ich hätte die Kaltglasur erst noch andicken lassen müssen. So war sie zu dünn und es ist ein wenig unten durchgelaufen. Dadurch ist sie eingesackt.
Die Beleuchtung ist übrigens weiss, ich hab sie aber per Widerstand gedimmt und dann wird sie leicht bläulich. Die Kamera macht daraus ein kräftiges Blau es ist aber in der Realität deutlich weniger blau, als es hier aussieht
Kurz zum Inhalt der Anzeige:
Ganz groß die Außentemperatur. Das ist für mich auf Dauer die interessanteste Information. Unten die Geschwindigkeit und der zurückgelegte Weg bis zur nächsten Ölung als Balken (voller Balken = Ölen).
Rechts dann die aktuelle Einstellung der Griffheizung als Pfeil auf der Skala sowie unten als Zahl (wenn sie Aus ist, dann steht da auch einfach "aus").
Oben oder links hätte ich noch Platz für Symbole, falls ich da was bräuchte. Aktuell seh ich da keinen Bedarf. Allerdings könnte man noch einen Regensensor integrieren, dann kann man da anzeigen, wenn Regen erkannt wurde und der Modus aktiv ist. Oder z.B. den Füllstand vom Öltank anzeigen. Das müsste man dann aber erstmal anlernen und es würde dann halt bei jedem Pumpvorgang ins EEPROM geschrieben (es sei denn ich mach ne Zündungserkennung mit Nachlauf, so dass erst beim Abstellen der Zündung gespeichert wird - wäre aber zu kompliziert).
Die neue Steuerung ist jetzt verbaut. Nach dem Einschalten zeigt sie für 30sec die aktuelle Einstellung an:
Danach wechselt sie in den Betriebsmodus. Leider ist der Kontrast des Displays nicht so besonders. Wenn die Sonne richtig scheint, dann erkennt man nur sehr schwer was. Das war mir aber auch vorher schon klar.
Und hier dann der "Rest" unter der Sitzbank. Der Arduino passt samt der Beschaltung (2 MosFets, Diode, Kondensator, OneWire Widerstand, Bluetooth Dongle und dem Anschluss fürs Display in das relativ kleine Gehäuse - die alte Variante mit Arduino Uno war deutlich größer). Pumpe und Öltank sind in der Seitenverkleidung versteckt, Strom kommt über ein Relais samt eigener Sicherung. Der Temperatursensor ist vorne unter der Lufthutze versteckt (vor Sonne geschützt und bekommt trotzdem gut Luft).
Was hier noch fehlt ist der Netzfilter. Der kann sogar klein ausfallen, da er keine Leistung abkönnen muss. Die Mosfets schalten ja auf Masse durch und Pumpe sowie Heizgriffe hängen direkt an der Versorgung (da muss man ja nix filtern).
Was Vibrationen angeht: Das Gehäuse ist nochmal in Schaumstoff eingepackt. Ich habs nur rausgeholt, damit man sieht, wie ich das gelöst habe.
Das Display ist auch ein anderes. Zuvor hatte ich 0,96", das neue ist jetzt 1,3" und das ist deutlich angenehmer zu lesen. Leider hats beim Bearbeiten des Gehäuses diesmal nicht so gut geklappt und ich hab Macken reingemacht. Die Glasur hab ich vorher ein wenig anziehen lassen, war aber nicht lang genug, es ist wieder ein wenig eingesackt. Also nächstesmal noch länger warten.
Das OLED Display mit I2C hatte leider Probleme mit der Datenübertragung. Es hat sich öfter mal aufgehängt und nicht mehr aktualisert. Bei der Fehlersuche hab ich dann leider alles gegrillt (aus Dummheit falsch angeschlossen).
Ergo alles nochmal neu mit dem noch vorhandenen 2. Arduino aufgebaut und das andere Display verwendet (das DOGS102).
Hier gibts die Sourcen (für Eclipse IDE) samt kurzer readme:
Sources