Ich möchte für die Arbeit mit einem Raspberry Pi 3B+ eine Art Datenlogger bauen.An diesem werden Temperatur ,Feuchtigkeit sowie die Windgeschwindigkeit gemessen.
Per I2C habe Ich Spannungswerte messen können das hat alles problemlos geklappt.(Temperatur und Feuchte werden als Spannungswerte abgegriffen nach einem AD Wandler).
Das Ausgangssignal der Windgeschwindigkeitssensors ist eine Frequenz hier gibt es zwei Methoden wie man diese ermitteln kann ( Tor- Schaltung & Reziprokefrequenzmessung)
Mein Versuch einer Tor-Schaltung:
Code: Alles auswählen
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
COUNTER = 0
def Interrupt():
global COUNTER
COUNTER += 1
# Interrupt-Event
GPIO.add_event_detect(27, GPIO.FALLING, callback=Interrupt)
def main():
try:
global COUNTER
while True:
start = time.time()
while True:
vergangene_zeit = time.time() - start
if vergangene_zeit >= 1:
print("Es wurden", COUNTER, "in", vergangene_zeit, "gemessen!")
break
time.sleep(0.01)
except KeyboardInterrupt:
print("Messung wurde abgebrochen!")
if __name__ == "__main__":
main()
Mein Zweiter Versuch die Frequenz zu messen via Reziproke-Verfahren klappt leider nicht:
Code: Alles auswählen
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
COUNTER = 0
STARTZEIT = 0
def Interrupt():
global COUNTER
COUNTER += 1
# Interrupt-Event
GPIO.add_event_detect(27, GPIO.FALLING, callback=Interrupt)
def main():
try:
global COUNTER
global STARTZEIT
while True:
if COUNTER == 1:
STARTZEIT = time.time()
if COUNTER == 5:
endzeit = time.time() - STARTZEIT
frequenz = 1 / endzeit
COUNTER = 0
except KeyboardInterrupt:
print("Messung wurde abgebrochen!")
if __name__ == "__main__":
main()
Die gemessene Zeit ist leider falsch Ich weiß nicht ob es ein Fehler von mir ist oder das das System ( Linux mit Python) auf dem Pi zu träge ist als Beispiel messe Ich bei 12Hz real Frequenz mit dieser Methode ca 2-3Hz ( 0,3256 .... sekunden) hat hier jemand eine Idee) Auch wenn Ich extra noch ein Time.sleep in die While Schleife einbaue von 0.001 Sekunden ?
Vorhaben:
Generell würde Ich gerne eure Meinung zu dem Projekt hören Ich weiß das viele die Sensordaten lieber mit einem Arudino auslesen und dann an den Pi übertragen ( da die Taktzahl den Pics deutlich höher ist als die des Pis) :
Meine Idee ist es im Prinzip 1 min Mittelwerte zu ermitteln also per I2C Temperatur mehrmals in der Minute zu messen sowie die Feuchte .Und natürlich die Windgeschwindigkeit falls es in einem Skript nicht klappen sollte dachte Ich an mehrere Threads.
Ich bin auf eurer Feedback gespannt und danke euch.