Link zur Hauptseite des Forums

LotharGehlhaar - Teichbauforum

DAS informative Forum der Koi-Szene
Link zur Enzyklopaedie
Aktuelle Zeit: Sa 27.Apr 2024 19:02

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 225 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7 ... 23  Nächste
Autor Nachricht
BeitragVerfasst: Do 02.Apr 2015 10:02 

Cash on hand: Locked
Hallo Dennis,
schnuffi hat geschrieben:
Einfach mal ein Feedback dazu geben :!:

ich finde es gut, das du Dich so intensiv und Fachmännisch hier in dieses Thema einbringst und Dich damit beschäftigst.
Das mit dem Feedback klappt hier meist nur einseitig! :hallo:

Dennis wie hast Du eigentlich die Auswertung in Deinen Dateianhängen gemacht?

Mach weiter so, dann klappt es auch mal vernümftig :mrgreen:


Nach oben
  
 
BeitragVerfasst: Do 02.Apr 2015 10:11 
Offline
Anonymer User
Benutzeravatar

Registriert: Do 03.Jan 2013 13:07
Cash on hand:
3.339,23 Taler

Beiträge: 646
Hallo Paul,

danke. :D

Ich habe die in der Kommandozeilen ausgegebenen Werte als Liste in Excel kopiert und einfach ein Diagramm erzeugt.

Wenn es jemanden nervt einfach bescheid sagen :)

_________________
____________________
Viele Grüße
Dennis
____________________


Nach oben
 Profil userposition on geomap  
 
BeitragVerfasst: Do 02.Apr 2015 11:21 
Offline
Anonymer User
Benutzeravatar

Registriert: Do 03.Jan 2013 13:07
Cash on hand:
3.339,23 Taler

Beiträge: 646
Hallo Zusammen,

ich muss meine vorherige Aussage noch einmal korrigieren.

Auch bei 10ms scheint dieser Fehler aufzutreten (Warum er immer bis zur hälfte einbricht ist mir ein Rätsel????). Scheinbar hat der HC-SR04 ein Problem, denn die ausgegebene Pulslänge vom Sensor passt zu den ermittelten Werten vom PI. Ich habe 10 000 Messungen durchgeführt
Dateianhang:
10msVS100ms.png
10msVS100ms.png [ 33.1 KiB | 4657-mal betrachtet ]


Bei 100ms ist der Fehler deutlich geringer. Dies sollte der beste Kompromiss zwischen Performace und Stabilität sein. Werde zur Sicherheit aber noch weitere Messungen durchführen und weiter berichten.

@Pfiffikus:
Ich würde das Modul so ändern
- Über PHP das Modul echolot.py aufrufen
- Dem Modul folgende Parameter übergeben
1. Trigger PIN
2. Echo PIN
3 Anzahl zu durchlaufender zyklen ("
X")
- Dann würde ich in dem Modul echolot.py "X" mal die Messung durchführen
- Das Ergebnis würde ich dann Anhand einer Liste zurück geben
- Dann kannst du wie schon jetzt eine Auswertung der Messwerte Anhand deines Schieberegisters durchführen


Eine Messung für einen Sensor würde dann bei 20 Messungen ca. 2,2 Sekunden dauern. Bei 2 Pegel wären das max. 5 Sek. denke ich.

Wäre doch eine zu verschmerzende Zeit, oder?

Dazu müsstest du allerdings den Code in PHP anpassen. Den Code in Python würde ich dir schreiben, müssten uns halt nur wegen der Übergabeparameter abstimmen. :hallo:

aus meiner Sicht wäre es dann

sudo python echolot.py 18 17 20 # (Trigger Echo Zyklen)
Rückgabe [2111,2112,2113,2111,usw.]

Bist du damit einverstanden?

_________________
____________________
Viele Grüße
Dennis
____________________


Nach oben
 Profil userposition on geomap  
 
BeitragVerfasst: Do 02.Apr 2015 13:31 
Offline
Anonymer User
Benutzeravatar

Registriert: Do 03.Jan 2013 13:07
Cash on hand:
3.339,23 Taler

Beiträge: 646
Hallo Pfiffikus,

hier der von mir vorgeschlagene Code

Code:
#-----------------------------#
# Author: Pfiffikus und Dennis#
#-----------------------------#
import time
import RPi.GPIO as GPIO
import sys

#GPIO PINs deklariren
GPIOTrigger = int(sys.argv[1])
GPIOEcho    = int(sys.argv[2])

#Wie oft soll gemessen werden
Counter     = int(sys.argv[3])

#set GPIO PINS
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIOTrigger, GPIO.OUT)
GPIO.setup(GPIOEcho, GPIO.IN)

