Arduini Drehzahl

Gast #5141209
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
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
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 )
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.