Umdrehungen Pro Sekunde berechnen

Hey Leute,
Ich habe mal wieder ein Problem... :confused:

Eigentlich will ich nur die Umdrehungen pro Sekunde berechnen (Von zwei DC-Motoren), dafür habe ich mir zwei mal den FC-03 Sensor gekauft. Nun wollte ich es erst einmal nur mit einem Sensor probiert. Das Problem ist, dass jedes mal beim einmaligen Passieren der Lichtschranke mehrere Interrupts ausgelöst werden, folglich wird dadurch das Ergebnis größer als es normalerweise sein sollte.

Hier ist mein Code:

volatile byte RpmZaehler;
unsigned int iRpm;
unsigned long lTimeOld;

void Zaehlen()
{
  RpmZaehler++;
  Serial.println(RpmZaehler);
}

void setup()
{
  Serial.begin(9600);

  attachInterrupt(0, Zaehlen, RISING);

  RpmZaehler = 0;
  iRpm = 0;
  lTimeOld = 0;
}

void loop()
{
  if (lTimeOld + 1000 < millis())
  {
    lTimeOld = millis();
    detachInterrupt(0);

    Serial.print("Ergebnis: ");
    Serial.println(RpmZaehler);

    RpmZaehler = 0;

    attachInterrupt(0, Zaehlen, RISING);
  }
}

LG. Suchtaaa

Serial hat in der Interruptfunktion nichts zu suchen.

Gruß Tommy

Leider funktioniert es auch nicht, wenn ich das Serial rausnehme :frowning:

Hier wäre interessant, welchen Sensor (Link posten) du verwendest ?
Und auch wie du misst ?

Versuche mal A0 anstelle D0.

@Hotsystems Den haben meine Eltern gekauft, daher weiß ich nicht von wo genau, aber dass ist der den ich habe https://www.seeedstudio.com/Motor-Speed-Sensor-Module-p-1969.html.
Was meinst du mit wie ich messe?

@agmue Wie meinst du das? :smiley:

An welchem Pin hast Du das Teil angeschlossen?

Gruß Tommy

An Pin Zwei.

Suchtaa:
@Hotsystems Den haben meine Eltern gekauft, daher weiß ich nicht von wo genau, aber dass ist der den ich habe https://www.seeedstudio.com/Motor-Speed-Sensor-Module-p-1969.html.
Was meinst du mit wie ich messe?

@agmue Wie meinst du das? :smiley:

Poste bitte einen Hyperlink, den kann ich am Tablet auch öffnen.

Wie oder was misst du ?
Achse des Motors oder Welle oder.....?
Mach ein Foto, da sehen wir mehr.

Auf der verlinkten Platine steht FC-33 (VCC GND OUT), nicht FC-03 (VCC GND D0 A0). Was ist richtig?

Sensor

In dem Bild sieht man, wie ich es angeschlossen habe. Den Motor benutze ich noch nicht, da es ja so schon nicht funktioniert. Später soll durch die Lochscheibe und dem Sensor ausgelesen werden, wie oft sich das Rad gedreht hat.
Übrigens ist es ein Arduino Uno :slight_smile:

@agmue Ja ist ein FC-33, habe mich vertan

Von Deinen Bildern ausgehend (die Lochscheibe scheint mit den Antriebsrädern verbunden zu sein) wäre wohl Umdrehungen pro Minute die bessere Wahl, da das pro Sekunde eher sehr geringe Werte werden dürften oder habe ich ein stark untersetzendes Getriebe übersehen?

Gruß Tommy

Ok, danke.

Mit der Schlitzscheibe sollte es funktionieren.
Ich würde es mal mit einem einfachen digitalen Auswerten (ohne Interrupt) versuchen.

Den IRQ kannst du später ja immer noch einbauen, wenn's funktioniert.

Was evtl. noch ein Problem sein kann, dass der Abstand der Lichtschranke zu groß ist und es entsteht Streulicht, welches zu Mehrfachimpulsen führt.

@Tommy56 Ja, dass könnte man dann doch einfach im Programm berechnen lassen oder?

@HotSystems Die Werte aus dem Sensor stimmen immer(HIGH = Gegenstand, LOW = Kein Gegenstand), ob mit der Lochscheibe oder auch mit einem Eineurostück.

Suchtaa:
@HotSystems Die Werte aus dem Sensor stimmen immer(HIGH = Gegenstand, LOW = Kein Gegenstand), ob mit der Lochscheibe oder auch mit einem Eineurostück.

Versteh ich grad nicht, wo ist dann dein Problem ?

Das in der Variable RpmZaehler bspw. 4 oder teilweise bis zu 20 drin steht, obwohl ich lediglich einmal mit einem Eineurostück durch die Lichtschranke gegangen bin. Normalerweise sollte dann doch in RpmZaehler nur eine 1 drin sein, dies ist aber eben nicht der Fall.

Du bist mit dem Problem nicht alleine, der FC-03 könnte eine Macke haben: FC-03 and attachInterrupt() problems!?!?. Das dürfte möglicherweise für Deinen FC-33 genauso gelten.

Abhilfe: Oszi dran und Signal analysieren. Dann Gegenmaßnahmen auswählen, beispielsweise mittels RC-Glied oder Software "entprellen".

Wobei eine "prellende" Lichtschranke mit Elektronik in den Müll gehört, nicht in den Verkauf.

Habe mir den Link mal angeguckt, habe es jetzt hinbekommen.

Dankeeeee :slight_smile:

Suchtaa:
Habe mir den Link mal angeguckt, habe es jetzt hinbekommen.

Würdest Du dem interessierten Leser auch verraten, wie?

Ein Forum sollte ein Austausch von Wissen und Erfahrung sein, in alle Richtungen. So könnten andere etwas von Dir lernen.

An sich steht es ja in dem Link von dir (Auf der zweiten Seite) :smiley:

Man braucht nur einen 100nF Kondensator und einen 1k Widerstand.

Hier ist ein Bild, wie ich es gemacht habe.