Ich hab eine kleines Elektronikbastelprojekt gestartet, aber erstmal der Spoiler für die Reichsbedenkenträger:
Bekanntermassen hat die MZ ja keinen Tageskilometerzähler, was mich schon seit unendlich langer Zeit nervt. Nun habe ich einen Tacho mit kaputtem Kilometerzähler rumliegen und vor zwei Wochen hat's mich dann gepackt und ich hab das Ding mal aufgebördelt. Der Kilometerzähler ist mit zwei Plastikschneckenantrieben direkt an die Tachowelle gekoppelt. Irgendwie war die Zähleinheit blockiert und die Plastikschneckenräder hats rundgeknabbert. Die MZ hat aber schon einen Ersatztacho, und eine Reparatur ist weder nötig noch wirtschaftlich, also kann man mit dem defekten Teil auch mal einen Hack wagen.
Da ich seit vielen Jahren immer mal mit Mikrocontrollern rumspiele und auch ein bischen programmieren kann, dachte ich mir, wenn manm einen Sensor an die welle baut, kann man mit ein paar Zeilen Code einen Kilometerzähler in einen Arduino bauen.
Gesagt - Getan.
Also bischen im Internet gelesen und zu folgender Lösung gekommen:
Eine Infrarotdiode sendet einen konstanten Lichtpunkt auf den Aluminiumbecher. Eine zweite Infrarotdiode empfängt das Licht und schaltet durch, wenn welches da ist. Die 0.8 Volt Spannungsabfall verstärkt man mit einem Operationsverstärker zu einer 0V-5V Flanke und zählt die elektronisch mit.
Damit ein sauberes Rechtecksignal generiert wird, pinselt man den Aluminiumbecher schwarz/weiss an. Ich hab einfach Klebeband rangepappt.
Ein paar Versuche mit kleinen Lüftern und Ventilatoren ergeben, dass man Problemlos 10000 Flanken pro Minute erkennt (zweiflügeliger 5000 rpm Handventilator). Auf die MZ und den K-Wert 1 übertragen sind das 10000*60/1000 = 600 km/h, da sollte für eine 150er wohl ausreichend Luft nach oben sein

Meine Bauelementesammlung hatte noch ein paar 7-Segmentanzeigen von ganz kleiner Bauart, Gehäuse 9mm x 13mm, davon gehen mit ein wenig Feilen 5 Stück nebeneinander unter das Anzeigeblatt. Also alle Mechanik gut zugeklebt, damit keine Metallspäne reinfallen (Magnet!) und Platz gemacht. Anzeige passt super rein und sieht auch annehmbar aus.
Im Gehäuse ist zwar viel Luft, aber auf einen Mikrocontroller mit 40 I/O Pins (7 Segmente und Punkt mal 5 Anzeigen) samt 40 Vorwiderständen hatte ich dann auch keine Lust. Habe also die gleichen Segmente von alle. Anzeigen zusammengelötet und einen Bus draus gemacht. Dann braucht man nur noch 8+5 statt 8*5 I/O Pins, und das ist wieder kein Problem. Nachteil ist, das man dann im Zeitmultiplesbetrieb ansteuern muss, und die Lichtausbeute dann kleiner wird. Kann man dafür kompensieren, indem man eine höhere Spannung verwendet. Da spart man sich direkt noch die Vorwiderstände, also eine Win-Win-Situation

Fehlt noch eine Software zum Zählen und Ansteuern der Anzeige. Auf dem Gebiet fühle ich mich natürlich wohl und hab mich ausgetobt. Neben dem Anzeigen des Kilometerstandes (einfach die Summe aller Pulse geteilt durch 1000) und dem Tankzähler (Different von Gesamtpulse zu Pulsen seit Reset geteilt durch 1000) habe ich noch eine Digitaltacho mit reinprogrammiert. Das Arduinoboard hat einen 16 MHz Quartz und damit einen ziemlich genauen Zeitmesser. Also einenMittelwert aus 3 Messungen im Abstand von 100 ms gebildet (das sind dann m/s) und mit 3.6 multiplizieren. Fertig.
Die meisten Codezeilen sind natürlich die Ansteuerung für die Anzeige und für die Statemachine, mit der man sich durch die Modi tastet (Total, Tank, Trip, Speed) und inklusive initiales Einstellen des Zählers und dem Rücksetzen der kleinen Zähler.
Zusammengebaut schauts ganz OK aus (da ist jetzt nur das Display drin und keinen Elektronik.)
Letztes "Schmankerl" ist die Art, wie der Kilometerstand beim Ausschalten gesichert wird. Der Impulszähler selber wird ja nur im Arbeitsspeicher geführt, wenn der Strom weg ist, muss man das ja irgendwo sichern. Dafür hat der Mikrocontroller einen EEPROM Bereich, der auch beim Ausschalten erhalten bleibt. Die Zellen kann man auslesen, wenn der Strom wieder da ist und fertig ist das. Dummerweise kann man den EEPROM nur 100000 mal Beschreiben, dann ist er kaputt (Naja, der gehtschon noch, aber Atmel garantiert nicht mehr. das der Inhalt stabil ist). Wenn man also bei jedem Impuls schreibt, dann ist der EEPROM nach 100 Kilometern am Ende. (100000/1000). Das ist natürlich zuwenig. Klar, man könnte jetzt einfach nur alle 10, 100 oder 1000 Pulse schreiben, aber es gibt noch eine viel elegantere Methode, und die geht so:
Beim Spannungswandler baut man einen Pufferkondensator hinter der Gleichrichterdiode ein, 3300 uF oder 4700 uF, der den Mikrocontroller bei Spannungsausfall einfach noch ein paar Millisekunden weiterbetreiben kann. Vor die Gleichrichterdiode macht man einen Spannungsteiler und eine Zenerdiode zum Schutz und führt dieses Signal noch an den Mikrocontroller. Wenn jetzt die Süannung weg ist, kann man das im Controller sehen (Pegel am Powerloss-Pin geht weg) und weiss, dass in 100 ms Schicht im Schacht ist. Das Schreiben in den EEPROM dauert 3.3 Millisekunden, wenn man also sofort alle Verbraucher ausknipst, hat man komfortabel Zeit, noch einn paar Bytes wegzusichern.
Um sicher zu gehen, das das alles funktioniert, schaut man aber nicht zyklisch auf das fallende Signal sonder man legt das Powerloss-Signal direkt an einen Interrupteingang und triggert die fallende Flanke, dann wird das in jedem Falle mit Priorität aufgerufen, egal, was gerade ausgeführt wird.
Dann wird der EEPROM nur noch geschrieben, wenn man das Moped ausmacht. Wenn man jeden Tag konsequent 10 Mal jeden Tag an und ausschaltet, dann reichen die 100000 Zyklen für 100000/3650=27,3 Jahre.
Momentan sind Sensor und Display am Instrument verbaut, Taster, Spannungswandler, Pufferkondensator und Mikrocontroller sind aber noch am Breadboard. Wenn ich das alles auf Platine und im Becher habe, kann ich mal noch ein Update mit Bildern posten
Zum Schluss gibts noch einen kleinen Film von Sensor und Display mit Papier.
Sensortest (youtube)
rene