NefryBTとIFTTTでラボの氷河期をツイッターに通知する


ラボのエアコン効きすぎ問題をIoTで解決したい

わからないことだらけで,教えて頂きたくとりあえず記事にしました.
解決次第更新して行きます!

NefryBTのIFTTT_simpel_Sampleがなぜか動かなかったので,
自分でHTTPClientを使ってリクエストを投げました.

何かあればコメントによろしくお願いいたします.

環境機材

macOS Sierra 10.12.6
NefryBT 1.0.0
高精度IC温度センサ LM35DZ

開発の流れ

  • NefryBTのセットアップ
  • 回路を作る
  • IFTTTのレシピ作成
  • NefryBTのプログラムを書く

NefryBTのセットアップ

ドットスタジオさんのドキュメントに従って一通り試してみました.
https://dotstud.io/docs/nefrybt/

回路を作る

センサーの平らな面を正面にして
5Vを温度センサーの一番左に
A7ピンを真ん中に,
GNDを一番右に接続します.

5VとGNDを逆に繋ぐと温度センサーがめっちゃ熱くなるので注意してください
これやって一つセンサーをゴミにしました...

IFTTTのレシピ作成

今回はラボが氷河期になったら,ツイッターに呟くようにしてみました.

以前自分が書いた記事でIFTTTの解説をしたので,ここを参考にしてみてください
http://qiita.com/Shiratah/items/ea728434a07691e29bf7

ドットスタジオさんのドキュメントの方が圧倒的にわかりやすいので,こっちがオススメ
https://dotstud.io/docs/nefrybt-ifttt/

NefryBTのプログラムを書く

#include <Nefry.h>

//なぜか動かない
//#include <NefryIFTTT.h>

//自分でHTTPリクエスト投げます
#include <HTTPClient.h>

int value = 0;
int count = 0;
float tempSum = 0;

void setup() {
}
void loop() {
  //A7ピンからの入力を受け取る
  value = analogRead(A7);
  //センサの値にブレがあるかもしれないので,ここで読み取った値50個の平均を取る
  tempSum += value;
  if(count == 50){
        //電圧を温度に変換する
    float temp = modTemp(tempSum/50);
    Nefry.println(temp);
        //適切な温度に変換できない...
    if(temp < 16.54){
      HTTPClient http;

            //リクエストと投げる先のURLを入れる
            // http://maker.ifttt.com/trigger/イベント名/with/key/シークレットキー
            http.begin("http://maker.ifttt.com/trigger/samui_samui/with/key/blGY7scY0cfTiq9Q_1wV4m"); 

      int httpCode = http.POST("");
      if(httpCode > 0) {
                        //成功
            Nefry.println("[HTTP] POST... code: "+ httpCode);

            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                Nefry.println(payload);
                Nefry.setLed(0, 255, 255);
                Nefry.println("ラボに氷河期が来た!");
            }
        } else {
                        //エラー
            Nefry.println("[HTTP] POST... failed, error: "+ http.errorToString(httpCode));
            Nefry.setLed(255, 0, 0);
        }

        http.end();
                //送信後3時間待つ
        Nefry.ndelay(1000 * 60 * 60 * 3);
      }

    count = 0;
    tempSum = 0;
    delay(1000);
  }
  count++;
}

float modTemp(int analog_val) {
  float v = 5;     // 基準電圧値( V )
  float tempC = analog_val / 9.31; 
  return tempC;
}

結果

とりあえず動く.とりあえず

温度センサの入力値を摂氏に変換できない問題

わからん
Arduinoで温度を計測する -1
http://projectsbiotope.blogspot.jp/2010/01/arduino_25.html

【Arduino】温度センサLM35DZで温度計測
http://denshi.blog.jp/arduino/temperature-lm35dz

ここを見ながらコードを書いてたんですが,戻ってくる値が70℃〜80℃となって,
南国気分を味わえました.

[Genuino 101][Johnny-Five] IC 温度センサ LM35 の制御および注意点
http://dev.classmethod.jp/hardware/genuino-101johnny-lm35dz/

ここで,9.31で割ればそれっぽい値が得られると書いてあったので,パクりました
それでも正常な値になってない(と思う)

さすがにエアコン効かせても16℃にはならない...

助けてくれ