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

私が一番困っているのは、寝室の電気を消すためにベッドから立ち上がることです。
ベッドでくつろいでいると、なかなかそうもいきません。
数年前、私はArduinoとIRリモコンを使ってワイヤレスソリューションを作りました。
信頼性が高く、私の問題を解決してくれたので、かなりうまくいったと思います。
しかし、デメリットがないわけではありません。
ひとつは、Arduino UnoがRaspberry Pi Pico Wと比較して巨大だったことです。
2つ目は、IR信号に依存しているため、電気を消したいときにIRリモコンがどこにあるか知っておく必要があったことです。
そして、ここがRaspberry Pi Pico Wのアドバンテージです。スマホから直接サーボを制御できるのです。
なぜわざわざDIYをするのか?
醜い。退屈だ。
しかし、それは、自分の問題を解決するために自分で工作する喜びや楽しみを伴うものでもあるのです。
現代の問題には現代の解決策が必要であり Raspberry Piでどのように問題を解決しているかは、こちらでご覧いただけます。.
さらに、アパートの電気設備を改造することが許されていないため、このようなことが必要になるかもしれません。
あるいは、プロに依頼するほどの費用はかけたくない。
もうひとつの理由は、このプロジェクトが非常に拡張性が高く、ポータブルだからです。照明のスイッチに使う必要はなく、キーボードに使ったり、スクリーンセーバーを停止させたりすることもできます。
ビデオ
2方向からのスイッチ制御が可能だが、1方向が最も簡単


ヨーロッパでも北米でも、世界中のスイッチで絶対にできることといえば、サーボを使って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のヘッダーをオス-メスのジャンパー線で直接接続することもできます。
また、サーボをライトスイッチのハウジングに貼り付けるための両面テープも必要です。
配線について

一般的に、すべてのサーボには、赤、黒/茶、3本目の線があります。
サーボからきている赤い線に赤いジャンパー線をつなぎます。ここで、VBUSを介して5Vを送ります。
黒/茶の線に黒の線を接続します。これをPico WのGNDに接続します。
3番目のワイヤーに別のワイヤーを接続します。私のはオレンジ色なので、オレンジ色のジャンパーワイヤーを使いました。これが、GPIO16に接続した信号線です。
コード
このコードにより、Pico W の SoftAP アクセスポイントにクライアントが接続したときに、サーボを起動させることができます。
インポートネットワーク
インポートマシン
from machine import PWM
from time import sleep
#Pin param = サーボGPIOのピン番号
pwm = PWM(machine.Pin(16))です。
ssid = 'ライトアウト' (Lights-Out)
password = 'スリープタイム'
ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid、password=password)
ap.active(True)を実行。
while ap.active() == False:
パス
print('接続成功')
print(ap.ifconfig()の場合)
def rotateServo ():
pwm.freq(50)
pwm.duty_ns(2000000)
sleep(0.5)
pwm.duty_ns(1500000)
#ap.statusは誰かが接続するまで空白の配列で、その後1つのエントリーが追加されます。
#ap.statusがtrueの時、rotateServo()を起動する。
#その後、ユーザーをネットワークから切り離すために、自動的にシャットダウンします。
# デバイスが通常のネットワークに再接続できるようにします。
真の間
を試してみてください。
if ap.status('stations'):
print('クライアントが接続されました')
rotateServo()
sleep(5)
ap.active(False)を実行。
sleep(2)
ap.active(True)。
except OSError as e:
print('接続を閉じました')
ある重要なコードの行を説明する。
このコードでは、信号線をGPIO16に接続したものと仮定しています。そうでない場合は、この行の「16」の整数を、接続しているGPIOピンに変更します。
#Pin param = サーボGPIOのピン番号
pwm = PWM(マシン.ピン(16))
SoftAPの設定、SSID名、パスワードの宣言を行います。
輸入網
...
ssid = 'Lights-Out' (ライトアウト
パスワード = '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:
を試してみてください。
if ap.status('stations'):
print('クライアントが接続されました')
rotateServo()
sleep(10)
ap.active(False)を実行。
sleep(2)
ap.active(True)。
もし ap.status('駅') がワイヤレスネットワークへの接続を検出した場合、1つの項目を持つ配列を返します。

したがって、コードが空の配列でない場合、起動するのは ローテートサーボ をクリックし、APをシャットダウンしてから再度電源を入れる。
APのオンとオフを切り替えるということは、接続されたクライアントをネットワークから追い出すということです。これにより、インターネットに接続された習慣的なネットワークに接続することができます。

ただ、携帯電話やパソコンで自動再接続をオフにしておく必要があります。
なぜ ap.active() の呼び出しの間に sleep(x) が必要なのか?それは、あまりに早くAPの電源を切ったり入れたりすると、スマホが接続を切らないことを知ったからです。
Raspberry Pi Pico Wの詳細はこちら
Raspberry Pi Pico Wに特化した記事を書きましたので、Pico Wを最大限に活用するためにお役立てください。 あなたの知らないことを知るために、ここをクリックしてください。