LoginSignup
11
5

More than 3 years have passed since last update.

LINE Thingsでパトランプを回してみた

Last updated at Posted at 2019-04-29

はじめに

タイトルの通りです。(大阪の方の)日本橋でパトランプキットを買ったのでこれを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ピンの設定を加えます。

Arduino.ino
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にも着手する必要があるのですが、そこらへんは苦手領域なのでその部分を重点的に勉強していきたいです。何かオススメの勉強法あれば教えてください、何でもしますから!

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5