Raspberry Pi Cup Анемометр - PullRequest
       5

Raspberry Pi Cup Анемометр

0 голосов
/ 18 января 2020

Недавно я приобрел «знаменитый» набор инструментов, который включает в себя чашечный анемометр, дождемер и прибор для направления ветра. Код продукта - SEN-08942, он довольно популярен в известных магазинах прототипов.

Подробное руководство python можно найти здесь

Поскольку я предпочитаю javascript, я соответственно изменил код и заставил его работать в node js. Вот пример (я также добавил некоторые улучшения, например, преобразование масштаба bf) на случай, если кому-то это понадобится (любые лучшие идеи / улучшения приветствуются):


const Gpio = require("onoff").Gpio;
const moment = require("moment");
const beaufort = require("beaufort-scale");
const button = new Gpio(5, "in", "falling", { debounceTimeout: 10 });

/* A variable to store clicks */
let clicks = 0;

/* How often to get measurements */
let interval = 10000;

/* Anemometer radius in cm - the distance from the centre to the edge of one of the cups */
let radius = 9;

/* Anemometer adjustment parameter */
let adjustment = 2.4;

/* Watch the button for changes */
button.watch((err, value) => {
  /* Increase the click counter variable */
  clicks++;
});

/* Get measurements */
setInterval(() => {
  /* Get speed in km/h */
  let speed = calculateSpeed(interval, clicks, radius, adjustment);

  /* Convert to beaufort scale*/
  let bf = beaufort(speed, {lang: 'en', int: true});

  console.log({ speed: speed, beaufort: bf.grade, description: bf.desc });

  /* Reset clicks */
  clicks = 0;

}, interval);

/**
 * Calculates wind speed in km/h
 * @param {int} interval
 * @param {int} clicks
 * @param {float} radius
 * @param {float} adjustment
 */
const calculateSpeed = (interval, clicks, radius, adjustment) => {
  /* Find circumference in cm */
  let circumference = 2 * Math.PI * radius;

  /* Find rotations */
  let rotations = clicks / 2;

  /* Find distance in km */
  let distance = (circumference * rotations) / 100000;

  /* Find speed (km per second) */
  let speedPerSec = distance / (interval / 1000);

  /* Find speed (km per hour) */
  let speed = speedPerSec * 3600 * adjustment;

  return speed;
};

Что я хотел бы знать, и кто-то может помочь Если у вас точно такой же набор, какое значение регулировки вы использовали (значение коэффициента анемометра). В учебнике в URL написано 1.18, но я подозреваю, что это значение не является идеальным, поскольку, даже если я резко раскручиваю анемометр, я никогда не получу высокие показания!

В ожидании ваших мыслей / идей!

...