12
5

More than 1 year has passed since last update.

obnizでビールの飲み頃温度を教えてくれるIoTを完成させたい!

Last updated at Posted at 2021-10-18

させたい!という願望含む、現状未完成の投稿で恐縮です。
絶賛迷走中ですので、お力添えいただければ幸いです!

プログラミングを習い始めて半月が経ち、obnizを使ってIoT入門しました。
天敵のプリン体を避けビールを絶っていますが、時には飲みたくなり、
そんな特別な時には最高の状態のビールを飲みたい!私利私欲のためのIoT製作です。

ビールの飲み頃温度は夏なら4~6℃、冬なら6~8℃とされています(喉越しはさておいて)。
冷蔵庫で長く缶ビールを冷やしておくと冷えすぎて、本来のビールの美味しさが半減されてしまいます。
出典:サントリー
そこで、冷蔵庫から出して温度を測りながら、飲み頃と言われている4℃以上になったら
飲み頃サインをLEDが光って教えてくれるもの
を目指して作っています。

現状

収納.jpg

・温度センサ(LM60BIZ)はobniz0~2番へ繋ぐ ・LEDはobniz10~11番へ繋ぐ ・其々ブレッドボードをジャンパワイヤで繋ぐ ・さらにジャンパワイヤを使って逆サイドに通電させる ・温度センサと缶ビールをアルミホイルで巻き、温度を測る ・測定開始時は4℃より下で、LEDは温度が4℃より上回ったら点灯する

がしかし、現状は出力される温度が常に高く、求めるものとは程遠い状態です。

環境

Visual Studio Code v1.60.2
Node.js v16.10.0
obniz Board 1Y

以下、これまで行ってきた流れです

サンプルコード
const Obniz = require('obniz');
const obniz = new Obniz('0000-0000'); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    var led = obniz.wired("LED", {anode:10, cathode:11});
    led.output(true);

    const tempsens = obniz.wired('LM60', { gnd: 0, output: 1, vcc: 2 });
    // setIntervalで間隔を作る
    setInterval(async function () {
        // 同期で取得
        const temp = await tempsens.getWait();
        // 温度をコンソールに表示
        console.log(temp);
        // displayに反映
        obniz.display.clear();
        obniz.display.print(temp + 'C');  // 英語が出力できる
    }, 1000); // 1000ミリ秒 = 1秒  

  for (let i = 0; i < 100; i++) {
    tempsens.onchange = (function(temp){
        console.log(temp);

      if (temp < 24) {
        led.on();
      } else {
        led.off();
      }
    });
    await obniz.wait(100);
  }
}

テストでは1秒毎に温度をディスプレイに表示させるようにしました。
途中で扇風機の風を当て、24℃を下回ったらLEDが点灯しているので、
コードに間違いはなさそうです。

その後、「24℃を下回ったら」を「4℃を上回ったら」に変更し、

サンプルコード
const Obniz = require('obniz');
const obniz = new Obniz('0000-0000'); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    var led = obniz.wired("LED", {anode:10, cathode:11});
    led.output(true);

    const tempsens = obniz.wired('LM60', { gnd: 0, output: 1, vcc: 2 });
    // setIntervalで間隔を作る
    setInterval(async function () {
        // 同期で取得
        const temp = await tempsens.getWait();
        // 温度をコンソールに表示
        console.log(temp);
        // displayに反映
        obniz.display.clear();
        obniz.display.print(temp + 'C');  // 英語が出力できる
    }, 1000); // 1000ミリ秒 = 1秒  

  for (let i = 0; i < 100; i++) {
    tempsens.onchange = (function(temp){
        console.log(temp);

      if (temp > 4) {
        led.on();
      } else {
        led.off();
      }
    });
    await obniz.wait(100);
  }
}

ブレッドボード1.jpg
▲ブレッドボードをジャンパワイヤで繋ぐ
ブレッドボード2.jpg
▲さらにジャンパワイヤを使って逆サイドに通電させる
アルミホイル1.jpg
▲温度センサと缶ビールをアルミホイルで巻き、温度を測る
収納.jpg
▲あまりにも剥き出しなので、ケースに入れてみました
セリア.jpg
▲ちなみに、ケースと配線用の穴を開けるのに使ったニッパーは両方セリアで計220円です!

温度センサの代わりになるものは、、、

一応正常に動いた結果と思いますが、温度センサで缶ビールの温度を測るには限界がある結論に達しました。理由としては、

・缶は熱伝導が良いとはいえ、外気に左右される ・ビールに直に触れさせられない

といったところを解決しなければ、、、

改善案

缶ビールに直に触れることなく測れるものがあれば解決すると思い、秋葉原に行ってみました。
(余談ですが、電気街口に初めていきましたが、種類がありすぎて、本当に奥深い世界と実感しました)

探り探り探していると、非接触温度センサ(サーモパイル)とやらに出会いました。
非接触温度センサ.jpg
どうやって使うかも調べずに商品名のみを信じて買ってみました!!
obniz Parts Libraryにあるだろうと信じて買いましたが、
なかったため詰みの状態です(次からはちゃんと調べてから買います)。

・非接触温度センサ(サーモパイル)はこうすれば使えるよ!
・こんなセンサ使えばいいんじゃない?
等々、アドバイスありましたら是非お願いします。。。

追記(2021/10/19)

Qiita QAにて質問投稿したところ、アドバイスいただくことが出来ました。
今ぶち当たっている壁を乗り越えるにあたり、Thermal Camera Sensor - AMG8833をご紹介していただきました。

赤外線アレイセンサAMG8833を使用しています。
測定範囲は0~80℃です。
8x8画素で温度分布を測定することができます。
サーモグラフィサンプル.gif
出典:obniz Parts Library AMG8833

obniz Parts Libraryにありますので、使い勝手良さそうです!(私にもできそう!)

また、Twitterでは、

直接のセンサーに関する提案ではないですが、水温計で水温を測りながら、4度になるときのセンサー温度を実験して算出してみるのはいかがでしょうか。水温が1度、2度、3度、4度、・・・となるときにセンサーが21度、22度、23度、24度、・・・となれば24度以上でLEDを点灯等。

といったコメントもいただき、アイデア次第でやりようはいくらでもあるんだ!と再認識しました。

ベストな状態のビールを追い求めて、挑戦し続けたいと思います。

長々と失礼しました!&読んでいただき、ありがとうございました!

12
5
2

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
12
5