Da doch einige Leut’s Probleme mit dem Arduino bzw. mit dem flashen des selbigen haben, hier mal ein „Lehrvideo“ vom Download bis zur ersten Nadelbewegung….. weitere Videos folgen
Ich hab mal ein wenig mit der canbus-card für den Arduino Uno experimentiert und die ersten Test sehen nicht schlecht aus.
Das Tacho des RX8 eignet sich eigentlich optimal. Es ist günstig, geht bis 10K Rpm und 300Kmh.
Update: 27.02.2017
Folgende Funktionen lassen sich über canbus steuern:
Direkt über den Arduino können dann noch Blinker und das Türwarnlicht geschaltet werden.
Status: Beta V.2.0.0.0 (29.01.2017)
Kurzanleitung:
Generell hat sich an der Bedienung zur alten Version nichts geändert.
Leider musste ich aber den internen Programmablauf etwas ändern. Dadurch ergibt sich auch eine Änderung am Arduinosketch. Dies betrifft also „nur“ die Benutzer vor V.2.0.0.0
V2 ist kein update, sondern eine eigenständige Version welche nur entpackt werden muss.
Benutzer der V1.x.x.x :
-im Debug der alten V1.x.x.x alte Werte auslesen und notieren
-neue V.2 in einem anderen Verzeichnis entpacken
-das mitgelieferte „BasicV2.ino“ auf dem Arduino flashen
-V2. starten verbinden und „zurücksetzen“ wählen
-die zuvor notierten Werte wieder konfigurieren
Output:
Der übergebene Outputstring kann im Tab „Dash“ für jedes Game angepasst werden. Nach und nach werden weitere „Outputs“ dazu kommen. Der String ist so konfiguriert das die ersten 5 Werte aus jedem Spiel immer gleich in Länge und Reihenfolge sind. Selbige werden immer ausgegeben.
Alle anderen Werte sind optional, unterschiedlich und können in den entsprecheneden readme’s nachgelesen werden.
Syntax:
Kmh Rpm Fuel Temp Gear
SSxxx;RRxxxx;FFxxx;TTxxx;GGxx; (x steht immer für eine Ziffer mit führender Null)
Beispiel:
183 Kmh
4560 rpm
32 l Rest im Tank
122 Grad
5 Gang
Output:
SS183;RR4560;FF032;TT122;GG05;
Besonderheiten der zusätzlichen Outputs im Tab „Dash“:
Insgesammt gibt es 16 zusätzliche Ausgaben und nochmals 6 Gruppen mit möglichen Werten.
Gruppen beinhalten mehrere Werte. Zum Beispiel gibt es in Project Cars als erste Gruppe eine Wertfolge für „temptyre(4)“. In dieser Gruppe befinden sich die Werte für die Reifentemperatur aller 4 Reifen in der Reihenfolge VL, VR, HL, HR jeweils mit 3 Stellen die mit den Zeichen „~Q“ beginnen.
Als Beispiel: ~Q095097096095;
„~Q“ leitet den Wert der ersten Gruppe für 4 einzelne Werte ein.
Die Syntax der ersten 16 Einzelwerte gehen von „~A“ bis „~P“.
Die der 6 folgenden Gruppen von „~Q“ bis „~V“. (diese müssen im Arduinosketch aufgelöst werden)
Im Programmverzeichniss under „Arduinosketche/Enhanced V2“ befinden sich kleine einfache Sketchteile die sich schön in die Basis der BasicV2.ino intrgrieren lassen.
Download:
Bitte habt verständniss das ich kein support per Telefon oder per email gebe. Schreibt eure Fragen etc. bitte hier in die Kommentare.
Please understand that I do not give support by telephone or by email. Please write your questions, etc. here in the comments.
Da ich unglaublich viele Anfragen aus dem Aus-Inland bekommen habe ob ich nicht mal ein kleines Tutorial für ein Golftacho machen kann, will ich das hier mal umsetzten.
Aber erstmal ein großes Danke an Daniel, welcher in Österreich wohnt und mir eine großzügige Spende sowie auch 2 x Golf 3 Tachos kostenlos zur verfügung gestellt hat.
Prinzipiell ist der Aufbau ähnlich wie schon bei dem BMW e36 Tacho. Die Kmh/h-Anzeige wird mit auch mit 5v angesteuert.
Das besondere beim VW-Tacho ist eben das das Rpm-Signal mit 12v angesteuert wird. Fuel und Temp, genau wie bei BMW über Widerstandsveränderungen.
Hier möchte ich anmerken, dass VW bei dem Golf 3 gleich 6 verschiedene Tachos verbaut hat. Ich habe hier ein VDO und ein TRW die Beide bei 0 Kmh anfangen. Wer mag, kann hier ein wenig nachlesen: Tachoumbau.com
Leider musste ich für eine saubere Tachojustierung das Tacho öffnen. Der Grund dafür ist das ich mit der Feinjustierung vom RPM nicht unter 1.000 gekommen bin. Ein ähnliches Problem gibt es auch beim e36 Tacho. Dort gehts nicht unter 750rpm. In Rennspiele vielleicht nicht das Problem aber einige (viele) bauen einen LKW-Simulatur. Da sollte dann auch die Anzeige unter 1000 funktionieren. Dazu aber später mehr.
Als erstes also das Tacho öffnen, so dass wir an die Nadeln drann kommen.
Jetzt gehts an die Verkabelung. (Das flashen des Arduinos sollte schon fertig sein)
Wenn alles richtig verkabelt ist machen wir eine Vorabkonfigurierung im „rcc“ für das Tacho.
(im Tab „Hardware“). Das Tacho noch NICHT mit Strom versorgen.
An diesem Punkt sollte das Rpm etwa 1000 auf dem Tacho anzeigen. Ihr könnt jetzt noch versuchen weiter den kleinsten möglichen Wert zu ermitteln in dem ihr wieder zurück auf „adj“ klickt und mit dem Schieberegler versucht die Nadel soweit wie möglich richtung 0 zu bringen.
Bei mir war „min=31“ der beste Wert. Alles darunter fing die Nadel an zu zappeln.
Nun steht die Nadel bei 1000 und nicht da wo sie hin soll.
Ich denke das der Arduino nicht mit der Hz-Zahl klar kommt was das Tacho will. Also hab ich ein wenig getrickst.
Sollte jemand eine bessere Lösung haben, kann er sie gerne unten in die Kommentare schreiben.
Zu diesem Zeitpunkt trennt ihr jetzt das Tacho vom Strom. (Die Nadel bleibt bei ca. 1000 stehen)
Hebelt die Nadel vorsichtig ab und bringt sie wieder in der Nullposition an.
Der Ardunino schafft zwar nicht unter dem dem Wert aber sehr wohl über den Wert. Heisst, er schafft die Nadel auch weit über die Anzeige raus. Und genau das machen wir uns zu nutze.
Jetzt noch nach oben beschriebene Anleitung den oberen rpm-Wert mit „max“ einjustieren
Bei „speed“ ebenso verfahren. Niedrigsten und höchsten Wert mittels Schieberegler einstellen.
Es ist KEINE Nadeländerung nötig.
Bei allen Speichervorgängen im rcc muss der „Testmodus“ aktiviert sein, sonst funktioniert es nicht.
Viel Spaß beim nachbauen.
Um noch mehr „feeling“ in den Simulator zu bringen habe ich mich entschlossen eine Unterstützung für Bodyshaker einzubauen.
Die ersten Tests mit Assetto Corsa sind gut gelaufen.
Im rcc werden NICHT die Sounds aus dem Game sondern die physikalichen Daten des Fahrzeuges zur Erzeugung der Vibrationen genutzt.
Zum testen hab ich eine externe USB-Soundkarte, einen Mini-Verstärker und ein paar Bodyshaker genommen.
Da doch einige Anfragen zur Ansteuerung eines TM1638 mit dem rcc gekommen sind, habe ich hier mal ein einfaches Beispiel für eine Drehzahlanzeige gemacht.
//https://github.com/rjbatista/tm1638-library
#include
// define a module on data (DIO) pin 8, clock (CLK) pin 9
// and strobe (STB0)pin 10
TM1638 module(8, 9, 10);
String ver = "2.0.0.0";
const int nChar = 30; // size of char
String inString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
int vRpm;
void setup()
{
Serial.begin(38400);
}
void readdata() {
if (stringComplete) {
if (inString.substring(0, 2) == "RR") {
vRpm = inString.substring(2, 6).toInt();
module.setDisplayToDecNumber(vRpm * 10,0,false);
}
inString = "";
stringComplete = false;
}
}
void serialReadEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inString += inChar;
if (inChar == ';') {
stringComplete = true;
}
}
}
void loop() {
serialReadEvent();
readdata();
}