Hallo, ich habe mir mit einem Arduino Uno einen Drehzahlmesser für mein Motorrad gebaut. Dabei nehme ich die Drehzahl über die Zündimpulse am Zündkabel induktiv ab.
Das einlesen und auswerten der Drehzahl klappt sehr gut. Allerdings funktioniert das einlesen der Impulse in meinem Programm darüber, dass ein Zähler die Impulse pro Sekunde einließt. Die Drehzahl wird somit auch nur jede Sekunde an den Ausgängen ausgegeben.
Das ist nicht so optimal. Ich hätte gerne eine Möglichkeit die Drehzahl in Echtzeit auszugeben, habe aber keine Ahnung wie und ob das Möglich ist.
Anbei ist mein Programm wie es im Moment umgesetzt ist.
int pin = 7;
unsigned long N; //Anzahl der Impulse
unsigned long T; //Zeitintervall in us
unsigned long time; //Startzeit
int Drehzahl = 0; //Variable für Drehzahl
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
T = 5e5;
}
void loop() {
N = 0;
time = micros();
do {
if (pulseIn(pin, HIGH) > 0) N++;
}
while ( micros() < (time + T) );
Serial.println(N);
Drehzahl = N * 240;
Serial.println(Drehzahl);
if (Drehzahl < 1000) {
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 1000 && Drehzahl < 2000) {
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 2000 && Drehzahl < 3000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 3000 && Drehzahl < 4000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 4000 && Drehzahl < 5000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 5000 && Drehzahl < 6000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 6000 && Drehzahl < 7000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if (Drehzahl > 7000 && Drehzahl < 8000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
if (Drehzahl > 8000 && Drehzahl < 9000) {
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
}
}
Drehzahl2.ino (2.98 KB)