obniz 고투/"현관 열어봐 경마문 소리 들려"→ "커피 마시면 안 돼"

1. 문 근처에 오면 나팔을 불고→문을 열면 초인종을 울린다


기존에 일하던 사내 민소매 원피스인데 웃기기만 하다가 기각되는 방안이다.
알고 있지만기각된다고 합니다.
당시 철도회사 고객들은 "(모 역의) 개찰구에서 초인종을 울려라"라는 방안을 제시했다.회의가 연기되었다.그냥
그 후 16년이 지났다.
드디어 해가 보이네요.

출근하든 쓰레기를 버리든 모두 나의 G1 레이스


출근, 쓰레기 버리기, 마트 파 사기, 편의점 컵라면 사기, 백신 맞기 모두 G1 대회다.
가자, 무사가 떨고 있다.
"그럼 이제 내 G1 경기가 시작되는데..."눈에 익은 현관을 보면서 떨려라!

환경은 이쪽이에요.


Node version v17.6.0
npm 8.5.1

어떻게 하면 노래가 나올까요?


찾아보니 내가 하고 싶은 일과 비슷한 사람을 발견했다.
"obniz를 사용하여 문 센서의 개폐 시 소리 재현 클라이언트 편"
https://www.ccbaxy.xyz/blog/2019/02/17/obniz4/
허허, 설치해야 할 것 같다node-wav-player.npm i node-wav-player터미널에서 실행합니다.짐을 싸서 들어가다.
새로운 파일을 만들어서 이 분이 만든 프로그램을 한 번에 완전히 따라 해보고 싶은데 이 분과 똑같은 걸 쓰시죠.
너 뭐야?
노드입니다.js.
아, 너도 노드야.그래?
잘 됐다.
const mqtt = require("mqtt");
const player = require("node-wav-player");

//wavファイル再生関数定義
const play = async (sound) => {
  await player
    .play({
      path: `${sound}.wav`,
      sync: true,
    })
    .then(() => {
      console.log(`played ${sound}.wav.`);
    })
    .catch((error) => {
      console.error(error);
    });
};

//mqttサーバー接続
var client = Mqtt.connect("ws://[サーバーアドレス]:[ポート]", {
  clientId: "[クライアントID]",
  username: "[クライアント名]",
  password: "[パスワード]",
});
//接続時処理
client.on("connect", function () {
  client.subscribe("[トピック名]", function (err) {
    if (!err) {
      console.log(`OK Subscribe`);
    }
  });
});

//ドアステータス
let state = "CLOSE";

//多重再生回避フラグ
let processing = false;

//メッセージ受信時処理
client.on("message", async (topic, message) => {
  if (!processing) {
    processing = true;

    let temp = JSON.parse(message.toString()).data.door;
    if (temp != state && temp == "OPEN") {
      await play("okaeri");
    }
    if (temp != state && temp == "CLOSE") {
      await play("korekara");
    }
    state = temp;
    processing = false;
  }
});

새 역할 "MQTT 서버"


등등,/mqtt 서버 연결이 무엇입니까
만약 조사했다면, TCP/IP 네트워크에서 이용할 수 있는 통신 프로토콜.
아니, 정말 포기했어. 매번 새로운 개념과 단어를 주입해.
그리고 더 조사하면 mqtt 서버에 대한'안전 문제'가 나옵니다.
IBM에서 무료로 제공하는 IoT용 서버인 것 같은데 저도 이해합니다.
응, 괜찮아, 이거.
(이곳에서 다른 방법을 먼저 찾고 자세한 사람과 상의하자.)
mqtt 서버를 사용하는 것 자체에 문제가 없는 것 같습니다.
그럼 한번 해봐.
(해보자)
그리고 서버 설정이 거의 끝날 무렵에 알아차렸어요.
스마트 스피커 없음
그럼 소리를 어떻게 내는 게 좋을까요???
(조사)
그렇군요.. 제 생각의 가장 큰 문제는:
"어떤 소리를 내나요?"
뭐?

