Open2

夏の蚊対策にサーボモータを利用してみた

zipmanzipman

企画意図

Qiitaに技術面の進め方を書いているので、こちらではやりながら感じたことを書いてゆきます。何といっても非羽状に熱い今年の暑い夏、たぶん虫たちも活発に活動する。そこで何か面白いことをやってみようと、昔の魚屋さんの店頭のハエヨケ機、家電店の扇風機売り場の情景から、風鈴のような蚊よけマシンを思いつきました。

いろんな分野の情報をかたっぱしから頭に詰め込んでゆくと、頭のなかで発酵熟成して、なにがしかのアイデアを生み出す。それが元の分野と異なると、斬新なアイデアになるのかもしれない。今回のアイデアも昔の情景がよみがえっただけで、自分としては特にすごいことはしていないつもりです。
ふたん仕事に関係したことばかり考えているので、遊びのつもりでやってます。小学生の時の「学研 マイキット」という電子工作の遊びみたいです。

事前準備

今回特に気を付けたのは、「たぶん途中で行き詰まるだろう」から、そのための備えをどうするか?であった。時間をかけて自分で解決策を見出だす作成は、今秋出張が控えているため、取れない。なので、だれかにヘルプを求めることを想定しておくこと。そのために何を考えているかを伝える資料(Qiita登場)作成に時間をかけました。自分の頭の中を伝えるためイラストたくさん必要だと思い生成AIで準備しました。

それでもやっぱりトラブルはあった

以前から発生して解決できていなかったが、Githubの中野自分のファイルへのリンクが入手できない。そもそもGitとかGithubは最近ISO審査員でIT企業を訪問すると必ずでてくる技術用語なので、どんなものかつ使い始めたが、まだよくわかっていない。なので、以下の画面から先に進めない(アップしたファイルのURLがわからない。自力での解決は早々にあきらめ、ヘルプを出して助けを待っている状態。→GithubでなくYoutubeへ動画アップしてうまくいきました。Youtube動画を追加しておきます。

https://youtube.com/shorts/NDeBMAdeo_E

肝心のサーボモータのプログラムのほうは、動作をこれから行うのだが、ヒモが50cmはあり、それなりの場所が必要。今夜家族が寝静まったら、デバグすることにしよう。
早速、obniz IDを記入ミスして動かない。アクセストークン不要なのに設定してしまって動かないなど、それだけでも解決に時間かかってしまった。
第一エラーメッセージが原因そのものズバリを言ってくれないから。現在もまたよくわからないエラーメッセージで動きません。先は長そうです。

zipmanzipman

コードの説明

開発はobniz開発コンソールのHTMLで作成しています。
サーボモータが正回転時は青色LED点灯、逆回転時は消灯させます。
サーボモータにつけたプロペラの先端に長いヒモ2本を括り付けています。
以下ソースコードはデバッグ中のものです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Obniz LED+Servo Control</title>
  <script src="https://unpkg.com/obniz@3.31.0/obniz.js"></script>
</head>
<body>
  <div id="obniz-debug"></div>
  <h1>夏の蚊対策</h1>
  <script>
    const obniz = new Obniz('xxxx-xxxx');

    obniz.onconnect = async function () {
      const servo = obniz.wired('ServoMotor', { signal: 2 });
      const led = obniz.wired("LED", { anode: 0, cathode: 1 });

      obniz.display.clear();
      obniz.display.print('Hello obniz!');
      led.off();

      while (true) {
        await new Promise(r => setTimeout(r, 3000));
        obniz.display.clear();
        obniz.display.print(`Plus direction`);
        led.on();
        servo.angle(180);

        await new Promise(r => setTimeout(r, 3000));
        obniz.display.clear();
        obniz.display.print(`Minus direction`);
        led.off();
        servo.angle(0);
      }
    };
  </script>
</body>
</html>