FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: ollir am 05 Februar 2014, 21:27:46

Titel: Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: ollir am 05 Februar 2014, 21:27:46
Hallo Zusammen,

nach dem wir hier: http://forum.fhem.de/index.php/topic,16519.msg130790.html#msg130790 (http://forum.fhem.de/index.php/topic,16519.msg130790.html#msg130790) nicht weiter gekommen sind wollte ich kurz meine Lösung vorstellen.

Es geht um das Ultaschallmodul HC-SR04 und seine Einbindung in FHEM.
Füllstandsmessung, Näherungsschalter ............

Zuerst einen Dummy mit Attributen anlegen (Hier UC1)
Zitatdefine UC1 dummy
attr UC1 stateFormat Abstand
attr UC1 userReadings Abstand
Dann einen AT-Job anlegen (nicht unter 3Sek. sonst kommt es zu Problemem)
Zitatdefine at_UC1 at +*00:00:03 {system 'sudo /usr/bin/python /opt/fhem/FHEM/UC1.sh &'}
attr at_UC1 verbose 0 
Ein Script mit entspechenden Berechtigungen erstellen
Zitat/opt/fhem/FHEM/UC1.sh
Dieses Script mit folgenden Python-Script füllen
Zitat#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# Orginal-Script von Author : Matt Hawkins ultrasonic_2.py
# Measure distance using an ultrasonic module
#
# --------------------------------------------------------
#           Import required Python libraries
# --------------------------------------------------------
#
# Veraendert von Ollir (FHEM-Forum) fuer die Rueckgabe an
# FHEM per Telnet: Port 7072
#

import time
import RPi.GPIO as GPIO
import os

# --------------------------------------------------------
#                  Define some functions
# --------------------------------------------------------

def measure():
  time.sleep(0.2)
  GPIO.output(GPIO_TRIGGER, True)
  time.sleep(0.0001)
  GPIO.output(GPIO_TRIGGER, False)
  while GPIO.input(GPIO_ECHO)==0:
    start = time.time()
  while GPIO.input(GPIO_ECHO)==1:
    stop = time.time()
  elapsed = stop - start
  distance = elapsed * 17150
  if float(distance) >= 400:
    distance = measure()
  return distance

def measure_average():
  # This function takes 3 measurements and
  # returns the average.
  distance1 = measure()
  distance2 = measure()
  distance3 = measure()
  distance_sum = distance1 + distance2 + distance3
  distance = distance_sum / 3
  return distance

# --------------------------------------------------------
#                        Main Script
# --------------------------------------------------------
# Use BCM GPIO references
# instead of physical pin numbers

GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER = 22   ####  evtl. GPIO anpassen
GPIO_ECHO    = 23   ####  evtl. GPIO anpassen

GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN)      # Echo
GPIO.output(GPIO_TRIGGER, False)

# --------------------------------------------------------
#                Rueckgabe an FHEM
# --------------------------------------------------------

distanceRet = "%.1f" % measure_average() # fuer Mittelwert Messung
#distanceRet = "%.1f" % measure()        # fuer einmalige Messung
if float(distanceRet) <= 400:
  os.system('perl /opt/fhem/fhem.pl 7072 "setreading UC1 Abstand '+str(distanceRet)+'"')
GPIO.cleanup()

Hardwareanschluss:

Der ECHO Ausgang gibt 5V heraus! Spannungsteiler vor den GPIO-IN des RPi's schalten um auf 3V zu kommen.
Der TRIGGER Eingang des HC-SR04 funktioniert auch mit den 3V des RPi GPIO'S


Viel Grüße
Olaf

P.S. Falls jemand Verbesserungen im Script oder eine Modullösung hat, bitte her damit.  :P
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Freibeuter am 31 März 2014, 11:41:36
Hallo, ich möchte das gerne nachbauen um den Wasserstand in einem Schacht zu messen.
Bei den Spannungsteilern bin ich mir unsicher, würde das hier passen ?
http://www.pollin.de/shop/dt/NDY4OTI4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Spannungsregler/Spannungsregler_ST_L78L33ACZ.html
Gruß
Peter F.
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: ollir am 31 März 2014, 13:13:29
Schau mal hier: http://www.mikrocontroller.net/articles/Pegelwandler (http://www.mikrocontroller.net/articles/Pegelwandler)
Dort sind einige Infos
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Freibeuter am 01 April 2014, 15:25:35
Hoppla, das sind wirklich einige Infos.
Ich fürchte etwas zu viele für mich, könntest du mir einen Produktlink schicken oder beschreiben wie Du es gelöst hast?
Gruß
Peter F.
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Freibeuter am 01 April 2014, 15:51:21
Habe da gerade was gefunden :
http://www.gtkdb.de/index_36_2272.html
Sehe ich das richtig, das ich ein 330 und ein 470 Ohm Widerstand benötig ?
Danke für Tips
Gruß
Peter F.
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: inesa394 am 05 April 2014, 15:12:04
Richtig wird benötigt,habe den bei mir auch allerdings nicht in Verbindung mit Fhem
Ist bei mir so eine  Alarmanlage mit PIR Sensor und diesen hier.



Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: fhainz am 20 Juni 2014, 15:08:39
Hallo!