#set trigger to false
GPIO.output(GPIOTrigger, False)

#Warnings ausschalten um fehlerhafte Logausgaben zu vermeiden
GPIO.setwarnings(False)

# Wait 100ms
#print "wait 100ms"
time.sleep(0.1)


def MeasureDistance(GPIOTrigger, GPIOEcho):
    # set trigger to high
  GPIO.output(GPIOTrigger, True)

    # set trigger after 100msec to low, mit laengerer Wartezeit als 10mikrosec ist die Genauigkeit hoeher
  time.sleep(0.1)
  GPIO.output(GPIOTrigger, False)

    # store initial start time
  StartTime = time.time()
    # Endzeit festlegen
  EndTime = StartTime + 1

    # store start time
  while ((GPIO.input(GPIOEcho) == 0) & (StartTime < EndTime)):
    StartTime = time.time()

    # store stop time - aber vordefinieren
  StopTime = time.time()
  while ((GPIO.input(GPIOEcho) == 1) & (StartTime < EndTime)):
    StopTime = time.time()


    # Wenn keine Antwort vom Sensor empfangen wird, wird 0 mm  ausgegeben
  if StopTime - StartTime < 0.0001:
    StopTime =  StartTime

    # calculate distance
  TimeElapsed = StopTime - StartTime
  Distance = (TimeElapsed * 343000) / 2

  return Distance

#------------------------------------------------#
#-------------Start Program----------------------#
#------------------------------------------------#

#Leere Liste erschaffen
lDistance = []
#Schleife zum messen der Entfernung, wird so oft durchlaufen wie in Cunter uebergeben wurde
while Counter > 0:

  #Entferung messen
  Millimeter = MeasureDistance(GPIOTrigger, GPIOEcho)

  #Entferung zur Liste addieren
  #lDistance.append("%0.0f" % (Millimeter))    #ohne mm
  lDistance.append("%0.0f mm" % (Millimeter))   #mit mm
 
  #dekrementiere Zaehler
  Counter = Counter - 1

#Outputs wieder auf undefinierten Zustand setzen

print lDistance

GPIO.cleanup()


Dieser gibt dir das dann in dieser Form aus

pi@raspberrypiTEICH ~ $ sudo python test_HCSR04.py 18 17 20

['1964 mm', '1969 mm', '1973 mm', '1960 mm', '1983 mm', '1973 mm', '1986 mm', '1982 mm', '1969 mm', '1978 mm', '1973 mm', '1978 mm', '1965 mm', '1974 mm', '1974 mm', '1970 mm', '1974 mm', '1983 mm', '1965 mm', '1970 mm']
oder
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04.py 18 17 20
['1990', '1978', '1969', '1969', '1994', '1982', '1986', '1972', '1978', '1970', '1978', '1964', '1978', '1964', '1969', '1964', '1977', '1973', '1965', '1967']

Je nach dem welche Zeile du auskommentierst.

_________________
____________________
Viele Grüße
Dennis
____________________


Nach oben
 Profil userposition on geomap  
 
BeitragVerfasst: Do 02.Apr 2015 22:05 
Offline
Anonymer User
Benutzeravatar

Registriert: Do 03.Jan 2013 13:07
Cash on hand:
3.339,23 Taler

Beiträge: 646
Hallo zusammen. Danke für den Zuspruch. Dachte schon ich Langeweile euch :)

@ Pfiffikus: Würdest du den code in PHP ändern und in die SW einbinden? Ist nur eine Frage. Wenn du nicht magst musst du nicht. :)

Gesendet von meinem GT-I9305 mit Tapatalk 2

_________________
____________________
Viele Grüße
Dennis
____________________


Nach oben
 Profil userposition on geomap  
 
BeitragVerfasst: Do 02.Apr 2015 23:45 
Offline
Realer User
Realer User
Benutzeravatar

Registriert: Mo 14.Nov 2005 20:39
Cash on hand:
5.718,34 Taler

Beiträge: 14513
Wohnort: 07548 Gera
Hallo Dennis,

herzlichen Dank für Deine Mühe, die Pläne zu zeichnen. In der aktuellen Revision habe ich zur Verwendung der Ultraschallsensoren die passende Hilfedatei geschrieben. Die Schaltpläne habe ich kommentiert und in die Hilfestellungen integriert.


Für das zuerst vorgesehene Foto vom Sensor konnte ich die Nutzungsrechte nicht erhalten. Aus diesem Grunde habe ich einen hier herumliegenden Sensor ins richtige Licht gerückt, Schattenwürfe minimiert und auf den Auslöser gedrückt. Damit ist kein Ärger wegen der Urheberrechte zu befürchten.