출력 문제~ 우리 집에 스피커 없어요~


obniz 스피커는 푸 같은 소리만 낸다.
슬라이드를 틀고 G1 개막곡을 틀려면 효과적인 출력이 필요하다.
블루투스 스피커가 있는데 이걸 출력하기 위해 PC든 스마트폰이든 지나가야 해요.
(조사)
원래 평범한 스피커가 음악 출력과 같은 조건(obniz board 1Y, Node.js)에서 한 사례를 찾지 못하면 다시 상의하면 큰 문제가 될 수 있다(현재 내 수준으로는).
wav 파일 Nodejs에서만 틀어주면 될 것 같은데 그것만은 싫어요.
예: WAV 파일을 Node로 만듭니다.js로 재생성(Mac로 node-wav-player)
https://qiita.com/youtoy/items/ea270d180d17094807f5
const player = require('node-wav-player');
player.play({
  path: './【WAVファイルの名前】.wav',
}).then(() => {
  console.log('The wav file started to be played successfully.');
}).catch((error) => {
  console.error(error);
});

2. 갑작스러운 방향 전환 "초음파 센서×스피커가 오늘 커피 마시면 안 된다고 알렸어요.


저는 지금 3일에 한 번씩 병원에 가요.
한 가지 병에 걸려서 지금까지 해 본 적이 없는 7~8개의 대규모 검사를 하고 있다.
검사에 따르면 음식 제한과 음료수 제한이 있다.
저는 커피 중독이고 물을 좋아하는 여자예요.
검사 전에 물 한 잔만 마셔야 돼요.
그런 나에게 고문 같은 규정이 많다.
아침에 일어나면 커피와 물을 두 잔 먼저 마시는 습관이 있기 때문에 자연스럽게 이것을 잊어버린다.그리고 매번
파트너에게 말했다. "나는 커피를 마시고 싶으면 마시지 마!"비록 그렇지만, 그는 자연히 잊어버릴 것이다.
위험해.
그러자 "마시지 마!"나에게 알려줄 것이 있다면 편리할 것 같아서 전혀 놀지 않는'이제 정말 필요한 실크'에 도전하기로 했다.

원두를 넣는 BOX에 다가갈 때 스피커 전선을 켜세요.


const Obniz = require('obniz');
const obniz = new Obniz('×××××××××');

obniz.onconnect = async () => {
    // 超音波距離センサを利用
    const hcsr04 = obniz.wired('HC-SR04', {
        gnd: 3,
        echo: 2,
        trigger: 1,
        vcc: 0,
    });

    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 9, gnd: 10 });

    // obnizディスプレイ(初期表示)
    obniz.display.clear();
    obniz.display.print('obniz Ready');

    // setIntervalで定期実行
    setInterval(async () => {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // 小数点以下がたくさんあるのでここでは整数にします
        distance = Math.floor(distance);
        // 距離をコンソールに表示
        console.log(distance + ' mm');
        // 距離をobnizディスプレイに表示
        obniz.display.clear();
        obniz.display.print(distance + ' mm');
        // 距離によって判定
        if (distance < 30.0) {
            // 30mm = 3cm 未満の場合 obnizディスプレイ表示
            obniz.display.clear();
            obniz.display.print('No coffee!!');
            // 200Hz で音を鳴らす
            speaker.play(200);

        } else {
            // 音を停止する
            speaker.stop();
        }
    }, 1000); // 1000ミリ秒 = 1秒ごとに実行
};
이러면 어때!!
내가 커피 캔에 3센티미터 이상 접근하면 버저가 울릴 거야.

초음파 센서는 0-3, 스피커는 9, 10으로 나뉘었지만 초음파 센서가 커서 스피커가 꽉 끼었다.
자 실행!
엉엉 울다
왜?
근데 나왔어!
대단하군,obniz.
나 원래 초음파 센서랑 가깝지?
초음파 센서가 아무것도 없는 공중을 향해 방청하고 다시 시도하다.
보통
울릴 거야. 왜?

스피커의 수수께끼


터미널에도 이상이 없습니다.
표시도 이상이 없습니다.
3cm 설정이 너무 가깝죠.
좀 더 멀리 가봐.
"10cm 이내에 오면 버저".
if문을 수정합니다.
        // 距離によって判定
        if (distance < 1000.0) {
            // 1000mm = 10cm 未満の場合 obnizディスプレイ表示
            obniz.display.clear();
            obniz.display.print('No coffee!!');
            // 200Hz で音を鳴らす
            speaker.play(200);
그럼 이건 어때!!!
------------보통
아아아아아아아!!!

드디어 답이 왔어요.


그리고 같은 일을 하는 사람들의 기사를 많이 봤어요. 한 시간 정도.
예컨대 이 사람
https://qiita.com/Izumi0711/items/67beedef9df05dfa32c5
이 사람
https://protopedia.net/prototype/2649
그리고 나서 나는 몇 편의 보도를 보고 갑자기 깨달았다.
초음파 센서 역방향 설치!!
초음파 센서의 뒷면?gnd, echo, trigger, vcc가 있는데 그곳에서 은색의 바늘 같은 것이 나왔다.
이걸 찌르는 기판 번호와 코드에 적힌 번호가 일치하지 않습니다!!!
그러니까 거꾸로 하면 돼요.
이게 뭐야? 카이아리스의 카이아리 스미스야.
미꾸라지.
말하자면 오래전 처음 TOEIC 시험을 봤을 때도 예전 지식이 없었고 예제나 과거 문제도 보지 않고 혼자서 도전했는데 (유학을 갔는데) 400점을 칠 줄은 몰랐다.
그녀는 무슨 일을 하든지 만전을 기해야 한다는 믿음직한 언니에게 이 사실을 알렸다. 그녀는 "시험이 그렇게 하루 진행될 줄은 전혀 몰랐다. 너무 피곤하다"고 말했다."어!? 시험시간도 모르고 봤다!?"외계인을 보는 듯한 눈빛.
미안합니다.
그런 일을 회상하면서 엄숙하게 오비니즈를 거꾸로 놓았다.

그럼, 거꾸로.어때요,obniz씨.
그리고 코드의if문도'5cm 이내에서 울려라'로 돌아간다.
아, 여기로 한 바퀴 도는 길.너무 길다

마지막 코드 여기 있어요.


const Obniz = require('obniz');
const obniz = new Obniz('×××××××××');

obniz.onconnect = async () => {
    // 超音波距離センサを利用
    // 向きが反転していることに注意
    const hcsr04 = obniz.wired('HC-SR04', {
        gnd: 3,
        echo: 2,
        trigger: 1,
        vcc: 0,
    });

    // LEDを利用
    const speaker = obniz.wired('Speaker', { signal: 9, gnd: 10 });

    // obnizディスプレイ(初期表示)
    obniz.display.clear();
    obniz.display.print('obniz Ready');

    // setIntervalで定期実行
    setInterval(async () => {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // 小数点以下がたくさんあるのでここでは整数にします
        distance = Math.floor(distance);
        // 距離をコンソールに表示
        console.log(distance + ' mm');
        // 距離をobnizディスプレイに表示
        obniz.display.clear();
        obniz.display.print(distance + ' mm');
        // 距離によって判定
        if (distance < 50.0) {
            // 50mm = 5cm 未満の場合 obnizディスプレイ表示
            obniz.display.clear();
            obniz.display.print('No coffee!!');
            // 200Hz で音を鳴らす
            speaker.play(200);

        } else {
            // 音を停止する
            speaker.stop();
        }
    }, 1000); // 1000ミリ秒 = 1秒ごとに実行
};
종착역에도 이런 거리가 있다.
357 mm
430 mm
3426 mm
397 mm
351 mm
432 mm
1346 mm
1315 mm
1367 mm
1304 mm
완성!
내일 15시 검사 4시간 전에는 커피를 마실 수 없으니 바로 활기차게!!
끝났어!

좋은 웹페이지 즐겨찾기