Hallo Freunde,
ich bin gerade dabei eine Multifunktionsanzeige fürs Auto herzustellen...
Sie folgende Funktionen erfüllen:
- Öltemperatur anzeigen
- Öldruck anzeigen
- Ladelufttemperatur anzeigen
- Ladedruck anzeigen
- Lambdawert anzeigen
- Abgastemperatur anzeigen
- Wassertemperatur anzeigen
- Innenraumtemperatur anzeigen
- Boardspannung anzeigen.
Außerdem (hier liegt der Knackpunkt) möchte ich:
Geschwindigkeit anzeigen UND Verbrauch errechnen. ----- LIKE MPGUINO
Alle anderen Funktionen sind Betriebsbereit, nur hier klemmts.
Mit Geschwindigkeit habe ich weniger das Problem. Hierfür sehe ich mehrere Möglichkeiten - Bloß die Umsetzung klappt nicht so richtig.
Als Signalquelle habe ich das VSS Signal, welches ein Rechtecksignal liefert - aus der Frequenz kann man die Geschwindigkeit ausrechnen bzw. aus Anzahl der Impulse die Entfernung.
So entsprechen bei meinem Fahrzeug 5083 Impulse ~ 1Km
was wiederrum bedeutet dass bei einer Geschwindigkeit von 250Km/h das VSS Signal eine Frequenz von 352,99Hz hat.
bei 200km/h - 282,39Hz
bei 150km/h - 211,79Hz
bei 100km/h - 141,94Hz
usw.
(werde die These mitm Oszi prüfen.)
daraus ergibt sich
f * 0,70824 = V
oder
1/T * 0,70824 = V
Die Geschwindigkeitsanzeige lässt sich somit irgendwie mit pulseIn() und millis() realisieren. Wie genau ist mir noch unklar.
Das größere Problem sehe ich in der Messung der Einspritzzeiten.
Um den Verbrauch möglichst genau zu Berechnen muss die Dauer des Einspritzzyklen aufgezeichnet werden.
(Werde später die Einspritzzeiten einer Tankfüllung messen und kann somit den Kraftstoffverbrauch berechen -> Zeit * x = Liter )
-
Theoretisch mit pulseIn() möglich, nur wenn die Funktion in void loop integriert ist kann man nicht gewährleisten dass genau zu der Einspritzzeit das Program an der Stelle ausgeführt wird. - oder habe ich einen Denkfehler?
-
Theoretisch möglich wäre auch die benutzung von attachInterrupt() - nur gibts hier auch ein Problem. Bei 8000U/min werden ca. 70 Einspritzzyklen/Sec durchgeführt. Der Dutycycle beträgt hierbei bis zu 85%.
Reicht die verbleibende Zeit um das restliche Programm auszuführen?
Mein anderes Problem ist, wenn ich das Arduino ausschalte möchte ich dass die Daten gespeichert bleiben(Zumindest die Einspritzzeiten) Wie und wohin speichere ich sie? externes i2c eeprom?
Ich erwäge momentan ob ich für die Aufzeichnung der Einspritzzeiten nicht von einem separaten Arduino ausführen lasse, der außerdem nichts anderes macht und sie dann über i2c an das "Hauptarduino" übertrage.
Vieles ist mir gerade beim schreiben und Biertrinken klar geworden ganz schlüssig bzgl. der Ausführung bin ich dennoch nicht.
Was haltet ihr davon? Habt ihr Vorschläge oder Anregungen?
Beste Grüße und vielen Dank im Vorraus.