schnuffi hat geschrieben:
@ Pfiffikus: Würdest du den code in PHP ändern und in die SW einbinden? Ist nur eine Frage. Wenn du nicht magst musst du nicht. :)

Sehr gern sogar, jedoch sollte das Skript noch ein wenig modifiziert werden. Hilfreich wäre es, wenn gleich ein einziger konkreter Messwert vom Skript ausgegeben würde. Der kann zum Beispiel durch das Schieben des Intervalls ermittelt werden. Bei der von Dir erreichten Zuverlässigkeit könnte auch eine Mittelwertbildung in Frage kommen. Ansonsten müsste mein PHP-Skript die vielen Werte alle einlesen und zählen, bevor sie verarbeitet werden können. Python sollte da schneller arbeiten können.


Pfiffikus,
der dann das Skript in einer künftigen Revision für alle nutzbar machen würde


Nach oben
 Profil userposition on geomap  
 
BeitragVerfasst: Fr 03.Apr 2015 8:40 
Offline
Realer User
Realer User
Benutzeravatar

Registriert: Mo 14.Dez 2009 15:17
Cash on hand:
46,72 Taler

Beiträge: 710
Servus,

nachdem hier unglaublich viel Fachwissen vorhanden ist, stelle ich mir die Frage ob es vielleicht möglich wäre diesen Sensor

http://www.conrad.de/ce/de/product/1822 ... archDetail

zu integrieren?

Preislich im Rahmen und von Haus aus IP64.

Gruß
Bernhard

_________________
______________________________________________________________________________________________________________________
Der wahrscheinlich weltweit einzige Koifutterhändler, der eigentlich gar kein Futter verkaufen will!
http://www.koifutterhandel.de
Lieferung ist tagesformabhängig, Paypalzahlung ist aber möglich.


Nach oben
 Profil  
 
 Betreff des Beitrags: Werbung, um Taler einzunehmen
Verfasst: Sa 27.Apr 2024 19:02 
Online
Expertin
Benutzeravatar

Registriert: Mo 05.Dez 2005 19:01
Cash on hand:
immer zu wenige Taler

Beiträge: nur ein paar
Wohnort: Koi-Schnack
Anzeige:

_________________
Wenn du einen Monat lang ein werbefreies Forum willst, klicke hier und überweise mir 100 Taler!
Wenn du mich im Koi-Schnack etwas fragen möchtest, klicke hier!


Nach oben
 Profil Private Nachricht senden  
 
BeitragVerfasst: Fr 03.Apr 2015 12:44 
Offline
Realer User
Realer User
Benutzeravatar

Registriert: Mo 14.Nov 2005 20:39
Cash on hand:
5.718,34 Taler

Beiträge: 14513
Wohnort: 07548 Gera
Hallo Bernhard,

hoeneß2 hat geschrieben:
nachdem hier unglaublich viel Fachwissen vorhanden ist, stelle ich mir die Frage ob es vielleicht möglich wäre diesen Sensor

http://www.conrad.de/ce/de/product/1822 ... archDetail

zu integrieren?

Preislich im Rahmen und von Haus aus IP64.

das will ich zwar nicht total ausschließen. Aber ich habe mal die Dokumentation dazu überflogen. Habe nicht wirklich verstanden, welcher Art Schnittstelle da dran ist. Und eine Zeile dürfte den Sensor für den direkten Anschluss an den Raspi disqualifizieren:
Dateianhang:
Sensor2.png
Sensor2.png [ 35.42 KiB | 4510-mal betrachtet ]

Quelle

Mag sein, dass Bastler, die hier versammelt sind, trotzdem einen Weg finden können. Dann stünde einer Integration in die Teichsoftware meinerseits nichts im Wege.


Pfiffikus,
der alleine mit der Integration dieses Sensors überfordert wäre


Nach oben
 Profil userposition on geomap  
 
BeitragVerfasst: Fr 03.Apr 2015 17:41 

Cash on hand: Locked
hoeneß2 hat geschrieben:
Servus,

nachdem hier unglaublich viel Fachwissen vorhanden ist, stelle ich mir die Frage ob es vielleicht möglich wäre diesen Sensor

http://www.conrad.de/ce/de/product/1822 ... archDetail

zu integrieren?

Preislich im Rahmen und von Haus aus IP64.

Gruß
Bernhard


