DIY drahtlose Servoschaltersteuerung mit Raspberry Pi Pico W

diy drahtlose schaltersteuerung projekt
Übersicht über das DIY-Projekt zur drahtlosen Schaltersteuerung

Eines meiner größten Probleme ist es, aus dem Bett aufzustehen, um das Licht im Schlafzimmer zu löschen.

Es ist sehr schwierig, das zu tun, wenn man gemütlich im Bett liegt.

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 hatte aber auch seine Schattenseiten.

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.

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 das tun müssen, weil Sie die elektrischen Geräte in Ihrer Wohnung nicht verä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

diy drahtlose Servoschaltersteuerung
Servo zum Ausschalten des Lichtschalters vorbereitet
diy drahtlose Servoschaltersteuerung
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

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.

Netzwerk importieren
Maschine importieren
von Maschine importieren PWM
from time import schlafen

#Pin param = Servo-GPIO-Pin-Nummer
pwm = PWM(maschine.Pin(16))

ssid = 'Licht-aus'
passwort = 'schlafenszeit'

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

while ap.active() == False:
  pass

print('Verbindung erfolgreich')
print(ap.ifconfig())

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

#ap.status ist ein leeres Array, bis jemand eine Verbindung herstellt, dann wird es einen Eintrag haben
#wenn ap.status = true, dann löst es rotateServo() aus
# dann schaltet es sich selbst ab, um den Benutzer aus dem Netz zu werfen,
# ermöglicht es dem Gerät, sich wieder mit dem üblichen Netz zu verbinden

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('Verbindung geschlossen')

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-Nummer
pwm = PWM(Maschine.Pin(16))

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

Import-Netzwerk
...
ssid = 'Licht aus'
passwort = 'schlafenszeit'

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.

Hinterlassen Sie einen Kommentar