はじめに
タイトルの通りです。(大阪の方の)日本橋でパトランプキットを買ったのでこれをLINE Thingsを使ってハックしてみました。
使用部品と回転動画
今回使ったメインの部品は以下になります。
部品名 | 製品名 |
---|---|
マイコン | ESP32 |
パトランプ | 赤色回転灯 |
電源 | ACアダプタ DC12V 1A |
マイコン用電圧変換IC | 三端子レギュレーター 5V |
リレーモジュール | 大電流大型リレーモジュールキット12V |
後はコネクタやらコンデンサ(レギュレーター用の)を使いましたが面倒くさいので省略します。動作はこんな感じになります。
このパトランプはPWMを使って回転を制御するわけですが、あるデューティ比以下になると回転を停止します。こうなるともう一度回転させるために電源を入れなおす必要があります。そのため、「回転 -> 無回転」みたいな制御をするにはパトランプ電源のON・OFFそのものを制御する必要があります。
しかしパトランプは12Vの電源で駆動しているので直接マイコンで制御はできません。そこでリレーモジュールを使って制御を行います。もしかしたら動画の中で「カチッ、カチッ」という音が聞こえた人がいるかもしれませんがこれはリレーの中の接点が切り替わる音です。
ちなみにこれは私のアホな体験談ですが、当初はリレーモジュール(要はドライバ回路ありのもの)を使わずにリレー単体を使って直接パトランプをスイッチ駆動させてました。実は最初はこれでも動くのですが、一ヶ月後、GPIOが壊れてしまったのか全く動かなくなりました。やっぱりリレーは結構電流を食う素子なので、ちゃんとコイル電源にはトランジスタを使うとか、逆起電力防止のためにダイオード使うことが大事だと学びました。まあ、こんな失敗するの私だけかもしれませんがw
LINE Thingsにつなげてみる
LINE Thingsを知ったのは1ヵ月以上前の話だったのですが、やってみたいなーと思いながらも実際にはなかなか手を動かす気力がなくこんな時期に記事を書くことになりましたw
でもこの項目についてはあまり書くことが無いなーというのが本音です。LINE ThingsについてはこのLINEさんのハンズオンの記事に詳しく書かれています。ここでは公式のサンプルコードからいじった箇所(UUIDとかは除いて)について触れます。
ESP32の方のコード(Arduinoなのでスケッチと言うべきか)はsetup()
関数にPWMピンの設定を加えます。
void setup() {
Serial.begin(115200);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
pinMode(PATLAMP, OUTPUT);
ledcSetup(CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_BIT);
ledcAttachPin(PATLAMP, CHANNEL_0);
ledcAttachPin(PATLAMP, CHANNEL_0);
ledcWrite(CHANNEL_0, 512);
BLEDevice::init("");
BLEDevice::setEncryptionLevel(ESP_BLE_SEC_ENCRYPT_NO_MITM);
// Security Settings
BLESecurity *thingsSecurity = new BLESecurity();
thingsSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND);
thingsSecurity->setCapability(ESP_IO_CAP_NONE);
thingsSecurity->setInitEncryptionKey(ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK);
setupServices();
startAdvertising();
Serial.println("Ready to Connect");
}
加えたのは以下のリレーと回転灯へのPWM信号に関するGPIOの設定です。ESP32の場合はledWrite()
関数を使ってPWMを設定します。
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
pinMode(PATLAMP, OUTPUT);
ledcSetup(CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_BIT);
ledcAttachPin(PATLAMP, CHANNEL_0);
ledcWrite(CHANNEL_0, 512);
ちなみにCHANNEL_0
はチャンネル番号で0
に、LEDC_BASE_FREQ
はPWMの周波数で20000
に(あまり低い数値だとパトランプのモーターが脱調する)、LEDC_TIMER_BIT
はPWMのデューティ比に関するビットサイズで10
(0で0%、1023で100%)に設定しました。今回はデフォルトでledWrite()
で512(デューティ比50%)の設定でPWMを永続的に発生させています。
また、RELAY
はGPIOが設定できるピン番号を、PATLAMP
はPWMに対応している適当なピンを指定しました。ピンアサインは適当なサイトで参照してください。
今回はリレーのON・OFFのみ制御してパトランプを「回転 -> 無回転 -> 回転」とLINE Thingsで操作します。つまりのところ、LINE Thingsハンズオンのページを見てくれた人は分かったかと思いますが、他のコード(特にliffのところ)は全くいじってません。
なので以後のliffとの連携はハンズオンの記事と全く同じなので面倒くさいので省略します。
#さいごに
LINE Thingsは結構簡単に始められます。実際こんな手抜き記事みてないでハンズオンの記事を見て初めて見るといいと思います。とりあえず今後の目標としてパトランプの回転速度をliff側でコントロールしたいなと思ってます。
そのためにはhtml/css/JavaScriptにも着手する必要があるのですが、そこらへんは苦手領域なのでその部分を重点的に勉強していきたいです。何かオススメの勉強法あれば教えてください、何でもしますから!