Habe die library mit folgendem Befehl installiert sudo apt install python3-gpiozero. Dies scheint ja auch der richtige Befehl gewesen zu sein.
Fehler im Quelltext des Roboters
-
Shaq -
20. November 2017 um 20:02 -
Erledigt
-
-
Fehler im Quelltext des Roboters? Schau mal ob du hier fündig wirst!
-
Beim abbrechen des Programms kommt folgende Meldung
Python
Alles anzeigen^CError in atexit._run_exitfuncs: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 476, in _shutd own _threads_shutdown() File "/usr/lib/python3/dist-packages/gpiozero/threads.py", line 16, in _thread s_shutdown t.stop() File "/usr/lib/python3/dist-packages/gpiozero/threads.py", line 34, in stop self.join() File "/usr/lib/python3/dist-packages/gpiozero/threads.py", line 37, in join super(GPIOThread, self).join() File "/usr/lib/python3.5/threading.py", line 1054, in join self._wait_for_tstate_lock() File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock elif lock.acquire(block, timeout): KeyboardInterrupt
-
Selbstverständlich kommt die. Du hast dein Programm ja mit Ctrl+C, also einem SIGINT unterbrochen und damit in Python eine KeyboardInterrupt Exception ausgelöst. Der von gpiozero gestartete Thread im Hintergrund stört sich entsprechend daran, gewaltvoll abgebrochen zu werden. Zu Schaden kommt letztenendes aber keiner.
-
Hallo Bastelstube,
zur verzögerten Ausgabe (Beitrag #31 ?) hätte ich diesen Link. Vielleicht passt das?
Beste Grüße
Andreas
-
Selbstverständlich kommt die. Du hast dein Programm ja mit Ctrl+C, also einem SIGINT unterbrochen und damit in Python eine KeyboardInterrupt Exception ausgelöst. Der von gpiozero gestartete Thread im Hintergrund stört sich entsprechend daran, gewaltvoll abgebrochen zu werden. Zu Schaden kommt letztenendes aber keiner.
Achso okay danke für die Info.
Hast Du denn sonst eine Lösung für mein Problem, da ich die ganze zeit wie verrückt nach einer Lösung suche. -
Hallo Bastelstube,
zur verzögerten Ausgabe (Beitrag #31 ?) hätte ich diesen Link. Vielleicht passt das?
Beste Grüße
AndreasLeider gibt es in diesem Beispiel keinen Code an dem man den Fehler ableiten kann, dadurch fällt es mir gerade schwer zu verstehen was dort gemeint ist bzw. wie ich diese Funktionen in das Bsp. Scipt einfüge.
-
Hallo Bastelstube,
folgender Code aus Beitrag #31 dieses Threads erzeugt nach Deiner Aussage erst nach 30 Sekunden eine Ausgabe...
Ich habe mich jetzt mal durch die komplette Library von gpiozero gelesen.
Trotzdem läuft das Testscipt welches ich mir aus dem Dokument kopiert habe nicht. Ich habe die library auf dem Pi so wie es dort stand installiert und den Quellcode 1:1 übernommen.
Eine Fehlermeldung wird mir nicht ausgegeben der Pi fängt nur nach 30 Sekunden an folgedens auszugeben.
('Distance: ', 100.0)
Pythonfrom gpiozero import DistanceSensor from time import sleep sensor = DistanceSensor(echo=18, trigger=17) while True: print('Distance: ', sensor.distance * 100) sleep(1)
Normalerweise müsste der Sensor ja gant normal den Abstand messen.
Wo liegt der Fehler?
Beste Grüße
Andreas
-
zur verzögerten Ausgabe (Beitrag #31 ?) hätte ich diesen Link. Vielleicht passt das?
Kann ich mir nur schwer vorstellen... print tut nämlich implizit ein \n anhängen (Keyword-Argument end="\n") und flusht den Buffer auch direkt, im Gegensatz zu sys.stdout.write, wo unter Umständen ein Aufruf sys.stdout.flush nötig wäre.
-
Hallo Bastelstube,
folgender Code aus Beitrag #31 dieses Threads erzeugt nach Deiner Aussage erst nach 30 Sekunden eine Ausgabe...
Beste Grüße
Andreas
Achso ja sorry.
Es müsste aber doch die gleiche Ausgabe erfolgen wie mit der GPIO library bei gleicher Verkabelung. Sprich der Sensor misst in meinem Fall vom Tisch bis Decke ca. 160cm. Da frage ich mich warum wird dies nicht auch mit der GPIOzero library ausgegeben. Ich bekomme ja immer den selben Wert (100.0) zurück.
Gruß
Bastelstube
-
Ich glaube wir brauchen langsam einen Schaltplan als Bild. In Prosa kam da viel zu oft nur Murks raus, frag mal den jar. An der Software liegt's bestimmt nicht, das Beispiel ist ja minimal und von den Entwicklern getestet worden.
-
Ich glaube wir brauchen langsam einen Schaltplan als Bild. In Prosa kam da viel zu oft nur Murks raus, frag mal den jar. An der Software liegt's bestimmt nicht, das Beispiel ist ja minimal und von den Entwicklern getestet worden.
Was ist Prosa?
Dann muss ich mir mal ein Tool suchen um einen Schaltplan erstellen zu können. Speziell jetzt für raspberry.
-
-
Meine Vermutung ist dass das Initialisieren des Sensor's zu lange dauert. Ob es am Ausgabebuffer liegt lässt sich doch super einfach debuggen:
Pythonfrom gpiozero import DistanceSensor from time import sleep sensor = DistanceSensor(echo=18, trigger=17) print("Starte Schleife") while True: print('Distance: ', sensor.distance * 100) sleep(1)
Ich persönlich würde aber eher weiterhin beim RPi.GPIO oder pigpio Module bleiben - wenn es damit auch 30sec dauert bis eine Messung erfolgt liegt es eindeutig an der Hardware oder Aufbau/Abstand.
https://github.com/meigrafd/Sampl…igpio_HCSR04.py
https://github.com/meigrafd/Sampl…pio_HCSR04_2.py
-
Okay. Habe gerade auch nochmal die Verkabbelung geprüft es scheint alles richtig zu sein.
frag mal den jar
bin schon hier
Habe gerade auch nochmal die Verkabbelung geprüft es scheint alles richtig zu sein
das glauben immer viele auch Profis.
Aus meiner beruflichen Praxis:
Zu jeder Schaltung wird stets ein Schaltplan erstellt, mit Eagle, es kann aber auch Fritzing oder Karopapier sein.
Dann wird die Schaltung aufgebaut, Steckbrett, Lochraster Platine mit Schaltdraht, oder freiverdrahtet mit Litze, alles egal ABER:
Nach jeder gelegten Verbindung wird diese gemessen zu den Knoten muss Durchgang nahe 0 Ohm haben und zu Nachbarn ohne Verbindung unendlich Ohm haben, dann erst DANN gilt sie als gelegt und wird mit einem Textmarker im Plan nachgezeichnet.
Wenn alle Verbindungen gemarkert sind erst dann erfolgt der Test und wenn der fehlschlägt ein Blick genügt und man sieht den Fehler, "vergessene Leitung".
Auch Kollegen mit 30 Jahren Berufserfahrung musste ich erst die "Abkürzungen" austreiben, 5 Leitungen legen und 6 abstreichen im Glauben das sie doch 6 gelegt hatten, der Fehler hat mich schon öfter unnötige Fehlersuche gekostet weil die Leitung ja "abgestrichen" war aber in Wirklichkeit fehlte.
-
dazu gehört,
"Wir haben keine Zeit es richtig zu machen, aber immer genug Zeit es doppelt zu machen."
-
das glauben immer viele auch Profis.
Aus meiner beruflichen Praxis:
Zu jeder Schaltung wird stets ein Schaltplan erstellt, mit Eagle, es kann aber auch Fritzing oder Karopapier sein.
Dann wird die Schaltung aufgebaut, Steckbrett, Lochraster Platine mit Schaltdraht, oder freiverdrahtet mit Litze, alles egal ABER:Nach jeder gelegten Verbindung wird diese gemessen zu den Knoten muss Durchgang nahe 0 Ohm haben und zu Nachbarn ohne Verbindung unendlich Ohm haben, dann erst DANN gilt sie als gelegt und wird mit einem Textmarker im Plan nachgezeichnet.
Wenn alle Verbindungen gemarkert sind erst dann erfolgt der Test und wenn der fehlschlägt ein Blick genügt und man sieht den Fehler, "vergessene Leitung".
Auch Kollegen mit 30 Jahren Berufserfahrung musste ich erst die "Abkürzungen" austreiben, 5 Leitungen legen und 6 abstreichen im Glauben das sie doch 6 gelegt hatten, der Fehler hat mich schon öfter unnötige Fehlersuche gekostet weil die Leitung ja "abgestrichen" war aber in Wirklichkeit fehlte.Ich habe leider nie die Erfahrung mit Schaltplänen gemacht - werde aber mein bestes geben und einen Plan anfertigen.
Ich persönlich würde aber eher weiterhin beim RPi.GPIO oder pigpio Module bleiben - wenn es damit auch 30sec dauert bis eine Messung erfolgt liegt es eindeutig an der Hardware oder Aufbau/Abstand.
Beim RPi.GPIO dauert es noch nichtmal 1sec bis der Sensor den richtigen wert ausgibt, daher verstehe ich auch nicht warum es jetzt so Probleme gibt.
Die RPi.GPIO ist aber veraltet oder etwads nicht? Wenn die GPIOzero vieles verinfacht durch die library warum sollte man dies dann nicht aktiv nutzen?
-
Nö wieso? Du bist ja nicht auf aktuelle Features angewiesen und solange du keine Probleme hast, who cares?
pigpio ist aber auch ein aktuelles und weiterhin gepflegtes Module - wenn du darauf Wert legst.
Erst mal geht es darum festzustellen ob es am Script oder der Hardware liegt. Also mach mal bitte das worum ich dich in Beitrag#54 gebeten habe.
Wenn mit pigpio das Verhalten ähnlich ist liegts nicht am Script. Wenns mit RPi.GPIO besser funktioniert wieso nicht das nutzen?
Dein Hauptproblem worum es hier ursprünglich ging bezog sich auf deinen Anfängerstatus mit Python, da du gerade erst damit anfängst.
-
Sorry das ich mich seit einer Woche nicht gemeldet habe, dies hatte gesundheitliche Gründe.
Erst mal geht es darum festzustellen ob es am Script oder der Hardware liegt. Also mach mal bitte das worum ich dich in Beitrag#54 gebeten habe.
Wenn mit pigpio das Verhalten ähnlich ist liegts nicht am Script. Wenns mit RPi.GPIO besser funktioniert wieso nicht das nutzen?
Die Ausgabe sieht wie folgt aus:
Python
Alles anzeigenpi@raspberrypi:~ $ sudo python MotorTest.py Starte Schleife ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ('Distance: ', 100.0) ^CTraceback (most recent call last): File "MotorTest.py", line 8, in <module> sleep(1) KeyboardInterrupt pi@raspberrypi:~ $
Er gibt dauerhaft den selben wert aus auch wenn ich einen Gegenstand vor den Sensor halte. Habe auch mal die Kabel vom Trigger und vom Echo getauscht, hierbei kam gar keine Ausgabe zustande. Somit habe ich die Verkabelung wieder zurück gebuat und schließe darauf das Sie richtig war.
Im Vergleich mal das ganze mit RPi.GPIO.Ausgabe (Habe dort auch mal einen Gegenstand vorgehalten um zu schauen ob der Sensort es erkennt um einen Hardware defekt auszuschließen.)
Python
Alles anzeigenpi@raspberrypi:~ $ sudo python KY-050_Ultraschall_Abstand_Sensor.py Der Abstand beträgt: 169.46 cm ------------------------------ Der Abstand beträgt: 169.06 cm ------------------------------ Der Abstand beträgt: 169.03 cm ------------------------------ Der Abstand beträgt: 11.49 cm ------------------------------ Der Abstand beträgt: 8.78 cm ------------------------------ Der Abstand beträgt: 7.49 cm ------------------------------ Der Abstand beträgt: 169.01 cm ------------------------------ Der Abstand beträgt: 169.48 cm ------------------------------ ^Cpi@raspberrypi:~ $
Scipt
Python
Alles anzeigen# Benötigte Module werden eingefügt und konfiguriert import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # Hier können die jeweiligen Eingangs-/Ausgangspins ausgewählt werden Trigger_AusgangsPin = 20 Echo_EingangsPin = 21 # Die Pause zwischen den einzelnen Messugnen kann hier in Sekunden eingestellt werden sleeptime = 0.8 # Hier werden die Ein-/Ausgangspins konfiguriert GPIO.setup(Trigger_AusgangsPin, GPIO.OUT) GPIO.setup(Echo_EingangsPin, GPIO.IN) GPIO.output(Trigger_AusgangsPin, False) # Hauptprogrammschleife try: while True: # Abstandsmessung wird mittels des 10us langen Triggersignals gestartet GPIO.output(Trigger_AusgangsPin, True) time.sleep(0.00001) GPIO.output(Trigger_AusgangsPin, False) # Hier wird die Stopuhr gestartet EinschaltZeit = time.time() while GPIO.input(Echo_EingangsPin) == 0: EinschaltZeit = time.time() # Es wird solange die aktuelle Zeit gespeichert, bis das Signal aktiviert wird while GPIO.input(Echo_EingangsPin) == 1: AusschaltZeit = time.time() # Es wird die letzte Zeit aufgenommen, wo noch das Signal aktiv war # Die Differenz der beiden Zeiten ergibt die gesuchte Dauer Dauer = AusschaltZeit - EinschaltZeit # Mittels dieser kann nun der Abstand auf Basis der Schallgeschwindigkeit der Abstand berechnet werden Abstand = (Dauer * 34300) / 2 # Überprüfung, ob der gemessene Wert innerhalb der zulässigen Entfernung liegt if Abstand < 2 or (round(Abstand) > 300): # Falls nicht wird eine Fehlermeldung ausgegeben print("Abstand außerhalb des Messbereich") print("------------------------------") else: # Der Abstand wird auf zwei Stellen hinterm Komma formatiert Abstand = format((Dauer * 34300) / 2, '.2f') # Der berechnete Abstand wird auf der Konsole ausgegeben print("Der Abstand beträgt:"), Abstand,("cm") print("------------------------------") # Pause zwischen den einzelnen Messungen time.sleep(sleeptime) # Aufraeumarbeiten nachdem das Programm beendet wurde except KeyboardInterrupt: GPIO.cleanup()
-
warum soll ich es wiederholen?
Fehler im Quelltext des Roboters
mache einen Schaltplan prüfe die Ausführung und dann die SW
-
Hallo zusammen,
mache einen Schaltplan prüfe die Ausführung und dann die SW
hier nun einmal der Schaltplan von dem ganzen (siehe Anhang). Mit RPi.GPIO funktioniert dieses, jedoch nicht mit gpiozero.
Hier noch eine kurze Erklärung zur Verkabelung:
VCC = 5V [Pin2 (RPi)] = Braun
Trigger = Pin B1 [Voltage Translator] = Rot
Echo = Pin B2 [Voltage Translator] = Grün
GND = Masse [Pin 6 (RPi)] = Gelb
VCCb = 5V []Pin 04(RPi) = Weiß
VCCa = 3,3V [Pin 01(RPi)] = Lila
Pin A1 = GPIO20 [Pin 38(RPi)] = Gelb
Pin A2 = GPIO21 [Pin 40(RPi)] = Orange
GND = Masse [Pin 14(RPi)] = Schwarz
LG
Bastelstube
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!