DIY drahtlose Servoschaltersteuerung mit Raspberry Pi Pico W

Pico W Servo Switch Controller Titelbild

Eines meiner größten Probleme ist es, aus dem Bett aufzustehen und das Licht im Schlafzimmer zu löschen. Es ist sehr schwierig, das zu tun, wenn man gemütlich im Bett liegt. Deshalb möchte ich Ihnen hier zeigen, wie Sie dieses Problem mit einem Pico W Servo-Schaltregler lösen können.

Vor ein paar Jahren habe ich eine drahtlose Lösung mit einem Arduino und einer IR-Fernbedienung gebaut. Das hat ziemlich gut funktioniert, weil es zuverlässig war und mein Problem gelöst hat. Es war allerdings nicht ohne Nachteile.

Zum einen war der Arduino Uno im Vergleich zum Raspberry Pi Pico W sehr groß.

Zweitens war sie auf ein IR-Signal angewiesen, was bedeutete, dass ich wissen musste, wo sich meine IR-Fernbedienung befand, wenn ich das Licht ausschalten wollte.

Und genau hier hat der Raspberry Pi Pico W einen Vorteil. Sie können den Servo direkt von Ihrem Telefon aus steuern.

Pico W Servo Switch Controller
Übersicht über das DIY-Projekt zur drahtlosen Schaltersteuerung

Warum sollte man sich mit diesem Heimwerkerprojekt beschäftigen?

Es ist hässlich. Es ist ermüdend.

Aber es gehört auch die Freude und der Spaß dazu, seine eigenen Lösungen für seine Probleme zu finden.

Moderne Probleme erfordern moderne Lösungen, und Hier können Sie sehen, wie Menschen ihre Probleme mit dem Raspberry Pi lösen.

Außerdem kann es sein, dass Sie dies tun müssen, weil Sie die Elektroinstallation in Ihrer Wohnung nicht ändern dürfen.

Oder Sie möchten nicht die Kosten für die Beauftragung eines Fachmanns auf sich nehmen.

Ein weiterer Grund ist, dass dieses Projekt so erweiterbar und portabel ist. Man muss es nicht auf einem Lichtschalter verwenden, man kann es auch auf einer Tastatur verwenden, um z.B. Bildschirmschoner zu stoppen.

Video

Zwei-Wege-Schalter-Steuerung möglich, aber ein Weg am einfachsten

Pico W Servo Switch Controller
Servo zum Ausschalten des Lichtschalters vorbereitet
Pico W Servo Switch Controller
Servo bei voller Umdrehung, Ausschalten des Schalters

Wenn es eine Sache gibt, die man definitiv mit allen Schaltern der Welt machen kann, egal ob europäisch oder nordamerikanisch, dann ist es immer die Verwendung eines Servos, um ihn aus- oder einzuschalten.

Wenn man aber den Schalter in beide Richtungen steuern will, wird es eine größere technische Herausforderung, weil das Servo im Weg sein könnte.

Wenn Sie zum Beispiel den Schalter manuell ein- oder ausschalten wollen, sind die Servoarme möglicherweise im Weg. Sie können sie nicht mit Gewalt aus dem Weg räumen, ohne den Motor zu zerstören, da das Servo so programmiert ist, dass es sich selbst mit aller Kraft in Position hält.

Netzwerk übertragen oder mit einem Netzwerk verbinden?

Der Raspberry Pi Pico W kann sich mit Ihrem Heimnetzwerk verbinden oder ein eigenes Netzwerk aufbauen.

Ich habe beides ausprobiert und einige Vor- und Nachteile beider Methoden gefunden.

Als Station (d. h. mit einem Netzwerk verbunden)

Im ursprünglichen Entwurf habe ich meinen Pico W mit meinem Heimnetzwerk verbunden und eine HTML-Datei mit einer Schaltfläche auf seiner IP-Adresse 192.168.0.70 angezeigt.

Das hatte den Vorteil, dass ich einfach meinen Browser hochfahren und den Knopf drücken konnte, der das Licht ausschaltete.

Der Nachteil ist jedoch, dass jeder im Netzwerk dies ebenfalls tun konnte, es sei denn, Sie haben eine Form der Authentifizierung implementiert.

Ein weiterer Nachteil ist, dass sich der Raspberry Pi Pico W nicht wieder mit dem Netzwerk verbinden kann, wenn die Stromversorgung des Heimnetzwerks unterbrochen wird, es sei denn, Sie haben einen Code implementiert, der den Pico W neu startet oder ihn wieder mit dem Netzwerk verbindet.