Tach auch!(... bedeutet "Guten Tag" Ruhpottslang ist quasi Mundmische, bei Servus steht "Sagt man bei uns gerne zum Anstoßen und ganz wichtig: Nicht vergessen dabei in die Augen zu schauen, sonst habt ihr 7 Jahre schlechten Sex." http://mundmische.de/bedeutung/35929-Servus

Warum wollen wir immer so Hoch hinaus :?:

Ein Einfacher Schwimmerschalter wie Du Bernhard schon mal nach gefragt hast, würde doch schon mal reichen.
Um den Teich nicht leer zu Pumpen oder Filter zu Steuern, ist simpel und zuverlässig :!: :!:

Ein GPIO. als Eingang zwei Widerstände (470 Ohm und 10K.) 5 Zeilen in Python (PHP weis ich nicht so ganz genau evtl T.Google)

Dateianhang:
pegel.jpg


Ich benutze das Prinzip schon lange als Drehzahlmesser für mein SIFI, Windgeschwindigkeit für Wetterstation und Regenmengenmesser (um die Wippen-Schläge zu messen) und als Pegel schalter noch viel Simpler.

IP Klasse alles was beliebt, für kleines Geld. :hallo:

Die Ultraschallsensoren sind ein schöner Zusatz für Anzeigen Visualisierung usw. aber wenn ich etwas Steuern will sollte es erstmal sehr zuverlässig und Solide sein das gilt auch für eine Software.
Dateianhang:
pegel 2.jpg



Bei einer Anzeige bzw. Visualisierung ist das egal da habe ich dann eben Pesch :roll: gehabt, aber bei der Steuerung sind dann evtl. die Fische :oops:
Dateianhang:
ol in klusiv.jpg


Alles nur Anzeige bzw. Visualisierung :hallo: sieht zwar wild aus, ist es aber nicht!
Diente nur meiner Doku. nach ein paar Wochen hat man evtl. nicht mehr alles genau im Kopf und gelötet auf den Platinen sieht es dann noch anders aus.


Nach oben
  
 
BeitragVerfasst: Fr 03.Apr 2015 21:51 
Offline
Anonymer User
Benutzeravatar

Registriert: Do 03.Jan 2013 13:07
Cash on hand:
3.339,23 Taler

Beiträge: 646
Hallo Pfiffikus,

ich habe es jetzt umgesetzt.
Funktioniert im Moment auf 4 mm genau. Bei 1000 Messungen ohne Fehler. Bei meinem Messaufbau wohlgemerkt.

Code:
#-----------------------------#
# Author: Pfiffikus und Dennis#
#-----------------------------#
import time
import RPi.GPIO as GPIO
import sys
import string

#GPIO PINs deklariren
GPIOTrigger = int(sys.argv[1])
GPIOEcho    = int(sys.argv[2])

#Wie oft soll gemessen werden
Counter     = int(sys.argv[3])

#set GPIO PINS
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIOTrigger, GPIO.OUT)
GPIO.setup(GPIOEcho, GPIO.IN)

#set trigger to false
GPIO.output(GPIOTrigger, False)

#Warnings ausschalten um fehlerhafte Logausgaben zu vermeiden
GPIO.setwarnings(False)

# Wait 100ms damit die erste Messung korrekt durchgefuehrt wird
time.sleep(0.1)

#--------------------------------------------#
#--------------Entfernung messen-------------#
#--------------------------------------------#
def MeasureDistance(GPIOTrigger, GPIOEcho):
    # set trigger to high
    GPIO.output(GPIOTrigger, True)

    # set trigger after 100msec to low, mit laengerer Wartezeit als 10mikrosec ist die Genauigkeit hoeher
    time.sleep(0.1)
    GPIO.output(GPIOTrigger, False)

    # store initial start time
    StartTime = time.time()
    # Endzeit festlegen
    EndTime = StartTime + 1

    # store start time
    while ((GPIO.input(GPIOEcho) == 0) & (StartTime < EndTime)):
        StartTime = time.time()

    # store stop time - aber vordefinieren
    StopTime = time.time()
    while ((GPIO.input(GPIOEcho) == 1) & (StartTime < EndTime)):
        StopTime = time.time()


    # Wenn keine Antwort vom Sensor empfangen wird, wird 0 mm  ausgegeben
    if StopTime - StartTime < 0.0001:
        StopTime =  StartTime

    # calculate distance
    TimeElapsed = StopTime - StartTime
    Distance = (TimeElapsed * 343000) / 2

    return Distance

