Frequenzen und Pulse messen

Um Pulse (z.B. von Sensoren) messen zu können bietet der Arduino die Funktion pulseIn().

Pulse einer Spannung
Abb.: Pulse einer Spannung

Verwendete Bauteile

pulseIn()

Diese Funktion liest einen Wert von einem Pin des Arduino ein (LOW bzw. HIGH). Wenn der Wert z.B. HIGH ist, wartet pulseIn() darauf, dass der Pin auf den Wert HIGH wechselt, startet einen Timer und wartet anschließend darauf, dass der Pin wieder auf LOW wechselt. Daraufhin stoppt pulseIn() den Timer und gibt die Länge des Pulses in Mikrosekunden zurück.

Wird ein (optionaler) Timeout-Wert angegeben und dieser erreicht (z.B. weil der Puls sehr lang ist), dann stoppt der Timer und gibt 0 zurück. pulseIn() kann Pulse zwischen 10µs bis 3 Minuten messen.

Aufbau der Schaltung

Der Puls wird in diesem Beispiel mit einem Mikrotaster simuliert.

Schaltplan für eine Puls-Messung
Abb.: Schaltplan für eine Puls-Messung

Sketch

#define PIN_BUTTON 7

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_BUTTON, INPUT);
}

void loop()
{
    unsigned long duration = pulseIn(PIN_BUTTON, HIGH);
    Serial.println(duration);
}
Ausgabe auf der seriellen Konsole
Abb.: Ausgabe auf der seriellen Konsole

Eine Alternative ist die Funktion pulseInLong(), die längere Pulse besser erkennen kann und besser in Sketches verwendet wird, in denen Interrupts verwendet werden.
Diese Funktion verlässt sich auf micros(), so dass sie im Kontext von noInterrupts() NICHT verwendet werden kann!

siehe auch Arduino Sprachreferenz

Library "Frequency Counter"

Um Frequenzen genauer messen zu können, kann man die Library Frequency Counter verwenden.

zurück