Nr. 50 Windstärke messen

Mit Hilfe eines Arduino Mikrocontrollers und einem Anemometer möchten wir die Windstärke messen.

Ein Anemometer ist eines von diversen Messgeräten, mit denen die Geschwindigkeit eines Luftstroms gemessen werden kann. Der Aufbau ist dabei in der Regel sehr einfach.

In unserem Aufbau verwenden wir ein Schalenanemometer (auch Schalensternanemometer, oder Kugelschalenanemometer genannt) und einen Arduino NANO Mikrocontroller. Der Wind wird mit Hilfe von Halbschalen aufgefangen und treibt die vertikale Rotorachse an. Durch die Form der Halbschalten kann sich die Konstruktion immer nur in eine Richtung drehen, unabhängig davon, aus welcher Richtung der Wind kommt. Die Drehbewegung wird durch eine Welle zu einem Gleichstrommotor weitergeleitet. Hier entsteht durch den Generatoreffekt ein elektrischer Gleichstrom. Die entstehende Spannung steigt mit der Drehzahl.

Verwendete Bauteile:

Anemometer: http://www.funduinoshop.com/Windstaerke-Messgeraet-Anemometer

NANO-Controller: http://www.funduinoshop.com/Funduino-NANO-R3

Schraubklemmen-Shield für den NANO Controller : http://www.funduinoshop.com/NANO-R3-Expansion-Board

Der Arduino Mikrocontoller verfügt über analoge Eingangspins, mit denen eine Spannung ausgelesen werden kann. Es ist unabhängig davon, ob es der NANO, der UNO oder der MEGA Controller ist. Das von uns verwendete Anemometer erzeugt selbst bei starkem Wind eine Spannung, die unter 5V liegt. Daher kann das Schalenanemometer direkt am Arduino Mikrocontroller angeschlossen werden, ohne dass weitere Module benötigt werden. In unserem Fall verwenden wir ein Schraubklemmenshield, damit der Anschluss der Kabelenden etwas einfacher ist.

Ähnlich wie beim Aufbau, sind auch bei der Programmierung keine großen Hürden zu erwarten, da lediglich die Spannung am analogen Pin gemessen und ausgegeben wird. Dieser Messwert wird zunächst einfach nur im seriellen Monitor angezeigt.

 

 

int Sensor = A7; //Das Anemometer soll am analogen Pin A7 angeschlossen werden. Wir nennen den Pin ab jetzt "Sensor"
int sensorwert; //Unter der Variablen "sensorwert" wird später der Spannungswert des Sensors abgespeichert.
int t=500; //Der Wert für „t“ gibt im Code die zeitlichen Abstände zwischen den einzelnen Messungen vor.

void setup() 
{
Serial.begin(9600); //Im Setup beginnt die serielle Kommunikation, damit die Temperatur an den serial monitor übertragen wird. Über die serielle Kommunikation sendet das Board die Messwerte an den Computer. In der Arduino-Software kann man unter „Werkzeuge“ den „Seriellen Monitor“ starten um die Messwerte zu sehen.
}

void loop() 
{
sensorwert=analogRead(Sensor); //Auslesen des Sensorwertes.
delay(t); // Nach jeder Messung ist je eine kleine Pause mit der Dauer „t“ in Millisekunden.
Serial.print("Sensorwert des Anemometers: "); // Im seriellen Monitor erscheint der Text "Sensorwert des Anemometers: "
Serial.println(sensorwert); //Nun wird der Wert „sensorwert“ über die serielle Kommunikation an den PC gesendet. Durch öffnen des seriellen Monitors in der Arduino-Software kann dieser Wert abgelesen werden.
}

 

Das Ergebnis sollte jetzt so aussehen:

Die angezeigten Werte sind nun natürlich noch nicht die tatsächliche Windstärke, sondern lediglich der Spannungswert des Sensors. Um die Tatsächliche Windgeschwindigkeit oder die Windstärke angeben zu können, muss dieser Wert umgewandelt werden. Dafür eignet sich der MAP-Befehl. Allerdings muss vorab ein Referenzwert für die Windgeschwindigkeit herausgefunden werden. Man muss also wissen, welcher Sensorwert einer Bestimmten Geschwindigkeit entspricht.

Dazu ein Beispiel:

Wir erstellen den oben gezeigten Aufbau und setzen uns samt Laptop ins Auto. Bei 50Km/h halten wir den Sensor auf dem Fenster und bekommen den Messwert 500 angezeigt.

Dann schrieben wir den Sketch folgendermaßen um

 

int Wind=0; // In der neuen Variablen "Wind" steichern wir die Windgeschwindigkeit
int Sensor = A7; //Das Anemometer soll am analogen Pin A7 angeschlossen werden. Wir nennen den Pin ab jetzt "Sensor"
int sensorwert; //Unter der Variablen "sensorwert" wird später der Spannungswert des Sensors abgespeichert.
int t=500; //Der Wert für „t“ gibt im Code die zeitlichen Abstände zwischen den einzelnen Messungen vor.

void setup() 
{
Serial.begin(9600); //Im Setup beginnt die serielle Kommunikation, damit die Temperatur an den serial monitor übertragen wird. Über die serielle Kommunikation sendet das Board die Messwerte an den Computer. In der Arduino-Software kann man unter „Werkzeuge“ den „Seriellen Monitor“ starten um die Messwerte zu sehen.
}

void loop() 
{
sensorwert=analogRead(Sensor); //Auslesen des Sensorwertes.
delay(t); // Nach jeder Messung ist je eine kleine Pause mit der Dauer „t“ in Millisekunden.
Wind= map(sensorwert, 0, 500, 0, 50);
Serial.print("Windgeschwindigkeit: "); // Im seriellen Monitor erscheint der Text "Windgeschwindigkeit: "
Serial.println(Wind); //Nun wird der Wert „Windgeschwindigkeit“ über die serielle Kommunikation an den PC gesendet. Durch öffnen des seriellen Monitors in der Arduino-Software kann dieser Wert abgelesen werden.
}

Das Ergebnis sieht dann folgendermaßen aus: