Windmesser Raspberry

Windmesser Raspberry

Beitragvon DL3NDD » Mo 1. Jan 2018, 20:02

Relevante Werte wie Solarstrom, Akkuspannung und Außentemperaturen an unserem Standort in Dornau
sind schon seit Jahren eingerichtet.
Das Wind auch eine Bedrohung sein kann, haben wir bitter erfahren müssen.

Die Einrichtung einer externen kompletten Wetterstation dort, habe ich aus Stromverbrauchsgründen verworfen.

Hier bietet sich der sowieso laufende Raspberrypi (seit 5Jahren störungsfrei in Betrieb) an.

Ein Windsensor (im weiteren WS genannt) bietet sich als kleine Zusatzkomponente an.
https://www.amazon.de/Eltako-Windsensor ... windsensor

Vorteil: er braucht keine eigenen Stromversorgung, und lässt sich relativ leicht in das vorhandene System einbinden.
Dieser WS hat eine magnetische Achse, die bei jeder Umdrehung einen Reedkontakt schaltet. (Fotos klick zum Vergrößern)
2018-01-01 17.02.18.jpg
Versuchsaufbau


Diese Impulse kann der PI zählen und in einem kleinen Skript auswerten.
Der WS hat 2 Anschlusskabel, es ist hier egal, welches wo angeschlossen wird.(keine Polung)
Ich habe mich für GPIO 5 entschieden (war noch frei) und das andere an Masse.

Anmerkung: Vorteilhaft ist es beim GPIO Port definierte Zustände herzustellen...also bei PullDown auf - Spannung, oder PullUp auf + Spannung mit z.B. einem 10k Widerstand.
Ich habe das mal hier im Versuchsaufbau mal weggelassen, (Beispiel auf der Skizze)
pi.jpg


Ich habe im Netz verschiede Skripte in Python gefunden, und habe mal eins mit div. Änderungen übernommen...und es geht auf Anhieb.
wind.jpg


Code: Alles auswählen
import RPi.GPIO as GPIO
import time, math

pin = 5
count = 0
r_cm = 5.2

def calculate_speed(r_cm, time_sec):
    global count
    circ_cm = (2 * math.pi) * r_cm
    rot = count / 2.0
    dist_km = (circ_cm * rot) / 100000.0 # umwandeln in km
    km_per_sec = dist_km / time_sec
    km_per_hour = km_per_sec * 3600 # umwandeln in Entfernung/Stunde
    return km_per_hour

def spin(channel):
    global count
    count += 1
    print (count)

GPIO.setmode(GPIO.BCM) # GPIO als Nummer
GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
GPIO.add_event_detect(pin, GPIO.FALLING, callback=spin)

interval = 5 # Messintervall Sek.

while True:
    count = 0
    time.sleep(interval)
    print calculate_speed(r_cm,interval)

    f = open("wind.txt", "w"); # als txt file schreiben
    print f
    value = calculate_speed(r_cm,interval)
    myString = str(value)
    f.write(myString + "\n")


im unteren Teil schreibe ich den erhaltenen Wert in eine Textdatei, der dann vom PI mit FTP auf den Webserver
hochgeladen werden soll, und auf der Webseite angezeigt wird.

Über die Genauigkeit kann ich noch nichts sagen....ich puste auf das Windrad ;) , lässt sich aber innerhalb des Skriptes
anpassen.

Die nächste Aufgabe wird sein, das sowohl Hardwaremäßig in mein vorhandenes Projekt einzubauen,
und die Software zu integrieren.
big_32042171.jpg
Synology DS213+ als Web-FTP-und VPN Server, FT2000 SteppIr, homemade PA LDMOS
Benutzeravatar
DL3NDD
 
Beiträge: 746
Registriert: Sa 10. Nov 2012, 21:34

Zurück zu Tutorials

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast