Contrôleur de servocommutateur sans fil DIY avec Raspberry Pi Pico W

Pico W Servo Switch Controller Image de titre

L'un de mes plus gros problèmes est de me lever du lit pour éteindre la lumière de la chambre. Il est très difficile de le faire lorsqu'on est confortablement installé dans son lit. Je vais donc vous expliquer comment résoudre ce problème à l'aide d'un contrôleur d'interrupteur Pico W Servo.

Il y a quelques années, j'ai construit une solution sans fil avec un Arduino et une télécommande IR. Cela a plutôt bien fonctionné, car c'était fiable et cela a résolu mon problème. Mais cela n'a pas été sans inconvénients.

Tout d'abord, l'Arduino Uno était massif par rapport au Raspberry Pi Pico W.

Deuxièmement, elle dépendait d'un signal IR, ce qui signifiait que je devais savoir où se trouvait ma télécommande IR lorsque je voulais éteindre la lumière.

Et c'est là que le Raspberry Pi Pico W a son avantage. Vous pouvez contrôler le servo directement depuis votre téléphone.

Contrôleur de servocommutateur Pico W
Aperçu du projet de commande d'interrupteur sans fil DIY

Pourquoi s'embêter avec ce projet de bricolage ?

C'est moche. C'est ennuyeux.

Mais cela implique également la joie et le plaisir de créer votre propre solution à vos problèmes.

Les problèmes modernes exigent des solutions modernes, et vous pouvez voir comment les gens résolvent leurs problèmes avec le Raspberry Pi ici.

En outre, il se peut que vous deviez le faire parce que vous n'êtes pas autorisé à modifier l'installation électrique de votre maison.

Ou bien vous ne voulez pas faire appel à un professionnel pour le faire.

Une autre raison est que ce projet est tellement extensible et portable. Vous n'êtes pas obligé de l'utiliser sur un interrupteur, vous pouvez l'utiliser sur un clavier, pour arrêter les écrans de veille, par exemple.

Vidéo

Il est possible de commander un interrupteur à deux voies, mais le plus simple est de le faire à une seule voie.

Contrôleur de servocommutateur Pico W
Servo amorcé pour éteindre l'interrupteur
Contrôleur de servocommutateur Pico W
Servo à pleine rotation, arrêt de l'interrupteur

S'il y a une chose que vous pouvez définitivement faire avec tous les interrupteurs du monde, qu'ils soient européens ou nord-américains, c'est d'utiliser un servo pour les mettre en marche ou les arrêter.

Mais si vous voulez contrôler l'interrupteur dans les deux sens, cela devient un plus grand défi d'ingénierie car le servo pourrait se mettre en travers du chemin.

Par exemple, si vous devez être en mesure d'activer ou de désactiver manuellement l'interrupteur, les bras du servomoteur peuvent vous gêner. Vous ne pouvez pas le forcer à s'écarter sans détruire le moteur, car le servo est programmé pour se maintenir en place de toutes ses forces.

Diffuser le réseau ou se connecter à un réseau ?

Le Raspberry Pi Pico W peut se connecter à votre réseau domestique ou diffuser son propre réseau.

J'ai essayé les deux et j'ai trouvé des avantages et des inconvénients aux deux méthodes.

En tant que station (c'est-à-dire qu'elle se connecte à un réseau)

Dans la conception initiale, j'ai fait en sorte que mon Pico W se connecte à mon réseau domestique et qu'il serve un fichier HTML avec un bouton sur son adresse IP 192.168.0.70.

L'avantage est que j'ai pu facilement démarrer mon navigateur et appuyer sur le bouton qui éteint la lumière.

Cependant, l'inconvénient est que n'importe qui sur le réseau pouvait également le faire, à moins que vous ne mettiez en place une forme d'authentification.

Un autre inconvénient est que, si votre réseau domestique perd de l'énergie, le Raspberry Pi Pico W ne se reconnectera pas au réseau, à moins que vous n'ayez implémenté un code qui redémarre votre Pico W ou le reconnecte au réseau.

En tant que point d'accès

En se connectant à cela, le servo tournera, éteignant l'interrupteur.

Actuellement, j'utilise mon Pico W comme point d'accès, mais je ne dis pas que c'est la meilleure solution.

Il diffuse un réseau auquel je dois me connecter séparément pour pouvoir contrôler le servo. C'est un inconvénient gênant.

L'avantage de cette méthode est que, contrairement à la méthode de la station, vous avez un mot de passe sur le réseau, de sorte que vous êtes le seul à pouvoir vous y connecter.

Au départ, j'avais un point d'accès qui servait une page web avec un bouton pour déclencher le servo. J'ai trouvé que c'était trop lourd car il faut 1) se connecter au réseau, 2) aller à l'adresse IP du Pico W et 3) appuyer sur le bouton.

J'ai trouvé que la meilleure solution est de déclencher le servo dès que le Pico W détecte un client se connectant au point d'accès. De cette façon, il vous suffit de connecter n'importe quel appareil au Pico W pour que vos lumières (ou votre interrupteur) soient éteintes.

Connecter le Pico W à un servo

Il s'agit d'un projet simple et vous devriez pouvoir trouver des pièces dans un kit pour débutants. Sinon, voici une liste de pièces.

J'ai également utilisé un breadboard optionnel pour connecter le servo au Pico W avec des fils de liaison mâle-mâle, mais vous pouvez connecter le servo directement aux connecteurs du Pico W avec des fils de liaison mâle-femelle.

Vous aurez également besoin de ruban adhésif double face pour coller votre servo sur le boîtier de l'interrupteur de lumière.

Le câblage

Contrôleur de servocommutateur Pico W
Connexion d'un Pico W à un servo. (schéma réalisé avec Wokwi)

En général, tous les servos ont un fil rouge, noir/marron et un troisième fil.

Connectez un fil de liaison rouge au fil rouge provenant du servo. C'est ici que vous enverrez le 5V, via VBUS.

Connectez un fil noir au fil noir/marron. Vous le connecterez à GND sur le Pico W.

Connectez un autre fil au troisième fil. Le mien est de couleur orange, j'ai donc utilisé un fil de liaison orange. C'est le fil de signal que j'ai connecté à GPIO16.

Le code

Ce code vous permettra de déclencher le servo lorsqu'un client se connectera au point d'accès SoftAP du Pico W.

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')

Certaines lignes de code importantes à expliquer :

Le code suppose que vous avez connecté le fil du signal à GPIO16. Si ce n'est pas le cas, remplacez l'entier "16" de cette ligne par la broche GPIO à laquelle vous êtes connecté.

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

Ceci configure le SoftAP, déclare le nom SSID et le mot de passe,

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

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

Servocommande sur le Pico W

Ceci contrôle le servo. Vous devrez probablement le modifier.

Pour mon servo, je pourrais utiliser une valeur de 500000 (500K) à 2000000 (2 mil). Cela donnerait la gamme complète du servo.

Cependant, je n'avais besoin que d'une petite rotation. Donc, j'ai mis le servo à sa pleine rotation avec pwm.duty_ns(2000000) et ensuite le laisser revenir à pwm.duty_ns(1500000).

Il est probablement préférable de tester ceci pendant que votre servo est en flottaison libre afin de voir s'il tourne dans la bonne direction et ensuite vous pouvez affiner les degrés de rotation.

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

Diffusion d'un AP, déclenchement de rotateServo à la connexion

Cette ligne de code s'exécute de manière répétée.

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

Si ap.status('stations') détecte une connexion au réseau sans fil, il renvoie un tableau contenant un élément.

ap.status('stations') renvoie un tableau vide si personne n'est connecté à l'AP

Par conséquent, si le code n'est pas un tableau vide, il lancera rotateServo et éteindre le PA avant de le rallumer.

L'idée d'allumer et d'éteindre le PA est de faire sortir le client connecté du réseau. Cela lui permet de se connecter à son réseau habituel avec une connexion Internet.

reconnexion automatique android désactivée
La reconnexion automatique est désactivée dans Android

Veillez simplement à désactiver la reconnexion automatique dans votre téléphone ou votre ordinateur.

Pourquoi avons-nous besoin du sleep(x) entre les appels ap.active() ? C'est parce que j'ai appris que si j'éteins et rallume le PA trop rapidement, mon téléphone ne coupera pas la connexion.

En savoir plus sur le Raspberry Pi Pico W

Nous avons rédigé un article spécifique sur le Raspberry Pi Pico W qui vous aidera à tirer le meilleur parti de votre Pico W. Cliquez ici pour apprendre des choses que vous ne saviez pas.

2 commentaires

  1. Udo sur février 24, 2023 à 3:47 pm

    Très intéressant,
    ich betreibe gerade viel Recherche zum pico w.
    L'idée que j'en ai est peut-être un peu trop simple, mais je n'ai pour l'instant qu'un projet identique avec le Pi Zero.
    C'est ainsi que le Pico ne m'a pas du tout convaincu.
    Mein Ziel : Den Pico W als Keyboard Remote eingabe zu nutzen.
    Ce qui veut dire.. : Je cherche dans ma maison intelligente un Handy ou un Script Tastaturbefehle, que le Pico remplit et que le PC remplit presque de gaz.
    Avec la bibliothèque HID, il est tout à fait possible d'émuler un clavier.
    C'est ainsi que je peux, par exemple, à un moment donné, éteindre automatiquement mon PC en raison d'une panne de courant.
    L'avantage de l'émulation HID : Elle fonctionne pratiquement sans aucun outil ni logiciel sur le PC. Quel que soit le système. Il est donc possible de régler soi-même le Bios.
    Vous avez peut-être déjà une idée de ce que vous pouvez faire avec le Pico W.
    Ohne Wlan geht das wohl : https://www.heise.de/tests/Ausprobiert-Raspberry-Pico-mit-USB-HID-als-Tastatur-oder-Maus-benutzen-6011697.html
    Est-ce que cela fonctionne aussi avec le pico w par wlan ?

    • raspi berry sur mars 11, 2023 à 7:02 am

      Bonjour Udo, je ne vois pas pourquoi on ne peut pas réaliser cela avec la Pico W. La version par USB HID fonctionne de la même manière, il ne peut s'agir en principe que d'une interface Web.
      J'ai choisi cette application comme Anregung pour PiCockpit, comme une nouvelle application pour le Pico W. (PiCockpit supporte aussi le Pico W !)
      Nous travaillons déjà sur le fait que la Pico W ainsi que PiControl sont compatibles - ainsi, il est possible d'utiliser un script Python sur la Pico W et d'obtenir des séquences mieux définies à l'avance.
      (Si c'est le cas avec Python - je n'ai pas encore réussi à trouver l'article en question).

      Merci en tout cas pour la question et la réponse !
      Max

Laissez un commentaire