JavaScript
Node.js
RaspberryPi
IoT
obniz

obnizで家の猫にリモートで餌をあげてみた

リモート餌やりマシーン

旅行中でも、家の猫に餌をあげたい!
どうせならお家IoT化の一環としてobnizを使ってスマホから使える餌やり機を作ってみました。

必要なもの

obniz(オブナイズ)

obnizはjavascriptから操作できるので、ボタンを押したらモーターを回すというWebページを1つ作るだけで済んじゃいます。
しかもモーターもそのまま繋がるのでobnizを使って作ってみました。

詳細は以下
https://obniz.io/

無限回転サーボ

餌をあげるのにスクリューとモーターを用意します。
DCモーターだと作りにくいので無限に回転するサーボモーターを買ってきました。

http://akizukidenshi.com/catalog/g/gM-08305/

木工材料

パイプとか、箱が必要でした。あげたい餌の量でサイズは変えたほうがいいかも。

組み立てる

まずは適当なパイプを買ってきて、スクリューは3Dプリンタで作りました。STLはこちらです

次にobnizにモーターをつなぎます。 今回はこのようにしました。

io0: GND,
io1: VCC,
io2: signal

繋いで電源入れてみたところ。

試しに回してみると、これがなかなかうまく動かず、なんどかスクリューを削ったりしました。(もっと粒の大きな餌なら問題なかったかも)

コード

あとはHTMLのコーディングです。
まずはobniz.jsをunpkgから持ってきます。

<script src="https://unpkg.com/obniz@1.2.2/obniz.js"></script>

そして、ボタンを押したら何秒かサーボを回すようにしました。
下にあるのが全体のHTMLです。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
  <script  src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="  crossorigin="anonymous"></script>

  <script src="https://unpkg.com/obniz@1.2.2/obniz.js"></script>
</head>

<body>
<div id="obniz-debug"></div>
<br>
<div class="text-center">
  <h1> Pet Feeder </h1>
</div>

<button id="meal">Feeding</button>
<div id="dispMeal"></div>

<script>

function getTime(){
  var dateTime=new Date();
  var hour = dateTime.getHours();
  var minute = dateTime.getMinutes();
  return hour + ":" + minute;
}

var obniz = new Obniz("OBNIZ_ID_HERE");

obniz.onconnect = async function () {
  var numberOfMeal = 0;
  var lastTimeMeal;
  $("#dispMeal").text("Number of feeding : "+numberOfMeal)
  var servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2});

  $("#meal").click(async function(){
    numberOfMeal++
    lastTimeMeal = getTime();
    $("#dispMeal").text("Number of feeding : "+numberOfMeal+", The last time : "+lastTimeMeal)
    servo.angle(0.0);
    await obniz.wait(10000);
    servo.angle(6.9);
  })
}

</script>
</body>
</html>

このHTMLを開いてボタンを押したら回る回る!
餌をあげる長さを調整して、ちょうどいい量が出るようにしました。