Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9134

ランダムなダミーの温湿度の値で急激な変動がない値を生成する(Node.js で simplex-noise を利用)

$
0
0
「デバイス+センサー」が MQTTクライアントになった構成の開発をしている中で、MQTT の値を受信する MQTTブローカーの部分や別クライアント側に手を加える開発をするのに、以下のような物理部分をセットしなくても開発できるようにしたくて、今回の内容を進めました。 GR-ROSE と「Grove - CO2 & Temperature & Humidity Sensor (SCD30) 」の接続はスルーホール用テストワイヤを使い、差し込み式で接続してる。 https://t.co/hA2wu3KYw3 pic.twitter.com/WbV3yNgNB6— you (@youtoy) October 30, 2021 概要 ひとまず温湿度の 2つの値を対象に、それらをランダムに生成するプログラムを作っていきます。 その値について、JavaScript だと Math.random() を使う方法もありますが、あまり急激な変化はしてほしくなかったため、乱数生成の部分には「Simplex Noise」を使いました(パッケージは以下を利用)。 ●simplex-noise - npm  https://www.npmjs.com/package/simplex-noise ちなみに、Simplex Noise をざっくり説明すると、以下のパーリンノイズと同じようなものになります。 ●パーリンノイズ - Wikipedia  https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%83%AA%E3%83%B3%E3%83%8E%E3%82%A4%E3%82%BA 必要になる環境など 開発には Node.js を使っていきます。 MQTTブローカーを何らか用意し、今回のプログラムを動作させる PC の中で動かしてください。 また、以下のコマンドで 2つのパッケージを利用できるようにしておいてください。 $ npm i mqtt simplex-noise プログラム プログラムの内容は、以下のとおりです。 const mqtt = require("mqtt"); const client = mqtt.connect("mqtt://localhost"); const { SimplexNoise } = require("simplex-noise"); const simplex = new SimplexNoise(); let count = 0; client.on("connect", function () { const timerId = setInterval(() => { const randomT = convertedValueRandom(simplex.noise2D(count, 10), 20, 25); client.publish("outTopic/T", randomT + ""); const randomH = convertedValueRandom(simplex.noise2D(count, 20), 60, 80); client.publish("outTopic/H", randomH + ""); console.log(` 温度: ${randomT}, 湿度: ${randomH}`); count += 0.007; }, 2000); }); function convertedValueRandom(inputSimplexNoise, min, max) { const randomZeroToOne = (inputSimplexNoise + 1) / 2; return randomZeroToOne * (max - min) + min; } simplex-noise は -1 から 1 の間の値を生成するため、Math.random() のような 0 から 1 の値を生成させたい場合は、少し手を加える必要があります。 上記の中では、 convertedValueRandom() でその変換を行っています。 また、 count += 0.007 の値を変更すると、生成される乱数の変化の度合いを変えることができたりもします。

Viewing all articles
Browse latest Browse all 9134

Trending Articles