Bin mir klappt das aufrufen der .sh Datei via FHEM nicht.
Wenn ich zb
{system 'sudo /usr/bin/python /opt/fhem/FHEM/hc-sr04.sh &'}
direkt in die befehlszeile eingebe, steht am nächsten screen -1.
Das selbe passiert im at Aufruf und wenn ich das attr verbose 0 weglasse steht auch im Log

2014.06.20 14:58:06 3: at_raspiVT_Ultraschall: -1

Der direkte Aufruf der sh Datei am pi klappt via ssh problemlos.

sudo /usr/bin/python /opt/fhem/FHEM/hc-sr04.sh

Ich hab ein Raspi 512MB Rev 2.

Jemand eine Idee?

Grüße

Edit2:
Hab es hinbekommen. Siehe hier: http://forum.fhem.de/index.php/topic,12611.msg78089.html#msg78089


Edit:
Ich hab hier (5. Post) (http://www.raspberrypi.org/forums/viewtopic.php?f=45&t=22841) gelesen das ein 1k Ohm Widerstand in Serie reicht. Hab es bei mir jetzt so im Einsatz.

Zitat von: mahjongg
Zitat von: Metatronin
So any 5v signal to the GPIO's need just a 1k resistor...is level shifting overkill(like in attached pic)?

Yes level shifting is generally overkill!
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Freibeuter am 26 Juni 2014, 16:22:45
Hallo!
ich komme  leider nicht weiter,
wenn ich folgendes in FHEM eingebe: {system 'sudo /usr/bin/python /opt/fhem/FHEM/UC1.sh &'}
bekomme ich immer -1.
Wenn ich per SSH dieses sende: sudo /usr/bin/python /opt/fhem/FHEM/UC1.sh &
bekomme ich :
~ $ /opt/fhem/FHEM/UC1.sh:59: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  # Trigger

Die GPIO sollten aber frei sein, ich habe sie beide zum Test in FHEM mit define GPIO_0 RPI_GPIO 17 define GPIO_1 RPI_GPIO 18 angelegt und darauf geschrieben / sie gelesen, klappt problemlos.

Auch habe ich das Echo Signal nur mit 10k in Reihe angeschlossen, klappte mit RPI_GPIO mit GRND / 5V.
In der UC1.sh habe ich auch:
   GPIO_TRIGGER = 17   ####  evtl. GPIO anpassen
   GPIO_ECHO    = 18   ####  evtl. GPIO anpassen


Hat einer von Euch eine Idee?
Gruß
Peter F.
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: rippi46 am 28 Dezember 2014, 13:56:54
Das Thema ist zwar schon alt, aber vielleicht hilft es jemandem.

Siehe hier:
http://forum.fhem.de/index.php/topic,12611.msg78089.html#msg78089 (http://forum.fhem.de/index.php/topic,12611.msg78089.html#msg78089)

Post 16 hat bei mir geholfen!!

Ich habe nur das Problem, dass bei jedem Aufruf ein neuer Prozess gestartet wird. Nach ein paar Minuten kann man das System nicht mehr bedienen.

Habe als Quicklösung einen 2. Timer definiert:

define at_UC1kill at +*00:00:10 {system 'sudo pkill UC1.sh >/dev/null >/dev/null'}
attr at_UC1kill verbose 0


Vieleicht hat ja jemand eine bessere Lösung?
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Pazekal am 20 Januar 2017, 17:24:22
Hi Rippi46,

ich habe das gleiche Prozessproblem wie du. Hast du inzwischen eine schöne Lösung dafür gefunden?

VG
Pazekal
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Pit@Jura am 04 September 2018, 11:44:49
Hi Rippi46 und Pazekal,
gerade baue ich eine automatische Pelletsbefüllung mit 2 Lichtschranken. Optimal wäre zusätzlich den Füllstand des Behälters per Ultraschall auszuwerten. Hier habe ich sie bei Euch gefunden.
--> Gibt es schon eine echte Lösung zum automatischen Beenden der Prozesse?
Danke für Eure Antwort.
Titel: Antw:Ultraschall Entfernungsmessung mit Raspberry, FHEM und dem HC-SR04 Modul
Beitrag von: Pit@Jura am 05 Januar 2019, 00:31:28
Hi,
sollte jemand dieses Script noch benutzen: Die Anzahl der nicht geschlossenen Python-Prozesse kann man deutlich reduzieren, wenn man in dem Python Script die letzte Zeile um zwei Zeichen einrückt oder vor die letzte Zeile einen Zeilenumbruch setzt. Ich bin Python-Anfänger - ich habe aber verstanden, dass der Compiler sehr streng mit Einrückungen umgeht.
LG