Содержание

@amperka/gas-sensor

Библиотека для работы с датчиками газа серии MQ. Поддерживаются модели с MQ-2 до MQ-9.

Получение значений в абсолютных единицах с этих датчиков требует нетривиальной арифметики. Библиотека скрывает внутри себя все эти сложности.

var gasSensor = require('@amperka/gas-sensor').connect({
  dataPin: A0, // разъём SVG
  heatPin: P10, // разъём GHE
  model: 'MQ3'
});
 
gasSensor.preheat(function() {
  var basePpm = gasSensor.calibrate();
  print('PPM base in current environment: ', basePpm);
 
  setInterval(function() {
    var val = gasSensor.read('LPG');
    print('LPG PPM =', val);
  }, 1000);
});

Функции модуля

connect(opts)

Возвращает новый объект GasSensor. В качестве opts ожидается объект со свойствами:

Параметр r0 может быть установлен с помощью метода calibrate при калибровке сенсора в чистом воздухе.

GasSensor

Объект реализует взаимодействие с модулями MQ. Для создания нового экземпляра, используйте connect.

heat([val])

Принудительно управляет нагревателем сенсора с помощью ШИМ, скважность которого указывается в параметре val от 0 до 1, либо булевым значением.

Если val не передан, включает нагреватель на полную.

// ...
gasSensor.heat(false); // <- отключаем
gasSensor.heat(true); // <- включаем на полную
gasSensor.heat(0.3); // <- включаем на 30%

preheat(callback)

Запускает предварительный прогрев сенсоров на полную мощность, на 30 секунд. После этого вызывает функцию callback.

// ...
gasSensor.preheat(function() {
  print('Gas sensor is ready to be read');
});

Нагреватель остаётся включенным после завершения прогрева.

Для датчиков MQ-7, MQ-9 и других датчиков, считывание показаний с которых происходит после цикла нагрева/охлаждения, вместо этого метода используйте cycleHeat;

cycleHeat(callback)

Запускает циклические изменения нагрева, которое требуется моделями вроде MQ-7 и MQ-9. В конце каждого цикла вызывает функцию callback.

Для остановки цикла необходимо вместо функции обратного вызова передать false или вызвать heat с параметром 0

// ...
var gasValue = 0;
 
gasSensor.cycleHeat(function() {
  gasValue = gasSensor.read();
  print('Gas value has been updated');
});

calibrate()

Устанавливает и возвращает калибровочный коэффициент r0, который необходим, как базис для дальнейшего расчёта PPM при вызове read.

Вызывать метод следует единожды, после прогрева датчика (см. preheat). Предполагается, что на момент вызова калибровки, сенсор находится в чистом воздухе, при нормальной температуре и влажности.

Вы можете записать полученное значение и далее передавать его в функцию connect при создании объекта. В этом случае больше калибровать этот конкретный физический экземпляр датчика при регулярном использовании не нужно.

// ...
 
gasSensor.preheat(function() {
  var r0 = gasSensor.calibrate();
  print('r0 =', r0); // Выведет число вроде 6.328
 
  print('ppm =', gasSensor.read());
});
 
// Теперь в новой программе можно задавать коэффициент сразу
 
gasSensor = require('@amperka/gas-sensor').connect({
  dataPin: A0,
  heatPin: P10,
  model: 'MQ3',
  r0: 6.328
});
 
gasSensor.preheat(function() {
  print('ppm =', gasSensor.read());
});

read([gas])

Считывает показания сенсора и возвращает данные в PPM (parts per million, миллионных долях).

Параметр gas определяет считываемый газ. Ожидается одна из строк:

Показания возвращаются в предположении, что кроме указанного газа в среде отсутствуют другие, влияющие на сенсор, газы; показания снимаются при нормальной температуре и влажности воздуха; датчик прогрет и откалиброван.

Если параметр gas не указан, используется тот, к которому модель сенсора наиболее восприимчива: