Wind Datenlogger zählt 2 mal bei einem Impuls

Hi Leute,

ich habe meinen Code für einen Wind-Datenlogger insoweit geschrieben, dass vorerst die Anzahl der Impulse auf dem Serial Monitor angezeigt werden sollen, welche innerhalb einer Sekunde gezählt werden.
Leider zählt er nicht nur einmal bei einem Impuls, sondern 2 mal. Vielleicht habt ihr ja eine Idee, welche Änderung ich an meinem Code vornehmen müsse. Für eure Hilfe wäre ich euch sehr dankbar!

// konstante Variablen
const int AnemometerPin = 2; // Pin an dem das Anemometer am Arduino angeschlossen ist
const int ledPin =  13;      // Ausgabepin der LED
const int Messintervall = 1000; //das Messintervall beträgt eine Sekunde
// veränderliche Variablen
unsigned long StartRoutine;
unsigned long EndeRoutine = 0;
int Impulszaehler = 0;
int Impulsstatus = 0;
int ImpulsstatusAlt = 0;

void setup() {
  //serielle Kommunikation zwischen Arduino und PC herstellen
  Serial.begin(9600);
  //Information das die Messroutine startet
  Serial.println("Starte Messroutine Windgeschwindigkeit..."); 
  // der AnemometerPin an Pin 2 ist ein Input
  pinMode(AnemometerPin, INPUT);     
}

void loop()
{
  //Variable "StartRoutine" bekommt die Zeit, in der die Routine gestartet wurde
  StartRoutine=millis();
  //die Endzeit der Routine wird zu Beginn mit der Startzeit gleichgesetzt
  EndeRoutine=StartRoutine;
  //der Impulszaehler wird auf 0 gesetzt
  Impulszaehler=0;
  //der Impulsstatus ist LOW
  ImpulsstatusAlt=LOW;
  //solang die Routine das vorgegebene Messintervall nicht überschritten hat
  while(EndeRoutine-StartRoutine<=Messintervall) {
 // auslesen des Wertes des AnemometerPins
  Impulsstatus = digitalRead(AnemometerPin);
  // wenn sich der Status des AnemometerPins verändert hat
  if (Impulsstatus == HIGH && Impulsstatus != ImpulsstatusAlt){

    Impulszaehler++;
  }

    ImpulsstatusAlt=Impulsstatus;

    EndeRoutine=millis();
  }
  Serial.print("gezählte Impulse: ");
  Serial.println(Impulszaehler);
}

BigBangTheory:
ich habe meinen Code für einen Wind-Datenlogger insoweit geschrieben, dass vorerst die Anzahl der Impulse auf dem Serial Monitor angezeigt werden sollen, welche innerhalb einer Sekunde gezählt werden.
Leider zählt er nicht nur einmal bei einem Impuls, sondern 2 mal. Vielleicht habt ihr ja eine Idee, welche Änderung ich an meinem Code vornehmen müsse.

Ist das eine Konstruktion mit einem Reed-Kontakt?

Wenn es ein Windmesser mit einem Reed-Kontakt ist, dann kommt es auf die genaue Anordnung von
a) Magnet und
b) Reed-Kontakt
an, ob der Kontakt bei einem Vorbeigang ein oder zwei Impulse abgibt.

Und das hätte mit der Software rein gar nichts zu tun, sondern mit blanker Physik, insbesondere Magnetismus.

Genau, es ist eine Konstruktion mit einem Reed-Kontakt.
Ich habe das ganze mit dem Beispiel-Sketch "Button" getestet, wobei die LED nur einmal pro Umdrehung, genau am Reed-Kontakt aufleuchtet.
Kann es sein, dass ich das Signal noch entprellen muss bzw. wie kann ich es hinbekommen, dass der Impulszähler nur um eins pro Umdrehung erhöht wird?

BigBangTheory:
Genau, es ist eine Konstruktion mit einem Reed-Kontakt.
Ich habe das ganze mit dem Beispiel-Sketch "Button" getestet, wobei die LED nur einmal pro Umdrehung, genau am Reed-Kontakt aufleuchtet.

Ganz sicher, auch wenn Du das Windrad EXTREM LANGSAM durchdrehst?

Weil: Das Auge ist träge, und bei 25 Bildern pro Sekunde nimmt das Auge kein Flimmern mehr wahr, daher kannst Du per Auge gar nicht feststellen, ob eine LED zwischen zweimal "EIN" auch noch vielleicht einmal für weniger als 1/25s (= 40ms) "AUS" ist. Das wird für das menschliche Auge vom Nachleuchten auf der Netzhaut überdeckt. Aber schon eine einzige Millisekunde ist für einen Mikrocontroller eine lange Zeit.

BigBangTheory:
Kann es sein, dass ich das Signal noch entprellen muss bzw. wie kann ich es hinbekommen, dass der Impulszähler nur um eins pro Umdrehung erhöht wird?

Wenn der Geber tatsächlich nur einen Impuls pro Umdrehung abgeben soll, kannst Du ihn per Software entprellen. Dadurch begrenzt Du allerdings auch automatisch die maxmal erfassbare Windgeschwindigkeit.

Allerdings würde ich nochmal die Art und Einbaulage von Magnet und Reedkontakt prüfen. Ein sehr gängiger Einbau ist zum Beispiel diese Kombination aus Stabmagnet senkrecht zum Reedkontakt (mit zwei Schließungen bei einem Vorbeigang des Magneten):
http://www.meder.com/technik_magnete_de10.html

Eine komplette Übersicht über alle gängigen Kombinationen von Stab- und Ringmagneten mit Reedkontakten und Bewegungsrichtungen findest Du auf der Übersichtsseite:
http://www.meder.com/technik_magnete_de.html
(Einfach auf das Bildchen klicken, dann kommst Du zur Animationsseite und kannst Dir die Schließungen ansehen)

Wenn Du tatsächlich bei JEDER Umdrehung IMMER zwei Schließungen bekommst, unabhängig von der Drehzahl und unabhängig von zufälligen Schwankungen, dann würde ich eher davon ausgehen, dass das so gehört und dass es sich nicht um Kontaktprellen handelt. Kontaktprellen ist eigentlich immer von zufälligen Schwankungen geprägt.

Reed-Kontakte prellen eigentlich nicht, weil die Kontakte sich gegenseitig durch die Magnetisierung der Kontakte durch den äußeren Magneten anziehen. Ich tippe auf 2 Magneten am Laufrad oder einem 4 poligen Rundmagneten.

Grüße Uwe

Genau, mir ist aufgefallen, dass wenn ich das Anemometer sehr sehr seeeehr langsam drehe, die LED mehrmals schaltet. Dies liegt dann wohl daran, dass der Reed-Kontakt bei sehr geringem Wind mehrmals schaltet. Da dies aber nur bei sehr sehr geringer Windgeschwindigkeit stattfindet und ich die Umdrehungen bzw. Impulse pro Sekunde messe, sind die Messabweichungen für meine Zwecke hier noch im Rahmen.

Meine Messgenauigkeit ist durch den einen verbauten Magneten sowie recht beschränkt. Eine Umdrehung pro Sekunde entspricht ca. 0,48 m/s, 2 Umdrehungen / s sind 0,95 m/s, usw...

Vielen Dank nochmal für die tollen, ausführlichen Antworten! Diese haben mir sehr geholfen!!!

BigBangTheory:
Meine Messgenauigkeit ist durch den einen verbauten Magneten sowie recht beschränkt. Eine Umdrehung pro Sekunde entspricht ca. 0,48 m/s, 2 Umdrehungen / s sind 0,95 m/s, usw...

Deine Auswertelogik kann für die genaue Erfassung geringer Windgeschwindigkeiten noch optimiert werden.

Solche Reed-Windsensoren werden üblicherweise nämlich anders ausgewertet, und zwar auf zwei verschiedene Arten je nach Windgeschwindigkeit.

Die von Dir verwendete Methode "Impulse pro Sekunde" wird nur bei hohen Windgeschwindigkeiten verwendet. Die ist nämlich auch sehr anfällig für "springende Werte". Beispiel: Wenn beim aktuellen Wind das Anemometer 1,5 mal pro Sekunde dreht, dann mißt Du in der einen Sekunde einen Impuls, in der nächsten Sekunde zwei Impulse, in der übernächsten Sekunde einen Impuls, danach wieder zwei Impulse u.s.w.. Dadurch sieht das Meßergebnis so aus, als würde der schwache Wind im Sekundentakt alle zwei Sekunden doppelt so schnell wehen, obwohl er eigentlich mit einem Wert dazwischen weht.

Unterhalb einer bestimmten Umschaltgeschwindigkeit schaltet die Auswertelogik daher normalerweise um auf "Zeit zwischen den Impulsen" und errechnet aus der Zeit zwischen zwei Impulsen die Windgeschwindigkeit. Dies liefert insbesondere bei niedrigen Windgeschwindigkeiten Werte, die von Messung zu Messung viel weniger springen.

Nur mal so als Info.