#--------------------------------------------#
#----------Mittelwert ermitteln--------------#
#--------------------------------------------#
def GetAverage(lDistance):
    #Listenlaenge ermittteln
    lengthList = len(lDistance)
    #Wandle List of Strings in List of Ints um
    lDistance = map(int, lDistance)
    #Min und Max Werte der Liste ermitteln
    MIN = min(lDistance)
    MAX = max(lDistance) + 1 # Es muss einer addiert werden damit die Schleife noch einmal durchlaufen wird, wenn viele Werte gleich dem MAX Wert sind
    #Variablen deklarieren
    RANGE = 4           #In welchem Bereich soll gesucht werden Default=6mm, es muss eine gerade Zahl sein!!!!
    i = 0               #Schleifenwert
    average = 0         #Durchschnittswert
    treffer = 0         #aktuelle Treffer
    maxtreffer = 0      #bisherigen max Treffer
    maxSensor = 3000    #Der Sensor kann bis max 3000mm messen
    #Wenn der MAX Wert in der Liste groesser als die Reichweite ist, wird 3000mm als maximum angenommen
    if MAX > maxSensor:
        MAX = maxSensor
    if MIN != 0:
        i = MIN - 1
    #Alle Werte von MIN bis MAX pruefen
    while i < MAX:
        #Alle Werte der Liste durchlaufen und ueberpruefen, wenn Wert in dem Bereich von +- 3mm liegt wird gezaehlt
        a = 0           #Listenanfang muss wieder zu 0 gesetzt werden, da es erneut durchlaufen wird
        treffer = 0
        while a < lengthList:
            if (lDistance[a] > i-(RANGE/2)) and (lDistance[a] < i+(RANGE/2)):
                treffer=treffer+1
            a=a+1
        #Wenn die aktuell gezaehlten Werte groesser sind als die alten werden diese gespeichert
        if treffer > maxtreffer:
            maxtreffer = treffer
            average  = i
        #Wenn alle Werte innerhalb von 6mm liegen, wird die Schleife verlassen, sonst wird bis zum max Wert weiter geprueft
        if maxtreffer == lengthList:
            break
        i=i+1
    return average

#------------------------------------------------#
#-------------Start Program----------------------#
#------------------------------------------------#
#Leere Liste erschaffen
lDistance = []
#Schleife zum messen der Entfernung, wird so oft durchlaufen wie in Counter uebergeben wurde
while Counter > 0:

    #Entferung messen
    Millimeter = MeasureDistance(GPIOTrigger, GPIOEcho)

    #Entferung zur Liste addieren
    lDistance.append("%0.0f" % (Millimeter)) #ohne mm
    #lDistance.append("%0.0f mm" % (Millimeter))#mit mm

    #dekrementiere Zaehler
    Counter = Counter - 1

iDistance = GetAverage(lDistance)
# #Mittelwert als Integer ausgeben on mm Angabex
print iDistance
#Outputs wieder auf undefinierten Zustand setzen
GPIO.cleanup()



Noch genauer hätte man es, wenn man aus den 20 gemessenen Werten alle Werte die innerhalb dieses Bereichs liegen den Mittelwert bildet und diesen ausgibt.

pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[166, 165, 166, 165, 165, 165, 165, 166, 165, 165, 165, 166, 166, 166, 166, 166, 165, 165, 165, 165]
Treffer in einem Range von 2mm = 12
165
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[165, 165, 165, 165, 165, 165, 166, 166, 165, 166, 165, 166, 165, 166, 165, 165, 165, 165, 166, 166]
Treffer in einem Range von 2mm = 13
165
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[165, 165, 165, 166, 165, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165]
Treffer in einem Range von 2mm = 16
165
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[165, 166, 165, 166, 165, 166, 166, 165, 165, 166, 166, 166, 166, 166, 165, 166, 165, 165, 165, 165]
Treffer in einem Range von 2mm = 10
165
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[165, 165, 165, 166, 165, 165, 165, 166, 165, 166, 165, 166, 166, 165, 165, 165, 166, 166, 165, 165]
Treffer in einem Range von 2mm = 13
165
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[166, 165, 165, 165, 166, 166, 165, 166, 165, 165, 166, 166, 166, 166, 165, 166, 165, 164, 165, 165]
Treffer in einem Range von 2mm = 10
165
pi@raspberrypiTEICH ~ $ sudo python test_HCSR04_2.py 18 17 20
[165, 165, 165, 165, 165, 166, 165, 165, 166, 165, 165, 166, 165, 165, 166, 165, 166, 165, 165, 166]
Treffer in einem Range von 2mm = 14
165
usw.

_________________
____________________
Viele Grüße
Dennis
____________________


Nach oben
 Profil userposition on geomap  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 225 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7 ... 23  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de