search
LoginSignup
9

More than 3 years have passed since last update.

posted at

updated at

Organization

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

作ったもの

これだよ

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;
  }
}

あとがき

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

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
What you can do with signing up
9