LED Leiste und Vibrationsmotor ansteuern

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Hallo werte Forumsgemeinde,


    bin RP Noob, habt bitte etwas Nachsicht.


    Ich möchte für meine Frau, die als Psychotherapeutin arbeitet, ein EDMR Gerät nachbauen.

    Bei EMDR geht es nach meinem laienhaften Verständnis darum beide Hirnhälften abwechselnd per LED und/oder Vibrationen in den Händen anzusprechen während der Therapiesitzung.


    Zunächst wollte mich an diesem reinen LED-Projekt orientieren und habe entsprechend der Einkaufsliste alles bestellt: https://youtu.be/kVFnEXX-YUE

    Erst später habe ich dieses Video gefunden, welches im Grunde das Endresultat zeigt inklusive der LED-Leiste und zweier Vibrationsmotoren für beide Hände: https://youtu.be/0NRr-7e_mLk?t=618


    Grundsätzlich würde ich gerne wie im ersten Projekt erst mit einem Steckbrett am GPIO des RP experimentieren und komplett ohne Löten auskommen. Das erste Projekt würde ich gerne um zwei Vibrationsmotoren erweitern und weiß noch nicht, wie das geht.


    Erst im finalen Schritt möchte ich wie im zweiten Video auf das Steckbrett verzichten und dann möglichst schlank weitere Controller hinzuschalten, die per USB vom RP angesteuert werden.


    Die Schaltung im Bild zeigt, wie die LED-Leiste von einem externen 5V/3A Netzteil betrieben wird. Könnte dieses Steckbrett um zwei Vibrationsmotoren (Handymotoren mit Nennstrom von je 38mA) erweitert werden und auch über das Netzteil versorgt werden oder gelten dann auch die oberen Limits für die GPIO Pins von 14mA? Im zweiten Video wird ja sogar dieses schöne Spielzeug (https://www.amazon.de/gp/product/B000W735GC (Affiliate-Link)) verwendet, welches sicher gut in der Hand liegt 😉 Allerdings finde ich hier keine Angaben.


    Vielen Dank für jegliche Hilfe!

    MK



  • Hallo MainzerKaiser, willkommen im Forum!

    Deine Schaltung sieht für WS2812 Lichterkette gut aus.

    Ich würde empfehlen die Versorgung für die Licherkette nicht über das Breadboard zu führen. Schraube diese am besten gleich in der Netzbuchse mit ein. Diese Breadboards sind definitiv nicht für höhere Ströme geeignet. (Ich bin schon zufrieden, wenn sie keine Wackler haben :auslachen: )

    Wegen der Vibrationsmotore: Klar, gibt es bezüglich Vibrationsmotore beim Raspberry GPIO keine Ausnahme ;) . Hier wird generell empfohlen die GPIOs nicht über 4mA zu belasten.

    Bis 20mA / 5V (Pro Ausgang) sollte Dein Pegelwandler 74HCT125P geeignet sein. Du verwendest ja nur einen der internen 4 - sind also noch 3 frei. Insgesamt sollst Du nicht über 50mA kommen.

    Falls Dir das zu wenig ist, könntest Du einen Transistor verwenden (Basiswiderstand mindestens 1kOhm wegen der max. 4mA)

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Hallo werte Forumsgemeinde,


    mein Projekt lag einige Monate unangetastet weil ich folgendes Problem einfach nicht beheben konnte:

    Ich versuche meine Pythonprogramme mit GUI per pycharm und PyQt zu programmieren. In dem Pycharm Projekt stecken Routinen zur Ansteuerung der GPIO Pins, die ich vorher einzeln zum Test per sudo mit root Rechten starten musste. Ohne Root Rechte komme ich wohl nicht an die entsprechenden Pins ran.

    Allerdings möchte/kann ich das PyCharm Projekt oder die spätere allein stehende GUI nicht mit root Rechten starten.

    Wie geht ihr mit einem solchen Problem um?

    Diese Diskussion beschreibt die Fehlermeldung und Lösungsvorschläge mit der Nutzerverwaltung ganz gut. Nur leider funktioniert bei mir davon nix...

    https://raspberrypi.stackexcha…v-mem-try-running-as-root


    VG MK

  • Ohne Root Rechte komme ich wohl nicht an die entsprechenden Pins ran.

    Das bezweifle ich!

    Nur leider funktioniert bei mir davon nix...

    Funktioniert nicht ist keine Fehlermeldung, ja nicht einmal eine Beschreibung.


    Du hast hoffentlich nicht das rpi-update gemacht, wie das in Deinem Link steht?!




    //Edit: MainzerKaiser Welcher Benutzer führt das Skript aus, bei dem es nicht funktioniert und wie ist von diesem Benutzer die Ausgabe von id? Denn der Benutzer pi kann es ja dann eigentlich nicht sein.

  • Geht ohne root: https://gpiozero.readthedocs.i…tml#environment-variables

    Dafür muss pigpio eingerichtet werden.


    Die Kommunikation geschieht über einen Netzwerksocket. Der pigpiod hat den direkten Zugriff auf den Speicherbereich.

    Die eigentliche Anwendung benötigt keinen root, sondern kann mit einem normalen User gestartet werden.


    Bezüglich Qt kann ich dir empfehlen den Designer zu benutzen, um dann .ui-Dateien zu generieren, um diese dann mit PySide oder PyQt direkt zu laden. So kann man Design von Programmcode trennen.

  • Geht ohne root

    Stimmt und das mit dem User pi sogar von Haus aus ohne etwas umzustellen.


    //Edit: Wenn man Skripte allerdings nicht mit dem User aufruft, dem diese gehören ODER wenn der aufrufende User nicht die entsprechenden Gruppenrechte hat um die GPIO oder SPI oder I2C usw. zu verwenden, dann funktioniert das natürlich nicht ohne root zu sein.

  • Danke. Remote GPIO ist mir noch nicht bekannt gewesen. Das probiere ich mal aus.

    Die Skripte gehören dem gleichen User, der sie dann auch ausführt. Nur halt per Knopfdruck in einer GUI ohne sudo.

    Ich arbeite als Benutzer pi ohne weitere Änderungen. Was hab ich zu erwarten, wenn ich rpi-update gemacht habe wie im ersten Link empfohlen.

    Mit "nicht funktionieren" meinte ich, dass ich auch bei allen Schritten zur Modifizierung der Benutzerverwaltung weiterhin den Fehler

    Code
    No access to /dev/mem. Try running as root!

    bekomme wenn ich den WS2812B LED Strip über ein pycharm Projekt ansteuere statt direkt über sudo.


    Den Designer und den Weg über die ui Dateien habe ich schon in Benutzung. Danke!

  • WS2812B wird leider nicht von pigpio unterstützt, was durch gpiozero als Backend genutzt werden kann.

    Dem Webserver könnte der Zugriff auf /dev/mem erlaubt werden. Dann kann man ihn aber auch gleich mit root laufen lassen.

    Über /dev/mem kann man den gesamten Speicher lesen und schreiben.


    Eine etwas sichere Lösung wäre es z.B. einen lokalen Webserver auf localhost mit einem User laufen zu lassen, der die Berechtigung hat auf /dev/mem zu schreiben.


    Beispiel mit Flask:

    Da ich keine Hardware zum Testen habe (zu faul), hab ich eine Klasse zum Testen erstellt. Die brauchst du nicht und das mit dem ImportError kannst du auch entfernen. Der Server läuft auf localhost port 3333 und ist durch den anderen Webserver erreichbar. D.h. dein PHP-Script oder was auch immer kann dann einen HTTP-Request absetzen und benötigt keinen Zugriff auf /dev/mem.


    Nachteil der Sache: Man verlagert das Problem nach hinten. In dem Fall zum Flask-Development-Server. Also das ist auch nicht die sicherste und beste Lösung.

  • Hatte vergessen die Frage auch noch zu beantworten.

    Was hab ich zu erwarten, wenn ich rpi-update gemacht habe wie im ersten Link empfohlen

    Damit lädst Du Dir ggf. einen experimentellen Kernel auf den RPi, der dann wiederum alle möglichen Probleme verursachen kann.


    Siehe dazu u.a. hier: https://www.elektronik-kompend…/raspberry-pi/2006061.htm

  • Zugegebenermkaßen verstehe ich nicht alle Anregungen von Euch.

    Ich habe jetzt mal mitgenommen, dass meine LED Leiste und meine Steuerungsbibliotheken des WS2812B nicht mit der Idee das Ganze mit pigpio zu machen kompatibel ist. GPIOZero ist doch aber das Gleiche, oder?


    Hier mal die Ausgabe von id und groups für den Benutzer pi:

    Code
    pi@raspberrypi:~/LED Strip Tutorial $ groups
    pi adm kmem dialout cdrom sudo audio video plugdev games users input netdev lpadmin gpio i2c spi
    pi@raspberrypi:~/LED Strip Tutorial $ id
    uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),15(kmem),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),117(lpadmin),997(gpio),998(i2c),999(spi)

    Teil der GPIO Gruppe war ich schon vorher, jetzt auch von kmem nach Tipp von hyle.


    Test mit sudo zeigt, dass es klappt. Danach ohne sudo klappt es immernoch nicht:


    Hättet ihr noch Ideen? Die Änderungen der Zugriffsberechtigung auf den Speicher ist ja ohnehin nicht die Best-Practice.


    Edit:

    Eigentlich wird es sogar offiziell auf deren Website erwähnt:

    https://learn.adafruit.com/neo…ll#python-usage-3005997-2



    For NeoPixels to work on Raspberry Pi, you must run the code as root! Root access is required to access the RPi peripherals.

  • Noch habe ich die Hoffnung nicht verloren.


    Ein anderer Ansatz vor ein paar Monaten war dieser (https://github.com/samayer12/sudome), bei dem Pycharm Projekte mit sh Skripten umgelenkt werden, die dann das sudo enthalten.

    Ehrlich gesagt kann ich mich aber nicht mehr erinnern, warum ich bei diesem Weg auch Probleme hatte. Außerdem war das auch sehr umständlich.



    Habt ihr eventuell noch andere Ideen?

  • Hallo zusammen,


    Ich habe den Weg über ein Shell Skript als Pycharm Interpreter genutzt, wie hier beschrieben:

    Run/Debug as root in PyCharm

    Bekomme aber ähnliche und neue Fehlermeldungen.


    Im Grunde setzt das shell skript ein sudo vor das python, welches in der virtuellen Umgebung des Pycharm Projektes genutzt wird:

    Code
    sudo /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py

    Wenn ich das Projekt nun debugge, oder die Zeile im Terminal von pycharm teste, bekomme ich:

    Code
    No protocol specified
    qt.qpa.screen: QXcbConnection: Could not connect to display :10.0
    Could not connect to any X display.

    In der main.py wird eine qt Fenster geöffnet, was anscheinend schief läuft.

    Vermutlich stimmen die Pfade und Umgebungsvariablen nicht.


    Wenn ich dem "sudo" ein "su pi" anfüge, um nach meiner Interpretation den Benutzer "pi" mit "su" zum Benutzer "root" zu machen,

    Code
    sudo su pi /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py
    oder 
    sudo su - pi /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py

    führt das zu

    Code
    /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7: /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7: Kann die Datei nicht ausführen.


    Die andere Schreibweise mit

    Code
    sudo -su pi /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py

    lässt die GUI starten führt dann aber zum gleichen Problem, als wenn ich ohne sudo arbeite und das pycharm Projekt als pi durchführe:


    Scheinbar bedeutet sudo -su pi, dass ich nicht mit root Rechten als Benutzer pi weiterarbeite, sondern, dass ich mit pi Rechten als pi weiterarbeite. Kann das stimmen?

  • Hallo zusammen,

    ich wollte von dem aktuellen Workaround berichten und hätte ein paar Folgefragen.

    In der aktuellen Umsetzung wird die GUI vom Benutzer pi genutzt, in der die LED Leiste per QProcess (https://www.pythonguis.com/tut…rocess-external-programs/) durch den Nutzer root gestartet wird.

    Code
    self.p=QProcess()
    self.p.start("sudo",["python","LEDStart.py"])
    self.PID=self.p.processId()

    Die Parameter für die LED Leiste (Geschwindigkeit, Farbe etc.) werden dann text-basiert per json zwischengespeichert. Das Schwierige an der Sache ist, dass im Gegensatz zu den meisten Prozessen die LED in einer Endlos While-Schleife läuft und die GUI währenddessen nicht einfrieren darf.

    Außerdem muss dann mit Betätigen des Stop Buttons der root Prozess mit einem weiteren QProzess gekillt werden. Der zweite QProzess ist ja dann schnell beendet und verschwindet wieder.

    Code
    self.p2.start("sudo",["kill",str(self.PID+1)])

    Seltsamerweise muss man hier nicht die PID des ersten Prozesses killen, sondern PID+1. Warum, weiß ich noch nicht....

    Edit: Inzwischen über

    Code
    sudo pkill -f LEDStart.py


    Die GUI läuft an sich gut und ist auch performant genug. Ich suche noch nach Möglichkeiten, die im QCreator vorgegebenen Slider zu vergrößern, weil ich diese auf meinem 7" Touchscreen kaum erwische. Die sind eindeutig für den Betrieb mit der Maus gedacht.

    Habt ihr eine Idee, wie man die vorgegebenen widgets in ihren Eigenschaften
    verändern kann?

    Edit: Entsprechend Die Frage nach der Vergrößerung der Sliders habe ich selber herausfinden können. Das geht über style sheets entsprechend: https://stackoverflow.com/ques…hange-background/43283147


    Abgesehen davon sieht meine Hardware immer noch so ähnlich aus wie auf dem Bild im ersten Beitrag. Die Kabel sind nur im Entwicklerboard gesteckt, auf dem bei mir eine GPIO Verlängerungskabel angebracht ist um nicht jeden Pin am Raspberry PI direkt anzusteuern. Zurzeit ist der PI am Rücken des Displays in einem Gehäuse eingeschraubt. Am besten würde ich gerne komplett ohne das GPIO Interface auskommen damit das Gehäuse komplett geschlossen sein kann. Gibt es eine kompakte Möglichkeit die ganze Verkabelung per USB an den PI anzubinden? Sind dafür die Picos da?

    Kann man dann die gleichen rpi_ws281x Bibliotheken und den gleichen Pythoncode verwenden, weil man die gleichen PINs ansteuert, nur halt über USB?



    Hat schon jemand genauere Erfahrung mit den Neopixel LED-Strips? Ich kann immer nur die LEDs 1-x (wenn 1<x<100) richtig adressieren. Allerdings funktioniert ein Zugriff auf beliebige LEDs x-y nicht, wie z.B. bei 100 LEDs die mittleren 50 LEDs von 25 bis 75. Da hört der LED-Lauf bei LED No 50 einfach auf. Ich habe die Frage auch mal hier adressiert, wo die Bibliothek offiziell geteilt wird: https://github.com/rpi-ws281x/rpi-ws281x-python/issues/75


    Vielen Dank für jegliche Ideen!!