Drehfrequenz auslesen

Hi!

Ich möchte mit dem Arduino erst einmal die Drehzahl eines Verbrennungsmotors auslesen. Welche Schaltung benötige ich noch und wie berechne ich die Frequenz im Arduino?

Hier anbei die Spannungskurve(n), die Drehzahl geht von 0 bis ca 6000 UPM

Ist es möglich die Drehzahl-, und nachher noch andere Sensoren auszulesen? Ich weiss irgendwie nicht genau was ich dem kleine Arduino(Uno) alles zutrauen kann :stuck_out_tongue: Insgesamt sollen später noch Spannungen ausgelesen werden (das sollte aber eigentlich kein Problem sein). Die gesammelten Daten werden dann, zur Weiterverarbeitung, über pin 0 und 1 vom Atmen per RS232 an ein Beagleboard gesandt

Grüße

Patrick

drehzahlrotax.png

Also, ich habe hier erst einmal 2 Arduinos. Der eine sendet eine Frequenz von ca 6k Signalen pro Minute.

Hier mein Sketch für den Sender

unsigned int millisalt;
void setup() {                
  pinMode(8, OUTPUT);   
 pinMode(9, OUTPUT);
 Serial.begin(9600);
}

void loop() {
  int poti = analogRead(A1);
  
 millisalt = millis();
  digitalWrite(8,HIGH);
  digitalWrite(9,HIGH);
delay(10);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
delay (poti);
int zeit = 60000/((millis()-millisalt));
Serial.println(zeit);

}

Das erstmal nebenbei, dieser Sender gibt mir maximal eine Frequenz von 6k Impulsen (laut Serial Monitor). An Pin 9 ist eine LED zur Kontrolle angeschlossen, 8 ist mit dem Anschluss 2 des anderen Arduinos verbunden. Nun meinen Sketch um diese Signale auszuwerten.

volatile byte rpmcount;
 unsigned int rpm;
 unsigned long timeold;
 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, RISING);
   rpmcount = 0;
   rpm = 0;
   timeold = 0;
 }
 void loop()
 {
   if (rpmcount >= 20) { 
     rpm = 60000/(millis() - timeold)*rpmcount;
     timeold = millis();
     rpmcount = 0;
     Serial.println(rpm,DEC);
   }
 }
 void rpm_fun()
 {
   rpmcount++;
 }

Jedoch bekomme ich nun höchstens 5300 UPM angezeigt. Ist mein Lösungsansatz schon gut, oder geht es auch besser? Ich wollte das ganze mit einem Interrupt machen da ich später auch noch ein paar andere Sensoren am analogen Ausgang auslesen wollte.

Liegt es irgendwie am Code oder ist der Arduino Geschwindigkeitsmässig am ende?

EDIT: Es funktioniert nun, ich musste nur die Baudrate erhöhen und die max rpmcount auf 8 setzen (ausprobieren).