• Erste Schritte
  • Hardware & GPIO
  • Projekte
  • Software
    • Webserver
  • Arduino & ESP8266
  • Hausautomatisierung
  • Sonstiges
    • News
Facebook Twitter YouTube
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
  • Einstieg
    • Erste Schritte
      • Raspberry Pi 3 Einstieg - Starter KitWas brauche und wie starte ich? – Raspberry Pi Einstieg
    • Einrichtung
      • microsd_karte_menuRaspbian Betriebssystem auf eine SD Karte flashen – Einfach & Schnell
      • wlanbluetooth_menuWLAN und Bluetooth einrichten – Raspberry Pi 4
      • wifi_menuWLAN Stick installieren und einrichten – Alternative
      • bash_menuSSH Zugriff einrichten via Putty – Kommandozeilen Zugriff
      • rdp_menuRemotedesktop Verbindung aufbauen – Fernsteuerung
    • Einsteiger Projekte
      • Sinnvolles Raspberry Pi Zubehör
      • 15 Raspberry Pi Projekte für Anfänger
      • Ampelschaltung mit GPIOs
      • GPIOs mit Port Expander erweitern
      • Elektronischer Würfel
      • 13 tolle Projekte für Kinder und Jugendliche
      • Roboter selber bauen
      • In Visual Studio Code mit C++ programmieren
      • Wünsch dir ein Tutorial
    • Programmieren lernen
      • Teil 1: Einführung
      • Teil 2: GPIOs steuern
      • Teil 3: GUI erstellen
      • Teil 4: PWM
      • C# GUI Apps entwickeln
  • Hardware & GPIO
    • 50 der wichtigsten Raspberry Pi Sensoren und Module – Aufgelistet mit Links zu den TutorialsRaspberry Pi Sensoren
    • Beliebte Tutorials
      • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
      • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
      • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Funksteckdosen (433MHz) steuern
      • Raspberry Pi Relais ModulRaspberry Pi: Relais-Schalter per GPIO steuern
      • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
      • Amazon-Alexa-deutsch-auf-dem-Raspberry-Pi-installierenAmazon Alexa (Deutsch) auf dem installieren
      • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
      • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren
      • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
      • Raspberry Pi USB Boot per Stick oder SSD Festplatte einrichtenUSB Boot per Stick oder SSD Festplatte
      • Analog
        • Raspberry Pi MCP3008 ADCMCP3008: Am Raspberry Pi analoge Signale auslesen
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
        • Raspberry Pi PulsmesserRaspberry Pi Pulsmesser: Herzfrequenz messen
        • Joystick am Raspberry Pi benutzen (mit MCP3008)Joystick am Raspberry Pi benutzen (mit MCP3008)
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Drehregler - Rotary EncoderKY040 Drehregler als Lautstärkeregler für den Raspberry Pi
        • Easpberry Pi Soil SensorBodenfeuchtigkeit mit dem Raspberry Pi messen
        • Raspberry Pi KeypadRaspberry Pi Keypad anschließen – Codeschloss
        • Raspberry Pi door sensorÜberwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
        • Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)
      • Funk
        • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren lassen
        • Remote Control Raspberry Pi 433Mhz Radio TransmitterRaspberry Pi mit 433Mhz Funksender fernsteuern
        • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433MHz) steuern
        • Raspberry Pi MiFlora - Xiaomi Pflanzensensor in OpenHAB einbindenMiFlora – Xiaomi Pflanzensensor ins Smart Home einbinden
        • Raspberry Pi RFID RC522 TüröffnerRaspberry Pi RFID RC522 Tags auslesen (NFC)
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation (2.4 GHz): Arduino & Raspberry Pi
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen
        • Raspberry Pi Xbox 360 Wireless ControllerRaspberry Pi mittels Xbox 360 Controller steuern
        • Raspberry Pi GSM Modul - Huawei Internet SticksRaspberry Pi GSM Modul – Mobiles Internet
        • Raspberry Pi Bluetooth DatentransferRaspberry Pi Bluetooth Datentransfer zum Smartphone
      • Infrarot & Laser
        • Raspberry Pi Infrarot FernbedienungRaspberry Pi: Per IR Remote Befehle ausführen
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Laser Lichtschranke für weite DistanzenRaspberry Pi Laser Lichtschranke für weite Distanzen
        • Infrarot Raspberry Pi FernbedienungInfrarot Steuerung einrichten
        • Raspberry Pi Infrarot Lichtschranke bauen und Geschwindigkeit messenRaspberry Pi Infrarot Lichtschranke bauen
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
      • Temperatur & Navigation
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorRaspberry Pi: Luftfeuchtigkeit und Temperatur messen
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Raspberry Pi RTC Real Time ClockReal Time Clock Modul steuern
        • Rotation und Beschleunigung mit dem Raspberry Pi messenRotation und Beschleunigung mit dem Raspberry Pi messen
        • Raspberry Pi GPS ModulRaspberry Pi GPS Ortungs- / Navigationsgerät bauen
        • Raspberry Pi Kompass selber bauenRaspberry Pi Kompass selber bauen (HMC5883L)
        • Kontaktlosen Infrarot-Temperatursensor MLX90614 am Raspberry Pi auslesenMLX90614 – Kontaktlos Temperaturen messen
      • Displays
        • Raspberrry Pi HD44780 I2CHD44780 LCD Display per I2C ansteuern
        • Raspbery Pi LCD DisplayRaspberry Pi LCD Display: 16×2 Zeichen anzeigen
        • DisplayTipps & Tricks zum offiziellen 7″ Raspberry Pi Touchscreen
        • Raspberry Pi TouchscreenTestbericht zum 7″ Raspberry Pi Touchscreen Display
        • LCD Touch Display (3.2″) am Raspberry PiLCD Touch Display (3.2″) am Raspberry Pi
        • tft lcd touch displayRaspberry Pi LCD Touch Display Teil 2 – Anpassungen
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtRaspberry Pi LED Matrix – Projektübersicht
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige mit MAX7219 am Raspberry Pi (Anode)
        • Raspberry Pi Tablet Raspad TestberichtRaspberry Pi Tablet „Sunfounder RasPad“ Testbericht
      • Motoren & Sonstige
        • Raspberry Pi Stepper Motor Control with L293D / ULN2003ARaspberry Pi Schrittmotor ansteuern
        • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
        • Raspberry Pi PCA9685 mehrere Servos gleichzeitig steuernMehrere Servo Motoren per Raspberry Pi steuern
        • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
        • How to use a Raspberry Pi Fingerprint Sensor for AuthenticationRaspberry Pi Fingerprint Sensor zur Authentifizierung nutzen
        • Raspberry Pi Akku AdapterRaspberry Pi mit Akkus/Batterien betreiben
        • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
        • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
        • Raspberry Pi WS2812 RGB LED StripWS2812 RGB LED Streifen per Raspberry Pi steuern
        • Raspberry Pi Überwachungskamera LivestreamÜberwachungskamera Livestream einrichten
        • NoIRAufnahmen mit dem offiziellen Kamera Modul
        • Raspberry Pi Zero - establishing an Ethernet connection (ENC28J60)Raspberry Pi Zero – Ethernet Verbindung
  • Software
    • Webserver Installation
      • apache2_menu25Teil 1 – Apache2
      • php_menu25Teil 2 – PHP 5
      • mysql_menu25Teil 3 – MySQL
      • phpmyadmin_menu25Teil 4 – phpMyAdmin
      • ftp_menu25Teil 5 – FTP Server
      • dns_menu25Teil 6 – DNS Server via No-IP
      • home_menu25Homeverzeichnis ändern
      • share_25Samba Server: Dateien im Netzwerk teilen
      • nodejs_menu25Node.js Webserver installieren und GPIOs schalten
      • ssl_menu25SSL Zertifikat kostenlos mit Let’s Encrypt
      • wordpress_25Eigenen WordPress-Server einrichten
      • cloud-25Nextcloud auf dem Raspberry Pi installieren
    • Entertainment
      • led_menu25Raspberry Pi Ambilight für alle Geräte mit OSMC selber bauen
      • amazon_menu25Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
      • controller_25Raspberry Pi RetroPie – Spielekonsole selber bauen
      • kodi_menu25Mediencenter Raspbmc als SmartTV mit dem Raspberry Pi
      • android_25Android TV Box zum selber bauen
      • apple-2316234_640Raspberry Pi als AirPlay-Empfänger
      • jukebox_menu25Raspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.)
      • steam_25Steam Spiele streamen
      • minecraft_menu25Raspberry Pi Minecraft Server
      • youtube_25YouTube Live Streaming einrichten
      • qr-code-tutorials-raspberrypi.de_25Raspberry Pi QR / Barcode Scanner
    • Fernsteuerung
      • rdp_menuRaspberry Pi Remotedesktop Verbindung
      • ssh_menu25SSH Zugriff einrichten via Putty (Windows)
      • vnc_menu25Raspberry Pi mittels VNC fernsteuern
      • welcome_menu25SSH Terminal Begrüßung ändern
      • telegram1_menu25Telegram Messenger auf dem RaspberryPi
      • telegram2_menu25Mit Telegram Messenger Raspberry Pi steuern
      • bluet_menu25Raspberry Pi Bluetooth Datentransfer zum Smartphone
      • alexa_voice_25Eigenen Raspberry Pi Alexa Skill bauen
      • microphone_25Sprachsteuerung selber bauen
      • mqtt_25MQTT Broker/Client Funkkommunikation
      • mail_25Vom Raspberry Pi Emails senden
      • twitter_25Per Twitter Bot Nachrichten posten
    • Weitere
      • loggen_menu25Sensordaten mit ThingSpeak loggen und auswerten
      • mysql_datalogger25Per lokaler MySQL Datenbank zum Raspberry Pi Datenlogger
      • opencv_menu25OpenCV auf dem Raspberry Pi installieren
      • arduino_menu30tWiringPi installieren & Pinbelegung (Raspberry Pi)
      • radio_menu25Raspberry Pi als Radio Sendestation
      • win10_menu25Windows 10 IoT auf dem Raspberry Pi installieren
      • printer_25Drucker einrichten und per Knopfdruck Bilder drucken
      • gsm_menu25Raspberry Pi GSM Modul – Mobiles Internet (LTE, 3G, UMTS)
      • autostart_menu25Autostart: Programm automatisch starten lassen
      • machine-learning-25Raspberry Pi Machine Learning erlernen
  • Projekte
      • roboter_menu30tRoboter
        • Raspberry Pi Roboter ProjektRaspberry Pi Roboter Projektübersicht
        • Raspberry Pi Roboter Bausatz fertigTeil 1: Zusammenbau
        • Raspberry Pi Roboter - Linien folgenTeil 2: Linien folgen lassen
        • Raspberry Pi Roboter per Infrarot Fernbedienung steuernTeil 3: Per Infrarot Fernbedienung steuern
        • Raspberry Pi Roboter: Ultraschall AutopilotTeil 4: Automatisch Hindernissen ausweichen
        • Raspberry Pi Roboter der eigenen Stimme folgen lassenTeil 5: Der eigenen Stimme folgen lassen
        • Raspberry Pi Roboter mit Xbox 360 Controller fernsteuernTeil 6: Mit Xbox 360 Controller Roboter fernsteuern
        • Raspberry Pi Robot Arm 6DOF6-Gelenkigen Roboter Arm am Raspberry Pi betreiben (6 DOF)
      • led_menu30LED Matrix
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtMAX7219 LED Matrix – Projektübersicht
        • 8×8 LED Dot Matrix Parts8×8 LED Matrix – Zusammenbau und Installation
        • Raspberry Pi Bibliothek für mehrzeilige m x n MAX7219 LED MatrizenBibliothek für mehrzeilige m x n MAX7219 LED Matrizen
        • Graphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnenGraphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnen
        • Pong auf MAX7219 Matrizen spielen (mit Joystick) – Raspberry PiPong auf MAX7219 Matrizen spielen (mit Joystick)
        • Snake auf Raspberry Pi MAX7219 Matrizen spielenSnake auf Raspberry Pi MAX7219 Matrizen spielen
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige (Anode) mit MAX7219/MAX7221
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
      • wetterstation_menu30Wetterstation
        • Raspberry Pi Wetterstation mit OpenHAB 2 bauenEigene Raspberry Pi Wetterstation mit OpenHAB 2 bauen
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
        • raspberry_pi_thingspeak_daten_loggenSensordaten mit ThingSpeak loggen und auswerten
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
      • arduino_menu30tArduino & ESP8266
        • ESP8266 Microcontroller BoardEinführung & Programmierung des ESP8266 NodeMCU Boards
        • Raspberry Pi + ESP8266 NodeMCU: Per WLAN Daten sendenRaspberry Pi + ESP8266 NodeMCU: Per WLAN Daten senden
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Mit dem NodeMCU ESP8266 433MHz Funksteckdosen steuernMit dem NodeMCU ESP8266 433MHz Funksteckdosen steuern
        • ESP8266 NodeMCU HD44780 LCD Display per I2C steuernNodeMCU ESP8266: HD44780 LCD Display per I2C steuern
        • ESP8266 Grafikdisplay: Am SSD1306 OLED per I2C Bilder & Text anzeigen
        • ESP8266 Google Maps API RoutenplanerESP8266 Google Maps API Routenplaner auf LCD anzeigen
        • 2000px-Arduino_Logo.svgRaspberry Pi und Arduino – Einführung
        • arduino unoArduino und Raspberry Pi miteinander kommunizieren lassen
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation zwischen Raspberry Pi’s und Arduinos (2.4 GHz)
        • NodeMCU: ESP8266 mit Solarpanel und Akku mit Strom versorgenNodeMCU: ESP8266 mit Solarzelle und Akku mit Strom versorgen
        • ESP8266 Access Point: Günstigen Wlan Repeater selber bauenESP8266 Access Point: Günstigen Wlan Repeater selber bauen
      • Mini Projekte
        • Raspberry Pi Gewächshaus automatisch selber bauenAutomatisches Raspberry Pi Gewächshaus selber bauen
        • Eigene Raspberry Pi Gartenbewässerung mit Webseite bauenEigene Gartenbewässerung mit Webseite bauen
        • Raspberry Pi Radio StationRaspberry Pi als Radio Sendestation verwenden
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen (Autoradio, Car PC)
        • spotify-logo-primary-horizontal-dark-background-rgbRaspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.) – Online Radio
        • Raspberry Pi RetroPie Guide - SNES Classic Spielekonsole selber bauenRaspberry Pi RetroPie Guide – SNES Spielekonsole bauen
        • Android + Raspberry Pi: Funksteckdosen App BedienungRaspberry Pi + Android/iOS: Funksteckdosen per App schalten
        • Indirekte Deckenbeleuchtung selber bauen mit farbigem LED LichtIndirekte Deckenbeleuchtung selber bauen mit farbigem LED Licht
  • Sonstiges
    • Wünsch dir ein Tutorial
    • News
    • Reviews
      • Pi Cap – Kapazitives Raspberry Pi Erweiterungsboard
      • Raspberry Pi Tablet „Sunfounder RasPad“ – Testbericht & Einrichtung
      • Testbericht zum 7″ Raspberry Pi Touchscreen Display
      • CrowPi 2 Testbericht: Laptop & Lern-Kit für Kinder
      • Daten auf dem Wio Terminal LCD Screen anzeigen
    • Raspberry Pi Zero
      • Offizielles 5$ Raspberry Pi Zero Modul vorgestellt
      • Raspberry Pi Zero – Ethernet Verbindung herstellen (ENC28J60)
      • Raspberry Pi: WS2801 RGB LED Streifen anschließen und steuern
  • Hausautomation
    • OpenHAB
      • steckdose_25Sonoff S20 Wifi Steckdose steuern
      • wireless_25Funksteckdosen (433 MHz) schalten
      • schalter_25Relais steuern (Rollladen, Lichter, etc.)
      • wetterstation_menu30Wetterstation mit OpenHAB 2 bauen
      • ws28_25WS28xx RGB LED Streifen steuern
      • touchscreen_25Touchscreen Panel bei Näherung aktivieren
      • mqtt_25MQTT Datenabfrage: Raspberry Pi an ESP8266
      • spotify_25Remote Spotify Player im Smart Home
      • heizung_25eQ-3 Thermostat im Smart Home
    • Einführung
      • Raspberry Pi Smart Home OpenHAB installierenOpenHAB installieren & konfigurieren
      • Home Assistant auf dem Raspberry Pi – Erste Schritte
    • ESP8266 NodeMCU
      • esp8266_25Einführung & Programmierung
      • arduino_25ESP8266: Arduino IDE installieren
      • lcd_25NodeMCU HD44780 LCD
      • battery_25Batteriebetrieb via Deep-Sleep
      • wifi_menuPer WLAN Daten senden
      • wetterstation_menu30Wetterstation Außenposten
      • maps_25Google Maps Routenplaner
      • wireless_25NodeMCU Funksteckdosen steuern
      • mail_25Vom NodeMCU Emails versenden
      • rgb_25WS2812B LEDs am Smartphone steuern
      • solar_25ESP8266 Stromversorgung mit Solarzelle
    • Überwachung
      • Aufnahmen mit dem offiziellen Kamera Modul des Raspberry Pi
      • Raspberry Pi: Überwachungskamera Livestream einrichten
      • mailbox_25Briefkasten Sensor – Email Benachrichtigung bei neuer Post
      • Raspberry Pi Überwachungskamera mit Webcam betreiben
      • Überwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
      • ESP32 Cam Livestream Tutorial für Kamera Modul
    • Raspberry Pi + Android: Benachrichtigungen von Bewegungsmelder
    • Raspberry Pi + Android/iOS: Funksteckdosen per App schalten
    • Raspberry Pi + Android: Schwenkbarer Kamera-Livestream
      • Smart Home
        • Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
        • Raspberry Pi Funksteckdosen (433MHz) steuern – Tutorial
        • Raspberry Pi Sprachsteuerung selber bauen (Hausautomatisierung)
  • Englisch
  • Französisch
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
Home»Hardware & GPIO»Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry Pi

Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry Pi

Facebook Twitter LinkedIn Tumblr Email Reddit
Teilen
Facebook Twitter LinkedIn Email Tumblr Reddit Telegram WhatsApp

Bei vielen (Außen-)Projekten ist eine Abstandsmessung nötig oder von Vorteil. Diese kleinen Module gibt es bereits ab 1-2 € und können die Entfernung bis zu 4,5 m per Ultraschall messen und sind dabei erstaunlich genau. Der Anschluss und die Ansteuerung wird in diesem Tutorial gezeigt.

 

Zubehör

  • HC-SR04 Modul
  • Widerstände (330 Ω und 10k Ω)
  • Jumper Kabel

 

Aufbau

Auf dem Ultraschall Modul sind 4 Pins, die an das Raspberry angeschlossen werden:

  • VCC an Pin 2 (VCC)
  • GND an Pin 6 (GND)
  • TRIG an Pin 12 (GPIO18)
  • an ECHO wird der 330 Ω Widerstand angeschlossen.  An dessen Ende geht eine Verbindung zu Pin 18 (GPIO24) und über den 10k Ω Widerstand eine Verbindung zu Pin6 (GND).

Dies machen wir, da die GPIO Pins nur max. 3.3V vertragen. Die Verbindung zu GND ist aufgrund dessen, damit ein eindeutiges Signal an GPIO24 anliegt. Wird kein Impuls gesendet, ist durch die Verbindung mit GND das Signal auf 0, bei einem Signal 1. Wäre keine Verbindung zu GND hergestellt, wäre bei fehlendem Signal der Zustand undefiniert (je nach Zufall 0 oder 1), also nicht eindeutig.

Hier noch der Aufbau als Schaubild:

 

ultraschall_Steckplatine
Im Schaltplan sind 470Ω verwendet, was jedoch häufig zu Problemen führt, daher sind 10kΩ zu empfehlen.

 

Skript zur Ansteuerung

Zuerst einmal sollte die Python GPIO Library installiert sein. Ist dies nicht der Fall, kannst du am Anfang dieses Tutorials nachlesen, wie dies geht.

Um das Modul nutzen zu können erstellen wir also ein neues Skript

sudo nano ultraschallsensor_entfernung.py

mit folgendem Inhalt:

Python
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
#Bibliotheken einbinden
import RPi.GPIO as GPIO
import time
 
#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
 
#GPIO Pins zuweisen
GPIO_TRIGGER = 18
GPIO_ECHO = 24
 
#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
 
def distanz():
    # setze Trigger auf HIGH
    GPIO.output(GPIO_TRIGGER, True)
 
    # setze Trigger nach 0.01ms aus LOW
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)
 
    StartZeit = time.time()
    StopZeit = time.time()
 
    # speichere Startzeit
    while GPIO.input(GPIO_ECHO) == 0:
        StartZeit = time.time()
 
    # speichere Ankunftszeit
    while GPIO.input(GPIO_ECHO) == 1:
        StopZeit = time.time()
 
    # Zeit Differenz zwischen Start und Ankunft
    TimeElapsed = StopZeit - StartZeit
    # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
    # und durch 2 teilen, da hin und zurueck
    distanz = (TimeElapsed * 34300) / 2
 
    return distanz
 
if __name__ == '__main__':
    try:
        while True:
            abstand = distanz()
            print ("Gemessene Entfernung = %.1f cm" % abstand)
            time.sleep(1)
 
        # Beim Abbruch durch STRG+C resetten
    except KeyboardInterrupt:
        print("Messung vom User gestoppt")
        GPIO.cleanup()

Danach führen wir noch aus:

sudo python ultraschallsensor_entfernung.py

Damit wird nun jede Sekunde der Abstand gemessen, bis das Skript mittels STRG+C abgebrochen wird.
Das war es auch schon. Die Einsatzorte sind zahlreich, wer noch größere Abstände messen will, müsste auf ein Lasermessgerät zurückgreifen, welche allerdings um einiges teurer sind.

entfernung messen HC-SR04 python ultraschall ultraschall modul ultraschall sensor
Teilen Facebook Twitter Pinterest LinkedIn Tumblr Email
Vorheriger BeitragRaspberry Pi mittels VNC fernsteuern
Nächster Beitrag Graphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnen

Ähnliche Beiträge

ESP32 TDS Sensor: Wasserqualität im Smart Home messen

ESP32 pH-Sensor – Automatische pH-Messung für Pool und Hydroponik

Home Assistant auf dem Raspberry Pi – Erste Schritte

Mit der Raspberry Pi REST API via Python alle GPIOs steuern

