banner
bladedragon

bladedragon

暗闇での神器を構築する

image

賃貸に住み始めてから、生活環境が大きく変わりました。実際、大部分の変化には満足していますが、夜ベッドに横になってスマホをいじっていると、眠気が襲ってくるときにいつも非常に鬱々とした気持ちになります:私がここにいるのに、ライトのスイッチはベッドの向こう側にあります。仕方がないので、再びベッドから降りてスイッチを切り、暗闇の中でベッドに戻ることになります —— この時点で眠気はすでに消えています(大泣き)

そこで、私は照明を遠隔操作するデバイスを思いつきました —— リモートコントロールスイッチで照明を消すことです。


方案設計#

手を解放する小さなおもちゃを作りたいだけなので、非常に複雑なものを作るつもりはありませんでした。家のスイッチのデザインを考慮すると(下の図参照)、電源を入れて左右に揺れるサーボモーターがあれば十分です。一定の電気信号を与えることで、物理的にスイッチを上下に動かすことができます。

image

方案は非常にシンプルで、マイコンとサーボモーターがあれば大丈夫です。スイッチを動かすために必要な強度を考慮すると、スイッチが硬い場合はサーボモーターの出力を維持するために追加の電源を提供することを検討できます。幸い、家のスイッチはそれなりに従順です(ぎりぎりちょうど良い、何度角度と高さを調整したかは誰にもわかりませんが)、今回は追加の部品を加えませんでした。

Bilibili の多くの「照明制御デバイス」の動画を参考にして、ここではマイコンに esp8266 を選びました。下の図のように。

image

サーボモーターはsg90を使用しました:

image

総コストは 20 元未満です...

(Ps: ネットでタオバオの既製のスイッチデバイスを別の名前で販売し、モジュールを追加すれば 100 元以上で売れることがある... その利益の余地が見えます、理工系の男はこんなことでお金を騙し取られてはいけません〜)

残るのは制御方案です。

一般的にはスマホアプリでの制御が必然ですが、ここでは第三者の提供を借りる必要があります。自分でアプリを書くことも可能ですが、主に学習コストを増やしたくない(要するに怠け者です😂)ので、接続方法は Bluetooth や WiFi があり、開発ボードのニーズに応じて選べます。

具体的な実装#

方案が決まったので、次は実践の段階です!

ハードウェア実装#

ハードウェアの面は非常にシンプルで、売り手から提供されたピン図を見て間違えないようにするだけです。

image

image

注意して観察し、配線の順序が間違っている場合は、サーボモーターの配線固定器を自分で外して順序を変更する必要があるかもしれません。運が良いことに、私が購入したものはその必要がなく、直接 PC に接続するだけで済みました。

ソフトウェア実装#

ここで必要なソフトウェアとインストールパッケージは以下の通りです。

image

  1. 8266 開発ボードの設定パッケージ
  2. 開発ボード開発ソフトウェア
  3. blink 電灯テクノロジーの第三者アプリケーションの適合ライブラリファイル
  4. COM シリアルドライバー

Arduino のインストール#

まず Arduino をインストールします。特に考えずに次へ進むだけで大丈夫です。

インストールが完了したら Arduino を開き、画面は以下のようになります:

image

ESP8266 設定パッケージのインポート#

まず Arduino IDE メニュー > ファイル > 設定を開き、追加のボードマネージャの URLの入力ボックスに以下の URL を入力します:https://www.arduino.cn/package_esp8266com_index.json

image

次に、フォルダ内の設定パッケージをクリックします:

設定をインポートします。

サードパーティライブラリファイルのインストール#

image

ライブラリにblinker-library-0.3.80210803.zipを追加します。

開発ボードの設定#

次に新しいファイルを作成し -> 保存して -> 以下の図のように開発ボード情報を設定します。

image

8266開発オプションがない場合は、以下の図のように8266を検索し、上の図に対応するmoduleをインストールします。

image

次はコードの作成です。こちらにはすでにテンプレートが用意されています。

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT

#include <Blinker.h>
#include <Servo.h>

Servo myservo;//サーボを定義

char auth[] = "xxxxxxxx";  //点灯キー
char ssid[] = "SELF-WIFI";      //WiFi名
char pswd[] = "password";     //WiFiパスワード

// 新しいコンポーネントオブジェクトを作成します。ここでの名前は電灯テクノロジーアプリ内で一致させる必要があります
BlinkerButton Button1("test");


int counter = 0;

//小愛同学を接続する場合、そのリスニングはこの電源イベントです
void miotPowerState(const String & state)//電源クラス操作
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
      
        myservo.write(150);//「on」の指令を受け取った後、サーボが150度回転
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();//状態をフィードバック
        delay(1000);//1秒遅延
        myservo.write(90);//サーボをゼロに戻し、垂直状態に
         
        
    }
    else if (state == BLINKER_CMD_OFF) {
      
         myservo.write(30);            //サーボが30°偏転
         BlinkerMIOT.powerState("off");
         BlinkerMIOT.print();
         delay(1000);
         myservo.write(90);
         
      
    }
}

// ボタンが押されるとこの関数が実行されます
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    if (state=="on") 
    {
        myservo.write(170);//「on」の指令を受け取った後、サーボが150度回転
        delay(1000);//遅延
        myservo.write(90);//サーボをゼロに戻し、垂直に
         
        
    } else if(state=="press"||state=="tap")
    {
       myservo.write(10);//スイッチボタンを長押しした後、サーボが10度回転
       delay(1000);//遅延
       myservo.write(90);//サーボをゼロに戻し、垂直に(90度)
    }
        
}

// 未バインドのコンポーネントがトリガーされると、その内容が実行されます
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
 
}

void setup()
{
    // シリアルポートを初期化
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    // サーボを初期化
    myservo.attach(2);//サーボのIOポート、nodemcuのD4ポート
    myservo.write(90);//電源投入時にサーボをゼロに戻し、垂直に
  BlinkerMIOT.attachPowerState(miotPowerState);
  
    // blinkerを初期化
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);

    Button1.attach(button1_callback);
}

void loop() {
    BLINKER_LOG("Blinked running...");
    Blinker.run();
}

次に、左上のコンパイルボタンをクリックすれば完了です。

コンパイルに問題がなければ、次にプログラムを開発ボードにアップロードする必要があります。まず、下の図のポートに注意してください。以前に COM ポートドライバーをインストールしたので、理論的にはここでポートが正常に表示されるはずです。

image

表示されない場合は、デバイスマネージャーでポートが正常に表示されているか確認してください。

image

アプリのインストール#

コード内のkeyを覚えていますか?次は電灯テクノロジーのアプリをダウンロードし、keyを申請することです。

image

一般的にアプリストアにはありますが、ない場合は公式サイトからダウンロードできます。

デバイスの登録#

電灯テクノロジーのアカウントをダウンロードして登録した後、右上のプラスボタン -> 独立デバイス -> ネットワーク接続を選択します。

image

一般的には阿里云接続を推奨しますが、私の現在のバージョンでは電灯テクノロジーサービスにしか接続できません。実際には、制御や小愛同学の接続に影響はありませんので、皆さんの選択次第です。

image

デバイス登録が完了すると、上の図のように表示されます。この時点でkeyを取得し、コードに入力すれば大丈夫です。

開発インターフェース#

ここでは、皆さんがコード内の指示に従ってスイッチインターフェースを作成できます。私はネットでシンプルなインターフェース設定ファイルを見つけました。

{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fad fa-lightbulb-on¨¨mode¨Ê¨t0¨¨点灯¨¨t1¨¨テキスト2¨¨bg¨Ì¨cols¨Í¨rows¨Í¨key¨¨test¨´x´Ë´y´Ì¨speech¨|÷¨cus¨¨on¨¨lstyle¨Ë¨clr¨¨#076EEF¨}{ßAßBßC¨fad fa-lightbulb¨ßEÉßF¨消灯¨ßHßIßJÌßKÍßLÍßMßN´x´Ë´y´ÑßO|÷ßRËßSßT}{ßA¨deb¨ßEÉßJÉßKÑßLÌßM¨debug¨´x´É´y´¤D}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡ßQ¨開く?name¨¨off¨¨閉じる?name¨—÷¨triggers¨|{¨source¨ßa¨source_zh¨¨スイッチ状態¨¨state¨|ßQßd÷¨state_zh¨|¨開く¨¨閉じる¨÷}÷}

このファイルを設定情報にインポートしてください。(上の文字化けは本当に(汗))

インポート後の設定は以下のようになります:

image

次に、自分で操作して設定状況を確認できます。

小愛同学の接続#

小愛同学の接続は実際には非常に簡単で、第三者サービスがサポートを提供しているかどうかにかかっています。

米家 -> 他のデバイスを接続 -> 電灯テクノロジー -> 設定を同期すれば大丈夫です。

デバイスの取り付け#

このステップは実際の操作の中で最も難しいことが多いです。なぜなら、各人の状況が異なり、ボタンの強度も異なるからです。最初はサーボモーターの出力がスイッチを動かすのに十分でないのではないかと非常に心配していました。実際、いくつかの角度を試した後、成功することができませんでした。

サーボモーターの羽根を延長して接触面積を増やすことを試みたこともありましたが、これらの方案は最終的にはうまくいきませんでした。最後に、サーボモーターを高くして、羽根とスイッチの間に一定の間隔を作ることで、羽根が回転するときに慣性で力を補助することを試みました。次に、段ボールと 502 を使ってサーボモーターを固定し、外側に透明テープで二次的に固定して、最終的にスイッチの正常な動作を実現しました(時々はまだあまり敏感ではありませんが)。

最終的な実現図は以下の通りです:

効果#

ここにリンクを示します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。