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:
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:
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.
373 Kommentare
Guten Tag,
wie lange darf das Kabel vom Pi zum Sensor maximal sein?
mfg,
Martin
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
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
Guten Tag,
wie lange darf das Kabel vom Pi zum Sensor maximal sein?
mfg,
Martin
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
Was für wiederstand brauche ich 330 Ω Ohm (1/4w 0,25W) oder 2w ?
Wie ist es bei den 470 Ω Ohm das selbe?
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 ?
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?
Hi,
versuche mal die zweite Zeile hiervon hinzuzufügen (Zeile 25):
Habe das oben aktualisiert.
Hallo Florian,
hat der Tipp von Felix bei Dir funktioniert oder hast Du eine andere Lösung gefunden?
Gruß Daniel
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 ?
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?
Hi,
versuche mal die zweite Zeile hiervon hinzuzufügen (Zeile 25):
Habe das oben aktualisiert.
Hallo Florian,
hat der Tipp von Felix bei Dir funktioniert oder hast Du eine andere Lösung gefunden?
Gruß Daniel
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?
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.
ok danke aber wie bringe ich das ich den code?
etwa so?
oder wo dann?
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.
Ja der Schall braucht ja schon länger als das was du sagst ^^
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?
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.
ok danke aber wie bringe ich das ich den code?
etwa so?
oder wo dann?
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.
Ja der Schall braucht ja schon länger als das was du sagst ^^
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
Dankeschön. Klar kannst du die Werte auch in einer Datei speichern. Mal ein Bsp:
Mehr dazu findest du in den Python Docs: https://docs.python.org/2/tutorial/inputoutput.html
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
Dankeschön. Klar kannst du die Werte auch in einer Datei speichern. Mal ein Bsp:
Mehr dazu findest du in den Python Docs: https://docs.python.org/2/tutorial/inputoutput.html
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
Eine Möglichkeit wäre so:
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).
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
Eine Möglichkeit wäre so:
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).
Hallo Felix,
gibt es auch eine Möglichkeit einen Wert in die Datei zu schreiben wenn die Entfernung einen bestimmten Wert unterschreitet?
Klar, mit
os.system("")
kannst du einfach Shell Befehle ausführen (bspw.echo "Test" >> datei.txt
)Ich danke dir vielmals! Genauso hatte ich mir das vorgestellt. 🙂
Ich danke dir vielmals! Genauso hatte ich mir das vorgestellt. 🙂
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?
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.
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?
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.
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!
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.
Vielen Dank für die Antwort mit Link.
Das sind sehr interessante Details, in die ich mich einlesen werde!
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!
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.
Vielen Dank für die Antwort mit Link.
Das sind sehr interessante Details, in die ich mich einlesen werde!
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
Sollte klappen
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!
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!
Hallo,
muss der Trigegr an den GPIO 18 angeschlossen werden und könnte man auch mehrere Modulle anschließen?
Hallo,
wenn du jeweils im Code die Nummer änderst kannst du auch mehrere Module anschließen.
Hallo,
muss der Trigegr an den GPIO 18 angeschlossen werden und könnte man auch mehrere Modulle anschließen?
Hallo,
wenn du jeweils im Code die Nummer änderst kannst du auch mehrere Module anschließen.
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
Bist du alle Anschlüsse nochmal durchgegangen und nutzt die richtigen Widerstandsgrößen? Oftmals hängt sich der Pi aufgrund falsch angeschlossener Pins auf.
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. 😐
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.
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
Bist du alle Anschlüsse nochmal durchgegangen und nutzt die richtigen Widerstandsgrößen? Oftmals hängt sich der Pi aufgrund falsch angeschlossener Pins auf.
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. 😐
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.
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
Das passiert jedem mal 😀
Freut mich, dass es nun klappt 🙂
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
Das passiert jedem mal 😀
Freut mich, dass es nun klappt 🙂
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:
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
Vorweg zwei Dinge: Du weißt
GPIO_M1v = 7
usw. zu, aber benutzt trotzdemGPIO.output(7,True)
. Der Sinn der Variablen Zuweisung ist, dass du eben keine Nummern mehr benutzen musst. Zweitens: Wieso initialisierst duAddtime
als Array/Liste? ein einfachestime.time()
reicht vollkommen. Die Zeileif 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.
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=AZSiqj0NZgUAm 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
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:
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
Vorweg zwei Dinge: Du weißt
GPIO_M1v = 7
usw. zu, aber benutzt trotzdemGPIO.output(7,True)
. Der Sinn der Variablen Zuweisung ist, dass du eben keine Nummern mehr benutzen musst. Zweitens: Wieso initialisierst duAddtime
als Array/Liste? ein einfachestime.time()
reicht vollkommen. Die Zeileif 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.
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=AZSiqj0NZgUAm 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
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
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.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
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.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
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
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
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
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
sorry, hab das Problem gefunden. alles läuft. danke
Woran lag es denn?
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
sorry, hab das Problem gefunden. alles läuft. danke
Woran lag es denn?
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
Ü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):
Das bewirkt, dass der nachfolgende Code nur ausgeführt wird, falls die Datei direkt aufgerufen wurde und nicht, falls in einem anderen Skript eingebunden.
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
Ü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):
Das bewirkt, dass der nachfolgende Code nur ausgeführt wird, falls die Datei direkt aufgerufen wurde und nicht, falls in einem anderen Skript eingebunden.
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
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.
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 🙂
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
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.
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 🙂
@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.
@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.
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
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.
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
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.
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?
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?
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
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?
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
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?
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 😛
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
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 😛
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
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
Die anderen Module funktionieren oder funktionieren auch nicht?
Ja, versuch mal alle Befehle aus dem Skript so in die Konsole einzugeben.
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
Die anderen Module funktionieren oder funktionieren auch nicht?
Ja, versuch mal alle Befehle aus dem Skript so in die Konsole einzugeben.
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.
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
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.
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
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 😉
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 😉
ach so, die while-schleife habe ich natürlich weggelassen …
ach so, die while-schleife habe ich natürlich weggelassen …
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:
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.
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:
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.
Hallo,
Welche Entfernungen Sensor – Pi wurden erfolgreich getestet?
Sind ca 7m machbar?
Gruß Erich
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 🙂
Hallo,
Welche Entfernungen Sensor – Pi wurden erfolgreich getestet?
Sind ca 7m machbar?
Gruß Erich
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 🙂
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
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
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
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
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
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.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?
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
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
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.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?
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
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
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
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
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
Ach ja, richtig tricky wäre, wenn bei den 20 Messungen der höchste und der niedrigste Wert nicht berücksichtigt würden.
Ich schreibe mal einen einfachen Code, wie man Messungen mit Numpy speichern kann und die Werte auslesen:
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?
Ach ja, richtig tricky wäre, wenn bei den 20 Messungen der höchste und der niedrigste Wert nicht berücksichtigt würden.
Ich schreibe mal einen einfachen Code, wie man Messungen mit Numpy speichern kann und die Werte auslesen:
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?
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
Hallo Ingo,
dann kannst du das Array vorher sortieren und dann den niedrigsten (ersten) und höchsten (letzten) Wert raus schmeißen:
Eventuell solltest du dir auch mal den Median anschauen.
LG Felix
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
Hallo Ingo,
dann kannst du das Array vorher sortieren und dann den niedrigsten (ersten) und höchsten (letzten) Wert raus schmeißen:
Eventuell solltest du dir auch mal den Median anschauen.
LG Felix
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
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?
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
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?
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:
Das ist wohl nicht zufällig die richtige stelle 🙂
Ich will dir aber nicht deine Zeit stehlen…..
Gruß Ingo
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 😉
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:
Das ist wohl nicht zufällig die richtige stelle 🙂
Ich will dir aber nicht deine Zeit stehlen…..
Gruß Ingo
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 😉
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
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
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)
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?
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.
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)
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?
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.
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
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.
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
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.
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
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.
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?
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
Könntest du mir sagen, wo geau ich den Befehl: if abstand > 0:
eingeben muss, da ich immer nen Fehler bekomm
Danke
Bevor du es speicherst. Sprich:
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
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.
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?
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
Könntest du mir sagen, wo geau ich den Befehl: if abstand > 0:
eingeben muss, da ich immer nen Fehler bekomm
Danke
Bevor du es speicherst. Sprich:
Vielen Dank, jetzt klappts 🙂
LG Patrick
Vielen Dank, jetzt klappts 🙂
LG Patrick
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
So löschst du den Inhalt:
PS: Schau dir am besten mal Python Basics an, da if..else wirklich sehr einfach sind.
LG Felix
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
So löschst du den Inhalt:
PS: Schau dir am besten mal Python Basics an, da if..else wirklich sehr einfach sind.
LG Felix
Sehr guter Beitrag und das einzige Script was bei mir richtige Funktionier hat. Mach weiter!
Sehr guter Beitrag und das einzige Script was bei mir richtige Funktionier hat. Mach weiter!
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
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
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
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
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?
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).
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?
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).
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.,..
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).
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.,..
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).
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:
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.
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:
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.
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?
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.
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?
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.
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?
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.
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?
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.
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
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
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!
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
Stimmt… Habe die Funktionsweise von dem Sensor jetzt verstanden 😀
Vielen Dank
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!
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
Stimmt… Habe die Funktionsweise von dem Sensor jetzt verstanden 😀
Vielen Dank
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
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.
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
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.
Hallo,
ist es bei dem Sensor egal welche GPIO’s man nutze?
Gruß
Ja. Aber die Anpassung im Code nicht vergessen.
LG, Felix
Hallo,
ist es bei dem Sensor egal welche GPIO’s man nutze?
Gruß
Ja. Aber die Anpassung im Code nicht vergessen.
LG, Felix
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
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
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
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)
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
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)
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?
Bist du per SSH verbunden oder direkt am Pi (bzw. über Remotedesktop)?
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?
Bist du per SSH verbunden oder direkt am Pi (bzw. über Remotedesktop)?
Hi 🙂
Bei mir ist die StartZeit gleich der StopZeit. Des Weiteren wird bei mir auch nichts ausgegeben außer, wenn ich abbreche…
Hi 🙂
Bei mir ist die StartZeit gleich der StopZeit. Des Weiteren wird bei mir auch nichts ausgegeben außer, wenn ich abbreche…
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
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
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
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.
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
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.
Super und danke. 🙂
Super und danke. 🙂
Woher bekomme ich die 470 Ohm teile?, Baumarkt?. Kann ich anstatt 470 auch 10k oder 330 Ohm verwenden?
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
Woher bekomme ich die 470 Ohm teile?, Baumarkt?. Kann ich anstatt 470 auch 10k oder 330 Ohm verwenden?
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
Kann ich diese Wiederstände und Jumper anders Platzieren?, ich meinte den 470(den wo ich ersetzen wollte).
Solange der Schaltkreis der selbe ist, kannst du sie auf dem Breadboard/o.ä. platzieren wie du möchtest.
Kann ich diese Wiederstände und Jumper anders Platzieren?, ich meinte den 470(den wo ich ersetzen wollte).
Solange der Schaltkreis der selbe ist, kannst du sie auf dem Breadboard/o.ä. platzieren wie du möchtest.
Wie meinst du Schaltkreis?, ich benötige male-male und female-male Jumper oder?
Was meinst du denn mit „anders platzieren“? Im Grund reichen ein Breadboard und Male-Female Jumper als Verbindung vom Pi zum Breadboard.
Wie meinst du Schaltkreis?, ich benötige male-male und female-male Jumper oder?
Was meinst du denn mit „anders platzieren“? Im Grund reichen ein Breadboard und Male-Female Jumper als Verbindung vom Pi zum Breadboard.
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
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).
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
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).
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?
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/
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?
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/
Was ist denn ein breakboard, das habe ich mitbekommen brauche ich das für irgendwas?
Ich denke du meinst Breadboard. Ist der englische Name für Steckbrett…
Nein ich meine ein Breakboard
Was ist denn ein breakboard, das habe ich mitbekommen brauche ich das für irgendwas?
Ich denke du meinst Breadboard. Ist der englische Name für Steckbrett…
Nein ich meine ein Breakboard
Nein ich meine ein Breakboard. Bei diesen Ultimate starter kit(das ist hier verlinkt).
Nein ich meine ein Breakboard. Bei diesen Ultimate starter kit(das ist hier verlinkt).
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.
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.
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.
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.
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
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
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.
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.
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!
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.
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.
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!
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
statt while True: schreibst du for i in range(10):
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
statt while True: schreibst du for i in range(10):
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.
time.time()
gibt auch die Mikrosekunden aus: 1489759120.5046391Ich 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.
time.time()
gibt auch die Mikrosekunden aus: 1489759120.5046391Hallo 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…)
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.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…).
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
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 !!! 🙂
Freut mich, dass es nun funktioniert, wie es soll 🙂
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…)
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.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…).
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
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 !!! 🙂
Freut mich, dass es nun funktioniert, wie es soll 🙂
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
Ja klar, einfach mehrere if’s einbauen und entsprechen darauf reagieren lassen.
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
Ja klar, einfach mehrere if’s einbauen und entsprechen darauf reagieren lassen.
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.
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
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.
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
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
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.
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
In dem Skrip oben bspw. in Zeile 47:
Import natürlich nicht vergessen.
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
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.
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
In dem Skrip oben bspw. in Zeile 47:
Import natürlich nicht vergessen.
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
Das macht keinen Unterschied, aber ich denke, dass der Spannungsabfall bei 5m Kabel zu hoch sein wird.
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.
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
Das macht keinen Unterschied, aber ich denke, dass der Spannungsabfall bei 5m Kabel zu hoch sein wird.
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.
Hallo,
wie sende ich den Abstand per UDP?
Grüße Steffen
Meinst du das UDP Protokoll? Wenn ja, was soll das mit dem Ultraschallsensor zu tun haben?
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.
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.
Hallo,
wie sende ich den Abstand per UDP?
Grüße Steffen
Meinst du das UDP Protokoll? Wenn ja, was soll das mit dem Ultraschallsensor zu tun haben?
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.
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.
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.
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.
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:
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
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?
Ja, sollte möglich sein. Bei genügend Interesse kann ich dazu ein Tutorial machen.
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….
Zeitraum kann ich dir nicht versprechen, aber ich habe es auf die (lange) Liste von geplanten Tutorials hinzugefügt 🙂
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
Das ist leider normal. Ich würde einfach 10 mal hintereinander messen und den Mittelwert nehmen.
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
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.
Hallo,
danke für deine Beispiel, hat mir sehr weiter geholfen.
Ich verstehe nur die beiden folgenden Bedingungen nicht:
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
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).
Hallo Felix, bei meiner Entfernungsmessung bekomme ich nur den Hinweis: a1:1518688649.89. Das Programm läuft aber weiter. Schon so etwas mal gehabt?
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).
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?
Versuch es bitte nochmal mit 4.7k Ohm.
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!
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?
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!
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?
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!
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
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
Falls du ein Breadboard hast, brauchst du nichts löten und kannst einfach den Schaltkreis entsprechend nachbauen / stecken.
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?
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.
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.
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?
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?!
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?