Arduini Drehzahl

Gast #5141209
Lesenswert?

Hallo  leute ,
Ich brauche eure hilfe , meine Aufgabe mit Arduino seht um eine 
Drehzahlmessung zu erfassen.

1
  
2

3

4
#include <Wire.h>
5
unsigned long beginnzeit; // le temps debut pour la deuxiemer messure
6
volatile unsigned long endezeit; // le temps ecoule
7
volatile unsigned long  impuls; // compteur
8
unsigned long drehzahl; //nombre de tours
9
unsigned long dauer ;
10
int A=0;
11
int mittelwert=0;
12

13

14
void setup() {
15
Serial.begin(9600);
16
pinMode(2,INPUT);
17
pinMode(2,INPUT_PULLUP);
18
drehzahl=0;
19
endezeit=0;
20
beginnzeit=0;
21
impuls=0;
22
attachInterrupt(0,impulse,HIGH) ;// der Interrupt wird ausgelöst , wenn der pin 2 von HIGH nach LOW wechselt , bei fallender Flanke
23
}
24
void impulse(){
25
  impuls++;
26
 endezeit=millis();
27
 Serial.println("ende");
28
   Serial.println(endezeit);
29
   Serial.println(impuls);
30
}
31
void loop() {
32
 
33
if (endezeit>beginnzeit){
34
   detachInterrupt(0);
35
  dauer=endezeit-beginnzeit;
36

37
  drehzahl= 60*1000 *1/ (dauer); //
38

39
  beginnzeit=endezeit;
40
    A=drehzahl+A;
41
      if (impuls==18){
42
  mittelwert=A/impuls;
43
  Serial.println("Mittelwert");
44
Serial.println(mittelwert);
45
  impuls=0;
46
  A=0;
47
  }
48
    attachInterrupt(0,impulse,HIGH) ;
49
  /* Serial.println("begine");
50
   Serial.println(beginnzeit);
51
    Serial.println("edauer");
52
    Serial.println(dauer); */
53
    Serial.println("drehzahl");
54
Serial.println(drehzahl);
55

56

57
 
58
  }
59
else{
60
  drehzahl=0;
61
}
62

63
delay(1000);
64

65

66

67
}


Ich versuche halt  die Drehzahl nach jede Impuls und der mittelwerte 
nach 18 Impulse  auszurechnen , aber irgwie klappt gar nicht mit meinem 
code.
Der impuls zähler geht nicht wider auf NUll nach 18 impulse und der 
drehzahl kriege die falsch :S


wäre sehr dankbar falls jemande mir helfen kann :)
Vielen Dank und schönen Abend noch .
Ps: sorry mein Deutsch ist aber nicht perfekt
Gast #5141277
Lesenswert?

Hier ein paar offensichtliche Fehler/Problemstellen:

1)
attachInterrupt(0,impulse,HIGH);
nur einmal aufrufen in Setup()

2)
void impulse()  ist deine Interrupt-Service-Funktion.
Darin sollst du keine print Statements haben da diese
zuviel Zeit brauchen.

3)
attachInterrupt(digitalPinToInterrupt(2), impulse, HIGH);
schreiben weil du offensichtlich Pin 2 als Interruptquelle
verwendest.
Gast #5141320
Lesenswert?

Mitlesa schrieb:
> Niang schrieb:
>> meine Aufgabe mit Arduino
>
> Welcher Arduino?

Arduino Uno .

Mitlesa schrieb:
> Hier ein paar offensichtliche Fehler/Problemstellen:
>
> 1)
> attachInterrupt(0,impulse,HIGH);
> nur einmal aufrufen in Setup()
>
> 2)
> void impulse()  ist deine Interrupt-Service-Funktion.
> Darin sollst du keine print Statements haben da diese
> zuviel Zeit brauchen.
>
> 3)
> attachInterrupt(digitalPinToInterrupt(2), impulse, HIGH);
> schreiben weil du offensichtlich Pin 2 als Interruptquelle
> verwendest.

J. S. schrieb:
> Das Serial.println im interrupt ist nicht wirklich eine gute Idee,
> da es
> (je nach Drehzahl) mehr Zeit braucht, als die Impulse lang sind.

 Vielen Dank :)
was wäre eig besser um eine gute Drehzahlmessung zu erfassen  .
Weisst jemande wie ich  mein code veränder um je impuls drehzahl 
ausrechnen und nach 18 impulse , der mittelwert  auch .
ich habs auch wieder probiert geht mein impuls counter immer hoch .( 
deswegen detachInterrupt meinte damit nach 1 puls direkt drehzahl 
ausrechnen )
#5142411
Lesenswert?

Hi

Um welche Drehzahl handelt es sich denn, also wie schnell erwartest Du, 
daß sich die Welle dreht?

Entweder misst Du die Zeit zwischen zwei Impulsen, oder zählst die 
Impulse in einer bekannten Zeit.
Aus Beidem kann man die Drehzahl errechnen - je nach Drehzahl ist es 
sinnvoller, die Zeit zu messen oder eben die Impulse zu zählen.
Wenn Du dann noch mehrere Messungen speicherst - also zuerst zählst Du 
'Impulse_1', danach 'Impulse_2', dann 'Impulse_3', dann wieder 
'Impulse_1' und die drei Werte addierst, hast Du gleichzeitig eine 
Mittelwert-Bildung - klar, die ersten zwei Messungen liefern Müll (zu 
geringe Drehzahlen), da noch nicht alle Gruppen gezählt/gefüllt wurden.

MfG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren