Raspberry Pi Pico WでワイヤレスサーボスイッチコントローラをDIY。

ピコWサーボスイッチコントローラ タイトル画像

私が一番困っていることのひとつは、ベッドルームの電気を消すためにベッドから立ち上がることだ。ベッドでくつろいでいるときにそれをするのはとても難しい。そこで、ピコWサーボスイッチコントローラーでその問題を解決する方法をお伝えしたい。

数年前、私はArduinoとIRリモコンを使ってワイヤレス・ソリューションを作った。信頼性が高く、私の問題を解決してくれたので、かなりうまくいった。しかし、デメリットがないわけではなかった。

ひとつは、Arduino UnoがRaspberry Pi Pico Wと比較して巨大だったことです。

2つ目は、IR信号に依存しているため、電気を消したいときにIRリモコンがどこにあるか知っておく必要があったことです。

そして、ここがRaspberry Pi Pico Wのアドバンテージです。スマホから直接サーボを制御できるのです。

ピコWサーボスイッチコントローラ
無線スイッチ制御DIYプロジェクトの概要

なぜわざわざDIYをするのか?

醜い。退屈だ。

しかし、それは、自分の問題を解決するために自分で工作する喜びや楽しみを伴うものでもあるのです。

現代の問題には現代の解決策が必要であり Raspberry Piでどのように問題を解決しているかは、こちらでご覧いただけます。.

さらに、自宅の電気設定を変更することは許可されていないため、これを行う必要があるかもしれない。

あるいは、プロに依頼するほどの費用はかけたくない。

もうひとつの理由は、このプロジェクトが非常に拡張性が高く、ポータブルだからです。照明のスイッチに使う必要はなく、キーボードに使ったり、スクリーンセーバーを停止させたりすることもできます。

ビデオ

2方向からのスイッチ制御が可能だが、1方向が最も簡単

ピコWサーボスイッチコントローラ
サーボは照明のスイッチを切るために呼び出される
ピコWサーボスイッチコントローラ
サーボ全回転時、スイッチOFF時

ヨーロッパでも北米でも、世界中のスイッチで絶対にできることといえば、サーボを使ってOFF/ONを切り替えることです。

しかし、スイッチを双方向に制御しようとすると、サーボが邪魔になる可能性があり、技術的な課題が大きくなります。

例えば、手動でスイッチをON/OFFできるようにする必要がある場合、サーボアームが邪魔になることがあります。サーボは全力で固定するようにプログラムされているので、モーターを壊さずに無理やり邪魔をすることはできません。

ブロードキャストネットワークかネットワークに接続するか?

Raspberry Pi Pico Wは、自宅のネットワークに接続することも、独自のネットワークをブロードキャストすることも可能です。

両方の方法を試してみて、いくつかの長所と短所があることがわかりました。

ステーションとして(=ネットワークに接続する)

最初の設計では、Pico Wを自宅のネットワークに接続させ、そのIPアドレス192.168.0.70でボタン付きのHTMLファイルを提供しました。

ブラウザを起動して、消灯ボタンを押すだけで、簡単に消灯できるようになったのはメリットでした。

しかし、何らかの認証を導入しない限り、ネットワーク上の誰でもそれができてしまうという欠点がありました。

もう一つの欠点は、ホームネットワークの電源が落ちた場合、Raspberry Pi Pico Wを再起動するか、ネットワークに再接続するコードを実装していない限り、ネットワークに再接続できないことです。

アクセスポイントとして

これを接続すると、サーボが回転し、スイッチがオフになります

現在、私はPico Wをアクセスポイントとして使っていますが、それがベストな方法だとは言いません。

サーボを制御するために、別途接続しなければならないネットワークを放送しているのです。これは不便な点です。

ステーション方式と違って、ネットワークにパスワードがかかっているので、自分しか接続できないのが良いところです。

当初は、サーボを起動するためのボタンが付いたウェブページを提供するアクセスポイントを使っていました。これは、1)ネットワークに接続し、2)Pico WのIPアドレスにアクセスし、3)ボタンを押す必要があるため、あまりに面倒であることがわかりました。

Pico W がアクセスポイントに接続するクライアントを検出した時点でサーボを起動させるのが最適な方法であることがわかりました。この方法では、任意のデバイスを Pico W に接続するだけで、照明(またはスイッチ)が消灯します。

Pico Wとサーボを接続する

これは簡単なプロジェクトで、初心者向けのキットでパーツを見つけることができるはずです。そうでない場合は、ここにパーツリストがあります。

また、別売りのブレッドボードを使って、サーボとPico Wをオス-メスのジャンパー線で接続しましたが、サーボとPico Wのヘッダーをオス-メスのジャンパー線で直接接続することもできます。

また、サーボをライトスイッチのハウジングに貼り付けるための両面テープも必要です。

配線について

ピコWサーボスイッチコントローラ
Pico Wとサーボを接続する。(で作成した図)。 ウォクウィ)

一般的に、すべてのサーボには、赤、黒/茶、3本目の線があります。

サーボからきている赤い線に赤いジャンパー線をつなぎます。ここで、VBUSを介して5Vを送ります。

黒/茶の線に黒の線を接続します。これをPico WのGNDに接続します。

3番目のワイヤーに別のワイヤーを接続します。私のはオレンジ色なので、オレンジ色のジャンパーワイヤーを使いました。これが、GPIO16に接続した信号線です。

コード

このコードにより、Pico W の SoftAP アクセスポイントにクライアントが接続したときに、サーボを起動させることができます。

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

ある重要なコードの行を説明する。

このコードでは、信号線をGPIO16に接続したものと仮定しています。そうでない場合は、この行の「16」の整数を、接続しているGPIOピンに変更します。

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

SoftAPの設定、SSID名、パスワードの宣言を行います。

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

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

ピコWでサーボ制御

これはサーボを制御するものです。おそらくこれを修正する必要があります。

私のサーボでは、500000(500K)~2000000(2mil)の値を使うことができました。これでサーボの全領域をカバーできる。

しかし、私は小回りが利けばいいと思っていた。そこで、サーボをフル回転させるために pwm.duty_ns(2000000) に戻させ、その後 pwm.duty_ns(1500000).

サーボがフリーフローしている状態でテストして、正しい方向に回転しているかどうかを確認し、回転角度を微調整するのがベストでしょう。

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

APをブロードキャストし、接続時にrotateServoをトリガーする。

この行は繰り返し実行されます。

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

もし ap.status('駅') がワイヤレスネットワークへの接続を検出した場合、1つの項目を持つ配列を返します。

ap.status('駅') AP に接続されていない場合は、空の配列を返す。

したがって、コードが空の配列でない場合、起動するのは ローテートサーボ をクリックし、APをシャットダウンしてから再度電源を入れる。

APのオンとオフを切り替えるということは、接続されたクライアントをネットワークから追い出すということです。これにより、インターネットに接続された習慣的なネットワークに接続することができます。

アンドロイドオート再接続オフ
Androidで自動再接続がオフになっている

ただ、携帯電話やパソコンで自動再接続をオフにしておく必要があります。

なぜ ap.active() の呼び出しの間に sleep(x) が必要なのか?それは、あまりに早くAPの電源を切ったり入れたりすると、スマホが接続を切らないことを知ったからです。

Raspberry Pi Pico Wの詳細はこちら

Raspberry Pi Pico Wに特化した記事を書きましたので、Pico Wを最大限に活用するためにお役立てください。 あなたの知らないことを知るために、ここをクリックしてください。

2コメント

  1. Udo on 2月 24, 2023 at 3:47 pm となります。

    とても興味深かったです。
    I betreibe gerade viel Recherche zum pico w.
    しかし、私の考えはあまりに単純で、私はPi Zeroを使った別のプロジェクトに参加しています。
    だから、私はPicoのことをとても気に入っているんだ。
    私の目的:Pico Wをキーボードリモートとして使用する。
    重要なことです。私は、私のスマートホームから、ハンディやスクリプトで、Picoが力を発揮し、PCのテーストに準ずるテーストを打ち消すような、テーストを打ち消すようなことをします。
    hidライブラリは、キーボードのエミュレーションに最適です。
    そのため、例えば、ある時間帯にPCを自動で停止させることができます。
    HIDエミュレーションの醍醐味。PCに接続する機器やソフトウェアがなくても、ほぼすべての動作が可能です。どのようなシステムであってもです。そのため、自分でBiosを設定することができます。
    Pico Wで実現できるかもしれない、そんなアイディアもあります。
    Wlan を使用しない場合は、問題ありません。 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?

    • raspi berry on 3月 11, 2023 at 7:02 am となります。

      こんにちは、Udo, I see noich warum man das nicht dem Pico W realisieren könnte. Die Ausgabe per USB HID funktioniert so, es müsste im Prinzip nur e Webinterface geschrieben werned.
      私は、PiCockpitの登録として、Pico Wのための新しいアプリを作成しました(PiCockpitはPico Wをサポートしています!)。
      PicoWとPiControlを連携させることで、PicoWにPythonスクリプトを組み込んで、最適なシーケンスの定義ができるようになります。
      (Falls es per Python auch geht - I habe den Heise Artikel gerade nicht angeschaut).

      Danke jedenfalls für die Frage and die Anregung!
      マックス

コメントを残す