16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Wio LTE君とSORACOM Beamで「だっしゅぼたん」を作る

Last updated at Posted at 2018-02-12

作ったもの

これだよ

IMG_0181.JPG

このエントリーでは、このボタンを作るにあたって解説します。SORACOM Beam とか ifttt については解説しません(!?)

構成図

SORACOM Beam と ifttt と MicroBot Push を組み合わせて、ガレージの「開」ボタンを押す、壮大な仕組みを実現しています

Handmade Dash Button

興味のある方はコメントください。

ハードウェア編

プラボックスの中身はこんな感じです。

IMG_0183.JPG

※2/13: コメントにもいただきましたが、このままだとWio LTEとGrove端子台が触れ合ってしまうかもしれませんので、Grove端子台を固定するなりビニール袋等で絶縁するようにしましょう

買ったもののまとめ

計 3380円 (Wio LTE本体は含まれてないよ)

あと10KΩ抵抗とかは一般のご家庭にもあるかと思いますので、そちらをお使いください。

プラボックス

日東工業 / PCS形プラボックス Φ30穴加工タイプ (約1200円) を使いました。

その他「コントロールボックス」や「コマンドボックス」というキーワードで探せば見つかるでしょう
注意: 材質はプラスチックなモノを選びましょう。金属製なボックスでアンテナを中に格納してしまうと、電波が(すごく)弱くなります。

プラボックスへの Wio LTE 取り付けTIPS

Wio LTE のネジ穴サイズはM3です。通常はプラボックスに穴をあけるなどしてM3の受けを作る必要がありましたが、貼りつけタイプのボスがあるんですね、便利です。

タカチ電機工業 / T-600型貼り付けボス (約650円)
Mbed Cloudの話とWio LTEの話で紹介されてた。

IMG_0221.JPG

こんな感じで取り付けることができます。あとは裏面に粘着面があるので、それでプラボックスに貼りつければOK!

IMG_0222.JPG

ちなみにWio LTEのネジ穴周辺にも実装がされているため、金属製のネジだとショートしたりするかも。ということで、ポリカーボネートなネジを使うのがいいかもしれません。
※ただし締めすぎると実装が剥げてしまうかもしれないので注意!!

エスコ / M 3 x10mm 鍋頭小ねじ(ポリカーボネート/50本) (約400円)

押しボタンスイッチと回路

押しボタンスイッチはA接点で、直径30mmの穴にピッタリとハマり、しかも乱暴に扱っても壊れない感があるのが IDEC(和泉電気) / Φ30 押ボタンスイッチ(大形) (約770円) です。
※ちなみに直径30mmのほか、22mmってのが規格であるみたい。そっちの方が小さく済むかも。

使い方はタクトスイッチと全く同じです。同じなので、プルアップ抵抗も必要になります。(Wio LTE は Arduino のように内部にプルアップ抵抗の仕組みがありません)

10KΩの抵抗を、ブレッドボードなど使わず直接接続しています。
接続先はWio LTEに直接ではなく Grove Screw Terminal (端子台モジュール) に接続しました

IMG_0219.JPG

IMG_0220.JPG

ファームウェア編

attachInterrupt() を使ってボタンが押された時のピン状態変化に応じて change_state() でステートを変化させ、loop() 内でそのステートに応じた処理を行うようにしています

  • change_state() 内のdelayはチャタリング回避です (雑実装)
  • send_to_soracom() 内では毎度 "モデムON → 接続 → 送信 → 切断 → モデムOFF" をしています。消費電力削減と再接続実装の回避です (雑実装)
    • 送信が完了するまで15~20秒/回かかります
    • 送信時の最大消費電力は300mA程度、それ以外の通常時は15mA~20mA程度です
:WioLTE_dashbutton.ino
#include <WioLTEforArduino.h>
#include <stdio.h>
#define BUTTON_PIN  (WIOLTE_D38)

WioLTE Wio;

volatile bool StateChanged = false;
volatile bool State = false;

void change_state()
{
  State = !State;
  StateChanged = true;
  delay(150);
}

void send_to_soracom()
{
  Wio.PowerSupplyLTE(true);
  delay(500);
  if (!Wio.TurnOnOrReset()) { SerialUSB.println("TurnOnOrReset Error"); return; } 
  if (!Wio.Activate("soracom.io", "sora", "sora")) { SerialUSB.println("Activate Error"); return; }
  int connectId;
  connectId = Wio.SocketOpen("beam.soracom.io", 23080, WIOLTE_UDP);
  if (connectId < 0) { SerialUSB.println("SocketOpen Error"); return; }
  char data[100];
  sprintf(data, "{\"uptime\":%lu}", millis() / 1000);
  if (!Wio.SocketSend(connectId, data)) { SerialUSB.println("SocketSend Error"); return; }
  char res[128];
  int len;
  len = Wio.SocketReceive(connectId, res, sizeof (res), 3000);
  if (len < 0) { SerialUSB.println("Error len < 0"); return; }
  if (len == 0) { SerialUSB.println("Error len == 0"); return; }
  if (!Wio.SocketClose(connectId)) { SerialUSB.println("SocketClose Error"); return; }
  if (!Wio.Deactivate()) { SerialUSB.println("Deactivate Error"); return; }
  Wio.PowerSupplyLTE(false);
}

void setup()
{
  Wio.Init();
  pinMode(BUTTON_PIN, INPUT);
  attachInterrupt(BUTTON_PIN, change_state, CHANGE);
}

void loop()
{
  if (StateChanged) {
    if (State) {
      send_to_soracom();
    }
    StateChanged = false;
  }
}

あとがき

壮大なピタゴラスイッチ。
電源をなんとかしたい!

16
9
1

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
16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?