Mit einem Anemometer bestimmt man die Windgeschwindigkeit. Dieses muss aber nicht zwingend einen Propeller besitzen. Ein sog. Hitzdrahtanemometer kommt ganz ohne bewegliche Teile aus und besitzt als Windsensor einen erhitzten Draht, welcher vom Wind umströmt wird. Je stärker der Wind, desto kühler der Draht und desto geringer sein Widerstand. Dank eines sehr netten Menschen aus Berlin bin ich seit kurzem im Besitz eines solchen Hitzdrahtanemometers, ohne etwas dafür bezahlt zu haben. 🙂
Spannender ist aber zweifelsohne der Selbstbau eines Messgeräts, in diesem Fall eben eines Anemometers. Auf der österreichischen Verkaufsplattform https://www.willhaben.at bin ich vor kurzem auf einen günstigen Windsensor gestoßen, den ich mir dann auch gekauft habe.
Auswerten werde ich den Sensor, welcher vermutlich mit einem Reedkontakt funktioniert, mit einem Arduino. Damit ich mir aber die Windgeschwindigkeit anzeigen kann, muss ich den Sensor zunächst einmal kalibrieren. Hierfür bestimme ich die Pulsfrequenz in Abhängigkeit von der mit einem anderen Anemometer bestimmten Windgeschwindigkeit in der Hoffnung auf eine direkte Proportionalität. Der Windsensor müsste diese Tage bei mir eintreffen, der Rest ist eigentlich schon fertig.
Hier der Arduino mit 16×2 Display zur Anzeige der Frequenz bzw. dann der Windgeschwindigkeit:
Der Propellermotor zur Erzeugung des Winds wurde von mir auf ein LEGO-Stativ montiert. Dies hat u.a. den Vorteil, die Höhe unkompliziert anpassen zu können:
Der Windsensor ist angekommen und so konnte ich seine Kalibrierung durchführen.
Als Ergebnis meiner Messungen erhielt ich folgenden linearen Zusammenhang zwischen Frequenz f und Windgeschwindigkeit v: v = 0,2361 · f + 1,1557. Diese Beziehung findet sich natürlich in der Software wieder (siehe unten).
Das Youtube-Video reiche ich wie gewohnt nach…
Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
#include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 int sensor = 2; unsigned long currentTime; unsigned long lastTime; unsigned long period; unsigned long time_passed_min; unsigned long pulse_freq; unsigned long oldTime; float velocity; // =========================== // ======= SETUP ========= // =========================== void setup() { pinMode(sensor, INPUT); Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(sensor), pulse, RISING); // Setup Interrupt lcd.begin(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Anemometer"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lastTime = micros(); time_passed_min = 10000; // miniumum time in µsec passed after the last interrupt oldTime = 0; } // ======================== // ======= LOOP ========= // ======================== void loop () { if (millis() - oldTime > 1000) { lcd.setCursor(0,0); lcd.print("f = "); lcd.print(pulse_freq); lcd.print(" Hz "); if (pulse_freq = 0) { velocity = 0.0; } else { velocity = pulse_freq * 0.2361 + 1,1557; // conversion of pulse-frequency to wind-velocity } lcd.setCursor(0,1); lcd.print("v = "); lcd.print(velocity, 1); lcd.print(" m/s "); oldTime = oldTime + 1000; pulse_freq = 0; } } // ============================= // ======= INTERRUPT ========= // ============================= void pulse () // Interrupt function { currentTime = micros(); if (currentTime - lastTime > time_passed_min) { pulse_freq++; lastTime = currentTime; } } |