概要
ゴール
今まで作ってきたデバイスは電源がバッテリー動作するものでもリチウムイオン搭載してたりと安全性の面が少々不安あり。今回は放置しても精神的に安心できるバッテリー動作可能な小型デバイスを目指します。
サーバーレスは業務多忙で休日もあまり時間がとれなかったので、楽に表示まで行えるAmbientを使います。[1]
要件
- コンセプトしては屋内向けに単4電池で動作可能な小型デバイス
- センサープラットフォームとしてある程度拡張性のあるケース(複数センサーを入れるスペース)
- 展示会で展示しても「ば映える」デザイン性のあるケース
- IP65準拠なケース(完全な防塵構造/水の強い直接噴流によっても有害な影響を受けない)
- 20分間隔の間欠動作でAmbientへデータ送信してグラフ表示
- 起動時に音が鳴る(IP65のケースを閉めっぱなしで使うので動作音が欲しい)
- 温度の取得
デモ動画
部品
送料込みでお値段は購入時点の額。
ケース
Aliexpress
1268020mm IP65 2x AAA plastic enclosure
¥ 1,200
TAKACHI製の奴を買おと思ったが安くてobnizがピッタリ入りそうなサイズだったの購入。
IP65なので雨程度なら問題なさそう。
マイコン
obniz official Store
obniz Board 1Y
¥ 6,930
提供品、マジ太っ腹ありがとう
昇圧回路
Seria
USB charger 充電用電池BOX(BBJ01)
¥ 110
5Vへの高効率の奴は別に持っているが何となく安い奴で攻めたくなったので分解して昇圧部分だけ取り出し利用。分解界隈で話題になっていた奴。
出力電圧は問題なしだが出力電流が300mA程度までとなので、後々突入電流の面で問題が発生した。
500mAとか問題無く出る昇圧回路の方が良さそう。
センサー
SwitchScience
LM35DZ 温度センサIC
¥ 390
用意していたBME280が不良品で値が狂ってたので、締め切り4日前に急遽スイッチサイエンスでLM35DZを購入、残念ですが温度のみ取得します。
スピーカー
Aliexpress
8ohm 20mm Loud Speakers
¥ 93
適当な奴をobniz Board 1Yの裏に張り付けて使う。
単4電池
Amazon
エボルタ 単4形アルカリ乾電池 4本パック
¥ 560
設計図
配線
回路
APPS
ソースコード
<html>
<head>
<meta charset="utf-8" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qs/6.10.1/qs.min.js" integrity="sha512-aTKlYRb1QfU1jlF3k+aS4AqTpnTXci4R79mkdie/bp6Xm51O5O3ESAYhvg6zoicj/PD6VYY0XrYwsWLcvGiKZQ==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/ambient-lib@1.0.3/lib/ambient-lib.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
// OBNIZ_ID_HERE will be replaced at run.
// インストールされたデバイス情報に書き換わる
var obniz = new Obniz("OBNIZ_ID_HERE");
var tempsens;
obniz.onconnect = async function () {
console.log("wakeup");
// Read Value. 温度を取得&表示
var temp = await readTemp();
console.log(temp);
// ambientへ送信
const am = new Ambient(<channel>, '<write key>');
am.send({d1: temp}, function(response) {
console.log(response.status);
});
// 起動音
var speaker = obniz.wired("Speaker", { signal: 0, gnd: 1 });
speaker.play(1300); //300hz
await obniz.wait(50);
speaker.stop();
await obniz.wait(200);
console.log("sleep");
// sleep next 20 minutes. 20分間スリープをデバイスに指示
obniz.sleepMinute(20);
// When Cloud Execusion. クラウド実行の時
if (Obniz.App.isCloudRunning()) {
Obniz.App.done({
status: "success",
text: `${new Date().toLocaleString("ja-JP")}: ${temp}℃`,
});
}
};
// Read Temp. 温度を取得&表示
async function readTemp() {
// Initialize Temp Sensor
// 温度センサーを初期化
var tempsens = obniz.wired("LM35DZ", { gnd: 2, output: 3, vcc: 4 });
// Read Temp. 温度を取得
var temp = await tempsens.getWait();
// Load current time. 現在日時を取得して、スペース区切りで配列に
var datetime = new Date().toLocaleString("ja-JP").split(" ");
// Stop drawing for performance. 描画をいったん止める
obniz.display.drawing(false);
// Clear. ディスプレイを全部消す
obniz.display.clear();
// Change font size. フォントサイズを20pxに
obniz.display.font(null, 20);
// Draw date. 日付を表示
obniz.display.print(datetime[0]);
// Draw time. 時刻を表示
obniz.display.print(datetime[1]);
// 温度を表示
obniz.display.print(`${temp}℃`);
// Transfer all to device. 全て描画させる
obniz.display.drawing(true);
return temp;
}
</script>
</body>
</html>
アプリ設定
「デバイスがオンライン時に実行」のみ有効化、これで自動的に上記のプログラムが実行される。
外観
汎用ケースを使っているが、まあまあ見れる外観に仕上がった。
結果
防水
防水性能の確認で水攻め。
雨程度なら問題なさそう。
積算電流
1時間あたりの積算電流についてT18 X6 USB Testerを使って計測してみました。
1分間隔
10分間隔
20分間隔
表示
良い感じにデータ送信できてます。
所感
残り3日になってから作業を開始、めっちゃ楽しみながら作れました。
時間的余裕がなくて稼働時間計測できてないですが、それなりに良い感じに動くんじゃないでしょうか。
注釈
本当はMQTTでAWS IoT等に送信してKinesis経由でElasicserchのKibanaで表示とかやりたかったが。 ↩︎
投稿者の人気記事
-
miso
さんが
2021/05/16
に
編集
をしました。
(メッセージ: 初版)
-
miso
さんが
2021/05/16
に
編集
をしました。
(メッセージ: タグの修正)
-
miso
さんが
2021/05/16
に
編集
をしました。
-
miso
さんが
2021/05/16
に
編集
をしました。
-
miso
さんが
2021/05/16
に
編集
をしました。
(メッセージ: 画像が切れていたので縮小して再アップ)
-
miso
さんが
2021/05/16
に
編集
をしました。
(メッセージ: 校閲)
ログインしてコメントを投稿する