Hi, ich möchte ein neues Projekt beginnen und möchte im Vorfeld gern ein paar Sachen geklärt haben.
An mein Motorrad möchte ich ein Schaltblitz bauen, dazu möchte ich das original Kabel vom Drehzahlmesser nutzen. Das Signal ist Digital(zündung) und vermutlich ein rechtecksignal. Im Netz habe ich für mein Model schon so etwas gefunden, nur mit Transitorschaltung( wegen 12V Bord). Ich würde gern einen Optokopler nehmen ( 817 ) und davon aus in den Arduino. Ich würde gern wissen, wie ich die Drehzahl ausrechnen muss, es wird bestimmt nur HIGH und LOW geben. In welchem Zeit abständen wird gemessen und umgerechnet? Sollte ich einen bestimmten Pin verwenden (Interrupt)? Ich würde gern bei einer bestimmt Drehzahl eine LED blinken lassen. Kann mir jemand helfen? 
Das ganze wird mit einem Spannungsregler 78xxx mit 5V versorgt.
MfG Marco
Es wird wohl ein Rechteckimpuls sein.
Wie du schon vorschlägst via Optokoppler an einen ext. Interruptpin des Arduino legen und zählen.
Z.b in einen Zeitraum von einer Sekunde, dann auf eine Minute hochrechnen. Dann mal schauen ob es plausibel ist.
So würde ich anfangen.
Ich sehe eher ein Problem mit der schmutzigen Bordspannungen an dem Motorrad, da kannst du schon mal 100 Volt peaks drinhaben.
Deshalb musst du eine Filterschaltung mit Surpessordioden für die Versorgungsspannung des Arduino einplanen.
Es habe hier schon etliche solche Schaltungen gesehen.
Glaube guntherb hat sowas mal hier gepostet.
Hallo, geschaltet wird es über Masse, also eine Schaltwalze schliesst gegen Masse (12V) Ich würde für jeden Gang einen Optokopler verwenden wollen und so die spitzen ausgleichen. Jeder Gang bekommt seinen eigen Eingang beim Arduino und über schieberegister wird dann 7-Seg.Anzeige und LED + Schaltblitz angesteuert. Es wird vielleicht ein Atmega 8 (standalone) mit eigener Stromversorgung(Spannungsregler) Wie gesagt, es ist in Planung, also noch nichts entgültig fertig.
MfG Marco
Moin Marco,
Zuerst mal eine Frage: was ist ein Schaltblitz?
Ich habe letztes Jahr mit einem UNO bei meinem Motorrad (XJ900S) die Drehzahl ausgelesen und die Bordspannung zusammen mit der Drehzahl und einem Timestamp auf SD-Karte geschrieben, da ich Probleme mit der Batterie hatte (das ist aber ein anderes Thema). Für die Drehzahl habe ich das Digitalsignal von der Zündbox (welches gleichzeitig auf den Drehzahlmesser geht) benutzt.
Das Signal geht zuerst über einen 10k-Widerstand auf die Basis einer einzelnen NPN Transistorstufe (Emitter gegen Masse und der Kollektor an Pin2 des Arduinos). Liefert das DZM-Signal HIGH, so steuert der Transistor durch und zieht über den aktivierten PullUp-Widerstand des Pin2 diesen auf nahezu Massepotenzial.
Das ist eigentlich ganz einfach. Du solltest die Tips weiter oben beachten, damit der Arduino nicht durch Spannungsspitzen beschädigt oder zerstört wird.
Der Code könnte in etwa so aussehen (also: da muss natürlich Dein eigener Code noch hinzu, hier habe ich nur die Ermittlung und Ausgabe der Drehzahl beschrieben sowie die Interrupt-Service-Routine).
Und JA, Du musst einen speziellen Pin verwenden: einen, der einen Interrupt auslösen kann.
// Deklarationen
byte DZM_InputPin = 2;
volatile unsigned long RPM_T2, RPM_Count;
unsigned long RPM , RPM_T1;
//****************************************************************************
void setup() {
pinMode(DZM_InputPin, INPUT);
digitalWrite(DZM_InputPin, HIGH); // PullUp-Widerstand des DZM-Inputs aktivieren
RPM_T1 = 0;
RPM_T2 = 0;
RPM_Count = 0;
attachInterrupt(0, RPM_Meter, FALLING); // Interrupt0 wird bei fallender Flanke auf Pin2
// ausgelöst
}
//****************************************************************************
void showRPM() {
char RPMStr[5];
lcd.clear();
lcd.setCursor(10, 1);
if (RPM_T2 > RPM_T1) {
RPM = (unsigned)(long)(60000*RPM_Count / (RPM_T2 - RPM_T1));
RPM_T1 = RPM_T2;
RPM_Count = 0;
}
else {
RPM = 0;
}
sprintf(RPMStr, "%4u", RPM);
lcd.print(RPMStr);
}
//****************************************************************************
void RPM_Meter () {
RPM_Count++;
RPM_T2 = millis();
}
//****************************************************************************
void loop () {
// innerhalb der loop wird z.B. jede Sekunde showRPM (siehe oben) aufgerufen:
showRPM();
}
Hallo, erstmal ganz großes DANKE
, damit hast du mir schon mal sehr weiter geholfen. Also ein Schaltblitz ist eigentlich nichts weiter, als eine LED die bei einer bestimmten Drehzahl "Blitzt" und damit sagt, einen Gang höher schalten. Meine Idee dabei ist, es mit der Motortemperatur zu koppeln und so den Motor etwas schonender warm zufahren. Also Motor kalt-> früher schalten, Motor warm -> später Schalten.
Welchen Transistor sollte ich verwenden?
MfG Marco
zur Projektidee: Schaltblitz . . . Okeeeeay . . . wenn man das brauchen kann. Wahrscheinlich fahre ich schon zu lange Motorrad (40 Jahre), ich fühle die Drehzahl mit dem Hintern und drehe vor 3km Fahrt nie über 5000RPM.
zum Transistor: nimm einen Standard-NPN. (Ich habe einen BCY59 verwendet, weil ich die hier noch in großen Mengen liegen habe so wie auch BC107, BC109 usw., die gehen natürlich auch. Wenn Du die heute kaufen wolltest würdest Du wahrscheinlich feststellen, dass die seit 20 Jahren abgekündigt sind).
Aber gegen eine Optokoppler-Lösung ist auch absolut nichts einzuwenden, das geht auch.
Hallo zusammen,
ich habe versucht die hier von Reinhardt beschriebene Methode auch bei der Simson Schwalbe (1 Zylinder Zweitakt ) meiner Freundin anzuwenden.
Hierzu habe ich mir den unten genannten Transistor und einen 10k Widerstand von Conrad besorgt und wollte die 6 Volt Zündimpulse am Eingang der Zündspule abgreifen. Den Code habe ich noch so angepasst, dass die Werte auf die serielle Konsole ausgegeben werden.
Habe das ganze mal auf einem Breadboard zusammen gesteckt, aber es will nicht so richtig. Es werden Werte angezeigt aber keine die mir realistisch erscheinen. Im Leerlauf werden ~11000 angezeigt und realistisch wären so 1200-1600. Auch habe ich das Gefühl, dass die Werte nicht proportional zum Gas ansteigen.
Das ist mein erstes Arduino-Projekt und ich bitte daher um ein wenig Verständnis. Habe ich den falschen Transistor gekauft?
Liegt es daran, dass ich ein Arduino Nano V 3.0 verwende?
Ich bin über jeden hinweis sehr sehr dankbar.
Hier der Transistor den ich gekauft habe.
http://www.conrad.de/ce/de/product/156167/Bipolar-Standard-Leistungstransistor-STMicroelectronics-BCY59-10-NPN-Gehaeuseart-TO-18-IC-200-mA-Emitter-Sperrspannung?queryFromSuggest=true
Ich nehme an, die Schwalbe produziert neben ordentlich Abgasen auch noch entsprechende Spikes auf der Zündleitung. Mechanischer Unterbrecher sag ich nur ....
Du wirst das Signal aufbereiten = tiefpassfiltern müssen bevor da was Vernünftiges rauskommt.
Aber immerhin kommt ja schonmal was.
Moin BenvanDamme,
da hast Du nun aber gleich mehrere Fakten erfolgreich überlesen: ganz oben wurde von einem Drehzahlmesser-Signal einer elektronischen Zündung gesprochen, das ist etwas ganz anderes als das Signal an einer mit mechanischem Zündkontakt aktivierten Zündspule. Klaus meinte es noch gut mit Dir, aber möglicherweise hast Du Deinen Ardu schon gehimmelt, denn eine einfache Tiefpassfilterung könnte evtl. etwas zu kurz gegriffen sein: gemäß der Lenzschen Regel entstehen in Deinem Anwendungsfall erhebliche Spannungen beim Abschalten der Zündspule durch den Unterbrecherkontakt in der Höhe von Uind = -L * dI/dt. Wenn es noch nicht zu spät ist, dann müsstest Du noch Maßnahmen zur Begrenzung dieser Spannungsspitzen ergreifen, ein BCY59 ist hier völlig überfordert.
Noch ein Hinweis zum Tiefpassfilter: hatte anno dazumall einen elektronischen DZM an meinen Opel Kadett geklemmt und auch massive Probleme mit den Impulsen gehabt.
Nach viel Frickelei und digitalem Schnickschnack hat's ein einfaches R/C Glied getan.
Jaaaa, werden jetzt viele sagen, damit fängt man doch an .... gab halt damals irgendwie nen Hype mit Monoflops zum Entprellen .... braucht man nicht.
Wird bei der Schwalbe genauso gut funktionieren. Hinter den R dann ne Z-Diode und damit ist schon viel gewonnen.
Hallo,
ja da freue ich mich doch erstmal sehr über die rege Resonanz. Wie gesagt das ist mein erstes Arduino-Projekt und wie es euch auch schon aufgefallen ist, bin ich auch in der Elektrik nicht so bewandert. Ich komme eher aus der Informatik und versuche mich gerade anhand dieses Projektes auch ein wenig in die Elektrik einzuarbeiten.
Jetzt habt ihr mir viele Tipps gegeben wie es besser zu machen ist, aber ich bräuchte noch den ein oder anderen Schubser.
Welcher Teile der Schaltung müsste ich jetzt austauschen bzw. um welche Teile muss ich meinen Aufbau erweitern damit es funktioniert?
Nachdem ich der Schwalbe heute einen neuen Vergaser gegönnt habe, hatte ich das ganze nochmal kurz ausprobiert. Da ich keine Zeit mehr hatte den Vergaser einzustellen,ergab sich aber keine zufriedenstellende Testsituation.
Darübe hinaus habe ich meinen Code noch um eine Glättung erweitert.
rpm_calc();
gesamtSumme = gesamtSumme - messungen[zeiger]; // substrahiere letzte Messung
messungen[zeiger] = drehzahl ;// lese Drehzahl
gesamtSumme = gesamtSumme + messungen[zeiger]; // addiere Wert zur Summe
zeiger = zeiger + 1; // zur naechsten Position im Array
if (zeiger >= anzahlMessungen) // wenn Ende des Arrays erreicht ... zurueck zum Anfang
{
if (status == 1) // wenn Array erstmalig aufgefuellt ...
{
Serial.println(durchschnitt); // geglaettete Ausgabe auf serieller Konsole
}
status = 1; // erste 10 Werte eingelesen, Array ist gefüllt, Status geaendert
zeiger = 0; // und wieder von vorn
}
durchschnitt = gesamtSumme / anzahlMessungen; // berechne Mittelwert
delay(intervall); // zur Stabilisierung
Ich freue mich über jeden Tipp und jede Hilfe, da ich aktuell in diesem Bereich wenn es hoch kommt gefährliches Halbwissen habe 
Mich wundert es auch das der Arduino noch lebt.
Bei der Batteriezündanlage hast du an dem Abgreifpunkt (Klemme1 Primärseite der Zündspule) schon mal eine Spitze von 400V.
Wir reden hier zwar über eine Magnetzündanlage, aber der Spannungsverlauf an Klemme 1 ist dort ähnlich,
Du bekommst offensichtlich Impule, die nicht plausibel sind. Mit der Mittelwertberechnung wirst du nicht zum Ziel kommen.
Ein Scope Bild vom Arduino Eingang wäre schon hilfreich.
Oder auch dein Schaltbild des Tiefpassfilter mit den Z-Dioden.
Ja er lebt noch ^^.
Zum Thema Tiefpassfilter in meinem Anwendungsfall kann ich noch nichts sagen. Ich habe nachdem ich den Vorschlag gerade gelesen habe, mich dran gemacht meine Wissenslücke zu dem Thema zu schließen.
Ich bin mir nicht ganz im Klaren was du mit "Scope Bild" meinst. Ein Osziloskop befindet sich jedenfalls nicht in meiner Sammlung 
Das die Mittelwertberechnung nicht die Lösung der Geschichte ist, dachte ich mir auch. Ich hatte gehofft, dass es mich aber ein wenig in die richtige Richtung führt.
Was macht die Schwalbe denn so an maximaler Drehzahl? Ich schätze so bei 6000 wird Schluss sein?
Für meine Zwecke reicht ein uraltes HM312 Osziloskop aus.
Ist nicht mehr teuer http://kleinanzeigen.ebay.de/anzeigen/s-anzeige/hameg-oszilloskop-hm-312-8/215337036-226-7653?ref=search
Damit kannst du schon mal das Signal ansehen und bewerten.
Jo, so ein Teil schadet nie und man braucht auch für Signalanalyse in dem Bereich auch keine geeichten Einstellungen etc.pp.
Empfehlung: so eins KAUFEN $)
Die Schwalbe kommt mit ihrem 2-Takt-Motor bis auf 8.100 rpm (laut Reparaturfibel)
Das Projekt scheint um einiges aufwendiger zu werden als ich vermutete.
Vielleicht wäre es einfacher anstatt Oszilloskop, der Schwalbe lieber den schon lange geplanten Umbausatz auf elektronische 12 Volt Zündung zu spendieren
.
Ich habe noch folgendes entdeckt. - YouTube
Es hat anscheinend schon jemand erfolgreich umgesetzt. (Die S51 hat einen identischen Motor).
Kommt auf den Motor an-auch die Schalben gabs mit verschiedenen Motoren.
Wenn es der neueste war, der in dem Schwalben verbaut wurde: im Leerlauf kommt der auf bis zu 10 000. Aber nur dann.
Weiss nicht genau, wie die Untersetzung in der Schwalbe war, aber ich glaub, identisch zu S51, dann dürften die 8100 bergab realistisch sein, das entspräche ziemlich genau 81 km/h. Das läuft ne gutgepflegte Schwalbe mit Rückenwind.
Aaah ein Kenner
.
Es ist eine KR51/2 E mit einem M541 4-Gang-Motor und Unterbrecherzündung.