373 Kommentare

  1. Martin Bruckner am 5. November 2014 8:15

    Guten Tag,

    wie lange darf das Kabel vom Pi zum Sensor maximal sein?

    mfg,
    Martin

    Antworten
    • Felix am 5. November 2014 11:25

      Hallo,

      das kommt hauptsächlich auf das Kabel an. Bei normalen Jumper Kabel sind 20-30cm ideal, bei höherwertigen Kabeln evtl. auch mehr. Das hat mit dem Spannungsabfall zu tun, daher würde ich es individuell testen.

      LG
      Felix

      Antworten
    • Stefan am 10. Juni 2020 15:20

      Hallo Raspi-Jünger,

      eine kleine Anmerkung zur Verkabelung:
      Am Triggeranschluß kommen ca. 4,5 V an, das könnte für den Raspi-GPIO gefährlich werden. Daraufhin habe ich einen zusätzlichen 560 Ohm Widerstand von Masse auf den Triggeranschluß gelegt und jetzt funktioniert es einwandfrei.

      Beste Grüße, Stefan

      Antworten
  2. Martin Bruckner am 5. November 2014 8:15

    Guten Tag,

    wie lange darf das Kabel vom Pi zum Sensor maximal sein?

    mfg,
    Martin

    Antworten
    • Felix am 5. November 2014 11:25

      Hallo,

      das kommt hauptsächlich auf das Kabel an. Bei normalen Jumper Kabel sind 20-30cm ideal, bei höherwertigen Kabeln evtl. auch mehr. Das hat mit dem Spannungsabfall zu tun, daher würde ich es individuell testen.

      LG
      Felix

      Antworten
    • Tim am 19. Juli 2024 14:19

      Was für wiederstand brauche ich 330 Ω Ohm (1/4w 0,25W) oder 2w ?
      Wie ist es bei den 470 Ω Ohm das selbe?

      Antworten
  3. Michael am 12. Dezember 2014 23:59

    Hi,
    schöne Beschreibung nur eine Frage
    funktioniert mit 1 k und 2 k Wiederstand aber sehr ungenau
    bei 330 — 470 Ohm überhaupt nicht

    Eine Idee ?

    Antworten
    • Florian am 2. Januar 2015 16:30

      Hallo Michael,

      bei mir ist das selbe Problem. Ich habe auch einen Spannungsteiler von 330ohm und 470ohm benutzt und bekomme an meinem Raspberry Pi B + ständig nur folgenden Fehler.

      UboundLocalError: local varable ‚StopZeit‘ referenced before assignment

      Kann hier jemand weiterhelfen?

      Antworten
      • Felix am 2. Januar 2015 16:34

        Hi,
        versuche mal die zweite Zeile hiervon hinzuzufügen (Zeile 25):

          StartZeit = time.time()
          StopZeit = time.time()

        Habe das oben aktualisiert.

      • Daniel am 5. Februar 2015 18:37

        Hallo Florian,

        hat der Tipp von Felix bei Dir funktioniert oder hast Du eine andere Lösung gefunden?

        Gruß Daniel

  4. Michael am 12. Dezember 2014 23:59

    Hi,
    schöne Beschreibung nur eine Frage
    funktioniert mit 1 k und 2 k Wiederstand aber sehr ungenau
    bei 330 — 470 Ohm überhaupt nicht

    Eine Idee ?

    Antworten
    • Florian am 2. Januar 2015 16:30

      Hallo Michael,

      bei mir ist das selbe Problem. Ich habe auch einen Spannungsteiler von 330ohm und 470ohm benutzt und bekomme an meinem Raspberry Pi B + ständig nur folgenden Fehler.

      UboundLocalError: local varable ‚StopZeit‘ referenced before assignment

      Kann hier jemand weiterhelfen?

      Antworten
      • Felix am 2. Januar 2015 16:34

        Hi,
        versuche mal die zweite Zeile hiervon hinzuzufügen (Zeile 25):

          StartZeit = time.time()
          StopZeit = time.time()

        Habe das oben aktualisiert.

      • Daniel am 5. Februar 2015 18:37

        Hallo Florian,

        hat der Tipp von Felix bei Dir funktioniert oder hast Du eine andere Lösung gefunden?

        Gruß Daniel

  5. Maxe am 15. Januar 2015 16:56

    wenn ich jetzt aber öfters in der sekunde messem möchte z.B. alle 0.001 sekunden oder so wie mache ich das und komme ich irgendwann an die grenezen der technik?

    Antworten
    • Felix am 15. Januar 2015 18:16

      Hi Maxe,
      ich hatte mal einen Test mit den GPIOs und der Motorsteuerung gemacht, wobei die maximale Grenze mit Python bei 0.005 Sekunden waren (soviel ich mich erinnere). Evtl. ist mit C/C++ noch ein wenig mehr drin, aber wie du richtig gesagt hast, stößt man dann auch an die Grenzen der Hardware.

      Antworten
      • Maxe am 16. Januar 2015 14:52

        ok danke aber wie bringe ich das ich den code?

        etwa so?

          try:
            while True:
              abstand = distanz()
              print ("Gemessene Entfernung = %.1f cm" % abstand)
              time.sleep(0.005)
         
          # Beim Abbruch durch STRG+C resetten
          except KeyboardInterrupt:

        oder wo dann?

      • Felix am 16. Januar 2015 15:52

        Ja das würde klappen, wobei du die Zeit des Ultraschalls mit einberechnen musst. Hast du also z.B. einen Gegenstand der 3.5m weit weg ist würde die „Berechnung“ nochmal ca. 0.02 Sekunden dauern (350/34300 * 2). Je nach Abstand kann das variieren.

    • Skippy1411 am 13. März 2015 20:32

      Ja der Schall braucht ja schon länger als das was du sagst ^^

      Antworten
  6. Maxe am 15. Januar 2015 16:56

    wenn ich jetzt aber öfters in der sekunde messem möchte z.B. alle 0.001 sekunden oder so wie mache ich das und komme ich irgendwann an die grenezen der technik?

    Antworten
    • Felix am 15. Januar 2015 18:16

      Hi Maxe,
      ich hatte mal einen Test mit den GPIOs und der Motorsteuerung gemacht, wobei die maximale Grenze mit Python bei 0.005 Sekunden waren (soviel ich mich erinnere). Evtl. ist mit C/C++ noch ein wenig mehr drin, aber wie du richtig gesagt hast, stößt man dann auch an die Grenzen der Hardware.

      Antworten
      • Maxe am 16. Januar 2015 14:52

        ok danke aber wie bringe ich das ich den code?

        etwa so?

          try:
            while True:
              abstand = distanz()
              print ("Gemessene Entfernung = %.1f cm" % abstand)
              time.sleep(0.005)
         
          # Beim Abbruch durch STRG+C resetten
          except KeyboardInterrupt:

        oder wo dann?

      • Felix am 16. Januar 2015 15:52

        Ja das würde klappen, wobei du die Zeit des Ultraschalls mit einberechnen musst. Hast du also z.B. einen Gegenstand der 3.5m weit weg ist würde die „Berechnung“ nochmal ca. 0.02 Sekunden dauern (350/34300 * 2). Je nach Abstand kann das variieren.

    • Skippy1411 am 13. März 2015 20:32

      Ja der Schall braucht ja schon länger als das was du sagst ^^

      Antworten
  7. Pippo am 24. Januar 2015 16:52

    Sehr schönes Tutorial, hat dank guter Erklärung auf anhieb geklappt.

    Ist es möglich die gemessenen Werte in einer Datei abzuspeichern? Wenn ja, wie kann ich dies bewerkstelligen?

    lg
    pippo

    Antworten
    • Felix am 24. Januar 2015 17:52

      Dankeschön. Klar kannst du die Werte auch in einer Datei speichern. Mal ein Bsp:

      file_out = open("Testdatei.txt","w")
      file_out.write("test")
      file_out.close()

      Mehr dazu findest du in den Python Docs: https://docs.python.org/2/tutorial/inputoutput.html

      Antworten
  8. Pippo am 24. Januar 2015 16:52

    Sehr schönes Tutorial, hat dank guter Erklärung auf anhieb geklappt.

    Ist es möglich die gemessenen Werte in einer Datei abzuspeichern? Wenn ja, wie kann ich dies bewerkstelligen?

    lg
    pippo

    Antworten
    • Felix am 24. Januar 2015 17:52

      Dankeschön. Klar kannst du die Werte auch in einer Datei speichern. Mal ein Bsp:

      file_out = open("Testdatei.txt","w")
      file_out.write("test")
      file_out.close()

      Mehr dazu findest du in den Python Docs: https://docs.python.org/2/tutorial/inputoutput.html

      Antworten
  9. Pippo am 25. Januar 2015 13:05

    Erst einmal Danke für deine Schnelle Antwort, Felix!

    Wo genau würde ich diesen Block im Skript einfügen, ist Zeile 50 richtig?

    Leider ist mir auch nicht ganz klar wie ich es hin bekomme, dass die gemessen Abstände in die txt.Datei geschrieben werden.

    lg
    Pippo

    Antworten
    • Felix am 25. Januar 2015 13:49

      Eine Möglichkeit wäre so:

      if __name__ == '__main__':
        try:
          file_out = open("Testdatei.txt","a")
          while True:
            abstand = distanz()
            print ("Gemessene Entfernung = %.1f cm" % abstand)
            file_out.write("%.1f cmn" % abstand)
            time.sleep(1)
       
        # Beim Abbruch durch STRG+C resetten
        except KeyboardInterrupt:
          print("Messung vom User gestoppt")
          GPIO.cleanup()
          file_out.close()

      Du musst die Datei erst einmal öffnen. Mit dem file_out.write("test") schreibst du „test“ in das Dokument (Achtung: es macht danach keinen Zeilenumbruch). Danach schließt du die Datei, um zu speichern.
      Beim Öffnen gibt es verschiedene Modi wie „r“ (nur zum lesen), „w“ (zum Schreiben, allerdings wird dadurch der vorherige Inhalt der Datei gelöscht) und „a“ (zum Schreiben am Ende der Datei, ohne dass das vorherige gelöscht wird).
      Zum Einfügen eines Zeilenumbruchs fügst du ein „n“ an das Ende jeder Zeile hinzu (siehe Beispiel oben).

      Antworten
  10. Pippo am 25. Januar 2015 13:05

    Erst einmal Danke für deine Schnelle Antwort, Felix!

    Wo genau würde ich diesen Block im Skript einfügen, ist Zeile 50 richtig?

    Leider ist mir auch nicht ganz klar wie ich es hin bekomme, dass die gemessen Abstände in die txt.Datei geschrieben werden.

    lg
    Pippo

    Antworten
    • Felix am 25. Januar 2015 13:49

      Eine Möglichkeit wäre so:

      if __name__ == '__main__':
        try:
          file_out = open("Testdatei.txt","a")
          while True:
            abstand = distanz()
            print ("Gemessene Entfernung = %.1f cm" % abstand)
            file_out.write("%.1f cmn" % abstand)
            time.sleep(1)
       
        # Beim Abbruch durch STRG+C resetten
        except KeyboardInterrupt:
          print("Messung vom User gestoppt")
          GPIO.cleanup()
          file_out.close()

      Du musst die Datei erst einmal öffnen. Mit dem file_out.write("test") schreibst du „test“ in das Dokument (Achtung: es macht danach keinen Zeilenumbruch). Danach schließt du die Datei, um zu speichern.
      Beim Öffnen gibt es verschiedene Modi wie „r“ (nur zum lesen), „w“ (zum Schreiben, allerdings wird dadurch der vorherige Inhalt der Datei gelöscht) und „a“ (zum Schreiben am Ende der Datei, ohne dass das vorherige gelöscht wird).
      Zum Einfügen eines Zeilenumbruchs fügst du ein „n“ an das Ende jeder Zeile hinzu (siehe Beispiel oben).

      Antworten
      • Alex am 18. September 2020 16:27

        Hallo Felix,

        gibt es auch eine Möglichkeit einen Wert in die Datei zu schreiben wenn die Entfernung einen bestimmten Wert unterschreitet?

      • Felix am 4. Oktober 2020 13:24

        Klar, mit os.system("") kannst du einfach Shell Befehle ausführen (bspw. echo "Test" >> datei.txt)

  11. Pippo am 25. Januar 2015 17:17

    Ich danke dir vielmals! Genauso hatte ich mir das vorgestellt. 🙂

    Antworten
  12. Pippo am 25. Januar 2015 17:17

    Ich danke dir vielmals! Genauso hatte ich mir das vorgestellt. 🙂

    Antworten
  13. Raspi_newbie am 17. Februar 2015 9:24

    Kurze Verständnis-Frage: Du schreibst oben im Abschnitt „Aufbau“, dass „an ECHO wird der 330Ω Widerstand angeschlossen. An dessen Ende geht eine Verbindung zu Pin 16 (GPIO23)“ aber im Bild und im Script ist von GPIO.ECHO=24 die Rede. Muss es daher nicht „an ECHO wird der 330Ω Widerstand angeschlossen. An dessen Ende geht eine Verbindung zu Pin 16 (GPIO24)“ heissen?

    Antworten
    • Felix am 17. Februar 2015 12:24

      Du hast vollkommen recht, das war ein Tippfehler der mir so nicht aufgefallen ist. Der Code und das Bild stimmen, die Nummer habe ich eben verbessert. Vielen Dank für den Hinweis.

      Antworten
  14. Raspi_newbie am 17. Februar 2015 9:24

    Kurze Verständnis-Frage: Du schreibst oben im Abschnitt „Aufbau“, dass „an ECHO wird der 330Ω Widerstand angeschlossen. An dessen Ende geht eine Verbindung zu Pin 16 (GPIO23)“ aber im Bild und im Script ist von GPIO.ECHO=24 die Rede. Muss es daher nicht „an ECHO wird der 330Ω Widerstand angeschlossen. An dessen Ende geht eine Verbindung zu Pin 16 (GPIO24)“ heissen?

    Antworten
    • Felix am 17. Februar 2015 12:24

      Du hast vollkommen recht, das war ein Tippfehler der mir so nicht aufgefallen ist. Der Code und das Bild stimmen, die Nummer habe ich eben verbessert. Vielen Dank für den Hinweis.

      Antworten
  15. David am 18. Februar 2015 15:59

    Hallo,

    vielen Dank für Deine Ausführungen!
    Könntest Du noch erklären, wie genau sich die 330 und 470 Ohm ergeben, ausgehend vom vorgeschlagenen 5V/2mA Bauteil?
    Warum die parallele Anordnung des 470Ohm Widerstands?
    Benötigt der Trigger keine 5V sondern nur die 3,3V des Pins? Aber das Echo schickt 5V zurück?

    Ich hoffe meine Fragen sind nicht zu konfus! Vielen Dank für die Antworten von einem lernwilligen Laien!

    Antworten
    • Felix am 18. Februar 2015 17:34

      Hallo David,
      der erste Widerstand (330Ohm) ist dazu, dass keine zu große Spannung auf den GPIO kommt, da maximal 3.3V erlaubt sind. Der zweite Widerstand folgt dem Prinzip des Pull-Down, wenn nämlich keine Spannung an den GPIO gelangt, spuckt er zufällig entweder 0 oder 1 aus. Um das zu verhindern nehmen wir einen größeren Widerstand und verbinden ihn zu Ground, wodurch immer entweder eine positive oder „negative“ Spannung an den GPIO kommt.

      Antworten
      • David am 18. Februar 2015 22:40

        Vielen Dank für die Antwort mit Link.
        Das sind sehr interessante Details, in die ich mich einlesen werde!

  16. David am 18. Februar 2015 15:59

    Hallo,

    vielen Dank für Deine Ausführungen!
    Könntest Du noch erklären, wie genau sich die 330 und 470 Ohm ergeben, ausgehend vom vorgeschlagenen 5V/2mA Bauteil?
    Warum die parallele Anordnung des 470Ohm Widerstands?
    Benötigt der Trigger keine 5V sondern nur die 3,3V des Pins? Aber das Echo schickt 5V zurück?

    Ich hoffe meine Fragen sind nicht zu konfus! Vielen Dank für die Antworten von einem lernwilligen Laien!

    Antworten
    • Felix am 18. Februar 2015 17:34

      Hallo David,
      der erste Widerstand (330Ohm) ist dazu, dass keine zu große Spannung auf den GPIO kommt, da maximal 3.3V erlaubt sind. Der zweite Widerstand folgt dem Prinzip des Pull-Down, wenn nämlich keine Spannung an den GPIO gelangt, spuckt er zufällig entweder 0 oder 1 aus. Um das zu verhindern nehmen wir einen größeren Widerstand und verbinden ihn zu Ground, wodurch immer entweder eine positive oder „negative“ Spannung an den GPIO kommt.

      Antworten
      • David am 18. Februar 2015 22:40

        Vielen Dank für die Antwort mit Link.
        Das sind sehr interessante Details, in die ich mich einlesen werde!

      • Dominik am 26. November 2019 13:14

        Hallo!

        Danke für das gut erklärte Tutorial.
        Kann ich das Projekt auch mit Widerständen mit 230Ohm (statt 330Ohm) und 560Ohm (statt 470Ohm) umsetzen?

        LG, Dominik

      • Felix am 28. November 2019 19:32

        Sollte klappen

  17. Jon am 23. Februar 2015 18:26

    Danke für das Tutorial, du hast das echt sehr gut erklärt. Besonders dieses Projekt ist als Anfänger (wie ich es bin) leicht umzusetzen!

    Antworten
  18. Jon am 23. Februar 2015 18:26

    Danke für das Tutorial, du hast das echt sehr gut erklärt. Besonders dieses Projekt ist als Anfänger (wie ich es bin) leicht umzusetzen!

    Antworten
  19. Thale am 25. Februar 2015 9:47

    Hallo,
    muss der Trigegr an den GPIO 18 angeschlossen werden und könnte man auch mehrere Modulle anschließen?

    Antworten
    • Felix am 25. Februar 2015 12:20

      Hallo,
      wenn du jeweils im Code die Nummer änderst kannst du auch mehrere Module anschließen.

      Antworten
  20. Thale am 25. Februar 2015 9:47

    Hallo,
    muss der Trigegr an den GPIO 18 angeschlossen werden und könnte man auch mehrere Modulle anschließen?

    Antworten
    • Felix am 25. Februar 2015 12:20

      Hallo,
      wenn du jeweils im Code die Nummer änderst kannst du auch mehrere Module anschließen.

      Antworten
  21. Matze am 25. Februar 2015 16:20

    Hi,

    erstmal Danke für das coole Tutorial! 🙂
    Allerdings klappt das bei mir noch nicht so recht. Habe alles wie beschrieben angeschlossen und das Skript als Superuser im Terminal ausgeführt.
    Sobald das Skript startet, ist der Cursor im Terminal zu sehen und die RAM-Auslastung ist bei 100%. Mehr passiert aber auch nicht. 🙁 Ich kann das Skript dann maximal mit STRG+C stoppen (Der Code-Teil geht also).
    Hat jemand nen Tipp, wo das Problem liegen könnte??
    (Nutze im Übrigen das 2015-02-16 Raspbian Wheezy Image und nen Raspberry Pi Model B+ V1.2)

    Die besten Grüße
    Matze

    Antworten
    • Felix am 25. Februar 2015 18:13

      Bist du alle Anschlüsse nochmal durchgegangen und nutzt die richtigen Widerstandsgrößen? Oftmals hängt sich der Pi aufgrund falsch angeschlossener Pins auf.

      Antworten
      • Matze am 25. Februar 2015 20:03

        Die Widerstände und Anschlüsse passen soweit.Gibts ne Möglichkeit die Pins auf Funktionsfähigkeit zu testen (rein softwareseitig)? LEDs hab ich gerade nicht auf Lager. 😐

      • Felix am 25. Februar 2015 20:08

        Rein softwareseitig wüsste ich nichts, aber du könntest z.B. einige Pins als Input deklarieren und über einen, als Output deklarierten Pin kurz mal Signale senden und alle Input Pins loggen, nachdem du den Output Pin mit allen Input Pins verbunden hast. Erkennen es alle richtig, weißt du, dass sie funktionieren.

  22. Matze am 25. Februar 2015 16:20

    Hi,

    erstmal Danke für das coole Tutorial! 🙂
    Allerdings klappt das bei mir noch nicht so recht. Habe alles wie beschrieben angeschlossen und das Skript als Superuser im Terminal ausgeführt.
    Sobald das Skript startet, ist der Cursor im Terminal zu sehen und die RAM-Auslastung ist bei 100%. Mehr passiert aber auch nicht. 🙁 Ich kann das Skript dann maximal mit STRG+C stoppen (Der Code-Teil geht also).
    Hat jemand nen Tipp, wo das Problem liegen könnte??
    (Nutze im Übrigen das 2015-02-16 Raspbian Wheezy Image und nen Raspberry Pi Model B+ V1.2)

    Die besten Grüße
    Matze

    Antworten
    • Felix am 25. Februar 2015 18:13

      Bist du alle Anschlüsse nochmal durchgegangen und nutzt die richtigen Widerstandsgrößen? Oftmals hängt sich der Pi aufgrund falsch angeschlossener Pins auf.

      Antworten
      • Matze am 25. Februar 2015 20:03

        Die Widerstände und Anschlüsse passen soweit.Gibts ne Möglichkeit die Pins auf Funktionsfähigkeit zu testen (rein softwareseitig)? LEDs hab ich gerade nicht auf Lager. 😐

      • Felix am 25. Februar 2015 20:08

        Rein softwareseitig wüsste ich nichts, aber du könntest z.B. einige Pins als Input deklarieren und über einen, als Output deklarierten Pin kurz mal Signale senden und alle Input Pins loggen, nachdem du den Output Pin mit allen Input Pins verbunden hast. Erkennen es alle richtig, weißt du, dass sie funktionieren.

  23. Matze am 25. Februar 2015 20:45

    Manchmal trifft Kopf -> Tischkante. -.- Ich dachte echt, ich hab alles 5 mal gecheckt. Aber der erste Widerstand hing hinter dem GND vom Sensor, statt hinter ECHO… Jedenfalls funktioniert jetzt alles. 😀

    Beste Dank und viele Grüße,
    Matze

    Antworten
    • Felix am 25. Februar 2015 20:46

      Das passiert jedem mal 😀
      Freut mich, dass es nun klappt 🙂

      Antworten
  24. Matze am 25. Februar 2015 20:45

    Manchmal trifft Kopf -> Tischkante. -.- Ich dachte echt, ich hab alles 5 mal gecheckt. Aber der erste Widerstand hing hinter dem GND vom Sensor, statt hinter ECHO… Jedenfalls funktioniert jetzt alles. 😀

    Beste Dank und viele Grüße,
    Matze

    Antworten
    • Felix am 25. Februar 2015 20:46

      Das passiert jedem mal 😀
      Freut mich, dass es nun klappt 🙂

      Antworten
  25. Matze am 26. Februar 2015 18:31

    Hi,

    nachdem der Ultraschallsensor tut was er soll, wollte ich mal probieren, ob ich in Abhängigkeit der gemessenen Entfernung, den Raspi durch die Gegend fahren lassen kann. Habe dazu das in diesem Tutorial vorgestellte Skript (insbesondere die while-Schleife) etwas erweitert:

    #GPIO-Pins zuweisen
    GPIO_M1v = 7
    GPIO_M2v = 13
    GPIO_M1r = 11
    GPIO_M2r = 15
    
    #Richtung der GPIO-Pins festlegen (IN / OUT)
    GPIO.setup(GPIO_M1v, GPIO.OUT)
    GPIO.setup(GPIO_M2v, GPIO.OUT)
    GPIO.setup(GPIO_M1r, GPIO.OUT)
    GPIO.setup(GPIO_M2r, GPIO.OUT)
    
    def distanz():
    ...
    
    #Zeit initialisieren
    AddTime = [0]
    	 
    try:
      while True:
        #Ausgabe der Entfernung aller Sekunde
        CurrentTime = [int(time.time())]
        AddTime = AddTime + CurrentTime
        abstand = distanz()
        if max(AddTime) > AddTime[-2]:
            print ("Gemessene Entfernung = %.1f cm" % abstand)
        else:
    	pass
    
        #Wenn Abstand groeßer 50 cm, dann geradeaus fahren
        if abstand => 50:
    	GPIO.output(7,True)
    	GPIO.output(13,True)
    	time.sleep(0.1)
    	GPIO.output(7,False)
    	GPIO.output(13,False)
    	time.sleep(0.001)
         #Sonst: 90 Grad Rechtsdrehung
         else:
    	GPIO.output(7,True)
    	GPIO.output(15,True)
    	time.sleep(0.97)
    	GPIO.output(7,False)
    	GPIO.output(15,False)
    	time.sleep(0.001)
    			
    # Beim Abbruch durch STRG+C resetten
    except KeyboardInterrupt:
       print("Messung vom User gestoppt")
       GPIO.cleanup()
    

    Da ich allerdings blutiger Python-Anfänger bin, sieht das ganze sicher optimierungsbedürftig aus (zumal er im Live-Betrieb trotzdem „nur“ die Entfernung misst, aber nicht fährt 😀 ).
    Habe den Raspi mit einem L298N verbunden, der als Controller für die beiden Wechselstrommotoren fungiert. Daher ergeben sich auch die Pin-Zuweisungen (z.B. „GPIO_M1v = 7“ steuert den 1. Motor vorwärts).

    Hat zufällig jemand ne Idee, was im Skript noch verbessert werden könnte, damit die „Karre“ auch tatsächlich fährt? 😀 …Oder ist es besser den Kram schnellstmöglich zu vergessen, den ich geschrieben habe und nochmal neu zu coden. 🙂

    Die besten Grüße,
    Matze

    Antworten
    • Felix am 26. Februar 2015 21:04

      Vorweg zwei Dinge: Du weißt GPIO_M1v = 7 usw. zu, aber benutzt trotzdem GPIO.output(7,True). Der Sinn der Variablen Zuweisung ist, dass du eben keine Nummern mehr benutzen musst. Zweitens: Wieso initialisierst du Addtime als Array/Liste? ein einfaches time.time() reicht vollkommen. Die Zeile if max(AddTime) > AddTime[-2]: ist mir auch ein wenig schleierhaft.

      Benutzt du einen Schrittmotor? Wenn ja wie viele Schritte hat er? Falls nur vier, sollte es funktionieren, da du ja nur einen Schritt (also 90°) machst. Falls er wie die üblichen Motoren mehr Schritte hat, musst du auch mehr Schritte machen, um 90° zu erreichen. Schau dir am besten dazu nochmal dieses Tutorial an: Schrittmotor steuern mittels L293D / ULN2003A

      PS: Falls du es neu coden willst, schreib nochmal bitte kurz was es machen soll (und in welcher Reihenfolge vor allem), damit ich besser helfen kann.

      Antworten
      • Matze am 26. Februar 2015 22:09

        Ziele sind:
        1. Der fahrende Roboter soll mittels Sensor ständig (also pro Schleifendurchlauf 1mal) die Entfernung messen, aber nur aller Sekunde im Terminal ausgeben (daher das Initialisieren von AddTime als Liste und die dazugehörige spätere if-Bedingung).
        2. Beträgt die gemessene Entfernung mehr als/gleich 50 cm, soll der Robo einfach geradeaus fahren. (Ich nutze im Übrigen keinen Wechselstrommotor *facepalm*, sondern einen Gleichstrom-Getriebemotor.)
        3. Ist der Abstand zum Hindernis kleiner als 50 cm, soll der Robo einen Motor vorwärts und einen rückwärts laufen lassen und somit eine 90°-Drehung machen.

        Mehr soll er eigentlich erstmal nicht können. Was die time.sleep()-Zeiten bei den Motoren angeht, hab ich mich ein wenig von diesem Tutorial inspieren lassen: https://www.youtube.com/watch?v=AZSiqj0NZgU

      • Felix am 26. Februar 2015 22:15

        Am besten du definierst dir erst einmal Funktionen mit Parametern, die die Aufgaben erledigen (Fahren, Bewegen, messen, etc.)
        In deiner Hauptfunktion rufst du dann über eine Endlosschleife einmal die Distanz-Funktion auf und überprüfst ob der zurückgegebene Wert unter 50cm ist. Falls ja führst die Motor-Bewegungen aus, falls nein wird die Weiterfahr-Funktion aufgerufen.
        Wenn du bei den Funktionen Hilfe brauchst, sag Bescheid.

        LG Felix

  26. Matze am 26. Februar 2015 18:31

    Hi,

    nachdem der Ultraschallsensor tut was er soll, wollte ich mal probieren, ob ich in Abhängigkeit der gemessenen Entfernung, den Raspi durch die Gegend fahren lassen kann. Habe dazu das in diesem Tutorial vorgestellte Skript (insbesondere die while-Schleife) etwas erweitert:

    #GPIO-Pins zuweisen
    GPIO_M1v = 7
    GPIO_M2v = 13
    GPIO_M1r = 11
    GPIO_M2r = 15
    
    #Richtung der GPIO-Pins festlegen (IN / OUT)
    GPIO.setup(GPIO_M1v, GPIO.OUT)
    GPIO.setup(GPIO_M2v, GPIO.OUT)
    GPIO.setup(GPIO_M1r, GPIO.OUT)
    GPIO.setup(GPIO_M2r, GPIO.OUT)
    
    def distanz():
    ...
    
    #Zeit initialisieren
    AddTime = [0]
    	 
    try:
      while True:
        #Ausgabe der Entfernung aller Sekunde
        CurrentTime = [int(time.time())]
        AddTime = AddTime + CurrentTime
        abstand = distanz()
        if max(AddTime) > AddTime[-2]:
            print ("Gemessene Entfernung = %.1f cm" % abstand)
        else:
    	pass
    
        #Wenn Abstand groeßer 50 cm, dann geradeaus fahren
        if abstand => 50:
    	GPIO.output(7,True)
    	GPIO.output(13,True)
    	time.sleep(0.1)
    	GPIO.output(7,False)
    	GPIO.output(13,False)
    	time.sleep(0.001)
         #Sonst: 90 Grad Rechtsdrehung
         else:
    	GPIO.output(7,True)
    	GPIO.output(15,True)
    	time.sleep(0.97)
    	GPIO.output(7,False)
    	GPIO.output(15,False)
    	time.sleep(0.001)
    			
    # Beim Abbruch durch STRG+C resetten
    except KeyboardInterrupt:
       print("Messung vom User gestoppt")
       GPIO.cleanup()
    

    Da ich allerdings blutiger Python-Anfänger bin, sieht das ganze sicher optimierungsbedürftig aus (zumal er im Live-Betrieb trotzdem „nur“ die Entfernung misst, aber nicht fährt 😀 ).
    Habe den Raspi mit einem L298N verbunden, der als Controller für die beiden Wechselstrommotoren fungiert. Daher ergeben sich auch die Pin-Zuweisungen (z.B. „GPIO_M1v = 7“ steuert den 1. Motor vorwärts).

    Hat zufällig jemand ne Idee, was im Skript noch verbessert werden könnte, damit die „Karre“ auch tatsächlich fährt? 😀 …Oder ist es besser den Kram schnellstmöglich zu vergessen, den ich geschrieben habe und nochmal neu zu coden. 🙂

    Die besten Grüße,
    Matze

    Antworten
    • Felix am 26. Februar 2015 21:04

      Vorweg zwei Dinge: Du weißt GPIO_M1v = 7 usw. zu, aber benutzt trotzdem GPIO.output(7,True). Der Sinn der Variablen Zuweisung ist, dass du eben keine Nummern mehr benutzen musst. Zweitens: Wieso initialisierst du Addtime als Array/Liste? ein einfaches time.time() reicht vollkommen. Die Zeile if max(AddTime) > AddTime[-2]: ist mir auch ein wenig schleierhaft.

      Benutzt du einen Schrittmotor? Wenn ja wie viele Schritte hat er? Falls nur vier, sollte es funktionieren, da du ja nur einen Schritt (also 90°) machst. Falls er wie die üblichen Motoren mehr Schritte hat, musst du auch mehr Schritte machen, um 90° zu erreichen. Schau dir am besten dazu nochmal dieses Tutorial an: Schrittmotor steuern mittels L293D / ULN2003A

      PS: Falls du es neu coden willst, schreib nochmal bitte kurz was es machen soll (und in welcher Reihenfolge vor allem), damit ich besser helfen kann.

      Antworten
      • Matze am 26. Februar 2015 22:09

        Ziele sind:
        1. Der fahrende Roboter soll mittels Sensor ständig (also pro Schleifendurchlauf 1mal) die Entfernung messen, aber nur aller Sekunde im Terminal ausgeben (daher das Initialisieren von AddTime als Liste und die dazugehörige spätere if-Bedingung).
        2. Beträgt die gemessene Entfernung mehr als/gleich 50 cm, soll der Robo einfach geradeaus fahren. (Ich nutze im Übrigen keinen Wechselstrommotor *facepalm*, sondern einen Gleichstrom-Getriebemotor.)
        3. Ist der Abstand zum Hindernis kleiner als 50 cm, soll der Robo einen Motor vorwärts und einen rückwärts laufen lassen und somit eine 90°-Drehung machen.

        Mehr soll er eigentlich erstmal nicht können. Was die time.sleep()-Zeiten bei den Motoren angeht, hab ich mich ein wenig von diesem Tutorial inspieren lassen: https://www.youtube.com/watch?v=AZSiqj0NZgU

      • Felix am 26. Februar 2015 22:15

        Am besten du definierst dir erst einmal Funktionen mit Parametern, die die Aufgaben erledigen (Fahren, Bewegen, messen, etc.)
        In deiner Hauptfunktion rufst du dann über eine Endlosschleife einmal die Distanz-Funktion auf und überprüfst ob der zurückgegebene Wert unter 50cm ist. Falls ja führst die Motor-Bewegungen aus, falls nein wird die Weiterfahr-Funktion aufgerufen.
        Wenn du bei den Funktionen Hilfe brauchst, sag Bescheid.

        LG Felix

  27. Klaus100000 am 1. Mai 2015 19:53

    Hallo,
    erstmal eine tolle Sache.

    Besteht eine einfache Möglichkeit das Programm im Hintergrund laufen zulassen und von einem anderen Programm die daten anzufordern??

    Also das Mess modul warte auf anforderung.

    Hautprogramm sagt mess mal
    Messmodul sagt ok
    misst
    und gibt die messung zurück.

    Warum

    ich finde es einfacher wenn alle Sensoren in kleine Programme laufen,
    und die Hauptprogramme das system fragen welche Sensoren sind online und man brauch sich nicht immer darum kümmern.

    Ich hoffe ich habe mich verständlich ausgedrückt.

    Gruss Klaus100000

    Antworten
    • Felix am 1. Mai 2015 20:28

      Du kannst ein extra Skript (Python oder bash) erstellen, welches du bei Bedarf aufrufst und dir die Daten zurück gibt.
      Falls es im Hintergrund laufen soll, kannst du alle X Zeiteinheiten (einfache Schleife z.B.) die erhobenen Daten in eine Datei schreiben. Schau dir dazu am besten screen an und wie man ein Skript automatisch beim booten startet.

      Antworten
  28. Klaus100000 am 1. Mai 2015 19:53

    Hallo,
    erstmal eine tolle Sache.

    Besteht eine einfache Möglichkeit das Programm im Hintergrund laufen zulassen und von einem anderen Programm die daten anzufordern??

    Also das Mess modul warte auf anforderung.

    Hautprogramm sagt mess mal
    Messmodul sagt ok
    misst
    und gibt die messung zurück.

    Warum

    ich finde es einfacher wenn alle Sensoren in kleine Programme laufen,
    und die Hauptprogramme das system fragen welche Sensoren sind online und man brauch sich nicht immer darum kümmern.

    Ich hoffe ich habe mich verständlich ausgedrückt.

    Gruss Klaus100000

    Antworten
    • Felix am 1. Mai 2015 20:28

      Du kannst ein extra Skript (Python oder bash) erstellen, welches du bei Bedarf aufrufst und dir die Daten zurück gibt.
      Falls es im Hintergrund laufen soll, kannst du alle X Zeiteinheiten (einfache Schleife z.B.) die erhobenen Daten in eine Datei schreiben. Schau dir dazu am besten screen an und wie man ein Skript automatisch beim booten startet.

      Antworten
  29. Torsten am 15. Juni 2015 21:42

    Hallo Felix,

    danke für das schöne Tutorial. Mich würde das Schaubild für den Anschluss von zwei Modulen interessieren. Dein Beispiel funktioniert bei mir tadellos. Ich vermute, dass ich „einfach“ einen weiteren „Trigger-Pin“ nutze. Leider habe ich als blutiger Anfänger keinen Schimmer, wie ich das ganze dann verkable – bzw. wo ich die Widerstände platziere.

    Grüße,
    Torsten

    Antworten
    • Felix am 15. Juni 2015 22:19

      Hallo Torsten,
      der Aufbau eines zweiten Moduls wäre identisch mit dem des ersten (für ECHO und TRIGGER müssen natürlich freie GPIOs verwendet werden), Widerstände inklusive. 5V und Ground werden parallel an alle Module angeschlossen. Den Code müsstest du mit den enstprechend gewählten GPIOs erweitern.
      LG Felix

      Antworten
  30. Torsten am 15. Juni 2015 21:42

    Hallo Felix,

    danke für das schöne Tutorial. Mich würde das Schaubild für den Anschluss von zwei Modulen interessieren. Dein Beispiel funktioniert bei mir tadellos. Ich vermute, dass ich „einfach“ einen weiteren „Trigger-Pin“ nutze. Leider habe ich als blutiger Anfänger keinen Schimmer, wie ich das ganze dann verkable – bzw. wo ich die Widerstände platziere.

    Grüße,
    Torsten

    Antworten
    • Felix am 15. Juni 2015 22:19

      Hallo Torsten,
      der Aufbau eines zweiten Moduls wäre identisch mit dem des ersten (für ECHO und TRIGGER müssen natürlich freie GPIOs verwendet werden), Widerstände inklusive. 5V und Ground werden parallel an alle Module angeschlossen. Den Code müsstest du mit den enstprechend gewählten GPIOs erweitern.
      LG Felix

      Antworten
  31. jo hann am 1. Juli 2015 9:50

    Hallo,
    danke erst mal für die Anleitung.
    Ich habe ein Problem. Und zwar spuckt er mir immer folgende Fehlermeldung aus:

    Traceback (most recent call last):
    File „/home/pi/ultraschallsensor_entfernung.py“, line 13, in
    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    RuntimeError: No access to /dev/mem. Try running as root!

    Ich habe auch schon die Datei mem für alle frei gegeben und es als root gestartet. Hilft alles nichts.
    Es ist alles richtig angeschlossen und setup hab ich auch installiert.
    Es kommt immer wieder die selbe Fehlermeldung.

    Danke und viele Grüße
    Johann

    Antworten
    • jo hann am 1. Juli 2015 10:49

      sorry, hab das Problem gefunden. alles läuft. danke

      Antworten
      • Felix am 1. Juli 2015 12:01

        Woran lag es denn?

  32. jo hann am 1. Juli 2015 9:50

    Hallo,
    danke erst mal für die Anleitung.
    Ich habe ein Problem. Und zwar spuckt er mir immer folgende Fehlermeldung aus:

    Traceback (most recent call last):
    File „/home/pi/ultraschallsensor_entfernung.py“, line 13, in
    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    RuntimeError: No access to /dev/mem. Try running as root!

    Ich habe auch schon die Datei mem für alle frei gegeben und es als root gestartet. Hilft alles nichts.
    Es ist alles richtig angeschlossen und setup hab ich auch installiert.
    Es kommt immer wieder die selbe Fehlermeldung.

    Danke und viele Grüße
    Johann

    Antworten
    • jo hann am 1. Juli 2015 10:49

      sorry, hab das Problem gefunden. alles läuft. danke

      Antworten
      • Felix am 1. Juli 2015 12:01

        Woran lag es denn?

  33. Christian am 2. Juli 2015 11:32

    Hallo,

    kann man nur das Programm mit der Konsole starten oder auch irgendwie über Python? Ich möchte es nämlich gerne in ein anderes Programm einschleusen und über eine GUI via Button starten, damit später auch andere einfach das System nutzen können.
    Kann mir da jemand weiterhelfen?

    Danke
    Chris

    Antworten
    • Felix am 2. Juli 2015 12:36

      Über die Konsole starten kannst du es sowieso: sudo python ultraschallsensor_entfernung.py
      Du kannst es auch in anderen Skripten einbinden, dann musst du allerdings folgendes löschen (und daruffolgende Tabs):

      if __name__ == '__main__':

      Das bewirkt, dass der nachfolgende Code nur ausgeführt wird, falls die Datei direkt aufgerufen wurde und nicht, falls in einem anderen Skript eingebunden.

      Antworten
  34. Christian am 2. Juli 2015 11:32

    Hallo,

    kann man nur das Programm mit der Konsole starten oder auch irgendwie über Python? Ich möchte es nämlich gerne in ein anderes Programm einschleusen und über eine GUI via Button starten, damit später auch andere einfach das System nutzen können.
    Kann mir da jemand weiterhelfen?

    Danke
    Chris

    Antworten
    • Felix am 2. Juli 2015 12:36

      Über die Konsole starten kannst du es sowieso: sudo python ultraschallsensor_entfernung.py
      Du kannst es auch in anderen Skripten einbinden, dann musst du allerdings folgendes löschen (und daruffolgende Tabs):

      if __name__ == '__main__':

      Das bewirkt, dass der nachfolgende Code nur ausgeführt wird, falls die Datei direkt aufgerufen wurde und nicht, falls in einem anderen Skript eingebunden.

      Antworten
  35. Peter am 14. Juli 2015 17:08

    Hallo Felix,
    ich möchte gerne zwei Sensoren über einen Button im GUI starten lassen. Es klappt schonmal, dass ich zeitgleich von beiden Sensoren die Werte bekomme, wenn ich es normal starte.
    Wenn ich jedoch einen Button damit belegen will, komme ich auf Probleme, da ein Button nur eine Funktion abfragen kann. Wenn ich mit ‚and‘ die Funktionen verbinde, bekomme ich nur den ersten Wert von der ersten Funktion aus.
    Ich habe jetzt ja drei Funktionen. Zwei für die Sensoren und die ‚main‘ für die Ausgabe und Speichung in einer Datei.
    Hast du da eine Lösung?

    Besten Dank vorweg für deine Hilfe,

    Peter

    Antworten
    • Felix am 14. Juli 2015 17:45

      Ein paar mehr Infos wären gut: Hast du zwei unabhängige Skripte für die Abfrage der Sensoren? Ist es eine Python GUI oder webbasiert?
      Ruf mit dem einen Button z.B. eine Fkt aus, mit dem anderen eine andere.

      Antworten
    • peter am 15. Juli 2015 9:08

      ich habe alles in einem Skript geschrieben in einer Python GUI. Mein Ziel ist es, das mit einem Button beide bzw. später möglichst vier Sensoren zeitgleich mit der Messung starten, da sie jede Sekunde zur selben Zeit und somit am richtigen Ort messen sollen.

      Ich habe es so versucht, alles in einer Funktion zu schreiben, dann wird aber die Startzeit der Messung an der zweiten Stelle (Beispiel unten: StartTime2) um ca. 0.001 eher gestartet, was für mich unerklärlich ist. Und bei dem Sensor kommen somit zu große Distanzen heraus und teilweise auch wirre Ergebnisse von -324,423 m.

      Ich habe schon so viele verschiede Sachen ausprobiert, komme aber leider nicht weiter. Bin leider auch nicht der beste Programmierer 🙂

      from tkinter import *
      from tkinter import messagebox
      #from time import sleep
      import picamera
      import os
      import time
      
      
      ######################
      
      import RPi.GPIO as GPIO
      
      # define GPIO pins
      GPIOTrigger1 = 18
      GPIOEcho1    = 24
      GPIOTrigger2 = 17
      GPIOEcho2    = 23
      
      Temperatur = 25   #### Hier aktuelle Temperatur eingeben in °C ######
      
      
       
      
      #############################################
      
      #==============================================================
      # Declaration of Constants
      # none used
      
      #==============================================================
      
      class Application(Frame):
          """ GUI Application for taking photos. """
      
          def __init__(self, master):
              super(Application, self).__init__(master)  
              self.grid()
              self.create_widgets()
          #    self.setup_camera()
      
          def create_widgets(self):
              """ Create widgets. """    
      
              # create variable for radio buttons to share to note which mode has been selected
              self.mode = StringVar()
              self.mode.set(None)
      
             
              
      ######## BUTTON fuer Distanzmessung   ################
              
      ##        # create 'distance' button
      ##        Button( self,
      ##                text = "Distanz messen",
      ##                command = self.DistanzMessung,
      ##                bg='yellow',
      ##                ).grid(row=5, column = 0, sticky = W+E+N+S, columnspan=1)
      
              Button( self,
                      text = "Distanz berechnen",
                      command = self.main2,
                      bg='yellow',
                      ).grid(row=6, column = 0, sticky = W+E+N+S, columnspan=1)
      
      #########           #########
              
      
      #######################################
      
      ##    
      ##
      ##    def DistanzMessung(self):
      ##    
      ##  # function to measure the distance1
      ##    #def MeasureDistance1(self):
      ##        global Distance1
      ##  # set trigger to high
      ##        GPIO.setmode(GPIO.BCM)
      ##        GPIO.setup(GPIOTrigger1, GPIO.OUT)
      ##        GPIO.output(GPIOTrigger1, True)
      ##
      ##  # set trigger after 10µs to low
      ##        time.sleep(0.00001)
      ##        GPIO.output(GPIOTrigger1, False)
      ##
      ##  # store initial start time
      ##        StartTime1 = time.time()
      ##
      ##  # store start time
      ##        GPIO.setup(GPIOEcho1, GPIO.IN)
      ##        while GPIO.input(GPIOEcho1) == 0:
      ##          StartTime1 = time.time()
      ##
      ##  # store stop time
      ##        while GPIO.input(GPIOEcho1) == 1:
      ##          StopTime1 = time.time()
      ##
      ##  # calculate distance
      ##  #Temperatur = 24
      ##        TimeElapsed1 = StopTime1 - StartTime1
      ##        Distance1 = (TimeElapsed1 * (331.5+(0.6*Temperatur))) / 2
      ##        
      ##        return Distance1
      ##        
      ##    #MeasureDistance1()
      ### function to measure the distance2
      ##    #def MeasureDistance2(self):
      ##        global Distance2
      ##          # set trigger to high
      ##        GPIO.setmode(GPIO.BCM)
      ##        GPIO.setup(GPIOTrigger2, GPIO.OUT)
      ##        GPIO.output(GPIOTrigger2, True)
      ##
      ##  # set trigger after 10µs to low
      ##        time.sleep(0.00001)
      ##        GPIO.output(GPIOTrigger2, False)
      ##
      ##  # store initial start time
      ##        StartTime2 = time.time()
      ##
      ##  # store start time
      ##        GPIO.setup(GPIOEcho2, GPIO.IN)
      ##        while GPIO.input(GPIOEcho2) == 0:
      ##            StartTime2 = time.time()
      ##
      ##  # store stop time
      ##        while GPIO.input(GPIOEcho2) == 1:
      ##            StopTime2 = time.time()
      ##
      ##  # calculate distance
      ##  #Temperatur = 24 ## Hier aktuelle Temperatur eingeben in °C
      ##        TimeElapsed2 = StopTime2 - StartTime2
      ##        Distance2 = (TimeElapsed2 * (331.5+(0.6*Temperatur))) / 2
      ##
      ##        return Distance2
      
                   
      #=================================================================
      # main
      #=================================================================
      ###########################
      
      
      
      # main function
          def main2(self):
                time.sleep(0.1) 
                try:
                  file_out = open("MesswerteDistanz.txt","w") # w=ueberschreiben, a=anhaengen der Daten
                  while True:
                       
          
        # function to measure the distance1
          #def MeasureDistance1(self):
              #global Distance1
        # set trigger to high
                    GPIO.setmode(GPIO.BCM)
                    GPIO.setup(GPIOTrigger1, GPIO.OUT)
                    GPIO.output(GPIOTrigger1, True)
                    GPIO.setup(GPIOTrigger2, GPIO.OUT)
                    GPIO.output(GPIOTrigger2, True)
      
        # set trigger after 10µs to low
                    time.sleep(0.00001)
                    GPIO.output(GPIOTrigger1, False)
                    GPIO.output(GPIOTrigger2, False)
                    
        # store initial start time
                    StartTime1 = time.time()
                    StartTime2 = time.time()
      
        # store start time
                    GPIO.setup(GPIOEcho1, GPIO.IN)
                    while GPIO.input(GPIOEcho1) == 0:
                      StartTime1 = time.time()
      
                    GPIO.setup(GPIOEcho2, GPIO.IN)
                    while GPIO.input(GPIOEcho2) == 0:
                      StartTime2 = time.time()
      
        # store stop time
                    while GPIO.input(GPIOEcho1) == 1:
                      StopTime1 = time.time()
      
                    while GPIO.input(GPIOEcho2) == 1:
                      StopTime2 = time.time()
        # calculate distance
        #Temperatur = 24
                    TimeElapsed1 = StopTime1 - StartTime1
                    Distance1 = (TimeElapsed1 * (331.5+(0.6*Temperatur))) / 2
      
                    TimeElapsed2 = StopTime2 - StartTime2
                    Distance2 = (TimeElapsed2 * (331.5+(0.6*Temperatur))) / 2
                    
                    #return Distance1
                    #Distance1 = MeasureDistance1()
                    print("gemessene Distanz1 = %.4f m" % Distance1)
                    file_out.write("d1 %.4f m     " % Distance1)
      
                    #Distance2 = MeasureDistance2(self)
                    print("gemessene Distanz2 = %.4f m" % Distance2)
                    file_out.write("d2 %.4f mn" % Distance2)
            
                    time.sleep(1) # Wiederholung der Messung in Sek.
      
        # reset GPIO settings if user pressed Ctrl+C
                except KeyboardInterrupt:
                  print("Measurement stopped by user")
                  GPIO.cleanup()
      
      
          if __name__ == '__main2__':
      
        # use GPIO pin numbering convention
                GPIO.setmode(GPIO.BCM)
      
        # set up GPIO pins
                GPIO.setup(GPIOTrigger1, GPIO.OUT)
                GPIO.setup(GPIOEcho1, GPIO.IN)
      
                GPIO.setup(GPIOTrigger2, GPIO.OUT)
                GPIO.setup(GPIOEcho2, GPIO.IN)
      
        # set trigger to false
                GPIO.output(GPIOTrigger1, False)
                GPIO.output(GPIOTrigger2, False)
      
        # call main function
                #main2()
      
      ##################################
      
      
      
      
      
      root = Tk()                             # Create the GUI root object
      root.title("Image Capture V1.0")
      app = Application(root)                 # Create the root application window
      root.mainloop()
      Antworten
  36. Peter am 14. Juli 2015 17:08

    Hallo Felix,
    ich möchte gerne zwei Sensoren über einen Button im GUI starten lassen. Es klappt schonmal, dass ich zeitgleich von beiden Sensoren die Werte bekomme, wenn ich es normal starte.
    Wenn ich jedoch einen Button damit belegen will, komme ich auf Probleme, da ein Button nur eine Funktion abfragen kann. Wenn ich mit ‚and‘ die Funktionen verbinde, bekomme ich nur den ersten Wert von der ersten Funktion aus.
    Ich habe jetzt ja drei Funktionen. Zwei für die Sensoren und die ‚main‘ für die Ausgabe und Speichung in einer Datei.
    Hast du da eine Lösung?

    Besten Dank vorweg für deine Hilfe,

    Peter

    Antworten
    • Felix am 14. Juli 2015 17:45

      Ein paar mehr Infos wären gut: Hast du zwei unabhängige Skripte für die Abfrage der Sensoren? Ist es eine Python GUI oder webbasiert?
      Ruf mit dem einen Button z.B. eine Fkt aus, mit dem anderen eine andere.

      Antworten
    • peter am 15. Juli 2015 9:08

      ich habe alles in einem Skript geschrieben in einer Python GUI. Mein Ziel ist es, das mit einem Button beide bzw. später möglichst vier Sensoren zeitgleich mit der Messung starten, da sie jede Sekunde zur selben Zeit und somit am richtigen Ort messen sollen.

      Ich habe es so versucht, alles in einer Funktion zu schreiben, dann wird aber die Startzeit der Messung an der zweiten Stelle (Beispiel unten: StartTime2) um ca. 0.001 eher gestartet, was für mich unerklärlich ist. Und bei dem Sensor kommen somit zu große Distanzen heraus und teilweise auch wirre Ergebnisse von -324,423 m.

      Ich habe schon so viele verschiede Sachen ausprobiert, komme aber leider nicht weiter. Bin leider auch nicht der beste Programmierer 🙂

      from tkinter import *
      from tkinter import messagebox
      #from time import sleep
      import picamera
      import os
      import time
      
      
      ######################
      
      import RPi.GPIO as GPIO
      
      # define GPIO pins
      GPIOTrigger1 = 18
      GPIOEcho1    = 24
      GPIOTrigger2 = 17
      GPIOEcho2    = 23
      
      Temperatur = 25   #### Hier aktuelle Temperatur eingeben in °C ######
      
      
       
      
      #############################################
      
      #==============================================================
      # Declaration of Constants
      # none used
      
      #==============================================================
      
      class Application(Frame):
          """ GUI Application for taking photos. """
      
          def __init__(self, master):
              super(Application, self).__init__(master)  
              self.grid()
              self.create_widgets()
          #    self.setup_camera()
      
          def create_widgets(self):
              """ Create widgets. """    
      
              # create variable for radio buttons to share to note which mode has been selected
              self.mode = StringVar()
              self.mode.set(None)
      
             
              
      ######## BUTTON fuer Distanzmessung   ################
              
      ##        # create 'distance' button
      ##        Button( self,
      ##                text = "Distanz messen",
      ##                command = self.DistanzMessung,
      ##                bg='yellow',
      ##                ).grid(row=5, column = 0, sticky = W+E+N+S, columnspan=1)
      
              Button( self,
                      text = "Distanz berechnen",
                      command = self.main2,
                      bg='yellow',
                      ).grid(row=6, column = 0, sticky = W+E+N+S, columnspan=1)
      
      #########           #########
              
      
      #######################################
      
      ##    
      ##
      ##    def DistanzMessung(self):
      ##    
      ##  # function to measure the distance1
      ##    #def MeasureDistance1(self):
      ##        global Distance1
      ##  # set trigger to high
      ##        GPIO.setmode(GPIO.BCM)
      ##        GPIO.setup(GPIOTrigger1, GPIO.OUT)
      ##        GPIO.output(GPIOTrigger1, True)
      ##
      ##  # set trigger after 10µs to low
      ##        time.sleep(0.00001)
      ##        GPIO.output(GPIOTrigger1, False)
      ##
      ##  # store initial start time
      ##        StartTime1 = time.time()
      ##
      ##  # store start time
      ##        GPIO.setup(GPIOEcho1, GPIO.IN)
      ##        while GPIO.input(GPIOEcho1) == 0:
      ##          StartTime1 = time.time()
      ##
      ##  # store stop time
      ##        while GPIO.input(GPIOEcho1) == 1:
      ##          StopTime1 = time.time()
      ##
      ##  # calculate distance
      ##  #Temperatur = 24
      ##        TimeElapsed1 = StopTime1 - StartTime1
      ##        Distance1 = (TimeElapsed1 * (331.5+(0.6*Temperatur))) / 2
      ##        
      ##        return Distance1
      ##        
      ##    #MeasureDistance1()
      ### function to measure the distance2
      ##    #def MeasureDistance2(self):
      ##        global Distance2
      ##          # set trigger to high
      ##        GPIO.setmode(GPIO.BCM)
      ##        GPIO.setup(GPIOTrigger2, GPIO.OUT)
      ##        GPIO.output(GPIOTrigger2, True)
      ##
      ##  # set trigger after 10µs to low
      ##        time.sleep(0.00001)
      ##        GPIO.output(GPIOTrigger2, False)
      ##
      ##  # store initial start time
      ##        StartTime2 = time.time()
      ##
      ##  # store start time
      ##        GPIO.setup(GPIOEcho2, GPIO.IN)
      ##        while GPIO.input(GPIOEcho2) == 0:
      ##            StartTime2 = time.time()
      ##
      ##  # store stop time
      ##        while GPIO.input(GPIOEcho2) == 1:
      ##            StopTime2 = time.time()
      ##
      ##  # calculate distance
      ##  #Temperatur = 24 ## Hier aktuelle Temperatur eingeben in °C
      ##        TimeElapsed2 = StopTime2 - StartTime2
      ##        Distance2 = (TimeElapsed2 * (331.5+(0.6*Temperatur))) / 2
      ##
      ##        return Distance2
      
                   
      #=================================================================
      # main
      #=================================================================
      ###########################
      
      
      
      # main function
          def main2(self):
                time.sleep(0.1) 
                try:
                  file_out = open("MesswerteDistanz.txt","w") # w=ueberschreiben, a=anhaengen der Daten
                  while True:
                       
          
        # function to measure the distance1
          #def MeasureDistance1(self):
              #global Distance1
        # set trigger to high
                    GPIO.setmode(GPIO.BCM)
                    GPIO.setup(GPIOTrigger1, GPIO.OUT)
                    GPIO.output(GPIOTrigger1, True)
                    GPIO.setup(GPIOTrigger2, GPIO.OUT)
                    GPIO.output(GPIOTrigger2, True)
      
        # set trigger after 10µs to low
                    time.sleep(0.00001)
                    GPIO.output(GPIOTrigger1, False)
                    GPIO.output(GPIOTrigger2, False)
                    
        # store initial start time
                    StartTime1 = time.time()
                    StartTime2 = time.time()
      
        # store start time
                    GPIO.setup(GPIOEcho1, GPIO.IN)
                    while GPIO.input(GPIOEcho1) == 0:
                      StartTime1 = time.time()
      
                    GPIO.setup(GPIOEcho2, GPIO.IN)
                    while GPIO.input(GPIOEcho2) == 0:
                      StartTime2 = time.time()
      
        # store stop time
                    while GPIO.input(GPIOEcho1) == 1:
                      StopTime1 = time.time()
      
                    while GPIO.input(GPIOEcho2) == 1:
                      StopTime2 = time.time()
        # calculate distance
        #Temperatur = 24
                    TimeElapsed1 = StopTime1 - StartTime1
                    Distance1 = (TimeElapsed1 * (331.5+(0.6*Temperatur))) / 2
      
                    TimeElapsed2 = StopTime2 - StartTime2
                    Distance2 = (TimeElapsed2 * (331.5+(0.6*Temperatur))) / 2
                    
                    #return Distance1
                    #Distance1 = MeasureDistance1()
                    print("gemessene Distanz1 = %.4f m" % Distance1)
                    file_out.write("d1 %.4f m     " % Distance1)
      
                    #Distance2 = MeasureDistance2(self)
                    print("gemessene Distanz2 = %.4f m" % Distance2)
                    file_out.write("d2 %.4f mn" % Distance2)
            
                    time.sleep(1) # Wiederholung der Messung in Sek.
      
        # reset GPIO settings if user pressed Ctrl+C
                except KeyboardInterrupt:
                  print("Measurement stopped by user")
                  GPIO.cleanup()
      
      
          if __name__ == '__main2__':
      
        # use GPIO pin numbering convention
                GPIO.setmode(GPIO.BCM)
      
        # set up GPIO pins
                GPIO.setup(GPIOTrigger1, GPIO.OUT)
                GPIO.setup(GPIOEcho1, GPIO.IN)
      
                GPIO.setup(GPIOTrigger2, GPIO.OUT)
                GPIO.setup(GPIOEcho2, GPIO.IN)
      
        # set trigger to false
                GPIO.output(GPIOTrigger1, False)
                GPIO.output(GPIOTrigger2, False)
      
        # call main function
                #main2()
      
      ##################################
      
      
      
      
      
      root = Tk()                             # Create the GUI root object
      root.title("Image Capture V1.0")
      app = Application(root)                 # Create the root application window
      root.mainloop()
      Antworten
  37. hajo am 5. August 2015 17:04

    @Peter: Gleichzeitig starten heist aber auch, dass alle Sender einen Impuls aussenden und alle Empfänger _jeden_ Impuls hören (Echo). Natürlich funktioniert „gleichzeitig“ in einem sequenziellen System nicht, also ergeben sich für die Sender auch unterschiedliche Startzeitpunkte. Wenn jetzt z.B. der Empfänger 4 den Impuls von Sender 1 hört, gibt das natürlich komplett falsche (und sehr seltsame) Ergebnisse.

    Antworten
  38. hajo am 5. August 2015 17:04

    @Peter: Gleichzeitig starten heist aber auch, dass alle Sender einen Impuls aussenden und alle Empfänger _jeden_ Impuls hören (Echo). Natürlich funktioniert „gleichzeitig“ in einem sequenziellen System nicht, also ergeben sich für die Sender auch unterschiedliche Startzeitpunkte. Wenn jetzt z.B. der Empfänger 4 den Impuls von Sender 1 hört, gibt das natürlich komplett falsche (und sehr seltsame) Ergebnisse.

    Antworten
  39. Johanens am 19. August 2015 17:27

    Hallo,

    ich habe ein Problem mit meinem Programm. Und zwar möchte ich alle halbe Sekunde einen Wert haben von meinen beiden Sensoren. (Sie behindern sich nicht gegenseitig, da noch genug zwischen den beiden Sensoren zwischen ist)
    Mein Problem ist jetzt, dass das Programm zwischendurch hängen bleibt. Dies kann nach 5 min passieren aber auch mal erst nach 2 std. Nach meinen Forschungen müsste es in der Messung liegen. Also bei def MessureDistance1() bzw. def MessureDistance2(). Hatte jemand das Problem zufällig auch schon oder hat eine Idee woran es liegen könnte?
    Gibt es sonst eine Möglichkeit zu sagen: „Wenn Programm >2 Sek nichts macht, starte es neu“? Das würde mir schon helfen und reichen.

    http://pastebin.com/eq7spWS9

    Antworten
    • Felix am 19. August 2015 17:34

      Ohne deinen Code genauer angesehen zu haben bzgl deiner letzten Frage:
      Du kannst z.B. jede Sekunde eine Ausgabe in deinem Mess-Skript machen. Dieses Skript bindest du in einem anderen Skript ein und überprüfst wann die letzte Ausgabe war und vergleichst sie mit der Ausgabe davor (entweder du lässt die Uhrzeit ausgeben oder speicherst den timestamp). Dann kannst du überprüfen, ob das Skript nicht mehr reagiert (bzw. wie lange nicht) und ggf. neustarten.

      Antworten
  40. Johanens am 19. August 2015 17:27

    Hallo,

    ich habe ein Problem mit meinem Programm. Und zwar möchte ich alle halbe Sekunde einen Wert haben von meinen beiden Sensoren. (Sie behindern sich nicht gegenseitig, da noch genug zwischen den beiden Sensoren zwischen ist)
    Mein Problem ist jetzt, dass das Programm zwischendurch hängen bleibt. Dies kann nach 5 min passieren aber auch mal erst nach 2 std. Nach meinen Forschungen müsste es in der Messung liegen. Also bei def MessureDistance1() bzw. def MessureDistance2(). Hatte jemand das Problem zufällig auch schon oder hat eine Idee woran es liegen könnte?
    Gibt es sonst eine Möglichkeit zu sagen: „Wenn Programm >2 Sek nichts macht, starte es neu“? Das würde mir schon helfen und reichen.

    http://pastebin.com/eq7spWS9

    Antworten
    • Felix am 19. August 2015 17:34

      Ohne deinen Code genauer angesehen zu haben bzgl deiner letzten Frage:
      Du kannst z.B. jede Sekunde eine Ausgabe in deinem Mess-Skript machen. Dieses Skript bindest du in einem anderen Skript ein und überprüfst wann die letzte Ausgabe war und vergleichst sie mit der Ausgabe davor (entweder du lässt die Uhrzeit ausgeben oder speicherst den timestamp). Dann kannst du überprüfen, ob das Skript nicht mehr reagiert (bzw. wie lange nicht) und ggf. neustarten.

      Antworten
  41. Johanens am 20. August 2015 10:30

    Okay, danke. Das hört sich erstmal gut an. Nur bin ich noch kein Profi im Programmieren und weiß nicht wirklich wie ich das alles umsätzen kann. Hast du da ein Beispiel oder Ähnliches parat?

    Antworten
  42. Johanens am 20. August 2015 10:30

    Okay, danke. Das hört sich erstmal gut an. Nur bin ich noch kein Profi im Programmieren und weiß nicht wirklich wie ich das alles umsätzen kann. Hast du da ein Beispiel oder Ähnliches parat?

    Antworten
  43. Andre am 20. August 2015 17:29

    Hallo

    Habe einen Raspberry PI 2 und bei mir erfolgt keine Messung das Script
    startet zwar aber es passiert nichts.Mehrmals neu verkabelt andere Pins
    probiert nichts.
    Der Sensor ist in Ordnung am Arduino getestet.
    Gibt es vielleicht Probleme mit Raspi 2 und python
    Andre

    Antworten
    • Felix am 20. August 2015 17:31

      Das sollte es eigentlich nicht. Du kannst ja mal die python Konsole öffnen (sudo python) und die Befehle von Hand testen. Welche Fehler werden denn ausgegeben?
      Die Python RPi.GPIO Bibliothek hast du aber oder?

      Antworten
  44. Andre am 20. August 2015 17:29

    Hallo

    Habe einen Raspberry PI 2 und bei mir erfolgt keine Messung das Script
    startet zwar aber es passiert nichts.Mehrmals neu verkabelt andere Pins
    probiert nichts.
    Der Sensor ist in Ordnung am Arduino getestet.
    Gibt es vielleicht Probleme mit Raspi 2 und python
    Andre

    Antworten
    • Felix am 20. August 2015 17:31

      Das sollte es eigentlich nicht. Du kannst ja mal die python Konsole öffnen (sudo python) und die Befehle von Hand testen. Welche Fehler werden denn ausgegeben?
      Die Python RPi.GPIO Bibliothek hast du aber oder?

      Antworten
  45. Simon am 21. August 2015 22:12

    Hi,
    ich arbeite in der Schule an einem Projekt bei dem wir versuchen unsere eigene Drohne zusammenzubauen und ich hab dank diesem Tutorial hier den Sensor zum laufen gebracht. Jetzt hab ich aber die Frage, ob ich das Programm irgendwie in ein anderes einbinden kann, sodass dieses dann quasi die Anweisung gibt, dass der Sensor jetzt die Entfernung messen soll. Da das Hauptprogramm das unsere einzelnen Teile steuert jedoch in Java ist müsste ich das irgendwie umwandeln. Geht das und wenn ja wie?

    mfg
    Simon
    P.S. Ihr habt ’ne Woche Zeit zum antworten, bin nicht da 😛

    Antworten
    • Felix am 21. August 2015 22:17

      Hi Simon,
      bzgl. Python in Java einbinden kannst du dir das mal durchlesen:
      http://stackoverflow.com/questions/1164810/using-python-from-within-java

      Ansonsten könntest du (z.B. mit C++) eine Konsolenanwendung schreiben, die anhand der Eingabeparameter reagiert und die GPIOs steuert (Stichwort wiringPi). Die Ausgabe kannst du bequem per Java auslesen. Da die Steuerung des Sensors nicht all zu komplex ist, kannst du das fast 1:1 in C++ portieren.

      LG Felix

      Antworten
  46. Simon am 21. August 2015 22:12

    Hi,
    ich arbeite in der Schule an einem Projekt bei dem wir versuchen unsere eigene Drohne zusammenzubauen und ich hab dank diesem Tutorial hier den Sensor zum laufen gebracht. Jetzt hab ich aber die Frage, ob ich das Programm irgendwie in ein anderes einbinden kann, sodass dieses dann quasi die Anweisung gibt, dass der Sensor jetzt die Entfernung messen soll. Da das Hauptprogramm das unsere einzelnen Teile steuert jedoch in Java ist müsste ich das irgendwie umwandeln. Geht das und wenn ja wie?

    mfg
    Simon
    P.S. Ihr habt ’ne Woche Zeit zum antworten, bin nicht da 😛

    Antworten
    • Felix am 21. August 2015 22:17

      Hi Simon,
      bzgl. Python in Java einbinden kannst du dir das mal durchlesen:
      http://stackoverflow.com/questions/1164810/using-python-from-within-java

      Ansonsten könntest du (z.B. mit C++) eine Konsolenanwendung schreiben, die anhand der Eingabeparameter reagiert und die GPIOs steuert (Stichwort wiringPi). Die Ausgabe kannst du bequem per Java auslesen. Da die Steuerung des Sensors nicht all zu komplex ist, kannst du das fast 1:1 in C++ portieren.

      LG Felix

      Antworten
  47. Andre am 22. August 2015 18:50

    Hi Felix

    Fehler werden keine ausgegeben ein Bewegungssender den ich auch angeschlossen habe und auch über Python ansteuere funktioniert ebenfall ein Temperatursensor DS1820B
    Einfach Python Konsole öffnen und die Befehle die im Script sind aufrufen
    wie import RPi.GPIO as GPIO danach schritt für schritt weiter bis ein Fehler auftritt
    ??
    Spannung liegt am Sensor an (gemessen) und eine LED auch noch zwischengeschalten die brennt.

    Andre

    Antworten
    • Felix am 22. August 2015 20:06

      Die anderen Module funktionieren oder funktionieren auch nicht?
      Ja, versuch mal alle Befehle aus dem Skript so in die Konsole einzugeben.

      Antworten
  48. Andre am 22. August 2015 18:50

    Hi Felix

    Fehler werden keine ausgegeben ein Bewegungssender den ich auch angeschlossen habe und auch über Python ansteuere funktioniert ebenfall ein Temperatursensor DS1820B
    Einfach Python Konsole öffnen und die Befehle die im Script sind aufrufen
    wie import RPi.GPIO as GPIO danach schritt für schritt weiter bis ein Fehler auftritt
    ??
    Spannung liegt am Sensor an (gemessen) und eine LED auch noch zwischengeschalten die brennt.

    Andre

    Antworten
    • Felix am 22. August 2015 20:06

      Die anderen Module funktionieren oder funktionieren auch nicht?
      Ja, versuch mal alle Befehle aus dem Skript so in die Konsole einzugeben.

      Antworten
  49. Sebastian am 15. Oktober 2015 16:57

    Wenn das Script läuft, und man den Sensor abzieht, dann hängt das Script in einer ewig-Schleife.
    Es ware gut, wenn die while-Schleifen irgendwie nach einer definierten Zeit mit einem definierten Fehler abbrechen würden.

    Antworten
    • Felix am 15. Oktober 2015 18:52

      Hallo Sebastian,
      genau das passiert doch, sobald du STRG+C drückst (except Block). Das Skript wird gestoppt und eine Meldung wird ausgegeben. Oder meinst du etwas anderes?
      LG Felix

      Antworten
  50. Sebastian am 15. Oktober 2015 16:57

    Wenn das Script läuft, und man den Sensor abzieht, dann hängt das Script in einer ewig-Schleife.
    Es ware gut, wenn die while-Schleifen irgendwie nach einer definierten Zeit mit einem definierten Fehler abbrechen würden.

    Antworten
    • Felix am 15. Oktober 2015 18:52

      Hallo Sebastian,
      genau das passiert doch, sobald du STRG+C drückst (except Block). Das Skript wird gestoppt und eine Meldung wird ausgegeben. Oder meinst du etwas anderes?
      LG Felix

      Antworten
  51. Sebastian am 17. Oktober 2015 10:16

    Das Script läuft bei mir per Cron und piped das Ergebnis in eine Datei als log. Wenn es dann hängt, dann ist keiner da um STRG+C zu drücken 😉
    Ich lese die letzte Zeile der Datei mittels xymon (bb, hobbit) aus um es ins monitoring einzupflegen und um den Verlauf graphisch darzustellen.
    Wenn der Sensor jetzt einen Fehler hat (simunliert durch abziehen der Verbindung) dann kommt einfach kein Wert mehr.
    Das kann ich über das Alter der Datei zwar tracken, ist aber unpraktisch.
    Hinzu kommt, dass der Cron mir mehr und mehr python prozesse startet die den PI langsam lahmlegen.
    Ich habe als workaround den py-prozess in den Hintergrund geschickt, warte 6 sec und schiesse ihn dann ab (sollte er noch laufen).
    Aber ein richtiges error-handling im py-script würde ich vorziehen.
    Ich bin eher der basch & perl Mensch, sonnst hätte ich gleich im Code was probiert 😉

    Antworten
  52. Sebastian am 17. Oktober 2015 10:16

    Das Script läuft bei mir per Cron und piped das Ergebnis in eine Datei als log. Wenn es dann hängt, dann ist keiner da um STRG+C zu drücken 😉
    Ich lese die letzte Zeile der Datei mittels xymon (bb, hobbit) aus um es ins monitoring einzupflegen und um den Verlauf graphisch darzustellen.
    Wenn der Sensor jetzt einen Fehler hat (simunliert durch abziehen der Verbindung) dann kommt einfach kein Wert mehr.
    Das kann ich über das Alter der Datei zwar tracken, ist aber unpraktisch.
    Hinzu kommt, dass der Cron mir mehr und mehr python prozesse startet die den PI langsam lahmlegen.
    Ich habe als workaround den py-prozess in den Hintergrund geschickt, warte 6 sec und schiesse ihn dann ab (sollte er noch laufen).
    Aber ein richtiges error-handling im py-script würde ich vorziehen.
    Ich bin eher der basch & perl Mensch, sonnst hätte ich gleich im Code was probiert 😉

    Antworten
  53. Sebastian am 17. Oktober 2015 10:18

    ach so, die while-schleife habe ich natürlich weggelassen …

    Antworten
  54. Sebastian am 17. Oktober 2015 10:18

    ach so, die while-schleife habe ich natürlich weggelassen …

    Antworten
  55. Sebastian am 19. Oktober 2015 21:17

    Hi, hab mich bischen in python eingelesen und das Script leicht erweitert, man kann jetzt folgende Parameter einstellen:
    – Endlosschleife oder Einzel-Lauf
    – Pause zwischen den Schleifendurchläufen
    – Sensor Konnektivität timeout – verhindert „Hängenbleiben“ bei Sensorfehler

    Hier der entsprechende Code:

    root@raspberrypi:/home/pi# cat /usr/lib/hobbit/server/ext/ultraschall.py
    #http://tutorials-raspberrypi.de/gpio/entfernung-messen-mit-ultraschallsensor-hc-sr04/
    #Bibliotheken einbinden
    import RPi.GPIO as GPIO
    import time
    import datetime
    
    #GPIO Modus (BOARD / BCM)
    GPIO.setmode(GPIO.BCM)
    
    #GPIO Pins zuweisen
    GPIO_TRIGGER = 18
    GPIO_ECHO = 24
    
    # infinte Loop oder einmalig?
    infinite = 0 # 0 = einmalig ; 1 = infinite
    pause = 1 # Pause zwischen den Schleifendurchlaeufen in Sekunden
    timeout = 5 # Anzahl der sec die auf den Sensor gewartet wird
    
    #Richtung der GPIO-Pins festlegen (IN / OUT)
    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    GPIO.setup(GPIO_ECHO, GPIO.IN)
    
    def distanz():
      # setze Trigger auf HIGH
      GPIO.output(GPIO_TRIGGER, True)
    
      # setze Trigger nach 0.01ms aus LOW
      time.sleep(0.00001)
      GPIO.output(GPIO_TRIGGER, False)
    
      StartZeit = time.time()
      StopZeit = time.time()
      timeIN = time.time()
      timeout_done = 0
      # speichere Startzeit
      while ((GPIO.input(GPIO_ECHO) == 0)) :
        StartZeit = time.time()
        if (( StartZeit - timeIN ) > timeout ) :
          print "TimeOut Startzeit, breche ab"
          timeout_done += 1
          break
    
      # speichere Ankunftszeit
      while ((GPIO.input(GPIO_ECHO) == 1)) :
        StopZeit = time.time()
        if (( StopZeit - timeIN ) > timeout ) :
          print "TimeOut Stopzeit, breche ab"
          timeout_done += 1
          break
    
      if (timeout_done > 0) :
        print ("Konnte nicht richtig zum Sensor verbinden, timeout %.0f" % timeout)
        return -1
      else :
        # Zeit Differenz zwischen Start und Ankunft
        TimeElapsed = StopZeit - StartZeit
        # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
        # und durch 2 teilen, da hin und zurueck
        distanz = (TimeElapsed * 34300) / 2
        return distanz
    
    if __name__ == '__main__':
      try:
        while True :
          abstand = distanz()
          print ("%s Gemessene Entfernung = %.1f cm " % (str(time.strftime("%Y-%m-%d %H:%M:%S")), abstand))
          if not (infinite):
            break
          else :
            time.sleep(pause)
    
      # Beim Abbruch durch STRG+C resetten
      except KeyboardInterrupt:
        print("Messung vom User gestoppt")
      GPIO.cleanup()
    
    root@raspberrypi:/home/pi#
    Antworten
    • Martin am 28. November 2015 0:44

      Hallo,
      um die Signallaufzeiten, bzw die Anstiegszeiten bei längeren Leitungen zu kompensieren, würde ich den Triggereingang auf der Sensorseite mit einer zusätzlichen
      Leitung auf einen weiteren Gpio zurückführen, dann ergibt t1in – t2in die exakte Zeitdifferenz.

      Antworten
  56. Sebastian am 19. Oktober 2015 21:17

    Hi, hab mich bischen in python eingelesen und das Script leicht erweitert, man kann jetzt folgende Parameter einstellen:
    – Endlosschleife oder Einzel-Lauf
    – Pause zwischen den Schleifendurchläufen
    – Sensor Konnektivität timeout – verhindert „Hängenbleiben“ bei Sensorfehler

    Hier der entsprechende Code:

    root@raspberrypi:/home/pi# cat /usr/lib/hobbit/server/ext/ultraschall.py
    #http://tutorials-raspberrypi.de/gpio/entfernung-messen-mit-ultraschallsensor-hc-sr04/
    #Bibliotheken einbinden
    import RPi.GPIO as GPIO
    import time
    import datetime
    
    #GPIO Modus (BOARD / BCM)
    GPIO.setmode(GPIO.BCM)
    
    #GPIO Pins zuweisen
    GPIO_TRIGGER = 18
    GPIO_ECHO = 24
    
    # infinte Loop oder einmalig?
    infinite = 0 # 0 = einmalig ; 1 = infinite
    pause = 1 # Pause zwischen den Schleifendurchlaeufen in Sekunden
    timeout = 5 # Anzahl der sec die auf den Sensor gewartet wird
    
    #Richtung der GPIO-Pins festlegen (IN / OUT)
    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    GPIO.setup(GPIO_ECHO, GPIO.IN)
    
    def distanz():
      # setze Trigger auf HIGH
      GPIO.output(GPIO_TRIGGER, True)
    
      # setze Trigger nach 0.01ms aus LOW
      time.sleep(0.00001)
      GPIO.output(GPIO_TRIGGER, False)
    
      StartZeit = time.time()
      StopZeit = time.time()
      timeIN = time.time()
      timeout_done = 0
      # speichere Startzeit
      while ((GPIO.input(GPIO_ECHO) == 0)) :
        StartZeit = time.time()
        if (( StartZeit - timeIN ) > timeout ) :
          print "TimeOut Startzeit, breche ab"
          timeout_done += 1
          break
    
      # speichere Ankunftszeit
      while ((GPIO.input(GPIO_ECHO) == 1)) :
        StopZeit = time.time()
        if (( StopZeit - timeIN ) > timeout ) :
          print "TimeOut Stopzeit, breche ab"
          timeout_done += 1
          break
    
      if (timeout_done > 0) :
        print ("Konnte nicht richtig zum Sensor verbinden, timeout %.0f" % timeout)
        return -1
      else :
        # Zeit Differenz zwischen Start und Ankunft
        TimeElapsed = StopZeit - StartZeit
        # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
        # und durch 2 teilen, da hin und zurueck
        distanz = (TimeElapsed * 34300) / 2
        return distanz
    
    if __name__ == '__main__':
      try:
        while True :
          abstand = distanz()
          print ("%s Gemessene Entfernung = %.1f cm " % (str(time.strftime("%Y-%m-%d %H:%M:%S")), abstand))
          if not (infinite):
            break
          else :
            time.sleep(pause)
    
      # Beim Abbruch durch STRG+C resetten
      except KeyboardInterrupt:
        print("Messung vom User gestoppt")
      GPIO.cleanup()
    
    root@raspberrypi:/home/pi#
    Antworten
    • Martin am 28. November 2015 0:44

      Hallo,
      um die Signallaufzeiten, bzw die Anstiegszeiten bei längeren Leitungen zu kompensieren, würde ich den Triggereingang auf der Sensorseite mit einer zusätzlichen
      Leitung auf einen weiteren Gpio zurückführen, dann ergibt t1in – t2in die exakte Zeitdifferenz.

      Antworten
  57. MErich am 30. November 2015 11:54

    Hallo,
    Welche Entfernungen Sensor – Pi wurden erfolgreich getestet?
    Sind ca 7m machbar?
    Gruß Erich

    Antworten
    • Felix am 30. November 2015 12:48

      Hallo Erich,
      ich habe es innerhalb des Hauses getestet, dabei waren es um die 4-5 Meter. Allerdings macht er große Öffnungswinkel Probleme, da das Signal im Bereich von ca. 20° zurückgeworfen werden kann. D.h. selbst wenn am Rand ein nahes Objekt ist, kann es sein, dass jene Entfernung erkannt wird.
      Ich denke 7 Meter sollten bei freier Sicht machbar sein, aber ich kann es dir nicht garantiren. Einfach mal ausprobieren 🙂

      Antworten
  58. MErich am 30. November 2015 11:54

    Hallo,
    Welche Entfernungen Sensor – Pi wurden erfolgreich getestet?
    Sind ca 7m machbar?
    Gruß Erich

    Antworten
    • Felix am 30. November 2015 12:48

      Hallo Erich,
      ich habe es innerhalb des Hauses getestet, dabei waren es um die 4-5 Meter. Allerdings macht er große Öffnungswinkel Probleme, da das Signal im Bereich von ca. 20° zurückgeworfen werden kann. D.h. selbst wenn am Rand ein nahes Objekt ist, kann es sein, dass jene Entfernung erkannt wird.
      Ich denke 7 Meter sollten bei freier Sicht machbar sein, aber ich kann es dir nicht garantiren. Einfach mal ausprobieren 🙂

      Antworten
  59. MErich am 1. Dezember 2015 18:04

    Hallo Felix,
    Danke für Deine Nachricht.
    Ich habe eine Pelletbehälter 600x700mm und Höhe 1000mm.
    Dieser B. ist mit einem Deckel verschlossen. Meine Vorstellung geht dahin,
    mit diesem Sensor den Verbrauch zu erfassen.
    Zwischenwerte Voll, Halb, Viertel, Nachfüllen sollten wenn möglich ausgegeben werden.
    Ist es möglich den Sensor an einer Behälterwand zu befestigen oder sollter er zentrisch
    platziert werden.
    Übrigens der Reedkontakt und der Magnet ist noch nicht eingetroffen.
    Gruß Erich

    Antworten
    • Felix am 1. Dezember 2015 19:56

      Hallo Erich,
      ich denke eine zentrale Positionierung wird bessere Ergebnisse liefern. Der Sensor hat eben einen Öffnungswinkel von 15°, da musst du drauf achten.
      Ansonstne würde ich es einfach mal testen und schauen, wie genau die Werte sind (bei zentraler Positionierung).
      LG Felix

      Antworten
  60. MErich am 1. Dezember 2015 18:04

    Hallo Felix,
    Danke für Deine Nachricht.
    Ich habe eine Pelletbehälter 600x700mm und Höhe 1000mm.
    Dieser B. ist mit einem Deckel verschlossen. Meine Vorstellung geht dahin,
    mit diesem Sensor den Verbrauch zu erfassen.
    Zwischenwerte Voll, Halb, Viertel, Nachfüllen sollten wenn möglich ausgegeben werden.
    Ist es möglich den Sensor an einer Behälterwand zu befestigen oder sollter er zentrisch
    platziert werden.
    Übrigens der Reedkontakt und der Magnet ist noch nicht eingetroffen.
    Gruß Erich

    Antworten
    • Felix am 1. Dezember 2015 19:56

      Hallo Erich,
      ich denke eine zentrale Positionierung wird bessere Ergebnisse liefern. Der Sensor hat eben einen Öffnungswinkel von 15°, da musst du drauf achten.
      Ansonstne würde ich es einfach mal testen und schauen, wie genau die Werte sind (bei zentraler Positionierung).
      LG Felix

      Antworten
  61. Peter am 2. Dezember 2015 9:57

    Hallo zusammen,
    vielen Dank für die Anleitung, hat bei mir auf Anhieb sehr gut funktioniert.
    Auch die Diskussionsbeiträge konnten mir bereits sehr helfen.
    Da ich ein blutiger Anfäger in Sachen Python bin, würde ich gerne wissen, wie man in das vorhandene Script z.B. eine Mittelwertbildung integrieren kann.

    Beispielsweise könnten innerhalb der Endlosschleife jeweils 20 Messwerte erfasst und davon der Mittelwert ausgegeben werden. Bei einem Messwert pro Sekunde würde jeweils ein Mittelwert nach 20 sec ausgegeben werden.
    Danke für die Hilfe.
    Gruß Peter

    Antworten
    • Felix am 2. Dezember 2015 11:34

      Hallo Peter,
      Du könntest entweder python Listen verwenden (liste = []) und dann wie ein Array darauf zugreifen oder aber du nimmst Numpy, was ich bevorzuge.

      import numpy as np
      import time
      ...
      liste = np.zeros (20)
      while ... :
        for i in range(20)
          liste[0] = ...
          time.sleep(1)
        print liste.mean()
      Antworten
    • Peter am 7. Dezember 2015 17:04

      Hallo Felix,
      Danke für deine Antwort, habe es mit der Liste hinbekommen.

      Mir ist gerade noch eine Idee in den Sinn gekommen…vielleicht ist es ja für jemanden in der Runde von Interesse:
      Um im Außenbereich bis 4m Entfernung möglichst genau (+-0,5 cm) messen zu können, wäre eventuell eine zusätzlicher Anschluss eines Thermo-Sensors sinnvoll, da die Schallgeschwindigkeit in Luft ziemlich temperaturabhängig ist. Luftfeuchte und -Druck können wohl schon eher vernachlässigt werden.
      Hat vielleicht jemand Erfahrungen mit dem Anschluss mehrerer Sensoren zugleich? Was ist dabei zu beachten? Reicht die Versorgungsspannung des Pi dazu prinzipiell aus?

      Antworten
      • Felix am 7. Dezember 2015 17:10

        Hallo Peter,
        wenn du nur die Temperatur messen willst, schau am besten mal hier vorbei:
        Temperatur mittels Sensor messen (mehrere 1-Wire Sensoren hintereinander sind auch möglich)
        ALternativ:
        Luftfeuchtigkeit und Temperatur mit DHT11 / DHT22 und dem Raspberry Pi messen
        Raspberry Pi und I2C Luftdrucksensor BMP180

  62. Peter am 2. Dezember 2015 9:57

    Hallo zusammen,
    vielen Dank für die Anleitung, hat bei mir auf Anhieb sehr gut funktioniert.
    Auch die Diskussionsbeiträge konnten mir bereits sehr helfen.
    Da ich ein blutiger Anfäger in Sachen Python bin, würde ich gerne wissen, wie man in das vorhandene Script z.B. eine Mittelwertbildung integrieren kann.

    Beispielsweise könnten innerhalb der Endlosschleife jeweils 20 Messwerte erfasst und davon der Mittelwert ausgegeben werden. Bei einem Messwert pro Sekunde würde jeweils ein Mittelwert nach 20 sec ausgegeben werden.
    Danke für die Hilfe.
    Gruß Peter

    Antworten
    • Felix am 2. Dezember 2015 11:34

      Hallo Peter,
      Du könntest entweder python Listen verwenden (liste = []) und dann wie ein Array darauf zugreifen oder aber du nimmst Numpy, was ich bevorzuge.

      import numpy as np
      import time
      ...
      liste = np.zeros (20)
      while ... :
        for i in range(20)
          liste[0] = ...
          time.sleep(1)
        print liste.mean()
      Antworten
    • Peter am 7. Dezember 2015 17:04

      Hallo Felix,
      Danke für deine Antwort, habe es mit der Liste hinbekommen.

      Mir ist gerade noch eine Idee in den Sinn gekommen…vielleicht ist es ja für jemanden in der Runde von Interesse:
      Um im Außenbereich bis 4m Entfernung möglichst genau (+-0,5 cm) messen zu können, wäre eventuell eine zusätzlicher Anschluss eines Thermo-Sensors sinnvoll, da die Schallgeschwindigkeit in Luft ziemlich temperaturabhängig ist. Luftfeuchte und -Druck können wohl schon eher vernachlässigt werden.
      Hat vielleicht jemand Erfahrungen mit dem Anschluss mehrerer Sensoren zugleich? Was ist dabei zu beachten? Reicht die Versorgungsspannung des Pi dazu prinzipiell aus?

      Antworten
      • Felix am 7. Dezember 2015 17:10

        Hallo Peter,
        wenn du nur die Temperatur messen willst, schau am besten mal hier vorbei:
        Temperatur mittels Sensor messen (mehrere 1-Wire Sensoren hintereinander sind auch möglich)
        ALternativ:
        Luftfeuchtigkeit und Temperatur mit DHT11 / DHT22 und dem Raspberry Pi messen
        Raspberry Pi und I2C Luftdrucksensor BMP180

  63. Horst am 4. Dezember 2015 11:08

    Hallo zusammen,

    kennt jemand eine Möglichkeit, die berechneten Abstandswerte aus dem Skript auf den I2C-Bus mit einer definierten Adresse z.B. 0x12 zu übergeben?

    Danke für eure Hilfe!

    Gruß Horst

    Antworten
  64. Horst am 4. Dezember 2015 11:08

    Hallo zusammen,

    kennt jemand eine Möglichkeit, die berechneten Abstandswerte aus dem Skript auf den I2C-Bus mit einer definierten Adresse z.B. 0x12 zu übergeben?

    Danke für eure Hilfe!

    Gruß Horst

    Antworten
  65. Ingo am 15. Dezember 2015 22:32

    Hallo,
    das mit dem Mittelwert interessiert mich auch.
    Leider bin ich zu blöd, um rauszufinden, wo genau der numpy-Code-Schnipsel eingesetzt werden muß.

    Kannst du mir da den entscheidenden Tip geben?

    Im übrigen habe ich ein altes VGA-Kabel mit 1 Meter Länge zu einem Verbindungskabel Pi Sensor umgelötet.
    Ich habe das Gefühl, als wenn der Sensorbei dieser Länge einige Zeit braucht, um einen Wert zu erzeugen.
    Diese Kabelart scheint noch nicht optimal zu sein…
    Gruß Ingo

    Antworten
  66. Ingo am 15. Dezember 2015 22:32

    Hallo,
    das mit dem Mittelwert interessiert mich auch.
    Leider bin ich zu blöd, um rauszufinden, wo genau der numpy-Code-Schnipsel eingesetzt werden muß.

    Kannst du mir da den entscheidenden Tip geben?

    Im übrigen habe ich ein altes VGA-Kabel mit 1 Meter Länge zu einem Verbindungskabel Pi Sensor umgelötet.
    Ich habe das Gefühl, als wenn der Sensorbei dieser Länge einige Zeit braucht, um einen Wert zu erzeugen.
    Diese Kabelart scheint noch nicht optimal zu sein…
    Gruß Ingo

    Antworten
  67. Ingo am 15. Dezember 2015 23:14

    Ach ja, richtig tricky wäre, wenn bei den 20 Messungen der höchste und der niedrigste Wert nicht berücksichtigt würden.

    Antworten
    • Felix am 15. Dezember 2015 23:27

      Ich schreibe mal einen einfachen Code, wie man Messungen mit Numpy speichern kann und die Werte auslesen:

      import numpy as np
      array = np.zeros(20) # 20 Messwerte
      for i in range(20):
        ... # Messen
        array[i] = ... # Messwert
      mean = array.mean()
      mean2 = array[1:-1] # ab dem zweiten Wert bis zum vorletzten

      Das schöne an Numpy sind die vielen vorgefertigten Funktionen, die alle sehr performant sind (da C-Code)

      Es kann sein, dass bei deinem langen Kabel die Spannung abfällt und daher der Sensor nicht mehr ordnungsgemäß reagiert. Das solltest du ggf. messen. Und wieso genau ein VGA Kabel?

      Antworten
  68. Ingo am 15. Dezember 2015 23:14

    Ach ja, richtig tricky wäre, wenn bei den 20 Messungen der höchste und der niedrigste Wert nicht berücksichtigt würden.

    Antworten
    • Felix am 15. Dezember 2015 23:27

      Ich schreibe mal einen einfachen Code, wie man Messungen mit Numpy speichern kann und die Werte auslesen:

      import numpy as np
      array = np.zeros(20) # 20 Messwerte
      for i in range(20):
        ... # Messen
        array[i] = ... # Messwert
      mean = array.mean()
      mean2 = array[1:-1] # ab dem zweiten Wert bis zum vorletzten

      Das schöne an Numpy sind die vielen vorgefertigten Funktionen, die alle sehr performant sind (da C-Code)

      Es kann sein, dass bei deinem langen Kabel die Spannung abfällt und daher der Sensor nicht mehr ordnungsgemäß reagiert. Das solltest du ggf. messen. Und wieso genau ein VGA Kabel?

      Antworten
  69. Ingo am 16. Dezember 2015 8:28

    Hallo Felix,
    ich habe den Sensor erst mit einem Steckboard und Jumperkabeln ausprobiert.
    Erst mal ein dickes Lob! Das hat alles auf Anhieb funktioniert!
    (Bis auf, daß ich den Sensor erst seitenverkehrt gesteckt habe 🙂 )
    Dann habe ich alles auf eine Platine gelötet. Da das Ganze irgendwann in einem 6m² Wassertank landen könnte, wollte ich ein längeres Kabel austesten. Ein VGA-Kabel hat ganz viele Pins also müssen da auch mind. 4 Kabel drin sein. Und da ich noch ein paar Kabel im Schrank liegen hatte, wurde mal eben eins gekillt.
    Stecker drangelötet und schon konnte es los gehen.
    Interessant ist, daß der PI eine Weile braucht um die ersten Messwerte auszulesen. Hat er aber erst mal einen Anfang gefunden, kommen die Werte relativ zügig hintereinander weg…..

    Bei dem neuen Code ( mean2 = array[1:-1] # ab dem zweiten Wert bis zum vorletzten )
    würde ich als Laie jetzt herauslesen, dass der erste und letzte Wert nicht berücksichtigt werden. Ich fände es aber besser wenn der höchste und niedrigste Zahlenwert nicht berücksichtigt würde.

    Und wo genau müsste der Code in das Python-Programm eingefügt werden?

    Gruß

    Ingo

    Antworten
    • Felix am 16. Dezember 2015 11:58

      Hallo Ingo,
      dann kannst du das Array vorher sortieren und dann den niedrigsten (ersten) und höchsten (letzten) Wert raus schmeißen:

      mean2 = np.sort(a)[1:-1]

      Eventuell solltest du dir auch mal den Median anschauen.
      LG Felix

      Antworten
  70. Ingo am 16. Dezember 2015 8:28

    Hallo Felix,
    ich habe den Sensor erst mit einem Steckboard und Jumperkabeln ausprobiert.
    Erst mal ein dickes Lob! Das hat alles auf Anhieb funktioniert!
    (Bis auf, daß ich den Sensor erst seitenverkehrt gesteckt habe 🙂 )
    Dann habe ich alles auf eine Platine gelötet. Da das Ganze irgendwann in einem 6m² Wassertank landen könnte, wollte ich ein längeres Kabel austesten. Ein VGA-Kabel hat ganz viele Pins also müssen da auch mind. 4 Kabel drin sein. Und da ich noch ein paar Kabel im Schrank liegen hatte, wurde mal eben eins gekillt.
    Stecker drangelötet und schon konnte es los gehen.
    Interessant ist, daß der PI eine Weile braucht um die ersten Messwerte auszulesen. Hat er aber erst mal einen Anfang gefunden, kommen die Werte relativ zügig hintereinander weg…..

    Bei dem neuen Code ( mean2 = array[1:-1] # ab dem zweiten Wert bis zum vorletzten )
    würde ich als Laie jetzt herauslesen, dass der erste und letzte Wert nicht berücksichtigt werden. Ich fände es aber besser wenn der höchste und niedrigste Zahlenwert nicht berücksichtigt würde.

    Und wo genau müsste der Code in das Python-Programm eingefügt werden?

    Gruß

    Ingo

    Antworten
    • Felix am 16. Dezember 2015 11:58

      Hallo Ingo,
      dann kannst du das Array vorher sortieren und dann den niedrigsten (ersten) und höchsten (letzten) Wert raus schmeißen:

      mean2 = np.sort(a)[1:-1]

      Eventuell solltest du dir auch mal den Median anschauen.
      LG Felix

      Antworten
  71. Ingo am 16. Dezember 2015 20:54

    Hallo,
    Es tut mir echt leid, aber ich bekomme es nicht hin.. 🙁

    Was ich gerade noch schaffe, ist am Anfang:
    ‚import numpy as np‘
    einzusetzten.
    Der Rest verschließt sich mir leider…
    Könntest du mir ggf. nochmal unter die Arme greifen…?
    Gruß Ingo

    Antworten
    • Felix am 16. Dezember 2015 20:56

      Wo hängst du genau? Zu einzelnen Funktionen solltest du dir die Docs mal ansehen. Oder ist etwas an dem von mir geposteten Code unverständlich?

      Antworten
  72. Ingo am 16. Dezember 2015 20:54

    Hallo,
    Es tut mir echt leid, aber ich bekomme es nicht hin.. 🙁

    Was ich gerade noch schaffe, ist am Anfang:
    ‚import numpy as np‘
    einzusetzten.
    Der Rest verschließt sich mir leider…
    Könntest du mir ggf. nochmal unter die Arme greifen…?
    Gruß Ingo

    Antworten
    • Felix am 16. Dezember 2015 20:56

      Wo hängst du genau? Zu einzelnen Funktionen solltest du dir die Docs mal ansehen. Oder ist etwas an dem von mir geposteten Code unverständlich?

      Antworten
  73. Ingo am 16. Dezember 2015 21:29

    Na ja…..
    ich kann nicht herrauslesen, wo zwischen ich den Code setzten muß. Dieses Python verschließt sich mir etwas.
    Ich bin BASIC vom VC-20 gewohnt… 🙂

    Optimalerweise müsste ich den Bereich vor dem Codeschnipsel sehn und dann den Code.
    Also ungefähr so:

     timeIN = time.time()
      timeout_done = 0
      # speichere Startzeit
      while ((GPIO.input(GPIO_ECHO) == 0)) :
        StartZeit = time.time()
        if (( StartZeit - timeIN ) > timeout ) :
          print "TimeOut Startzeit, breche ab"
          timeout_done += 1
    
    import numpy as np
    array = np.zeros(20) # 20 Messwerte
    for i in range(20):
      ... # Messen
      array[i] = ... # Messwert
      ...
    mean = array.mean()
    mean2 = np.sort(a)[1:-1] # ab dem zweiten Wert bis zum vorletzten
    
     # speichere Ankunftszeit
      while ((GPIO.input(GPIO_ECHO) == 1)) :
        StopZeit = time.time()
        if (( StopZeit - timeIN ) > timeout ) :
          print "TimeOut Stopzeit, breche ab"
          timeout_done += 1
          break

    Das ist wohl nicht zufällig die richtige stelle 🙂

    Ich will dir aber nicht deine Zeit stehlen…..

    Gruß Ingo

    Antworten
    • Felix am 16. Dezember 2015 22:02

      Also imports kommen normalerweise an den Anfang der Datei.
      das Array kannst du auch irgendwo am Anfang initiliaiseren. Den Mean bestimmst du nachdem du alle Werte gespeichert hast, also am Ende. Eigentlich kommt fast der gesamte Code in die For-Schleife. Du musst die Entfernung wie im Tutorial berechnen und dann speichern.
      Achja, die Punkte (…) sind als Denkansatz, da musst du deinen Code entsprechend einfügen 😉

      Antworten
  74. Ingo am 16. Dezember 2015 21:29

    Na ja…..
    ich kann nicht herrauslesen, wo zwischen ich den Code setzten muß. Dieses Python verschließt sich mir etwas.
    Ich bin BASIC vom VC-20 gewohnt… 🙂

    Optimalerweise müsste ich den Bereich vor dem Codeschnipsel sehn und dann den Code.
    Also ungefähr so:

     timeIN = time.time()
      timeout_done = 0
      # speichere Startzeit
      while ((GPIO.input(GPIO_ECHO) == 0)) :
        StartZeit = time.time()
        if (( StartZeit - timeIN ) > timeout ) :
          print "TimeOut Startzeit, breche ab"
          timeout_done += 1
    
    import numpy as np
    array = np.zeros(20) # 20 Messwerte
    for i in range(20):
      ... # Messen
      array[i] = ... # Messwert
      ...
    mean = array.mean()
    mean2 = np.sort(a)[1:-1] # ab dem zweiten Wert bis zum vorletzten
    
     # speichere Ankunftszeit
      while ((GPIO.input(GPIO_ECHO) == 1)) :
        StopZeit = time.time()
        if (( StopZeit - timeIN ) > timeout ) :
          print "TimeOut Stopzeit, breche ab"
          timeout_done += 1
          break

    Das ist wohl nicht zufällig die richtige stelle 🙂

    Ich will dir aber nicht deine Zeit stehlen…..

    Gruß Ingo

    Antworten
    • Felix am 16. Dezember 2015 22:02

      Also imports kommen normalerweise an den Anfang der Datei.
      das Array kannst du auch irgendwo am Anfang initiliaiseren. Den Mean bestimmst du nachdem du alle Werte gespeichert hast, also am Ende. Eigentlich kommt fast der gesamte Code in die For-Schleife. Du musst die Entfernung wie im Tutorial berechnen und dann speichern.
      Achja, die Punkte (…) sind als Denkansatz, da musst du deinen Code entsprechend einfügen 😉

      Antworten
  75. Ingo am 19. Dezember 2015 21:02

    Hallo, ich lasse gerade den US-Sensor über ein ca. 15 Meter langes 4-adriges Telefonkabel laufen.
    Läuft gut mit stabilen Werten.

    Gruß Ingo

    Antworten
  76. Ingo am 19. Dezember 2015 21:02

    Hallo, ich lasse gerade den US-Sensor über ein ca. 15 Meter langes 4-adriges Telefonkabel laufen.
    Läuft gut mit stabilen Werten.

    Gruß Ingo

    Antworten
  77. Tim am 21. Dezember 2015 20:45

    Gerade das Tutorial nachgebaut. Bei mir kommt aber keine Nachricht an, hoffe hab nichts kaputt gemacht. Es werden einfach keine Ergebnisse geschrieben ich kann das Script jedoch über Strg+C beenden, dann kriege ich auch die Message fürs Beenden

    Übrings der Link im Abschnitt „Zu erst einmal sollte die Python GPIO Library installiert sein. Ist dies nicht der Fall, kannst du am Anfang dieses Tutorials nachlesen, wie dies geht.“ zeigt auf diesen Artikel (self-reference)

    Antworten
    • Felix am 21. Dezember 2015 22:13

      Hi Tim,
      der Link ist aktualisiert: Raspberry Pi Ampelschaltung mit GPIO Teil 1
      Dein Problem klingt sehr danach, dass nichts ankommt und daher er while Schleife der Funktion stecken bleibt. Die Verkabelung stimmt aber soweit und das Modul ist auch in Ordnung?

      Antworten
    • Tim am 22. Dezember 2015 7:33

      Hallo,

      danke für die Antwort, ich konnte meinen Fehler noch finden. Und zwar bin ich oben von der Skizze des Raspberry ausgegangen und habe gesehen die Pins müssen (nach meiner ersten Auffassung wiefolgt gesteckt werden:
      Obere Reihe:
      1. von links = Strom
      3. von links = Ground
      6. von links = Trig
      5. von rechts = Echo <–
      später fiel mir auf, dass in der Zeichnung garnicht alle Pins gezeigt sind und daher die herangehensweise (X Pins von rechts/links) dumm von mir war.

      Antworten
  78. Tim am 21. Dezember 2015 20:45

    Gerade das Tutorial nachgebaut. Bei mir kommt aber keine Nachricht an, hoffe hab nichts kaputt gemacht. Es werden einfach keine Ergebnisse geschrieben ich kann das Script jedoch über Strg+C beenden, dann kriege ich auch die Message fürs Beenden

    Übrings der Link im Abschnitt „Zu erst einmal sollte die Python GPIO Library installiert sein. Ist dies nicht der Fall, kannst du am Anfang dieses Tutorials nachlesen, wie dies geht.“ zeigt auf diesen Artikel (self-reference)

    Antworten
    • Felix am 21. Dezember 2015 22:13

      Hi Tim,
      der Link ist aktualisiert: Raspberry Pi Ampelschaltung mit GPIO Teil 1
      Dein Problem klingt sehr danach, dass nichts ankommt und daher er while Schleife der Funktion stecken bleibt. Die Verkabelung stimmt aber soweit und das Modul ist auch in Ordnung?

      Antworten
    • Tim am 22. Dezember 2015 7:33

      Hallo,

      danke für die Antwort, ich konnte meinen Fehler noch finden. Und zwar bin ich oben von der Skizze des Raspberry ausgegangen und habe gesehen die Pins müssen (nach meiner ersten Auffassung wiefolgt gesteckt werden:
      Obere Reihe:
      1. von links = Strom
      3. von links = Ground
      6. von links = Trig
      5. von rechts = Echo <–
      später fiel mir auf, dass in der Zeichnung garnicht alle Pins gezeigt sind und daher die herangehensweise (X Pins von rechts/links) dumm von mir war.

      Antworten
  79. Robin am 25. Januar 2016 10:05

    Hallo zusammen,

    Vielen Dank für das tolle anschauliche Tutorial, hat alles auf Anhieb geklappt!
    Leider funktioniert das Ultraschallsystem nur sehr „ungenau“, sprich: möchte man die Entfernung zu einem Menschen messen, geht fast jede zweite Messung ab einer Distanz von 2 Metern daneben (der Ultraschall „trifft“ nicht das Objekt und es werden extrem hohe Werte ausgegeben). Welche Möglichkeiten gibt es, das System zu verbessern? Würde es Sinn machen einen zweites Ultraschall Modul zu verwenden um ein Objekt besser zu erfassen? oder gibt es eine einfachere, technische Möglichkeit (Sensor vergrößern etc..)?
    Vielen Dank schonmal!
    LG Robin

    Antworten
    • Felix am 25. Januar 2016 11:55

      Hallo Robin,
      die Ungenauigkeit ist ein Problem des US Sensors, da es einen Öffnungswinkel von 15° hat. Das bedeutet, der Ultraschall wird vom nähesten Objekt innerhalb dieser 15° reflektiert. Für kritische Anwendungen würde ich kein US Modul nehmen. Es gibt Laser-Range-Scanner (LIDAR etc.), was allerdings sehr teuer ist. Darüber hinaus kann man Abstände auch mit Stereo Vision (OpenCV) erkennen, allerdings wird das Tutorial dazu erst in 2-3 Monaten erscheinen.
      Als letzte Möglichkeit gibt es auch noch Infrarot Abstandsmesser, welche sehr genau arbeiten (+-2cm). Dazu schreibe ich gerade ein Tutorial, welches in ca. 2 Wochen erscheint. Wenn du möchtest, kannst du dich ja zum Newsletter eintragen, dann wirst du informiert, sobald es fertig ist.

      Antworten
  80. Robin am 25. Januar 2016 10:05

    Hallo zusammen,

    Vielen Dank für das tolle anschauliche Tutorial, hat alles auf Anhieb geklappt!
    Leider funktioniert das Ultraschallsystem nur sehr „ungenau“, sprich: möchte man die Entfernung zu einem Menschen messen, geht fast jede zweite Messung ab einer Distanz von 2 Metern daneben (der Ultraschall „trifft“ nicht das Objekt und es werden extrem hohe Werte ausgegeben). Welche Möglichkeiten gibt es, das System zu verbessern? Würde es Sinn machen einen zweites Ultraschall Modul zu verwenden um ein Objekt besser zu erfassen? oder gibt es eine einfachere, technische Möglichkeit (Sensor vergrößern etc..)?
    Vielen Dank schonmal!
    LG Robin

    Antworten
    • Felix am 25. Januar 2016 11:55

      Hallo Robin,
      die Ungenauigkeit ist ein Problem des US Sensors, da es einen Öffnungswinkel von 15° hat. Das bedeutet, der Ultraschall wird vom nähesten Objekt innerhalb dieser 15° reflektiert. Für kritische Anwendungen würde ich kein US Modul nehmen. Es gibt Laser-Range-Scanner (LIDAR etc.), was allerdings sehr teuer ist. Darüber hinaus kann man Abstände auch mit Stereo Vision (OpenCV) erkennen, allerdings wird das Tutorial dazu erst in 2-3 Monaten erscheinen.
      Als letzte Möglichkeit gibt es auch noch Infrarot Abstandsmesser, welche sehr genau arbeiten (+-2cm). Dazu schreibe ich gerade ein Tutorial, welches in ca. 2 Wochen erscheint. Wenn du möchtest, kannst du dich ja zum Newsletter eintragen, dann wirst du informiert, sobald es fertig ist.

      Antworten
  81. Patrick am 17. Februar 2016 20:38

    Hallo zusammen,
    ich habe eine html Webseite mit 2 Buttons erstellt, jeweils zum Auf- und Zufahren eines Rollladens. Mit Hilfe zwei php Skripts steuer ich die beiden Relais an.

    Nun möchte ich mit Hilfe eines Ultraschallsensors der unten am Ende des Rollladens auf einem Brett angebracht ist, die Entfernung zwischen dem Rollladenpanzer und dem Sensor ermitteln. Das funktioniert mit dem hier veröffentlichtem Skript sehr gut. 🙂 Der gemessene Abstand wird in der Datei Abstand.txt ausgeben.

    Nun möchte ich auf der Webseite ausgeben ob der Rollladen geschlossen oder geöffnet ist, indem ich die Abstand.txt Datei auslese und als eine Art optische Anzeige auf der Webseite darstelle. Weis jemand wie das funktionieren könnte?
    Vielen Dank schon mal

    Schöne Grüße
    Patrick

    Antworten
    • Felix am 17. Februar 2016 21:49

      Wenn du den Abstand hast, kannst du es z.B. mit einer „Progress Bar“ recht einfach realisieren. Dazu ist ein wenig CSS nötig (einfach hier nachlesen oder nach „CSS Progress Bar“ googlen). Du definierst einen maximalen Abstand und einen minimalen (0), dann schaust du wie viel Prozent davon erreicht sind und setzt den Balken dementsprechend.

      Antworten
    • Patrick am 18. Februar 2016 11:29

      Danke für die schnelle Antwort 🙂
      weist du zufälligerweise wie man des Skript von dir oben umschreiben kann, so dass er zwar ständig die Entfernung misst aber nur den maximalen oder den minimalen Abstand also 0 in die Datei Abstand.txt ausgibt?

      Antworten
      • Felix am 18. Februar 2016 11:32

        Dauerhaft: Mit einer Endlosschleife (while True:).
        Nur Abstand größer als Null: if abstand > 0: und dann in die Datei schreiben.
        Wenn du die HTML Datei auch automatisch aktualisieren möchtest, musst du das mit Javscript machen (jede Sekunde den Wert neu einlesen und die Progress Bar anpassen.
        LG Felix

    • Patrick am 18. Februar 2016 16:20

      Könntest du mir sagen, wo geau ich den Befehl: if abstand > 0:
      eingeben muss, da ich immer nen Fehler bekomm
      Danke

      if __name__ == '__main__':
        try:
          file_out = open("Abstand.txt","w")
          while True:
            abstand = distanz()
            print ("Gemessene Entfernung = %.1f cm" % abstand)
            file_out.write("%.1f cmn" % abstand)
            time.sleep(3)
      
        # Beim Abbruch durch STRG+C resetten
        except KeyboardInterrupt:
          print("Messung vom User gestoppt")
          GPIO.cleanup()
          file_out.close()
      Antworten
      • Felix am 19. Februar 2016 0:26

        Bevor du es speicherst. Sprich:

              ...
              print ("Gemessene Entfernung = %.1f cm" % abstand)
              if abstand > 0:
                file_out.write("%.1f cmn" % abstand)
              time.sleep(3)
  82. Patrick am 17. Februar 2016 20:38

    Hallo zusammen,
    ich habe eine html Webseite mit 2 Buttons erstellt, jeweils zum Auf- und Zufahren eines Rollladens. Mit Hilfe zwei php Skripts steuer ich die beiden Relais an.

    Nun möchte ich mit Hilfe eines Ultraschallsensors der unten am Ende des Rollladens auf einem Brett angebracht ist, die Entfernung zwischen dem Rollladenpanzer und dem Sensor ermitteln. Das funktioniert mit dem hier veröffentlichtem Skript sehr gut. 🙂 Der gemessene Abstand wird in der Datei Abstand.txt ausgeben.

    Nun möchte ich auf der Webseite ausgeben ob der Rollladen geschlossen oder geöffnet ist, indem ich die Abstand.txt Datei auslese und als eine Art optische Anzeige auf der Webseite darstelle. Weis jemand wie das funktionieren könnte?
    Vielen Dank schon mal

    Schöne Grüße
    Patrick

    Antworten
    • Felix am 17. Februar 2016 21:49

      Wenn du den Abstand hast, kannst du es z.B. mit einer „Progress Bar“ recht einfach realisieren. Dazu ist ein wenig CSS nötig (einfach hier nachlesen oder nach „CSS Progress Bar“ googlen). Du definierst einen maximalen Abstand und einen minimalen (0), dann schaust du wie viel Prozent davon erreicht sind und setzt den Balken dementsprechend.

      Antworten
    • Patrick am 18. Februar 2016 11:29

      Danke für die schnelle Antwort 🙂
      weist du zufälligerweise wie man des Skript von dir oben umschreiben kann, so dass er zwar ständig die Entfernung misst aber nur den maximalen oder den minimalen Abstand also 0 in die Datei Abstand.txt ausgibt?

      Antworten
      • Felix am 18. Februar 2016 11:32

        Dauerhaft: Mit einer Endlosschleife (while True:).
        Nur Abstand größer als Null: if abstand > 0: und dann in die Datei schreiben.
        Wenn du die HTML Datei auch automatisch aktualisieren möchtest, musst du das mit Javscript machen (jede Sekunde den Wert neu einlesen und die Progress Bar anpassen.
        LG Felix

    • Patrick am 18. Februar 2016 16:20

      Könntest du mir sagen, wo geau ich den Befehl: if abstand > 0:
      eingeben muss, da ich immer nen Fehler bekomm
      Danke

      if __name__ == '__main__':
        try:
          file_out = open("Abstand.txt","w")
          while True:
            abstand = distanz()
            print ("Gemessene Entfernung = %.1f cm" % abstand)
            file_out.write("%.1f cmn" % abstand)
            time.sleep(3)
      
        # Beim Abbruch durch STRG+C resetten
        except KeyboardInterrupt:
          print("Messung vom User gestoppt")
          GPIO.cleanup()
          file_out.close()
      Antworten
      • Felix am 19. Februar 2016 0:26

        Bevor du es speicherst. Sprich:

              ...
              print ("Gemessene Entfernung = %.1f cm" % abstand)
              if abstand > 0:
                file_out.write("%.1f cmn" % abstand)
              time.sleep(3)
  83. Patrick am 19. Februar 2016 13:25

    Vielen Dank, jetzt klappts 🙂

    LG Patrick

    Antworten
  84. Patrick am 19. Februar 2016 13:25

    Vielen Dank, jetzt klappts 🙂

    LG Patrick

    Antworten
  85. Patrick am 19. Februar 2016 14:36

    hab jetzt mal gemacht: if Abstand > 5:
    print…

    Der schreibt mir dann immer die Werte untereinander. Ist es auch möglich das er keinen Zeilenumbruch macht sondern den letzten Wert überschreibt und ich somit in der .txt Datei immer nur einen Wert stehen habe?

    Dann wär die andere Frage: Wie kann ich es genau machen, dass er z.b bei einem Wert 65 in eine andere .txt Datei?

    Nochmals vielen Dank! 🙂
    sorry das ich hier grad alles voll schreibe aber du bist gerade der einzige der mir dabei helfen kann

    Antworten
    • Felix am 19. Februar 2016 14:43

      So löschst du den Inhalt:

      file_out.seek(0)
      file_out.truncate()

      PS: Schau dir am besten mal Python Basics an, da if..else wirklich sehr einfach sind.
      LG Felix

      Antworten
  86. Patrick am 19. Februar 2016 14:36

    hab jetzt mal gemacht: if Abstand > 5:
    print…

    Der schreibt mir dann immer die Werte untereinander. Ist es auch möglich das er keinen Zeilenumbruch macht sondern den letzten Wert überschreibt und ich somit in der .txt Datei immer nur einen Wert stehen habe?

    Dann wär die andere Frage: Wie kann ich es genau machen, dass er z.b bei einem Wert 65 in eine andere .txt Datei?

    Nochmals vielen Dank! 🙂
    sorry das ich hier grad alles voll schreibe aber du bist gerade der einzige der mir dabei helfen kann

    Antworten
    • Felix am 19. Februar 2016 14:43

      So löschst du den Inhalt:

      file_out.seek(0)
      file_out.truncate()

      PS: Schau dir am besten mal Python Basics an, da if..else wirklich sehr einfach sind.
      LG Felix

      Antworten
  87. Sebastian am 13. März 2016 17:18

    Sehr guter Beitrag und das einzige Script was bei mir richtige Funktionier hat. Mach weiter!

    Antworten
  88. Sebastian am 13. März 2016 17:18

    Sehr guter Beitrag und das einzige Script was bei mir richtige Funktionier hat. Mach weiter!

    Antworten
  89. Werner am 7. April 2016 23:54

    Ich verwende dieses Script bei 3 Verschiedenen Sensoren unter Raspbian. Bei einem scheint es problemlos zu laufen. Bei den zwei anderen läuft es anfangs, nach einer Weile (manchmal Sekunden manchmal Stunden) bleibt es in der ersten While schleife hängen.
    Nach etwas Googlen hab ich herausgefunden dass das wohl an den SR-04 Sensoren liegt und es da wohl irgendwie ein Problem mit dem ECHO geben soll.
    Kennst du dieses Problem zufällig und kennst ein passenden Workaround dazu?

    Danke schon mal

    Antworten
    • Felix am 8. April 2016 0:01

      Hallo Werner,
      ich kann das Problem bestätigen: Zwar hatte es bei mir nur selten (1 von 100) Probleme, aber es kommt dennoch vor. Teilweise gibt es qualitativere Sensoren, die aber auch etwas mehr kosten. Ansonsten würde ich einen Timeout setzen: Da Entfernungen über 10m sehr unrealistisch damit zu messen sind bzw. die Genauigkeit ab ca. 5m nachlässt, würde ich einen Timeout setzen.Je nachdem wie weit du den maximalen Abstand haben willst (X in Metern) setzt du ihn auf 2*X/343 Sekunden(2 mal weil hin und zurück). Ist mehr Zeit vergangen kann die Schleife abgebrochen werden und es gibt einfach keine Messung (-1 oder so).
      LG Felix

      Antworten
  90. Werner am 7. April 2016 23:54

    Ich verwende dieses Script bei 3 Verschiedenen Sensoren unter Raspbian. Bei einem scheint es problemlos zu laufen. Bei den zwei anderen läuft es anfangs, nach einer Weile (manchmal Sekunden manchmal Stunden) bleibt es in der ersten While schleife hängen.
    Nach etwas Googlen hab ich herausgefunden dass das wohl an den SR-04 Sensoren liegt und es da wohl irgendwie ein Problem mit dem ECHO geben soll.
    Kennst du dieses Problem zufällig und kennst ein passenden Workaround dazu?

    Danke schon mal

    Antworten
    • Felix am 8. April 2016 0:01

      Hallo Werner,
      ich kann das Problem bestätigen: Zwar hatte es bei mir nur selten (1 von 100) Probleme, aber es kommt dennoch vor. Teilweise gibt es qualitativere Sensoren, die aber auch etwas mehr kosten. Ansonsten würde ich einen Timeout setzen: Da Entfernungen über 10m sehr unrealistisch damit zu messen sind bzw. die Genauigkeit ab ca. 5m nachlässt, würde ich einen Timeout setzen.Je nachdem wie weit du den maximalen Abstand haben willst (X in Metern) setzt du ihn auf 2*X/343 Sekunden(2 mal weil hin und zurück). Ist mehr Zeit vergangen kann die Schleife abgebrochen werden und es gibt einfach keine Messung (-1 oder so).
      LG Felix

      Antworten
  91. Andreas am 20. April 2016 22:39

    Hallo,

    hier wurde sich fleissig von deinem Script bedient…
    dracarysdiy.wordpress.com/smart-mirror-5-video/
    allerdings nimmt der Kollege viel grössere Wiederstände… Kannst Du da etwas Licht ins Dunkel bringen?

    Antworten
    • Felix am 20. April 2016 23:29

      Hi Andreas,
      der größere Widerstand ist nur dazu gedacht, dass eine bestimmte Spannung (in dem Fall Minus) anliegt. Normalerweise nimmt man einen größeren Widerstand wie z.B. 10k. Als ich das Tutorial erstellt habe, hatte ich keinen 10k Widerstand zur Hand, daher 470 verwendet. Es sollte aber auch mit Zwischenwerten (1k, 4.7k, usw) funktionieren. Wichtig ist nämlich nur, dass wenn vom ECHO keine Spannung kommt, der Pi ein Signal von GND bekommt und da reicht es aus, wenn es auch nur sehr gering ist.
      Warum er allerdings 4.7k Ohm als Vorwiderstand nimmt ist mir schleierhaft, da man ja ausrechnen kann wie viel Volt abgeleitet werden müssen (5.5 – 3.3 = 1.7).

      Antworten
  92. Andreas am 20. April 2016 22:39

    Hallo,

    hier wurde sich fleissig von deinem Script bedient…
    dracarysdiy.wordpress.com/smart-mirror-5-video/
    allerdings nimmt der Kollege viel grössere Wiederstände… Kannst Du da etwas Licht ins Dunkel bringen?

    Antworten
    • Felix am 20. April 2016 23:29

      Hi Andreas,
      der größere Widerstand ist nur dazu gedacht, dass eine bestimmte Spannung (in dem Fall Minus) anliegt. Normalerweise nimmt man einen größeren Widerstand wie z.B. 10k. Als ich das Tutorial erstellt habe, hatte ich keinen 10k Widerstand zur Hand, daher 470 verwendet. Es sollte aber auch mit Zwischenwerten (1k, 4.7k, usw) funktionieren. Wichtig ist nämlich nur, dass wenn vom ECHO keine Spannung kommt, der Pi ein Signal von GND bekommt und da reicht es aus, wenn es auch nur sehr gering ist.
      Warum er allerdings 4.7k Ohm als Vorwiderstand nimmt ist mir schleierhaft, da man ja ausrechnen kann wie viel Volt abgeleitet werden müssen (5.5 – 3.3 = 1.7).

      Antworten
  93. Hermine am 21. Juli 2016 11:22

    Hallo,
    Habe gerad das Tutorial gelesen. Sag mal …. das mit den beide Widerständen….
    Man braucht doch zwei Widerstände um einen Spannungsteiler zu bauen…
    Das mit dem Pullup Widerstand kenne ich eher von den Drucktaster, die gerne eine de finierte Spannung haben. Wäre für den Effekt nicht noch ein 10 KOhm nötig Masse an Echo..
    Hätte ich bloß in pHysik besser aufgepasst

    VG
    Hermine

    PS: Tolle Tutorials.,..

    Antworten
    • Felix am 21. Juli 2016 20:33

      Als ich das Tutorial erstellt habe (vor ca. 2 Jahren) hatte ich in dem Moment keinen größeren Widerstand zur Hand, allerdings hat diese Kombination auch gereicht 🙂 Wenn du dennoch Probleme damit hast, versuche einen größeren Widerstand (10k).

      Antworten
  94. Hermine am 21. Juli 2016 11:22

    Hallo,
    Habe gerad das Tutorial gelesen. Sag mal …. das mit den beide Widerständen….
    Man braucht doch zwei Widerstände um einen Spannungsteiler zu bauen…
    Das mit dem Pullup Widerstand kenne ich eher von den Drucktaster, die gerne eine de finierte Spannung haben. Wäre für den Effekt nicht noch ein 10 KOhm nötig Masse an Echo..
    Hätte ich bloß in pHysik besser aufgepasst

    VG
    Hermine

    PS: Tolle Tutorials.,..

    Antworten
    • Felix am 21. Juli 2016 20:33

      Als ich das Tutorial erstellt habe (vor ca. 2 Jahren) hatte ich in dem Moment keinen größeren Widerstand zur Hand, allerdings hat diese Kombination auch gereicht 🙂 Wenn du dennoch Probleme damit hast, versuche einen größeren Widerstand (10k).

      Antworten
  95. Christian am 19. August 2016 19:49

    Hallo,
    leider klappt es bei mir nicht, ich bekomme keinen output 🙁
    ich habe ein paar Meldungen eingebaut, um zu sehen wo es hackt, aber ich komme jetzt nicht weiter.
    hier mein Skript:

    #Bibliotheken einbinden
    import RPi.GPIO as GPIO
    import time
    
    #GPIO Modus (BOARD / BCM)
    GPIO.setmode(GPIO.BCM)
    
    #GPIO Pins zuweisen
    GPIO_TRIGGER = 18
    GPIO_ECHO = 24
    
    #Richtung der GPIO-Pins festlegen (IN / OUT)
    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    GPIO.setup(GPIO_ECHO, GPIO.IN)
    print ("test")
    def distanz():
            # setze Trigger auf HIGH
            GPIO.output(GPIO_TRIGGER, True)
    
            # setze Trigger nach 0.01ms aus LOW
            time.sleep(0.00001)
            GPIO.output(GPIO_TRIGGER, False)
    
            StartZeit = time.time()
            StopZeit = time.time()
    
            # speichere Startzeit
            while GPIO.input(GPIO_ECHO) == 0:
                    StartZeit = time.time()
    
            # speichere Ankunftszeit
            while GPIO.input(GPIO_ECHO) == 1:
                    StopZeit = time.time()
    
            # Zeit Differenz zwischen Start und Ankunft
            TimeElapsed = StopZeit - StartZeit
            # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
            # und durch 2 teilen, da hin und zurueck
            distanz = (TimeElapsed * 34300) / 2
    
            return distanz
    print ("test 2")
    print (distanz)
    
    if __name__ == '__main__':
            try:
                    print ("test 3")
                    while True:
                            abstand = distanz()
                            print ("test 3")
                            print ("Gemessene Entfernung = %.1f cm" % abstand)
                            time.sleep(0.005)
    
                    # Beim Abbruch durch STRG+C resetten
            except KeyboardInterrupt:
                    print("Messung vom User gestoppt")
                    GPIO.cleanup()

    und als Ergebnis bekomme ich nur folgendes:
    pi@raspberrypi:~ $ sudo python distance.py
    test
    test 2

    test 3

    das war es dann, ich bekomme keine Distanz angezeigt.

    Antworten
  96. Christian am 19. August 2016 19:49

    Hallo,
    leider klappt es bei mir nicht, ich bekomme keinen output 🙁
    ich habe ein paar Meldungen eingebaut, um zu sehen wo es hackt, aber ich komme jetzt nicht weiter.
    hier mein Skript:

    #Bibliotheken einbinden
    import RPi.GPIO as GPIO
    import time
    
    #GPIO Modus (BOARD / BCM)
    GPIO.setmode(GPIO.BCM)
    
    #GPIO Pins zuweisen
    GPIO_TRIGGER = 18
    GPIO_ECHO = 24
    
    #Richtung der GPIO-Pins festlegen (IN / OUT)
    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
    GPIO.setup(GPIO_ECHO, GPIO.IN)
    print ("test")
    def distanz():
            # setze Trigger auf HIGH
            GPIO.output(GPIO_TRIGGER, True)
    
            # setze Trigger nach 0.01ms aus LOW
            time.sleep(0.00001)
            GPIO.output(GPIO_TRIGGER, False)
    
            StartZeit = time.time()
            StopZeit = time.time()
    
            # speichere Startzeit
            while GPIO.input(GPIO_ECHO) == 0:
                    StartZeit = time.time()
    
            # speichere Ankunftszeit
            while GPIO.input(GPIO_ECHO) == 1:
                    StopZeit = time.time()
    
            # Zeit Differenz zwischen Start und Ankunft
            TimeElapsed = StopZeit - StartZeit
            # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
            # und durch 2 teilen, da hin und zurueck
            distanz = (TimeElapsed * 34300) / 2
    
            return distanz
    print ("test 2")
    print (distanz)
    
    if __name__ == '__main__':
            try:
                    print ("test 3")
                    while True:
                            abstand = distanz()
                            print ("test 3")
                            print ("Gemessene Entfernung = %.1f cm" % abstand)
                            time.sleep(0.005)
    
                    # Beim Abbruch durch STRG+C resetten
            except KeyboardInterrupt:
                    print("Messung vom User gestoppt")
                    GPIO.cleanup()

    und als Ergebnis bekomme ich nur folgendes:
    pi@raspberrypi:~ $ sudo python distance.py
    test
    test 2

    test 3

    das war es dann, ich bekomme keine Distanz angezeigt.

    Antworten
  97. Christian am 19. August 2016 22:49

    Hallo,

    ich habe es jetzt hinbekommen, hatte die falschen Pins verwendet, aber das Ergebnis ist immer, dass entweder um die 50 cm oder um die 0,9 cm gemessen werden:
    emessene Entfernung = 47.6 cm
    Gemessene Entfernung = 0.9 cm
    Gemessene Entfernung = 56.1 cm
    Gemessene Entfernung = 56.7 cm
    Gemessene Entfernung = 55.4 cm
    Gemessene Entfernung = 0.8 cm
    Gemessene Entfernung = 0.9 cm
    Gemessene Entfernung = 0.9 cm

    Hat jemand eine Idee, was es sein könnte?

    Antworten
    • Felix am 20. August 2016 2:56

      Die Ultraschall Module haben einen recht weiten Öffnungswinkel. D.h. falls sich etwas darin befindet, wird immer diese Distanz berechnet, da dort das Ultraschallsignal zuerst zurückgeworfen wird.

      Antworten
  98. Christian am 19. August 2016 22:49

    Hallo,

    ich habe es jetzt hinbekommen, hatte die falschen Pins verwendet, aber das Ergebnis ist immer, dass entweder um die 50 cm oder um die 0,9 cm gemessen werden:
    emessene Entfernung = 47.6 cm
    Gemessene Entfernung = 0.9 cm
    Gemessene Entfernung = 56.1 cm
    Gemessene Entfernung = 56.7 cm
    Gemessene Entfernung = 55.4 cm
    Gemessene Entfernung = 0.8 cm
    Gemessene Entfernung = 0.9 cm
    Gemessene Entfernung = 0.9 cm

    Hat jemand eine Idee, was es sein könnte?

    Antworten
    • Felix am 20. August 2016 2:56

      Die Ultraschall Module haben einen recht weiten Öffnungswinkel. D.h. falls sich etwas darin befindet, wird immer diese Distanz berechnet, da dort das Ultraschallsignal zuerst zurückgeworfen wird.

      Antworten
  99. Max am 20. August 2016 13:29

    Hi,
    Ich möchte jede Sekunde mit dem Ultraschallmodul die Entfernung zu einem Objekt messen und diese in einem GUI (tkinter) anzeigen lassen.
    1. Frage: Ist das überhaupt möglich?
    2. Frage: Wenn ja, wie kann ich das programmieren?

    Antworten
    • Felix am 20. August 2016 14:19

      Hallo Max,
      klar, das ist möglich. Stellt sich noch die Frage wie du dir die GUI vorstellst. Allerdings ist Tkinter ein guter Anfang. Die Funktionen stehen im Wiki beschrieben und man findet auch sonst recht viel darüber. Den Wert kannst du wie hier im Skript auslesen und an die GUI weitergeben.

      Antworten
  100. Max am 20. August 2016 13:29

    Hi,
    Ich möchte jede Sekunde mit dem Ultraschallmodul die Entfernung zu einem Objekt messen und diese in einem GUI (tkinter) anzeigen lassen.
    1. Frage: Ist das überhaupt möglich?
    2. Frage: Wenn ja, wie kann ich das programmieren?

    Antworten
    • Felix am 20. August 2016 14:19

      Hallo Max,
      klar, das ist möglich. Stellt sich noch die Frage wie du dir die GUI vorstellst. Allerdings ist Tkinter ein guter Anfang. Die Funktionen stehen im Wiki beschrieben und man findet auch sonst recht viel darüber. Den Wert kannst du wie hier im Skript auslesen und an die GUI weitergeben.

      Antworten
  101. Bernd Becker am 4. September 2016 21:50

    Ein tolles Tutorial mit sehr vielen Anregungen. Dem Verfasser sei gesagt, dass er untypischer weise auf viele Fragen sehr gelassen reagierte. Das ist in unserer heutigen Zeit nicht mehr so üblich. Vielen Dank, ich habe es mit sehr großem Respekt gelesen und viel dabei gelernt.
    Danke
    Bermd Becker

    Antworten
  102. Bernd Becker am 4. September 2016 21:50

    Ein tolles Tutorial mit sehr vielen Anregungen. Dem Verfasser sei gesagt, dass er untypischer weise auf viele Fragen sehr gelassen reagierte. Das ist in unserer heutigen Zeit nicht mehr so üblich. Vielen Dank, ich habe es mit sehr großem Respekt gelesen und viel dabei gelernt.
    Danke
    Bermd Becker

    Antworten
  103. quereinsteiger am 2. November 2016 22:00

    Hallo, super Beitrag und das Skript funktioniert anscheinen einwandfrei – leider verstehe ich nicht warum… 😀

    # speichere Startzeit
    while GPIO.input(GPIO_ECHO) == 0:
    StartZeit = time.time()
    wird an dieser Stelle nicht die StartZeit immer wieder überschrieben bis ein Signal kommt? Eigentlich will ich doch die Zeit speichern bei der ich das Signal losschicke…

    Ich stehe da etwas auf’m Schlauch.

    Danke um Vorraus – tolle Website!

    Antworten
    • Felix am 2. November 2016 22:21

      Hey,
      wir wollen den Zeitpunkt speichern, sobald der Echo Pin einen High Wert annimt. Solange er LOW ist, hat die Messung noch nicht gestartet.
      LG, Felix

      Antworten
    • quereinsteiger am 3. November 2016 9:39

      Stimmt… Habe die Funktionsweise von dem Sensor jetzt verstanden 😀

      Vielen Dank

      Antworten
  104. quereinsteiger am 2. November 2016 22:00

    Hallo, super Beitrag und das Skript funktioniert anscheinen einwandfrei – leider verstehe ich nicht warum… 😀

    # speichere Startzeit
    while GPIO.input(GPIO_ECHO) == 0:
    StartZeit = time.time()
    wird an dieser Stelle nicht die StartZeit immer wieder überschrieben bis ein Signal kommt? Eigentlich will ich doch die Zeit speichern bei der ich das Signal losschicke…

    Ich stehe da etwas auf’m Schlauch.

    Danke um Vorraus – tolle Website!

    Antworten
    • Felix am 2. November 2016 22:21

      Hey,
      wir wollen den Zeitpunkt speichern, sobald der Echo Pin einen High Wert annimt. Solange er LOW ist, hat die Messung noch nicht gestartet.
      LG, Felix

      Antworten
    • quereinsteiger am 3. November 2016 9:39

      Stimmt… Habe die Funktionsweise von dem Sensor jetzt verstanden 😀

      Vielen Dank

      Antworten
  105. Bernd am 16. November 2016 14:32

    Bekommt man mit dem Sensor einen Wert wenn der Sensor komplett abgedeckt ist? Bräuchte eine Rückgabe wert wie zb 0,0 um zu erkennen das etwas auf dem Sensor drauf liegt.

    Grüße

    Antworten
    • Felix am 16. November 2016 19:28

      Nein, da nie ein Signal empfangen wird. Du kannst höchstens mit einem Timeout arbeiten und nach X Millisekunden abbrechen, da es nicht wahrscheinlich ist, dass ein Objekt weiter als 10m erkannt wird.

      Antworten
  106. Bernd am 16. November 2016 14:32

    Bekommt man mit dem Sensor einen Wert wenn der Sensor komplett abgedeckt ist? Bräuchte eine Rückgabe wert wie zb 0,0 um zu erkennen das etwas auf dem Sensor drauf liegt.

    Grüße

    Antworten
    • Felix am 16. November 2016 19:28

      Nein, da nie ein Signal empfangen wird. Du kannst höchstens mit einem Timeout arbeiten und nach X Millisekunden abbrechen, da es nicht wahrscheinlich ist, dass ein Objekt weiter als 10m erkannt wird.

      Antworten
  107. Benedikt am 1. Januar 2017 18:33

    Hallo,
    ist es bei dem Sensor egal welche GPIO’s man nutze?

    Gruß

    Antworten
    • Felix am 1. Januar 2017 20:11

      Ja. Aber die Anpassung im Code nicht vergessen.
      LG, Felix

      Antworten
  108. Benedikt am 1. Januar 2017 18:33

    Hallo,
    ist es bei dem Sensor egal welche GPIO’s man nutze?

    Gruß

    Antworten
    • Felix am 1. Januar 2017 20:11

      Ja. Aber die Anpassung im Code nicht vergessen.
      LG, Felix

      Antworten
  109. Flip am 5. Januar 2017 15:18

    Hallo zusammen
    Habe den Code wie folgt ausprobiert, leider wird keine Testdatei geschrieben.
    Gemessen wird nur die Datei wird nicht erstellt und eingetragen.

    http://pastebin.com/029WK74D

    Antworten
  110. Flip am 5. Januar 2017 15:18

    Hallo zusammen
    Habe den Code wie folgt ausprobiert, leider wird keine Testdatei geschrieben.
    Gemessen wird nur die Datei wird nicht erstellt und eingetragen.

    http://pastebin.com/029WK74D

    Antworten
  111. Lutz Hauptmann am 11. Januar 2017 18:57

    Hallo,
    erstmal Danke für das Tutorial.
    Wie genau ist diese Schaltung mit US-Sensor? Denke über über eine Messung der Schneehöhe für meine Wetterstation nach. Da ich für die Internetanbindung einen Raspi verwenden möchte, wäre das ein gutes „Abfallprodukt“.
    Grüße
    Lutz

    Antworten
    • Felix am 11. Januar 2017 21:09

      Also messen kannst du damit bis ca 4 Meter (jedenfalls in meinen Tests). Wenn du den ungefähren Abstand kennst, würde ich zu einem IR Sensor raten, da diese genauer sind und keinen Öffnungswinkel haben: Infrarot Abstandsmessung mit dem Raspberry Pi (Sharp GP2Y0A02YK0F)

      Antworten
  112. Lutz Hauptmann am 11. Januar 2017 18:57

    Hallo,
    erstmal Danke für das Tutorial.
    Wie genau ist diese Schaltung mit US-Sensor? Denke über über eine Messung der Schneehöhe für meine Wetterstation nach. Da ich für die Internetanbindung einen Raspi verwenden möchte, wäre das ein gutes „Abfallprodukt“.
    Grüße
    Lutz

    Antworten
    • Felix am 11. Januar 2017 21:09

      Also messen kannst du damit bis ca 4 Meter (jedenfalls in meinen Tests). Wenn du den ungefähren Abstand kennst, würde ich zu einem IR Sensor raten, da diese genauer sind und keinen Öffnungswinkel haben: Infrarot Abstandsmessung mit dem Raspberry Pi (Sharp GP2Y0A02YK0F)

      Antworten
  113. Selina am 14. Januar 2017 16:44

    Super Vielen Dank für die Antwort in dem anderen Tutorial. Es hat geklappt.
    Nun bin ich hier gelandet. Der Sensor gibt mir Werte aus. Aber:
    Was ist, wenn ich nun ein Bild anzeigen lassen möchte, sobald der Wert über 30cm geht? Ich habe mehreres recherchiert aber komme nicht weiter. Es zeigt mir einfach partout kein Bild an. Ich habe mir die Pillow Library dafür runtergeladen.
    Nun habe ich bei „Bibliothek einbinden“
    „from PIL import Image“ hinzugefügt
    und bei der while Schleife
    “
    if abstand > 30:
    from PIL import Image
    with Image.open(‚bestellen.jpeg‘) as img:
    img.show()

    else:
    from PIL import Imagee
    with Image.open(‚ok.jpeg‘) as img:
    img.show()
    “

    Er liest weiter die Werte aus aber zeigt mir kein Bild an. Weißt du, an was das liegen kann?

    Antworten
    • Felix am 15. Januar 2017 11:27

      Bist du per SSH verbunden oder direkt am Pi (bzw. über Remotedesktop)?

      Antworten
  114. Selina am 14. Januar 2017 16:44

    Super Vielen Dank für die Antwort in dem anderen Tutorial. Es hat geklappt.
    Nun bin ich hier gelandet. Der Sensor gibt mir Werte aus. Aber:
    Was ist, wenn ich nun ein Bild anzeigen lassen möchte, sobald der Wert über 30cm geht? Ich habe mehreres recherchiert aber komme nicht weiter. Es zeigt mir einfach partout kein Bild an. Ich habe mir die Pillow Library dafür runtergeladen.
    Nun habe ich bei „Bibliothek einbinden“
    „from PIL import Image“ hinzugefügt
    und bei der while Schleife
    “
    if abstand > 30:
    from PIL import Image
    with Image.open(‚bestellen.jpeg‘) as img:
    img.show()

    else:
    from PIL import Imagee
    with Image.open(‚ok.jpeg‘) as img:
    img.show()
    “

    Er liest weiter die Werte aus aber zeigt mir kein Bild an. Weißt du, an was das liegen kann?

    Antworten
    • Felix am 15. Januar 2017 11:27

      Bist du per SSH verbunden oder direkt am Pi (bzw. über Remotedesktop)?

      Antworten
  115. JP am 4. Februar 2017 21:03

    Hi 🙂

    Bei mir ist die StartZeit gleich der StopZeit. Des Weiteren wird bei mir auch nichts ausgegeben außer, wenn ich abbreche…

    Antworten
  116. JP am 4. Februar 2017 21:03

    Hi 🙂

    Bei mir ist die StartZeit gleich der StopZeit. Des Weiteren wird bei mir auch nichts ausgegeben außer, wenn ich abbreche…

    Antworten
  117. Dennis am 4. Februar 2017 22:22

    Moin moin,
    ich habe diese Testumgebung zu Versuchszwecken 1:1 nachgebaut und den Sensor an die Schreibtischkante positioniert, sodass ich stets in wechselnden Distanzen davor sitze. Manchmal bekomme ich die korrekte Entfernung angezeigt, meistens spuckt er aber einen Wert zwischen 2354 und 2359 cm aus. Eine Entfernung von über 23m in einem ~20qm großen Raum ist relativ unwahrscheinlich. Wo könnte der Fehler liegen, jemand einen Ansatz?
    Vielen Dank und viele Grüße

    Antworten
  118. Dennis am 4. Februar 2017 22:22

    Moin moin,
    ich habe diese Testumgebung zu Versuchszwecken 1:1 nachgebaut und den Sensor an die Schreibtischkante positioniert, sodass ich stets in wechselnden Distanzen davor sitze. Manchmal bekomme ich die korrekte Entfernung angezeigt, meistens spuckt er aber einen Wert zwischen 2354 und 2359 cm aus. Eine Entfernung von über 23m in einem ~20qm großen Raum ist relativ unwahrscheinlich. Wo könnte der Fehler liegen, jemand einen Ansatz?
    Vielen Dank und viele Grüße

    Antworten
  119. WH am 16. Februar 2017 22:25

    Moin,
    ist es möglich, dass wenn der Abstand zu einem Gegenstand sich gravierend ändert, z.B. wenn ein Gegenstand im Aussenbereich in einem gewissen Zeitraum entfernt (Diebstahl) wird, dass eine SMS / Email gesendet wird?
    Grüße
    WH

    Antworten
    • Felix am 16. Februar 2017 22:37

      Klar, das ist möglich. Dazu überprüfst du einfach in einem bestimmten Intervall (jede Stunde z.B.) und falls bei mehreren Messungen die Werte vom Referenzwert abweichen, so startest du deine Aktion (Email, SMS, etc).
      Du könntest dir auch eine Kurznachricht per Telegram schicken.

      Antworten
  120. WH am 16. Februar 2017 22:25

    Moin,
    ist es möglich, dass wenn der Abstand zu einem Gegenstand sich gravierend ändert, z.B. wenn ein Gegenstand im Aussenbereich in einem gewissen Zeitraum entfernt (Diebstahl) wird, dass eine SMS / Email gesendet wird?
    Grüße
    WH

    Antworten
    • Felix am 16. Februar 2017 22:37

      Klar, das ist möglich. Dazu überprüfst du einfach in einem bestimmten Intervall (jede Stunde z.B.) und falls bei mehreren Messungen die Werte vom Referenzwert abweichen, so startest du deine Aktion (Email, SMS, etc).
      Du könntest dir auch eine Kurznachricht per Telegram schicken.

      Antworten
  121. WH am 17. Februar 2017 13:06

    Super und danke. 🙂

    Antworten
  122. WH am 17. Februar 2017 13:06

    Super und danke. 🙂

    Antworten
  123. Lars am 25. Februar 2017 16:10

    Woher bekomme ich die 470 Ohm teile?, Baumarkt?. Kann ich anstatt 470 auch 10k oder 330 Ohm verwenden?

    Antworten
    • Felix am 25. Februar 2017 16:12

      Widerstände gibts im Elektronik Fachmark oder einfach online. Empfehlenswert ist einfach ein Set. 10k funktioniert oft, 330 Ohm allerdings nicht (der eine Widerstand muss größer sein).
      LG, Felix

      Antworten
  124. Lars am 25. Februar 2017 16:10

    Woher bekomme ich die 470 Ohm teile?, Baumarkt?. Kann ich anstatt 470 auch 10k oder 330 Ohm verwenden?

    Antworten
    • Felix am 25. Februar 2017 16:12

      Widerstände gibts im Elektronik Fachmark oder einfach online. Empfehlenswert ist einfach ein Set. 10k funktioniert oft, 330 Ohm allerdings nicht (der eine Widerstand muss größer sein).
      LG, Felix

      Antworten
  125. Lars am 25. Februar 2017 16:31

    Kann ich diese Wiederstände und Jumper anders Platzieren?, ich meinte den 470(den wo ich ersetzen wollte).

    Antworten
    • Felix am 25. Februar 2017 16:31

      Solange der Schaltkreis der selbe ist, kannst du sie auf dem Breadboard/o.ä. platzieren wie du möchtest.

      Antworten
  126. Lars am 25. Februar 2017 16:31

    Kann ich diese Wiederstände und Jumper anders Platzieren?, ich meinte den 470(den wo ich ersetzen wollte).

    Antworten
    • Felix am 25. Februar 2017 16:31

      Solange der Schaltkreis der selbe ist, kannst du sie auf dem Breadboard/o.ä. platzieren wie du möchtest.

      Antworten
  127. Lars am 25. Februar 2017 16:34

    Wie meinst du Schaltkreis?, ich benötige male-male und female-male Jumper oder?

    Antworten
    • Felix am 25. Februar 2017 16:39

      Was meinst du denn mit „anders platzieren“? Im Grund reichen ein Breadboard und Male-Female Jumper als Verbindung vom Pi zum Breadboard.

      Antworten
  128. Lars am 25. Februar 2017 16:34

    Wie meinst du Schaltkreis?, ich benötige male-male und female-male Jumper oder?

    Antworten
    • Felix am 25. Februar 2017 16:39

      Was meinst du denn mit „anders platzieren“? Im Grund reichen ein Breadboard und Male-Female Jumper als Verbindung vom Pi zum Breadboard.

      Antworten
  129. Lars am 25. Februar 2017 16:54

    Kann ich die Widerstände ganz woanders platzieren?, also zb auf – zu f20?, und ich habe noch eine allgemeine frage wofür ist ein breakout board, das habe ich mit diesem Pack gekauft, wie schließe ich das an und wofür ist das?(falls es ein tut gibt bitte linken). Danke

    Antworten
    • Felix am 25. Februar 2017 16:58

      Ich weiß ehrlich gesagt nicht, was du mit f20 meinst.
      Das Breadboard / Steckbrett ist eine Hilfe, damit du nicht jede Schaltung löten musst. Man steckt die Pins / Kabel einfach ein und sie werden verbunden (ohne löten).

      Antworten
  130. Lars am 25. Februar 2017 16:54

    Kann ich die Widerstände ganz woanders platzieren?, also zb auf – zu f20?, und ich habe noch eine allgemeine frage wofür ist ein breakout board, das habe ich mit diesem Pack gekauft, wie schließe ich das an und wofür ist das?(falls es ein tut gibt bitte linken). Danke

    Antworten
    • Felix am 25. Februar 2017 16:58

      Ich weiß ehrlich gesagt nicht, was du mit f20 meinst.
      Das Breadboard / Steckbrett ist eine Hilfe, damit du nicht jede Schaltung löten musst. Man steckt die Pins / Kabel einfach ein und sie werden verbunden (ohne löten).

      Antworten
  131. Lars am 25. Februar 2017 17:09

    Auf dem Breadboard sind doch Folgende Symbole/Zeichen

    1-30
    a, b, c, d, e, f, g, h, i, j

    +, –

    Also wenn ich mein 10k ohm widerstand(bei dir 470 Ohm) in minus wie du stecke, aber ich den nicht wie du j12 Stecke, ist das schlimm oder kann ich ihn in f 9 stecken ohne probleme?

    Antworten
    • Felix am 25. Februar 2017 17:11

      Nein, das ist egal. Es sind nur Verbindungen. Ob du nun F9 oder E17 nimmst, spielst keine Rollte. Die Buchstaben/Nummern sind nur eine Hilfe.
      https://www.projektlabor.tu-berlin.de/menue/onlinekurs/testaufbau/wie_funktioniert_ein_steckbrett/

      Antworten
  132. Lars am 25. Februar 2017 17:09

    Auf dem Breadboard sind doch Folgende Symbole/Zeichen

    1-30
    a, b, c, d, e, f, g, h, i, j

    +, –

    Also wenn ich mein 10k ohm widerstand(bei dir 470 Ohm) in minus wie du stecke, aber ich den nicht wie du j12 Stecke, ist das schlimm oder kann ich ihn in f 9 stecken ohne probleme?

    Antworten
    • Felix am 25. Februar 2017 17:11

      Nein, das ist egal. Es sind nur Verbindungen. Ob du nun F9 oder E17 nimmst, spielst keine Rollte. Die Buchstaben/Nummern sind nur eine Hilfe.
      https://www.projektlabor.tu-berlin.de/menue/onlinekurs/testaufbau/wie_funktioniert_ein_steckbrett/

      Antworten
  133. Lars am 25. Februar 2017 17:13

    Was ist denn ein breakboard, das habe ich mitbekommen brauche ich das für irgendwas?

    Antworten
    • Felix am 25. Februar 2017 17:14

      Ich denke du meinst Breadboard. Ist der englische Name für Steckbrett…

      Antworten
    • Lars am 25. Februar 2017 17:17

      Nein ich meine ein Breakboard

      Antworten
  134. Lars am 25. Februar 2017 17:13

    Was ist denn ein breakboard, das habe ich mitbekommen brauche ich das für irgendwas?

    Antworten
    • Felix am 25. Februar 2017 17:14

      Ich denke du meinst Breadboard. Ist der englische Name für Steckbrett…

      Antworten
    • Lars am 25. Februar 2017 17:17

      Nein ich meine ein Breakboard

      Antworten
  135. Lars am 25. Februar 2017 17:25

    Nein ich meine ein Breakboard. Bei diesen Ultimate starter kit(das ist hier verlinkt).

    Antworten
  136. Lars am 25. Februar 2017 17:25

    Nein ich meine ein Breakboard. Bei diesen Ultimate starter kit(das ist hier verlinkt).

    Antworten
  137. Lars am 1. März 2017 16:08

    Leider zeigt es bei mir die falschen daten an!.

    Bild: https://picload.org/view/rlaarrlr/20170301_160126.jpg.html

    Die Kaugummi-Verpackung ist direkt vor dem Sensor trotzdem sagt er 242.2CM!

    ist das richtig verkabelt?
    Hilfe.

    Antworten
    • Felix am 1. März 2017 16:40

      Ich erkenne bei der Verkabelung nicht viel, daher kann ich das nicht sagen. Das das aber nicht funktioniert ist klar 😀 Wie soll das Ultraschallsignal denn empfangen werden, wenn es weder gesendet noch empfangen werden kann (beide Module zu). Der Mindestabstand ist 5-10cm.

      Antworten
  138. Lars am 1. März 2017 16:08

    Leider zeigt es bei mir die falschen daten an!.

    Bild: https://picload.org/view/rlaarrlr/20170301_160126.jpg.html

    Die Kaugummi-Verpackung ist direkt vor dem Sensor trotzdem sagt er 242.2CM!

    ist das richtig verkabelt?
    Hilfe.

    Antworten
    • Felix am 1. März 2017 16:40

      Ich erkenne bei der Verkabelung nicht viel, daher kann ich das nicht sagen. Das das aber nicht funktioniert ist klar 😀 Wie soll das Ultraschallsignal denn empfangen werden, wenn es weder gesendet noch empfangen werden kann (beide Module zu). Der Mindestabstand ist 5-10cm.

      Antworten
  139. Lars am 1. März 2017 17:00

    Nein es geht immer noch nicht :C.

    Bilder: https://pl.vc/v0zts, https://pl.vc/9wyy3, https://pl.vc/12qtfl, https://pl.vc/14qdt6

    Code: https://hastebin.com/alubucemaj.py

    Antworten
  140. Lars am 1. März 2017 17:00

    Nein es geht immer noch nicht :C.

    Bilder: https://pl.vc/v0zts, https://pl.vc/9wyy3, https://pl.vc/12qtfl, https://pl.vc/14qdt6

    Code: https://hastebin.com/alubucemaj.py

    Antworten
  141. Lucas am 2. März 2017 12:09

    Hallo und danke für die tolle Anleitung.
    Es klappt alles wunderbar bis auf ein paar Sprünge in den Messergebnissen. Woran könnte das liegen bzw. wie kann man das verhindern?

    Besonders bei größeren Entfernungen werden z.B. 3 Mal in Folge 300cm gemessen und beim 4. Mal 90cm. Der Sensor und der Gegenstand bewegen sich nicht.

    Danke im Voraus.

    Antworten
    • Felix am 2. März 2017 12:12

      Von einem Modul wird ein Ultraschalldignal gesendet (Öffnungswinkel von ca. 15 Grad). Sobald es reflektiert wird, kann es das andere Modul erkennen. Da der Öffnungswinkel recht groß ist, reflektiert natürlich das näheste Objekt in diesem Bereich das Ultraschallsignal, weshalb die Messung abweichen kann.

      Antworten
      • Lucas am 29. März 2017 12:49

        Gibt es denn eine Möglichkeit die Abweichungen in den gemessenen Werten zu verringern?
        Wenn sich der Sensor und alle Objekte im erfassbaren Bereich nicht bewegen, werden trotzdem immer unterschiedliche Werte angezeigt.
        Zum Beispiel: 80cm….. 3000cm….. 81cm…..3000cm…..

        Natürlich kann man die besonders stark abweichenden Werte per Skript herausfiltern. Ich möchte aber trotzdem noch anderen möglichen Lösungen fragen.

        Danke!

  142. Lucas am 2. März 2017 12:09

    Hallo und danke für die tolle Anleitung.
    Es klappt alles wunderbar bis auf ein paar Sprünge in den Messergebnissen. Woran könnte das liegen bzw. wie kann man das verhindern?

    Besonders bei größeren Entfernungen werden z.B. 3 Mal in Folge 300cm gemessen und beim 4. Mal 90cm. Der Sensor und der Gegenstand bewegen sich nicht.

    Danke im Voraus.

    Antworten
    • Felix am 2. März 2017 12:12

      Von einem Modul wird ein Ultraschalldignal gesendet (Öffnungswinkel von ca. 15 Grad). Sobald es reflektiert wird, kann es das andere Modul erkennen. Da der Öffnungswinkel recht groß ist, reflektiert natürlich das näheste Objekt in diesem Bereich das Ultraschallsignal, weshalb die Messung abweichen kann.

      Antworten
      • Lucas am 29. März 2017 12:49

        Gibt es denn eine Möglichkeit die Abweichungen in den gemessenen Werten zu verringern?
        Wenn sich der Sensor und alle Objekte im erfassbaren Bereich nicht bewegen, werden trotzdem immer unterschiedliche Werte angezeigt.
        Zum Beispiel: 80cm….. 3000cm….. 81cm…..3000cm…..

        Natürlich kann man die besonders stark abweichenden Werte per Skript herausfiltern. Ich möchte aber trotzdem noch anderen möglichen Lösungen fragen.

        Danke!

  143. Pipo am 3. März 2017 12:34

    Hey Leute,
    wie kann ich es realisieren dass die Messung nach einer bestimmten Zeit stoppt und ich dann z.B 10 Messwerte habe, bzw nach 10 Messwerten die Messung stoppt?

    Mfg
    euer Pipo

    Antworten
    • scrub am 18. März 2017 20:46

      statt while True: schreibst du for i in range(10):

      Antworten
  144. Pipo am 3. März 2017 12:34

    Hey Leute,
    wie kann ich es realisieren dass die Messung nach einer bestimmten Zeit stoppt und ich dann z.B 10 Messwerte habe, bzw nach 10 Messwerten die Messung stoppt?

    Mfg
    euer Pipo

    Antworten
    • scrub am 18. März 2017 20:46

      statt while True: schreibst du for i in range(10):

      Antworten
  145. Chris am 17. März 2017 14:28

    Ich hab das Ganze mal gelesen und war bei dem Python-Code etwas verwirrt. time.time() gibt doch laut Doku nur eine sekundengenaue Zeit aus? Für einen Ultraschallsensor benötigt man aber mindestens Mikrosekunden. Ich hab mir mal ein Setup aus 3 Sensoren mit jeweils einer roten und grünen LED zusammengestellt und ein kleines Progrämmchen dazu gebaut. Der Einfachheit halber allerdings in C: http://pastebin.com/F6zrt8f9
    Da spiel ich mit Mikrosekunden und alles funktioniert auf Anhieb.

    Antworten
    • Felix am 17. März 2017 14:59

      time.time() gibt auch die Mikrosekunden aus: 1489759120.5046391

      Antworten
  146. Chris am 17. März 2017 14:28

    Ich hab das Ganze mal gelesen und war bei dem Python-Code etwas verwirrt. time.time() gibt doch laut Doku nur eine sekundengenaue Zeit aus? Für einen Ultraschallsensor benötigt man aber mindestens Mikrosekunden. Ich hab mir mal ein Setup aus 3 Sensoren mit jeweils einer roten und grünen LED zusammengestellt und ein kleines Progrämmchen dazu gebaut. Der Einfachheit halber allerdings in C: http://pastebin.com/F6zrt8f9
    Da spiel ich mit Mikrosekunden und alles funktioniert auf Anhieb.

    Antworten
    • Felix am 17. März 2017 14:59

      time.time() gibt auch die Mikrosekunden aus: 1489759120.5046391

      Antworten
  147. Thomas D. am 20. März 2017 15:28

    Hallo Felix,
    Super Script, habe es ausprobiert (zwar mit anderen GPIOs: 27 und 17) klappt aber richtig gut.
    Mein eigentliches Ziel ist es, bei einem Erreichen eines bestimmten Wertes also z.B. kleiner30cm den HDMI-Ausgang einzuschalten, für 2min. zu halten (time.sleep) und anschließend wieder abzuschalten (Engergiespargründe). Hab das auch schon mit Bewegungsmelder probiert. Dieser hat sich allerdings immer wieder selbstständig eingeschaltet und mir leider nur Frust bereitet. Ein zweiter Bewegungsmelder brachte auch nicht die richtigen Ergebnisse. Deswegen jetzt der Versuch mit Ultraschall.
    Also, das Script funktioniert bei mir klasse.
    Mit „tvservice -p“ würde ich den HDMI einschalten und mit „tvservice -o“ wieder ausschalten wollen.
    Wo und wie binde ich das ein und wie ist da der Syntax? Bin ratlos und eher in anderen Programmiersprachen unterwegs… 😉
    Per crontab möchte ich das anschließend automatisiert mit Systemstart nutzen (das Einbinden ist kein Problem von meiner Seite aus…)

    Antworten
    • Felix am 20. März 2017 19:45

      Du müsstest dauerhaft den Abstand messen (Endlosschleife) und sobald dieser kleiner als 30cm ist, startest du daen Shell Befehl, dann time.sleep und anschließend den Befehl zum ausschalten. Dafür würde ich z.B. os.system() nutzen.

      Antworten
      • Thomas D. am 21. März 2017 17:32

        Danke, das habe ich verstanden und auch so vor…. aber an welcher Stelle im Script?
        Prinzipiell ist vermutlich. die Dauermessung kein Problem, oder?
        Der Raspi ist nicht wirklich ausgelastet, sodass es da vermutl. keinerlei Probleme gäbe!?

        Vermutlich müsste das doch hinter: ???
        print („Gemessene Entfernung = %.1f cm“ % abstand)
        time.sleep(1)

        (also vor dem „# Beim Abbruch durch STRG+C resetten“)…

        Ich könnte mir vorstellen das das für den Ein oder Anderen interessant ist, da man so an dieser Stelle auch Aktionen folgen lassen könnte (und nicht nur die reine Messung durchzuführen…).

      • Thomas D. am 21. März 2017 22:19

        Danke Felix!!!!!!
        Hab mittlerweile hinbekommen. Weiter oben hier in den Rezensionen habe ich einen Beitrag gefunden, in dem es um bestimmte Abstandswerte ging.
        Habe den nun modifiziert und mit os.system den Monitor gestartet, bzw. abgeschaltet. Funktioniert nun so wie es soll.
        Falls es jemanden interessiert: den os, system Import muss man zunächst importieren oben im Script mit
        import os

        dann weiter unten unter

        print ("Gemessene Entfernung = %.1f cm" % abstand)
        if abstand < = 60:
                        print ("Monitor einschalten")
                        os.system("echo 'Schalte HDMI an' | /opt/vc/bin/tvservice -p")
                        time.sleep(120)
                        print ("Monitor ausschalten")
                        os.system("echo 'Schalte HDMI aus' | /opt/vc/bin/tvservice -o")
        time.sleep (2)

        einfügen.
        Alle 2 sek. wird gemessen. Befindet man sich 60cm oder weniger vorm Sensor schaltet er den Monitor ein. Klappt mit meinem Raspi 3 wunderbar und viel zuverlässiger als mit dem Bewegungsmelder.
        Nochmals vielen Dank Felix !!! 🙂

      • Felix am 21. März 2017 22:36

        Freut mich, dass es nun funktioniert, wie es soll 🙂

  148. Thomas D. am 20. März 2017 15:28

    Hallo Felix,
    Super Script, habe es ausprobiert (zwar mit anderen GPIOs: 27 und 17) klappt aber richtig gut.
    Mein eigentliches Ziel ist es, bei einem Erreichen eines bestimmten Wertes also z.B. kleiner30cm den HDMI-Ausgang einzuschalten, für 2min. zu halten (time.sleep) und anschließend wieder abzuschalten (Engergiespargründe). Hab das auch schon mit Bewegungsmelder probiert. Dieser hat sich allerdings immer wieder selbstständig eingeschaltet und mir leider nur Frust bereitet. Ein zweiter Bewegungsmelder brachte auch nicht die richtigen Ergebnisse. Deswegen jetzt der Versuch mit Ultraschall.
    Also, das Script funktioniert bei mir klasse.
    Mit „tvservice -p“ würde ich den HDMI einschalten und mit „tvservice -o“ wieder ausschalten wollen.
    Wo und wie binde ich das ein und wie ist da der Syntax? Bin ratlos und eher in anderen Programmiersprachen unterwegs… 😉
    Per crontab möchte ich das anschließend automatisiert mit Systemstart nutzen (das Einbinden ist kein Problem von meiner Seite aus…)

    Antworten
    • Felix am 20. März 2017 19:45

      Du müsstest dauerhaft den Abstand messen (Endlosschleife) und sobald dieser kleiner als 30cm ist, startest du daen Shell Befehl, dann time.sleep und anschließend den Befehl zum ausschalten. Dafür würde ich z.B. os.system() nutzen.

      Antworten
      • Thomas D. am 21. März 2017 17:32

        Danke, das habe ich verstanden und auch so vor…. aber an welcher Stelle im Script?
        Prinzipiell ist vermutlich. die Dauermessung kein Problem, oder?
        Der Raspi ist nicht wirklich ausgelastet, sodass es da vermutl. keinerlei Probleme gäbe!?

        Vermutlich müsste das doch hinter: ???
        print („Gemessene Entfernung = %.1f cm“ % abstand)
        time.sleep(1)

        (also vor dem „# Beim Abbruch durch STRG+C resetten“)…

        Ich könnte mir vorstellen das das für den Ein oder Anderen interessant ist, da man so an dieser Stelle auch Aktionen folgen lassen könnte (und nicht nur die reine Messung durchzuführen…).

      • Thomas D. am 21. März 2017 22:19

        Danke Felix!!!!!!
        Hab mittlerweile hinbekommen. Weiter oben hier in den Rezensionen habe ich einen Beitrag gefunden, in dem es um bestimmte Abstandswerte ging.
        Habe den nun modifiziert und mit os.system den Monitor gestartet, bzw. abgeschaltet. Funktioniert nun so wie es soll.
        Falls es jemanden interessiert: den os, system Import muss man zunächst importieren oben im Script mit
        import os

        dann weiter unten unter

        print ("Gemessene Entfernung = %.1f cm" % abstand)
        if abstand < = 60:
                        print ("Monitor einschalten")
                        os.system("echo 'Schalte HDMI an' | /opt/vc/bin/tvservice -p")
                        time.sleep(120)
                        print ("Monitor ausschalten")
                        os.system("echo 'Schalte HDMI aus' | /opt/vc/bin/tvservice -o")
        time.sleep (2)

        einfügen.
        Alle 2 sek. wird gemessen. Befindet man sich 60cm oder weniger vorm Sensor schaltet er den Monitor ein. Klappt mit meinem Raspi 3 wunderbar und viel zuverlässiger als mit dem Bewegungsmelder.
        Nochmals vielen Dank Felix !!! 🙂

      • Felix am 21. März 2017 22:36

        Freut mich, dass es nun funktioniert, wie es soll 🙂

  149. Alex am 25. März 2017 7:05

    Erstmal Danke für dieses tolle Toutorial,

    da ich kompletter Anfänger auf dem Bereich Python bin wollte ich mal nachfragen ob man in diesem Script noch die Funktion von Schaltkontakten einrichten kann.

    Ich würde damit gern eine Pumpe steuern lassen und diese sollte mehrere Schaltpunkte haben.
    Heisst wenn distanz >= Wert X schalte GPIO ( Dieser schaltet dann Relaisblock usw…)

    Habe die Messung auch mal überprüft und festgestellt das sie auf Entfernung ziemlich genau misst allerdings bei zu geringer entfernung ziemlich ungenau wird. Aber für meine Zwecke vollkommen ausreicht.

    MFG
    Alex

    Antworten
    • Felix am 25. März 2017 12:42

      Ja klar, einfach mehrere if’s einbauen und entsprechen darauf reagieren lassen.

      Antworten
  150. Alex am 25. März 2017 7:05

    Erstmal Danke für dieses tolle Toutorial,

    da ich kompletter Anfänger auf dem Bereich Python bin wollte ich mal nachfragen ob man in diesem Script noch die Funktion von Schaltkontakten einrichten kann.

    Ich würde damit gern eine Pumpe steuern lassen und diese sollte mehrere Schaltpunkte haben.
    Heisst wenn distanz >= Wert X schalte GPIO ( Dieser schaltet dann Relaisblock usw…)

    Habe die Messung auch mal überprüft und festgestellt das sie auf Entfernung ziemlich genau misst allerdings bei zu geringer entfernung ziemlich ungenau wird. Aber für meine Zwecke vollkommen ausreicht.

    MFG
    Alex

    Antworten
    • Felix am 25. März 2017 12:42

      Ja klar, einfach mehrere if’s einbauen und entsprechen darauf reagieren lassen.

      Antworten
  151. marco am 22. April 2017 12:43

    Hey hallo,

    ich hab alles schön aufgebaut und es funktionierte.
    Jetzt komme ich aus dem Urlaub und möchte weiter testen und nun bleibt das Script in einer Schleife (s. u.) hängen (also endlosschleife) und finde einfach nicht die Ursache.

    # speichere Startzeit
        while GPIO.input(GPIO_ECHO) == 0:
            StartZeit = time.time()
            print "  Startzeit:" + str(StartZeit) < ---- zum testen hinzugefügt

    Habe auch schon andere Pins auf dem Board versucht und im Script angepasst aber immer der gleiche Effekt.
    Hat zufällig jemand eine Idee woran das liegen könnte?

    Grüße Marco

    Antworten
  152. marco am 22. April 2017 12:43

    Hey hallo,

    ich hab alles schön aufgebaut und es funktionierte.
    Jetzt komme ich aus dem Urlaub und möchte weiter testen und nun bleibt das Script in einer Schleife (s. u.) hängen (also endlosschleife) und finde einfach nicht die Ursache.

    # speichere Startzeit
        while GPIO.input(GPIO_ECHO) == 0:
            StartZeit = time.time()
            print "  Startzeit:" + str(StartZeit) < ---- zum testen hinzugefügt

    Habe auch schon andere Pins auf dem Board versucht und im Script angepasst aber immer der gleiche Effekt.
    Hat zufällig jemand eine Idee woran das liegen könnte?

    Grüße Marco

    Antworten
  153. Peter am 11. Mai 2017 15:28

    Hallo zusammen,

    ich hätte da eine Frage und zwar habe ich ein Projekt am laufen das relativ ähnlich ist mit diesem Post. Es geht um einen Raspberry Pi mit einem Ultraschallsensor in Verbindung mit einer Raspberry Pi Kamera. Mir ist nicht ganz klar wie ich die Interaktion zwischen der Kamera und dem Ultraschallsensor genau herstelle, also wie ungefähr der Code aussehen soll. Es geht halt darum das die Kamera ein Bild aufnehmen soll, sobald eine Bewegung durch den Ultraschallsensor in einer bestimmten Distanz erkannt wird. Anschließend sollte dieses Foto dann auf einen Server hochgeladen werden. Es würde mich sehr freuen wenn mir jemand bei der Interaktion helfen könnte.

    Viele Grüße

    Peter

    Antworten
    • Felix am 11. Mai 2017 15:35

      Wie man Bilder aufnimmt habe ich ja u.a. hier und hier bereits gezeigt. Nun, dabei handelt es sich um Shell-Befehle. Diese kannst du einfach aufrufen, z.B. in python mit os.system. Natürlich nur dann, wenn eine Bewegun / etc. (deine Bedingungun) erfüllt wurde.

      Antworten
      • Peter am 11. Mai 2017 17:44

        Hallo nochmal ich danke dir für deine Antwort.

        Man müsste nur eine if Verzweigung in den Code einbauen, der z.B. wenn der Abstand weniger als 20 cm ist, ein Foto machen soll. Das Foto soll dann auf einem Webserver hochgeladen werden. Ich wüsste jetzt nicht wo und wie ich die If-Verzweigung einbauen soll.

        Ich wäre sehr dankbar, wenn du mir den Code eventuell programmieren könntest nur diesen Abschnitt

        Danke

      • Felix am 11. Mai 2017 18:17

        In dem Skrip oben bspw. in Zeile 47:

        if abstand < 20:
            os.system("hier der shell befehl")

        Import natürlich nicht vergessen.

  154. Peter am 11. Mai 2017 15:28

    Hallo zusammen,

    ich hätte da eine Frage und zwar habe ich ein Projekt am laufen das relativ ähnlich ist mit diesem Post. Es geht um einen Raspberry Pi mit einem Ultraschallsensor in Verbindung mit einer Raspberry Pi Kamera. Mir ist nicht ganz klar wie ich die Interaktion zwischen der Kamera und dem Ultraschallsensor genau herstelle, also wie ungefähr der Code aussehen soll. Es geht halt darum das die Kamera ein Bild aufnehmen soll, sobald eine Bewegung durch den Ultraschallsensor in einer bestimmten Distanz erkannt wird. Anschließend sollte dieses Foto dann auf einen Server hochgeladen werden. Es würde mich sehr freuen wenn mir jemand bei der Interaktion helfen könnte.

    Viele Grüße

    Peter

    Antworten
    • Felix am 11. Mai 2017 15:35

      Wie man Bilder aufnimmt habe ich ja u.a. hier und hier bereits gezeigt. Nun, dabei handelt es sich um Shell-Befehle. Diese kannst du einfach aufrufen, z.B. in python mit os.system. Natürlich nur dann, wenn eine Bewegun / etc. (deine Bedingungun) erfüllt wurde.

      Antworten
      • Peter am 11. Mai 2017 17:44

        Hallo nochmal ich danke dir für deine Antwort.

        Man müsste nur eine if Verzweigung in den Code einbauen, der z.B. wenn der Abstand weniger als 20 cm ist, ein Foto machen soll. Das Foto soll dann auf einem Webserver hochgeladen werden. Ich wüsste jetzt nicht wo und wie ich die If-Verzweigung einbauen soll.

        Ich wäre sehr dankbar, wenn du mir den Code eventuell programmieren könntest nur diesen Abschnitt

        Danke

      • Felix am 11. Mai 2017 18:17

        In dem Skrip oben bspw. in Zeile 47:

        if abstand < 20:
            os.system("hier der shell befehl")

        Import natürlich nicht vergessen.

  155. Rüdiger am 4. Juni 2017 2:29

    Hallo,

    ich möchte gerne RPi und Sensor trennen (Sensor in Zisterne und RPi in Garage) und über ein 5m Kabel miteinander verbinden.

    Wo installiere ich die Widerstände? Ist es sinnvoller diese nah am Sensor oder nah am RPi zu installieren oder spielt die keine Rolle?

    Sensor > Widerstände > 5m Kabel > RPI

    oder

    Sensor> 5m Kabel > Widerstände > RPI

    Vielen Dank.G

    Antworten
    • Felix am 4. Juni 2017 12:22

      Das macht keinen Unterschied, aber ich denke, dass der Spannungsabfall bei 5m Kabel zu hoch sein wird.

      Antworten
      • Rüdiger am 4. Juni 2017 12:58

        Laut Kommentaren sollen aber 15 Meter kein Problem sein?!?! Werde es einfach mal Testen, habe alles bis auf den Sensor hier und der kostet nicht die Welt.

  156. Rüdiger am 4. Juni 2017 2:29

    Hallo,

    ich möchte gerne RPi und Sensor trennen (Sensor in Zisterne und RPi in Garage) und über ein 5m Kabel miteinander verbinden.

    Wo installiere ich die Widerstände? Ist es sinnvoller diese nah am Sensor oder nah am RPi zu installieren oder spielt die keine Rolle?

    Sensor > Widerstände > 5m Kabel > RPI

    oder

    Sensor> 5m Kabel > Widerstände > RPI

    Vielen Dank.G

    Antworten
    • Felix am 4. Juni 2017 12:22

      Das macht keinen Unterschied, aber ich denke, dass der Spannungsabfall bei 5m Kabel zu hoch sein wird.

      Antworten
      • Rüdiger am 4. Juni 2017 12:58

        Laut Kommentaren sollen aber 15 Meter kein Problem sein?!?! Werde es einfach mal Testen, habe alles bis auf den Sensor hier und der kostet nicht die Welt.

  157. Steffen am 13. Juni 2017 13:03

    Hallo,
    wie sende ich den Abstand per UDP?
    Grüße Steffen

    Antworten
    • Felix am 13. Juni 2017 20:55

      Meinst du das UDP Protokoll? Wenn ja, was soll das mit dem Ultraschallsensor zu tun haben?

      Antworten
      • Steffen am 13. Juni 2017 22:26

        Ich möchte den Abstand (nur den Zahlenwert) per UDP senden .Ip und port habe ich vergeben,ein fest vergebener Wert wird auch übertragen,nur weiß ich nicht wie und wo ich den Wert des Abstands eintrage.

      • Felix am 13. Juni 2017 22:29

        Nunja, das hat aber nichts mit dem Tutorial zu tun (so hatte ich deine Frage verstanden). Je nach Sprache gibt es da unterschiedliche Bibliotheken, die das übernehmen. Dennoch stellt sich mir die Frage warum UDP? Ist es egal, wenn mal Daten ausbleiben? Ich denke kaum, dass du so viele Daten senden wirst, dass dir TCP Probleme bereiten könnte.

  158. Steffen am 13. Juni 2017 13:03

    Hallo,
    wie sende ich den Abstand per UDP?
    Grüße Steffen

    Antworten
    • Felix am 13. Juni 2017 20:55

      Meinst du das UDP Protokoll? Wenn ja, was soll das mit dem Ultraschallsensor zu tun haben?

      Antworten
      • Steffen am 13. Juni 2017 22:26

        Ich möchte den Abstand (nur den Zahlenwert) per UDP senden .Ip und port habe ich vergeben,ein fest vergebener Wert wird auch übertragen,nur weiß ich nicht wie und wo ich den Wert des Abstands eintrage.

      • Felix am 13. Juni 2017 22:29

        Nunja, das hat aber nichts mit dem Tutorial zu tun (so hatte ich deine Frage verstanden). Je nach Sprache gibt es da unterschiedliche Bibliotheken, die das übernehmen. Dennoch stellt sich mir die Frage warum UDP? Ist es egal, wenn mal Daten ausbleiben? Ich denke kaum, dass du so viele Daten senden wirst, dass dir TCP Probleme bereiten könnte.

  159. Steffen am 13. Juni 2017 22:50

    Ich möchte es an den Loxone Miniserver senden,das heißt ich muss die Daten erst in eine andere Datei schreiben um sie weiter zu verarbeiten.

    Antworten
  160. Steffen am 13. Juni 2017 22:50

    Ich möchte es an den Loxone Miniserver senden,das heißt ich muss die Daten erst in eine andere Datei schreiben um sie weiter zu verarbeiten.

    Antworten
  161. Knut am 23. September 2017 11:45

    Hi!
    Erstmal: Super Tutorials die du hier machst, das bring mich echt alles viel weiter!

    Ich habe allerdings noch eine kleine Verständnisfrage zu folgendem Codeabschnitt:

        # speichere Startzeit
        while GPIO.input(GPIO_ECHO) == 0:
            StartZeit = time.time()
     
        # speichere Ankunftszeit
        while GPIO.input(GPIO_ECHO) == 1:
            StopZeit = time.time()

    Wenn ich das richtig verstehe, wird hier im ersten Block so lange geloopt, bis die Schallwelle wieder beim Sensor angekommen ist? Also habe ich doch in StartTime die Ankunftszeit der Schallwelle. Im zweiten Block loope ich solange, bis keine Schallwelle mehr registriert wird. Nach meinem Verständnis habe ich doch dann als Differenzwert nur die Zeit, wie lange die Schallwelle am Sensor war, aber nicht, wann sie dort relativ zum Aussenden der Welle war? Wo ist mein Denkfehler?

    Viele Grüße,
    Knut

    Antworten
  162. Michael am 11. Oktober 2017 13:13

    Hallo, das Tutorial ist ja nun schon etwas älter aber trotzdem mal eine kurze Frage – lässt sich das auch mit NodeMCU realisieren? Also kann man mit LUA die Zeit ähnlich genau messen?

    Antworten
    • Felix am 11. Oktober 2017 17:34

      Ja, sollte möglich sein. Bei genügend Interesse kann ich dazu ein Tutorial machen.

      Antworten
      • Michael am 13. Oktober 2017 9:20

        Das wäre Prima 🙂 Ich habe für den Winter folgendes Projekt in Planung:
        Regenwasserzisterne, aus welcher die Toilettenspülungen gespeist werden. Füllstandsmessung der Zisterne per Ultraschall und bei zu tiefem Wasserstand auffüllen aus der Leitung (per GPIO, SSR und Magnetventil) Dazu Füllstandsanzeige per kleinen Webserver.
        Lässt sich halt mit Raspberry lösen oder halt hoffentlich auch mit NodeMCU….

      • Felix am 13. Oktober 2017 21:47

        Zeitraum kann ich dir nicht versprechen, aber ich habe es auf die (lange) Liste von geplanten Tutorials hinzugefügt 🙂

  163. Manuel am 19. Dezember 2017 19:04

    Hey, ich habe drei HCSR-04 mit meinem Raspberry verbaut. Ich habe jedoch folgendes Problem, die Werte die mir der Raspberry liefert, „springen“ stark hin und her. Beispielsweise sind die Sensoren auf 2 Meter Entferung (bspw.) zu einer Wand ausgerichtet, springt der Wert im Sekundentakt von 190 – 210 cm hin und her. Dazu muss ich noch sagen, dass die Sensoren mit normalen Kupferlitzen verlötet wurden um sie unabhängig von irgendwelchen Steckbrettern zu machen. Die Sensoren trennt den Pi dann durch ein 2 Meter langes Kabel. Könnte das evtl. eine Ursache für mein Problem sein, obwohl ich elektromagnische Einflüsse für unwahrscheinlich halte. Im Raspberry wird ja auf die steigende Flanke des Echo Signals getriggert, somit ist doch dies schon „rein“ digital. Somit würden ja Ströungen, die sich auf die Echo-Leitung auswirken und kleiner sind als 3,3V dies nicht beeinträchtigen.
    Noch zum Verständnis: wenn die Schallwelle den Receiver erreicht, sendet dieser ein 5V Signal vom Echo Output des HCSRs, dieses wird dann über den Spannungsteiler auf ca. 3V verringert. Im code steht, dass wenn Echo == High ist, die Zeitmessung beendet wird. Da wir aber nur auf knapp 3V über den Spannungsteiler kommen und High im Raspberry mit 3,3V definiert ist, er deshalb nicht immer zwischen High und Low unterscheiden kann?

    Trotzdem super Erklärung! Weiter So!

    Grüße
    Manuel

    Antworten
    • Felix am 19. Dezember 2017 20:04

      Das ist leider normal. Ich würde einfach 10 mal hintereinander messen und den Mittelwert nehmen.

      Antworten
  164. Hicham am 16. Januar 2018 8:08

    Hallo Felix,
    Danke für deine Tutorial.
    Ich habe ein Ultraschallsensor in zusammen spiel mit einem Schrittmotor.
    Abstand messen
    if Abstand > 40
    fahre vorwärts
    else
    rückwärtsrts
    es funktioniert soweit alles einwandfrei, nur habe ich das Problem dass der Motor nicht kontinuierlich fährt sondern immer stoppen und warten bis die Messung abgeschlossen ist.
    Hast du eine Idee wie man das verbessern könnte.

    Danke im Voraus
    Gruß
    Hicham

    Antworten
    • Felix am 16. Januar 2018 21:22

      Du könntest es mit threading lösen und den Motor immer eine kurze Zeit (0.1s bspw) weiter fahren lassen, bis eben die nächste Messung hoffentlich abgeschlossen ist.

      Antworten
  165. Andi am 20. Januar 2018 18:31

    Hallo,

    danke für deine Beispiel, hat mir sehr weiter geholfen.

    Ich verstehe nur die beiden folgenden Bedingungen nicht:

    # speichere Startzeit
        while GPIO.input(GPIO_ECHO) == 0:
            StartZeit = time.time()
     
        # speichere Ankunftszeit
        while GPIO.input(GPIO_ECHO) == 1:
            StopZeit = time.time()

    Laut Datenblatt der HC-SR04 Sensoren muss das ECHO Signal ausgewertet werden.
    Die Zeit zwischen positiver und negativer Flanke des Signals steht im direkten Zusammenhang zur Entfernung. Daher hätte ich das in dieser Form erwartet:

    # speichere Startzeit -> Achte auf steigende Flanke
    while GPIO.input(GPIO_ECHO) == 1:
    StartZeit = time.time()

    # speichere Ankunftszeit -> Achte auf fallende Flanke
    while GPIO.input(GPIO_ECHO) == 0:
    StopZeit = time.time()

    Nachdem dein Beispiel funktioniert habe ich irgendwo einen Denkfehler?
    Liegt es auch möglicherweise an den Pull-Ups/-Downs?

    Vielen Dank

    Antworten
    • Felix am 20. Januar 2018 20:05

      Wir speichern solange die Startzeit, wie der Pin auf Low(=0) ist. Bei positiver Flanke (Pin nun auf High) gehen wir weiter (nächste Loop). Hier speichern wir die letzte Zeit, bis zur negativen Flanke (vorher High, nun wieder Low).

      Antworten
  166. Wiemeyer,heinz am 15. Februar 2018 11:31

    Hallo Felix, bei meiner Entfernungsmessung bekomme ich nur den Hinweis: a1:1518688649.89. Das Programm läuft aber weiter. Schon so etwas mal gehabt?

    Antworten
    • Felix am 15. Februar 2018 11:35

      Hast du mal geschaut von was das ausgelöst wird (kannst in verschiedene Zeilen prints schreiben, um so die Zeile zu finden, die es auslöst, sofern keine Zeile angegeben wurde).

      Antworten
  167. Wiemeyer,heinz am 17. Februar 2018 17:12

    Hallo Felix, danke für deine schnellen Antworten. Meine Entfernungsmessung funktioniert nicht, weil das Echo-Signal ausbleibt. ich habe es mit 470/330Ohm und 2,2 /1,5KOhm versucht und auch mit 2 Modulen. Jetzt weiss ich nicht mehr weiter. Hast Du noch eine Idee?

    Antworten
    • Felix am 17. Februar 2018 23:33

      Versuch es bitte nochmal mit 4.7k Ohm.

      Antworten
  168. Patrick Bucher am 14. April 2018 13:52

    Eine sehr gute Anleitung, die tadellos funktioniert! Nur die passenden Widerstände hatte ich gerade nicht vorrätig, aber im Elektrotechniklabor der örtlichen Hochschule wird man schnell fündig.
    Man muss allerdings beachten, dass der Ultraschallsensor ab und zu eigenartige Werte zurückgibt. Ob dies mit dem Sensor, mit der Schaltung oder mit umherfliegenden Staubpartikeln zu tun hat, kann ich nicht beurteilen. Eine Lösung für das Problem ist es, wenn man für eine bestimmte Zeit die Entfernungen misst und dann den Median-Wert der gemessenen Entfernungen ausrechnet. Im Gegensatz zum arithmetischen Mittel ist man so sicher vor Ausreissern. Ein entsprechendes Beispiel habe ich hier gemacht: https://github.com/patrickbucher/Raspi/blob/master/python/ultrasonic.py
    Herzlichen Dank!

    Antworten
  169. Wiemeyer,heinz am 31. Mai 2018 14:03

    Hallo Felix, ich kann sämtliche GPIO’s nicht mehr ansprechen. die 3,3V sind vorhanden. Gibt es eine softwaremäßige Sperre, die ich eventuell versehentlich erzeugt habe? Einen Kurzschluß sämtlicher Ausgänge schließe ich aus .Hast Du noch eine Idee?

    Antworten
  170. Damian am 5. Oktober 2018 15:47

    Die Startzeit wird gespeichert währenddem kein Signal vom Echo Pin empfangen wird. Dies ist auch nach dem Aussenden des Ultraschalls der Fall. Dann ist die Startzeit nach meinem Verständnis jedoch nicht der Zeitpunkt, an dem das Signal vom Trigger Pin ausgesendet wurde. Warum muss das erste while Statement für die Startzeit nicht weggelassen werden? Die Startzeit ist schliesslich vorher schon definiert. Es funktioniert bei mir zwar, mir leuchtet den Sinn dieses while Statements jedoch noch nicht ganz ein.
    Danke schon im Voraus für die Erklärung!

    Antworten
  171. Patrick am 20. März 2019 10:18

    Hallo liebe Tüftler,

    ich habe alles aufgebaut und angeschlossen und das Script läuft. Nur kommen die gemessenen Werte wenn ich den Sensor zuhalte.
    Ich habe schon das Kabel gekürzt und es neu verkabelt.

    Habt ihr eine Idee?

    Antworten
  172. Kurt am 13. Januar 2020 12:54

    Hallo
    ich habe eine Adeept PiCar-B Robot, welche die Entfernungsmessung mit dem Ultraschallsensor HC-SR04 macht und auf Raspberry Pi aufgebaut ist. Die Entfernungsmessung funktioniert soweit OK. Der Sensor ist auf einem schwenkbaren Kopf aufgebaut, welcher ca. 80grd nach links und nach rechts schwenken kann. Ich möchte den RobotCar so steuern, dass er immer in der Richtung mit der grössten gemessenen Distanz fährt und so seinen Weg selbständig durch Hindernisse findet. Nun habe ich aber bemerkt, dass der Sensor bei Messungen, welche schräg an ein flaches Hindernis (Wand) gerichtet sind, nicht die Distanz zur schrägen Wand, sondern eine bedeutend grössere Distanz ausgibt. Messungen welche in einem Winkel kleiner 55grd gemessen werden, geben so die Distanz zum entfernteren „reflektierten“ Hindernis an. Ich nehme an, dass der Sound von der schrägen Wand nicht zurück reflektiert wird, sondern erst nachdem dieser von der Wand abgeprallt und vom weiter entfernte Hindernis reflektiert wird (analog dem Funktionsprinzip der Stealth-Technologie ?). Liege ich da total falsch und mache eine gravierende Fehler, oder ist eine Messung schräg zu einer Wand so einfach nicht möglich? Hat jemand eine Idee, wie eine solche Hinderniserkennung besser gemacht werden sollte? Ist das mit Ultrasonic Messung einfach nicht möglich?
    Besten Dank für Eure feedbacks!

    Antworten
  173. ILO am 11. März 2020 13:48

    Hallo Leute,
    Ich möchte in einer Anwendung insgesamt 3 Ultraschallsensoren verwenden. Wenn ich nun alle 3 am selben GND Pin anschließen möchte, muss ich dann auch einen 3 mal so hohen Widerstand verwenden oder reicht der 330 Ohm aus?
    Danke im Voraus

    Antworten
  174. Tobias am 29. April 2020 11:18

    Hallo, leider verstehe ich die Zusammenhänge auf der Lochplatine nicht kann mir das jemand genauer erklären? Ich weiss nicht was ich woran zu löten habe.

    Gruß
    Tobias

    Antworten
    • Felix am 30. April 2020 19:47

      Falls du ein Breadboard hast, brauchst du nichts löten und kannst einfach den Schaltkreis entsprechend nachbauen / stecken.

      Antworten
  175. Micha93 am 21. Juni 2020 13:25

    hi,

    also ich habe eigentlich zwei einfache Fragen. Ich baue einen Roboter, wo ich mehrere Ultraschallsensoren verwende. Auf dem Steckbrett sind auch bereits andere Sensoren angeschlossen. Auf einer Schiene habe ich 5V, auf der anderen 3.3V. Hier klar, die 3.3V verwenden. Wenn ich jetzt 4 Ultraschallsensoren verwenden möchte, brauche ich 4 330 Ohm und 4 470 Ohm Widerstände und verfahre mit dem Echo jedes mal genau gleich, richtig?

    Antworten
  176. Michdo93 am 26. Juni 2020 15:12

    Wie komme ich auf die 330 Ohm und 470 Ohm? Um von 5 V auf 3.3 V zu kommen berechne ich doch 5 V – 3.3 V = 1.7 V. Dann R = 1.7 V / 0,02 A = 85 Ohm. Die 20 mA sind beim Parallax Ping zu berücksichtigen. Beim HC-SR04 habe ich dann R = 1.7 V / 0,015 A = 113,33 Ohm.

    Antworten
  177. AndyOhler am 22. September 2020 11:59

    Hallo,
    bei dem Nachbau habe ich das Phänomen:
    Ändert sich der Abstand extrem (12m, dann 10 cm) bleibt das Programm an dieser Stelle stehen:
    while GPIO.input(GPIO_ECHO) == 0:
    StartZeit = time.time()
    Hier bin ich ratlos.
    Liegt es an dem Ultraschallsensor, am Raypberry Zerro oder an den Vorwiderständen?
    Als Neuling stelle ich mir die Frage, ob man das Programm überwachen kann z.B. einen Neustart durchführen kann?
    Würde mich über einige Tipps sehr freuen.

    Antworten
  178. Klaus am 11. Januar 2021 18:25

    Hallo,
    wieso nimmst Du denn denn einen 10k Wiederstand?
    Der Wiederstand ist doch als Spannungsteiler gedacht um einen 3,3 V Pegel am GPIO zu haben. Mit den 10K hast Du annähernd 5V am GPIO anliegen. Eigentlich sind das doch 3.3V Inputs, oder?

    Antworten
  179. rc am 5. Juni 2021 16:43

    In Ihren Texten steht die ganze Zeit etwas von einem 10 K Widerstand.
    In Ihren Illustrattionen sind es dann plötzlich nur noch 470 Ohm.
    Das hat erstmal zu Verständnisproblemen geführt.
    Beim vergleichen mit anderen online Quellen hab ich den 10 K Widerstand auch nicht mehr gesehen. Vermutlich wurde dies von Ihnen falsch übersetzt?!

    Antworten
  180. Enrico am 31. Juli 2021 9:58

    Im Text stehen 330 Ohm und 10 kOhm, Im Bild ist es dann ein 470 Ohm. Nach Berechnung sollte 470 Ohm korrekt sein.

    Ich habe einen JSN-SR04 direkt an 3 V am Raspi angeschlossen, also ohne Spannungsteiler.
    Allerdings messe ich nur zwischen 18,7 cm und 18,9 cm. Der Abstand zur Wasseroberfläche beträgt aber ca. 80 cm.
    Um Streuungen in der Zisterne zu vermeiden, ist der Sensor in einem KG100 Rohr montiert. Allerdings sind es zwischen Sensor und Raspi ca. 15 m. Hierfür ist ein 4 adriges Telefonkabel verwendet, die Schirmung ist auf GRD mit aufgelegt.

    Bekomme ich realistische Werte, wenn ich 5 V verwende und den Spannungsteiler mit 330/470 Ohm aufbaue?

    Antworten

Hinterlasse einen Kommentar Antwort abbrechen

Steam Spiele mit dem Raspberry Pi streamen

Raspberry Pi Raspbian OS auf eine SD-Karte übertragen (Windows)

Durchflussmesser / Water Flow Sensor am Raspberry Pi auslesen

Mit dem ESP8266 WS2812B LED Strips am Smartphone steuern

Joystick am Raspberry Pi benutzen (mit MCP3008)

ESP8266 Grafikdisplay: Am SSD1306 OLED per I2C Bilder & Text anzeigen

Blog abonnieren

Abboniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!

Tutorials for Raspberry Pi
Facebook Twitter YouTube
  • Kontakt & Impressum
  • Unterstützen
  • Datenschutz

Tippe den Suchbegriff oben ein und drücke Enter, um danach zu suchen. Drücke Esc, um abzubrechen.