AWS Lambdaとobniz Boardでスマートカーテンを実装してみた

AWS Lambdaとobniz Boardでスマートカーテンを実装してみた

最近IoTに興味を持ち始めたエンジニアの稲本です。

IoTは未経験なのですが、何か作ってみたい欲求に駆られ、今回は「スマートカーテン」なるものを自作してみました。

決まった時間にカーテンが開き、朝の光で目が覚める、よく映画でお金持ちがやっているあれですね。

あれを一度やってみたかったんです。

自動でカーテンが開けば、自然と部屋に太陽光が入ってきます。朝が苦手な私でも早起きできるのではないか、そんな希望もありました。

また、以前からIoTには興味があり、何か作ってみたいというのが今回のモチベーションです。

各技術・ツール

スマートカーテンを実現した構成図がこちらになります。
(配線や壁が汚くて恥ずかしい・・・)

紐はペットボトルとカーテンの先端に結んでいます

obniz Board

気軽にIoTといえばRaspberry Pi(通称ラズパイ)が思い浮かびます。最初はラズパイを購入しようと思っていたのですが、検索しているときにたまたまobnizというものに出会いました。


obnizはブランド名で、今回使用したのは「obniz Board」になります。なんと、日本の会社が開発しています。

obniz Boardには以下のような特徴があります。

(obniz Board 製品紹介ページより引用)

ラズパイはOSのインストールから行わなければいけませんが、obniz BoardはobnizOSというOSが書き込まれた状態になっているので、手軽さがあると思いました。

また、上記の特徴にもあるように、ボード単体でWi-Fiに接続できること、開発者コンソール(ブラウザ)でプログラミングができることなど、IoT初心者にかなりフレンドリーな印象です。

モバイルバッテリー

使っていなかったモバイルバッテリーです。

メンバーズエッジカンパニーに入社後はフルリモートで働いているため、外出する機会が減り、倉庫に眠っていました。

obniz Boardに電力を供給します。

サーボモーターSG90

obniz Boardと接続して動かすモーターになります。

このモーターにトルクをつけます。トルクを回転する制御はobnizから行います。トルクが回転することで、ペットボトルが下に落ち、カーテンが開くという流れになります。

こういったモーターやセンサーを買うのは初めてで、どこで購入するのかわかりませんでした。秋月電子通商は鉄板のECサイトみたいですね。新しい発見です。

使い終わったペットボトルと適度に長いヒモ

これらがカーテンを開く主役になります。

ヒモの片方をカーテンのフックにかけます。

もう片方をペットボトルのキャップ下に巻きつけておきます。少し余裕を持たせてサーボモーターのトルクにも引っ掛けられるようにしてください。

また、ペットボトルに入れる水の量を調整して、カーテンが開くかどうかを試しておきます。

AWS Lambda

サーバーレスでプログラムを実行できる環境を提供するAWSのサービスです。ここにobniz Boardを操作するコードを書きます(アップロードします)。

今回はNode.jsを使ってプログラムを組みました。

また、このプログラム(関数)は、同じAWSのサービスである「Amazon CloudWatch」によって定期的に実行するようスケジューリングをしました。時間の指定は、お馴染みのCron式で書くことができます。

ソースコード

AWS LambdaにアップロードしたNode.jsのコードは以下になります。

const Obniz = require("obniz")

exports.handler = function (event, context, callback) {
  const access_token = "Your ACCESS_TOKEN here"
  const obniz = new Obniz("Your OBNIZ_ID here", { access_token })

  obniz.onconnect = async () => {
    const servo = obniz.wired("ServoMotor", { signal: 0, vcc: 1, gnd: 2 })

    servo.angle(180.0)
    await obniz.wait(1000)

    servo.angle(0.0)
    await obniz.wait(1000)

    obniz.close()
    callback(null, "success")
  }
}

特に複雑なことはしていません。

obniz SDKを読み込み、発行されているアクセストークンを用いてobniz Boardに接続をします。

接続が確認できたら、サーボモーターの角度を変えるメソッドを呼び出す処理を行っているのみです。

AWS Lambdaには上記のソースコードに加えてnode_modules等もアップロードをする必要があります。obnizのドキュメント「obniz with AWS Lambda」に詳細な解説がありますので、ぜひ参考にしてみてください。

完成動画

さて、いよいよお披露目の時間です!

※スマートカーテンかどうかの判断は読み手のみなさんにお任せします。

まとめ

  • obniz Boardを使用することで、ある程度プログラミングができる人であれば、ちょっとしたIoT製品を自作できることがわかりました
  • 自動でカーテンが開いても、眠くて閉めてしまう日が続き、早起きはそこまでできていません..
  • 定時実行でも良いが、センサーを使って日の出を検知したら開くようにすると、より自然に合わせた起床ができるかもしれません
  • 後から知ったのですが、obniz Cloudでもサーバレスイベントトリガーを利用することができるので、AWS Lambdaの代わりにこちらを使ったらより簡単だったと思います

普段ソフトウェアの世界いるみなさんが、少しでもIoTに興味を持っていただけたら嬉しいです!

採用情報

メンバーズエッジで最高のチームで最高のプロダクトを作りませんか?

最高のプロダクトをつくる 最高のチームで働く

在宅でも、地方でも、首都圏でも。多様な働き方で最高のチームをつくり、お客様のプロダクトパートナーを目指します。アジャイル開発を通じ、開発現場の第一線で活躍し続けたいエンジニアを募集しています。