-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanemometer.py
141 lines (124 loc) · 4.53 KB
/
anemometer.py
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Created on 21.07.2016
@author: Sander
Measure and save to a database the RPM of a windturbine and anemometer
'''
# Importiert die benoetigten Bibliotekne
import RPi.GPIO as GPIO
import datetime as dt
import time
import MySQLdb
import sys
import threading
#Globale Variablen setzten
global aufloesung
aufloesung=1 #legt die Messaufloesung in Sekunden fest
global aufloesungzm #Dauer der Zeit, über die der gleitende Mittelwert gebildet wird
aufloesungzm=2
global anzahlsensoren
anzahlsensoren=2
global zws1
zws1=[]
global zws2
zws2=[]
global db
# Teilt der GPIO Bibliotek mit die GPIO references zu nutzen
GPIO.setmode(GPIO.BCM)
# Setzt Pin 27 und Pin 17 als Inut
GPIO.setup(27 , GPIO.IN)
GPIO.setup(17 , GPIO.IN)
class timer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
#self.rpm=rpm
self.daemon=True
self.start()
def run(self):
while True:
time.sleep(aufloesung)
turbinerpm=mittelwert1()
windrpm=mittelwert2()
print("Turbinenrpm: " + str(turbinerpm) + "/ Windgeschwindigkeit: " + str(windrpm))
speichern(turbinerpm, windrpm)
def signalerkennung1(channel): # Turbine
global zws1
print("Turbinen signal erkannt")
t10=dt.datetime.now()
zws1.append(t10) #fuegt den akutellen Timestamp dem Zwischenspeicher für die Timestamps hinzu
def signalerkennung2(channel): # Anemometer (wind)
global zws2
print("Windsignal erkannt")
t20=dt.datetime.now()
zws2.append(t20) #fuegt den akutellen Timestamp dem Zwischenspeicher für die Timestamps hinzu
# Ermittelt aus den Messdaten des Sensors einen Durchschnittswert für die Dauer der Aufloesung
def mittelwert1():
global zws1
t1=dt.datetime.now()-dt.timedelta(0,aufloesungzm)
while True:
if len(zws1)==0:
break # Loescht alle Werte die aelter als die dauer der Aufloesung sind
elif t1>=zws1[0]:
del zws1[0]
else:
break
n=len(zws1)
if n>1: # Berechnet den zeitlichen Abstand zwischen dem ersten und letztem Messwert und berechnet die Umdrehung pro Minute
dauer=zws1[n-1]-zws1[0]
rpm=int( (60/dt.timedelta.total_seconds(dauer))*(n/anzahlsensoren))
# rpm=int(dt.timedelta.total_seconds(dauer)*n)
elif n==0:
rpm=0
else: # notwenig, da dauer für den ersten Wert 0 ist und man nicht durch 0 teilen darf
rpm=int(len(zws1)*30)
return rpm
#Berechnet die Windgeschwindigkeit
def mittelwert2():
global zws2
t1=dt.datetime.now()-dt.timedelta(0,aufloesungzm)
while True:
if len(zws2)==0:
break # Loescht alle Werte die aelter als die dauer der Aufloesung sind
elif t1>=zws2[0]:
del zws2[0]
else:
break
n=len(zws2)
if n>1: # Berechnet den zeitlichen Abstand zwischen dem ersten und letztem Messwert und berechnet die Umdrehung pro Minute
dauer=zws2[n-1]-zws2[0]
rpm=int( (60/dt.timedelta.total_seconds(dauer))*(n/anzahlsensoren))
# rpm=int(dt.timedelta.total_seconds(dauer)*n)
elif n==0:
rpm=0
else: # notwenig, da dauer für den ersten Wert 0 ist und man nicht durch 0 teilen darf
rpm=int(len(zws2)*30)
rpm=rpm*1000/(3.14*43*2)/60
return rpm
def speichern(turbinerpm, windrpm):
curs=db.cursor()
curs.execute("""INSERT INTO Umdrehungen (zeitstempel,rpm,wind) VALUES (NOW(), '%s', '%s')""" %(turbinerpm, windrpm) )
curs.close()
db.commit()
def main():
#time.sleep(10)
#db=MySQLdb.connect(host='localhost', user='verlauf', passwd='Turby', db='turbine')
#print('Datenbank erfolgreich geöffnet')
#aufloesungzm=int(input('Bitte den gewuenschten Zeitraum zum ermitteln des gleitenden Durchschnitts in Sekunden eingeben: '))
#aufloesung=int(input('Bitte die gewuenschte Aufloesung in Sekunden eingeben: '))
t1=timer()
GPIO.add_event_detect(27, GPIO.BOTH, callback=signalerkennung1, bouncetime=200)
GPIO.add_event_detect(17, GPIO.BOTH, callback=signalerkennung2, bouncetime=200)
try:
# Loop until users quits with CTRL-C
while True:
time.sleep(0.01)
except KeyboardInterrupt:
# Reset GPIO settings
db.close()
GPIO.cleanup()
if __name__ == '__main__':
global db
db=MySQLdb.connect(host='localhost', user='verlauf', passwd='Turby', db='turbine')
#print('Datenbank erfolgreich geöffnet')
main()