Als Zugangspunkt

Beim Anschließen dreht sich das Servo und schaltet den Schalter aus.

Derzeit verwende ich meinen Pico W als Zugangspunkt, obwohl ich nicht behaupte, dass dies die beste Lösung ist.

Es sendet ein Netzwerk, an das ich mich separat anschließen muss, um das Servo zu steuern. Das ist ein unangenehmer Nachteil.

Der Vorteil ist, dass Sie im Gegensatz zur Stationsmethode ein Passwort für das Netzwerk haben, so dass nur Sie eine Verbindung herstellen können.

Ursprünglich hatte ich einen Zugangspunkt, der eine Webseite mit einer Schaltfläche zum Auslösen des Servos anbot. Ich fand das zu umständlich, denn man muss 1) eine Verbindung zum Netzwerk herstellen, 2) die IP-Adresse des Pico W aufrufen und 3) den Knopf drücken

Ich habe herausgefunden, dass die beste Lösung darin besteht, den Servo auszulösen, sobald der Pico W einen Client erkennt, der sich mit dem Zugangspunkt verbindet. Auf diese Weise brauchen Sie nur ein beliebiges Gerät an den Pico W anzuschließen, und das Licht (oder der Schalter) ist aus.

Anschluss des Pico W an einen Servo

Dies ist ein einfaches Projekt, und Sie sollten in der Lage sein, Teile in einem Anfängerset zu finden. Falls nicht, hier ist eine Teileliste.

Ich habe auch ein optionales Breadboard verwendet, um das Servo mit dem Pico W mit Stecker-zu-Stecker-Jumper-Drähten zu verbinden, aber man kann das Servo auch direkt mit Stecker-zu-Buchse-Jumper-Drähten an die Header des Pico W anschließen.

Sie benötigen außerdem doppelseitiges Klebeband, um das Servo auf das Lichtschaltergehäuse zu kleben.

Verkabelung

Pico W Servo Switch Controller
Anschluss eines Pico W an ein Servo. (Diagramm erstellt mit Wokwi)

Im Allgemeinen haben alle Servos ein rotes, ein schwarzes/braunes und ein drittes Kabel.

Verbinden Sie ein rotes Überbrückungskabel mit dem roten Kabel, das vom Servo kommt. Hierher werden Sie 5 V über VBUS senden.

Verbinden Sie ein schwarzes Kabel mit dem schwarz/braunen Kabel. Verbinden Sie dieses Kabel mit GND auf dem Pico W.

Verbinden Sie ein weiteres Kabel mit dem dritten Kabel. Meiner ist orangefarben, also habe ich einen orangenen Überbrückungsdraht verwendet. Dies ist der Signaldraht, den ich an GPIO16 angeschlossen habe.

Der Code

Mit diesem Code können Sie den Servo auslösen, wenn sich ein Client mit dem SoftAP-Zugangspunkt des Pico W verbindet.

import network
import machine
from machine import PWM
from time import sleep

#Pin param = servo GPIO pin number
pwm = PWM(machine.Pin(16))

ssid = 'Lights-Out'
password = 'sleeptime'

ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)

while ap.active() == False:
  pass

print('Connection successful')
print(ap.ifconfig())

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

#ap.status is a blank array until someone connects, then it will have one entry
#when ap.status = true, then it will trigger rotateServo()
# then it will shut itself off to kick the user off the network,
# allowing the device to reconnect to its usual network

while True:
    try:
        if ap.status('stations'):
            print('client connected')
            rotateServo()
            sleep(5)
            ap.active(False)
            sleep(2)
            ap.active(True)
        
    except OSError as e:
        print('Connection closed')

Einige wichtige Codezeilen sind zu erklären:

Der Code geht davon aus, dass Sie das Signalkabel an GPIO16 angeschlossen haben. Wenn nicht, ändern Sie die ganze Zahl "16" in dieser Zeile in den GPIO-Pin, an den Sie angeschlossen sind.

#Pin param = servo GPIO pin number
pwm = PWM(machine.Pin(<strong>16</strong>))

Damit wird der SoftAP eingerichtet, der SSID-Name und das Kennwort werden festgelegt,

import network
...
ssid = 'Lights-Out'
password = 'sleeptime'

ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)

Servosteuerung auf dem Pico W

Damit wird das Servo gesteuert. Wahrscheinlich müssen Sie dies ändern.

Für mein Servo könnte ich einen Wert von 500000 (500K) bis 2000000 (2 mil) verwenden. Dies würde den gesamten Bereich des Servos abdecken.

Ich brauchte aber nur eine kleine Drehung. Daher habe ich das Servo auf seine volle Drehung mit pwm.duty_ns(2000000) und lassen Sie ihn dann zurückkehren zu pwm.duty_ns(1500000).

Es ist wahrscheinlich am besten, dies zu testen, während Ihr Servo frei schwebt, damit Sie sehen können, ob es sich in die richtige Richtung dreht, und dann können Sie eine Feinabstimmung der Drehgrade vornehmen.

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

Broadcasting eines AP, Auslösen von rotateServo bei Verbindung

Diese Codezeile wird wiederholt ausgeführt.

while True:
    try:
        if ap.status('stations'):
            print('client connected')
            rotateServo()
            sleep(10)
            ap.active(False)
            sleep(2)
            ap.active(True)

Wenn ap.status('Stationen') eine Verbindung zum drahtlosen Netzwerk feststellt, wird ein Array mit einem Element zurückgegeben.

ap.status('Stationen') gibt ein leeres Array zurück, wenn niemand mit dem AP verbunden ist

Wenn der Code also kein leeres Array ist, wird er die rotateServo und schalten Sie den AP aus, bevor Sie ihn wieder einschalten.

Die Idee des Ein- und Ausschaltens des AP besteht darin, den angeschlossenen Client aus dem Netz zu werfen. Dadurch kann er eine Verbindung zu seinem gewohnten Netzwerk mit einer Internetverbindung herstellen.

android auto wiederverbinden aus
Automatisches Wiederverbinden in Android ausgeschaltet

Vergewissern Sie sich nur, dass Sie die automatische Verbindungswiederherstellung in Ihrem Telefon oder Computer deaktiviert haben.

Warum brauchen wir den sleep(x) zwischen den ap.active()-Aufrufen? Das liegt daran, dass ich gelernt habe, dass mein Telefon die Verbindung nicht abbricht, wenn ich den AP zu schnell aus- und wieder einschalte.

Erfahren Sie mehr über den Raspberry Pi Pico W

Wir haben einen Artikel speziell über den Raspberry Pi Pico W geschrieben, der Ihnen helfen wird, das Beste aus Ihrem Pico W herauszuholen. Klicken Sie hier, um Dinge zu erfahren, die Sie noch nicht wussten.

2 Kommentare

  1. Veröffentlich von Udo am Februar 24, 2023 um 3:47 pm

    Sehr interessant,
    Ich betreibe gerade viel Recherche zum pico w.
    Vielleicht ist meine Idee auch zu selten, deshalb bin ich nur auf ein ähnliches Projekt mit dem Pi Zero gestossen.
    So ganz blicke ich bei dem Pico noch nicht durch.
    Mein Ziel: Den Pico W als Tastaturfernbedienung zu nutzen.
    Bedeutet: Ich schicke von meinem Smarthome per Handy oder Script Tastaturbefehle, die der Pico empfängt und quasi die Tasten am PC drückt.
    Mit der hid library ist es wohl möglich eine Tastatur zu emulieren.
    So könnte ich z.B. zu einer gewissen Zeit den PC automatisch per Tasturbefehl fernsteuern.
    Der Vorteil an der versteckten Emulation: Es läuft quasi überall ohne Treiber und Software auf dem PC. Egal welches System. So könnte man selbst das Bios steuern.
    Vielleicht hast du ja eine Idee, ob sich das mit dem Pico W realisieren lässt.
    Ohne Wlan geht das wohl: https://www.heise.de/tests/Ausprobiert-Raspberry-Pico-mit-USB-HID-als-Tastatur-oder-Maus-benutzen-6011697.html
    Ob das auch mit dem pico w per wlan geht?

    • Veröffentlich von raspi berry am März 11, 2023 um 7:02 am

      Hallo Udo, ich sehe nicht warum man das nicht mit dem Pico W realisieren könnte. die Ausgabe per USB HID funktioniert genauso, es müsste im Prinzip nur ein Webinterface geschrieben werden.
      Ich habe das als Anregung für PiCockpit aufgenommen, als eine neue App für den Pico W. (PiCockpit unterstützt ja auch den Pico W!)
      Wir arbeiten gerade daran, dass der Pico W auch PiControl unterstützt - damit könnte man bspw. auf dem Pico W ein Python Skript hinterlegen und bestimmte fest definierte Sequenzen bereits ausgeben.
      (Falls es auch per Python geht - ich habe den Heise Artikel gerade nicht angeschaut).

      Danke jedenfalls für die Frage und die Anregung!
      Max

Hinterlassen Sie einen Kommentar