Arduino am Motorrad. Ganganzeige nachrüsten.

Ich habe mir für mein Moped ein neuen Tacho gekauft.

https://www.youtube.com/watch?v=SBiAmA4_-QE

Hier mal mein Testaufbau.

Am Tacho gibt es eine Ganganzeige. 1-6 Jeder Gang hat einen eigenen Eingang. Ich würde gerne mittels 2 Reedkontakten diese Ganganzeige in Betrieb nehmen.

Ist es richtig, das ich dafür npn Transistoren brauche, weil auf jeden Eingang Masse gelegt wird? Und müsste ich dann die Masse vom Arduino und dem Motorrad dann verbinden?

Ich habe mehrere von diesen hier noch. http://www.ebay.de/itm/DC-DC-Automatic-Step-up-down-Module-3-3v-9V-5v-12v-24v-19V-DC-Voltage-Regulator-/271981637070?hash=item3f535e6dce:g:TrUAAOSwQPlV8JnI

Könnte ich diese als Spannungsversorgung benutzen?

Suzuki? Dann ist der Leerlaufschalter evtl. schon für den Anschluss deiner Ganganzeige vorbereitet

Wo bekommt man denn so einen Tester her? Oder hast Du den selbst gebaut? :)

Natürlich hat das Motorrad einen Leerlaufschalter. Dieser gibt ein Massesignal weiter.

Ich glaube, dass du mich nicht verstanden hast....

Ich interpretiere deine Aussage mal so: "Es ist keine Suzuki."

Nein es ist eine Yamaha. Aber ich habe nicht verstanden was du mir sagen wolltest. Das Motorrad bietet keine Möglichkeit einen Gang abzugreifen.

Dann müsstest Du das machen wie die Nachrüst-Ganganzeigen:

a) Berechnung des Verhältnisses aus Geschwindigkeit und Drehzahl b) Wert aus der ECU per Diagnose Schnittstelle auslesen (die a) selbst berechnet)

Wobei Letzteres vermutlich den aufwändigeren Weg darstellt. Dann aber noch ein paar mehr Möglichkeiten bietet.

Aber ich habe nicht verstanden was du mir sagen wolltest.

Ich wollte dir sagen, dass das kein Hexenwerk ist! Denn Suzuki hat das für viele Modelle serienmäßg so vorbereitet. Siehe ebay: 301353510479

Bei Yamaha, da gebe ich dir recht, ist die Luft dünner. Aber trotzdem, mit Bohrmaschine, Kleber und Kupferstäbchen nachrüstbar. Wenn denn ein solcher Leerlaufschalter, oder ein ähnlicher, bei dir montiert ist. Ebay: 161747241469

Alternativ, natürlich die schon genannte Tachoimpuls/Drehzahl Rechnung, und die (hässlichen) Schalter am Schalthebel. z.B. 1 Magnet und 2 Hallsensoren.

Ja leider habe ich bei mir am Getriebe keine Abnahmemöglichkeit. km/h /rpm ist mir persönlich zu overpowered.

Ich dachte an eine einfache Ganganzeige, halt ohne 7 Segment, sondern nur so das die Ausgänge gesetzt werden.

edit:

Jetzt verstehe ich das was du mit dem leerlaufschalter meinst. Bei mir ist das nur ein Taster. Ist nicht so einer wie du meintest.

Ja leider habe ich bei mir am Getriebe keine Abnahmemöglichkeit.

Wenn du das sagst....

km/h /rpm ist mir persönlich zu overpowered.

Damit erreichst du dein Ziel.

Ich dachte an eine einfache Ganganzeige, halt ohne 7 Segment, sondern nur so das die Ausgänge gesetzt werden.

Ich weiß.... Für deinen Tacho...

Nebenbei: Ich schraube quasi täglich an Yamahas... Meist olle XJ und XS. Wenn du verraten würdest, welches Modell du fährst, dann könnte ich dir evt. ganz evtl. etwas besser helfen.

Es ist eine Yamaha TZR 50 mit Minarelli AM6 Motor.

Ja, da sehe ich auch keine Chance, an die Schaltwelle ran zu kommen, ohne große Löcher in den Motor zu hauen....

Ich habe mal einen gefunden Code bisschen umgewandelt. Bin noch auf der Arbeit, kann das klappen?

byte gang = 7;
void setup() {  
  // Define Pins  
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
 
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  

}
void loop(){
  if(gang == 7){
     //set LED values
     if(digitalRead(10)==LOW){
        mudanca=0;
     }
  }else{
     if(digitalRead(11)==LOW){
        if(gang = 2;  //shift up from neutral to 2nd
        }else if(gang == 1){
           //do nothing check for pin 10 later
        }else if(gang<6){
           gang=gang + 1; //shift up from any other gear
        }
     }else if(digitalRead(12)==LOW){
        if(gang ==2){
           //do nothing check for pin 10 later
        }else if(gang == 0){
           gang = 1; //shift down from neutral into 1st
        }else if(gang>1){
           gang=gang-1;
        }else if(gang == 1){
                                   //do nothing check for pin 10 later
                          }
     }else if(digitalRead(10)==LOW && (gang == 2 || gang == 1)){
        gang = 0;
     }
     updateLED();
     delay(100);
  }
}
void updateLED(){
     switch(gang){
     case 0:
         
         break;
     case 1:
          digitalWrite(2, HIGH);
         
          break;
     case 2:
          
         digitalWrite(3, HIGH);
         
          break;
     case 3:
          
          digitalWrite(4, HIGH);
          
          break;
     case 4:
         
          digitalWrite(5, HIGH);
         
          break;
     case 5:
         ;
          digitalWrite(6, HIGH);
         
          break;
     case 6:
          
          digitalWrite(7, HIGH);
         
          break;
     case 7:
          break;
     }
}

kann das klappen

Vermutlich nicht.

if(gang = 2; //shift up from neutral to 2nd

so falsch, dass man kaum raten kann, was du eigentlich willst :wink:

if(digitalRead(11)==LOW){

if (gang < 6) {
gang=gang + 1; //shift up from any other gear
}
}

wenn dies nicht falsch verkürzt ist, fehlt das Abfragen auf Änderung, so dass du in wenigen loop Durchläufen sofort im Zustand (gang==6) bist.

usw.

Ich hatte den Code aus dem englischen Bereich übernommen. Dort hatte jemand ähnliches vor. Ich habe heute auch erst Zeit mich man dran zusetzen.

http://forum.arduino.cc/index.php?topic=151011.0