Проблема с подключением датчика mq7

advisor
Offline
Зарегистрирован: 04.12.2015

Проблема в следующем-имеется датчик mq7,подключается он как на картинке ниже

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

Araris
Offline
Зарегистрирован: 09.11.2012

Нет, не спалите. Положение надписи значения не имеет.

Напряжение на нагревательный элемент Вы будете подавать на контакты Н, им + и - безразличны, то есть переполюсовка невозможна.

Выходной сигнал будете снимать с А и В, им также + и - безразличны.

Картинка для наглядности :

advisor
Offline
Зарегистрирован: 04.12.2015

Большое спасибо, буду пробывать

advisor
Offline
Зарегистрирован: 04.12.2015

вообщем подрубил датчик, при подключении выдает значения около 400, затем они снижаютсЯ постепенно до 150, если поднести бумажку, поджечь и потушить выдает значения около 300, это я где то ошибся или это норма?резистор 10 ком. Датчик питается от 5 вольт ардуины.

Araris
Offline
Зарегистрирован: 09.11.2012

Ответ на этот вопрос (на предыдущий, кстати, тоже) легко находится в даташите на датчик.

Вот даташит : https://www.parallax.com/sites/default/files/downloads/605-00007-MQ-7-Datasheet.pdf

В частности, там пишут про необходимость предварительного прогрева датчика :

"a.Connect the sensor to the application circuit.

b.Turn on the power,keep preheating through electricity over 48 hours."

Ну и ещё там много полезного найдёте о том, на что и как реагирует датчик.

lazy-fox
Offline
Зарегистрирован: 22.08.2014

Искал индикатор угарного газа. Подключил датчик по схеме. Считал аналогридом и получил число в попугаях, но стабильное и предсказуемое. Поставил rgb-светодиод (свежий воздух - примеси - угар) и пищалку на ахтунг. Для наглядности прикрутил четырёхразрядный семисегментник спасибо тут

Код в целом получил такой:

/* Определение присутствия угарного газа датчиком MQ-7 */
#define Z 15 //Пин зуммера и аварийного светодиода
#define R 16 //Пин красного светодиода
#define G 17 //Пин зелёного светодиода
#define B 18 //Пин синего светодиода
#define MQ7 A0 //Аналоговый вход датчика MQ-7 через делитель напряжения
#include <MsTimer2.h>
#include <Led4Digits.h>
Led4Digits disp(2,5,4,3,2,6,7,8,9,10,11,12,13); 
#include <OneWire.h> 
OneWire  ds(19);  // on pin 10, a 4.7K or 10K resistor is necessary to DS18B20
  int cnt; //Значение таймера прогрева 
  int val; //Показание прибора
  int celsius; //Показание температуры
  int range; //Диапазоны значений
  
void setup() {
  MsTimer2::set(2, timerInterrupt); // 2ms period
  MsTimer2::start();
  pinMode(Z, OUTPUT);
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(MQ7, INPUT);
  Serial.begin(9600);
  Serial.print("Warming ");
  while (cnt<30){ //Прогрев датчика 30 сек
    analogWrite(G,200); 
    temp();
    analogWrite(G,0);
    Serial.print(celsius);
    Serial.print(": ");
    Serial.println(cnt);
    delay(250);
    cnt = cnt+1;
    if (celsius>36) break;
  }
}

void loop() {
  val = analogRead(MQ7); // read the sensor:
  disp.print(val,4,1);
  // map the sensor range to a range of four options:
  if (val>=0 && val<=19) range = 0;
  if (val>=20 && val<=39) range = 1;
  if (val>=40 && val<=399) range = 2;
  if (val>=400 && val<=1024) range = 3;
  // do something different depending on the range value:
  switch (range) {
    case 0:    // Синий - чистый воздух (переносится человеком в годах) от 1 до 19 
      Serial.print(val);
      Serial.println(" - Free Air ");
      analogWrite(B,100);
      analogWrite(G,0);
      analogWrite(R,0);
      analogWrite(Z,0);
      break;
    case 1:    // Зелёный - нормальная атмосфера (переносится человеком в днях) 20-39
      Serial.print(val);
      Serial.println(" - Green ");
      analogWrite(B,0);
      analogWrite(G,255);
      analogWrite(R,0);
      analogWrite(Z,0);
      break;
    case 2:    // Оранжевый - опасная концентрация (переносится человеком в часах) 40-399
      Serial.print(val);
      Serial.println(" - Orange ");
      analogWrite(B,0);
      analogWrite(G,0);
      analogWrite(R,255);
      analogWrite(Z,0);
      break;
    case 3:    // Красный - критическая концентрация (переносится человеком в минутах) 400-1023
      Serial.print(val);
      Serial.println(" - Red ");
      analogWrite(B,0);
      analogWrite(G,0);
      analogWrite(R,0);
      analogWrite(Z,255);
      break;
    default:
      Serial.print(val);
      Serial.println(" - Out of range ");
      return;
  }
  delay(200);        // delay in between reads for stability
  analogWrite(R,0);
  analogWrite(G,0);
  analogWrite(B,0);
  analogWrite(Z,0);
}

void timerInterrupt(){
  disp.regen();
}

void temp(){
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8]; 
  
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  delay(750);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  celsius = (float)raw / 16.0;
}

Однако изучив даташит выяснилось что правильнее греть периодически. Как правильно опрагизовать программный прогрев? На цифровой пин транзистор? А низкий уровень как? Токи выше чем может порт...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я ставлю полевой транзистор. Открываю, жду прогрева, закрываю (питание пропадает).

lazy-fox
Offline
Зарегистрирован: 22.08.2014

Можно подробнее схему управления питанием прогрева? Судя по спецификации нужно 60 сек греть напряжением 5 вольт, потом 90 сек 1.4 вольта, ибо деградирует.

Разово можно включить прибор и определить без всяких схем. Пока включено так:

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если у Вас такая спецификация, то думайте. Я делал по даташиту, там написано, время предварительного прогрева - более 24 часов. причём тупо 5В

lazy-fox
Offline
Зарегистрирован: 22.08.2014

Araris приводил ссылку на pdf mq-7 тремя постами выше. Там есть такое:

Standard circuit: As shown in Fig 2, standard measuring circuit of MQ-7 sensitive components consists of 2 parts. one is heating circuit having time control function (the high voltage and the low voltage work circularly ). The second is the signal output circuit, it can accurately respond changes of surface resistance of the sensor. 

Как сие перевести на церковно-славянский чтоб датчик показывал хотя бы тех попугаев что задумано изготовителем? Кстати там же указаны напряжения Low и High

Symbol

Parameter name

Technical condition

Remark

 

circuit voltage

5V±0.1

Ac or Dc

VH (H)

Heating voltage (high)

5V±0.1

Ac or Dc

VH (L)

Heating voltage (low)

1.4V±0.1

Ac or Dc

 

Load resistance

Can adjust

 
 

Heating resistance

33Ω±5%

Room temperature

TH (H)

Heating time (high)

60±1 seconds

 

TH (L)

Heating time (low)

90±1 seconds

 
 

Heating consumption

About 350mW

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У Вас на схеме написано MQ-4, а пишете про даташит MQ-7. Вы уж определитесь, что у Вас.

lazy-fox
Offline
Зарегистрирован: 22.08.2014

Я привёл схему, подключив по которой значения в попугаях стабильны. У меня датчик MQ-7 так как меряю угарный газ. Измерения в целом соответствуют заявленной в даташите чуствительности к примесям в воздухе. Хотя таких даташитов стопка целая у ж е.

Найти бы разъяснения на русском, лучше в виде схемы электрической принципиальной, что бы служил долго и безопасно. Оформить тогда можно в корпусе автомата на din-рейку в щитке. При разумном подходе ардуину и индикацию упаковать можно. Всё таки много пока на Руси твёрдотопливных котлов и печей эксплуатируется. И не редки случаи отравления. 

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

Кстати угарный газ замечательно горит синим пламенем если его поджечь и обеспечить приток воздуха.

Попытку реализовать циклический прогрев нашёл на амперке, но всё равно не понимаю откуда берут 1.4 вольта?

Porosenok
Offline
Зарегистрирован: 06.11.2016

Вот тоже озаботился MQ7. Даташит у него написан настолько косноязычно, что слов нет. Пришлось обратиться за разъяснениями к конкурентам и прибегнуть к экспериментам. В итоге получается следующая картина:

1. Датчик MQ7 достаточно быстро забивается примесями из воздуха, находясь в холодном состоянии. Поэтому после храния его обязательно нужно прокаливать на 5В несколько суток. При этом все адсорбировавшие на поверхность молекулы заменятются кислородом из воздуха. Вообще эта процедура рекомендована всем датчикам на основе оксида олова, независимо от условий их хранения в холодном состоянии.

2. Питание датчику нужно импульсное. Сперва прокаливание 60 сек, необходимо для очистки поверхности от осевших примесей и восстановления чувствительности датчика. Затем остывание до температуры измерения в течение 90сек и непосредственно измерение.  Если датчик не прокаливать, а всё время держать в состоянии измерения, то после обнаружения в воздухе детекируемых газов, чувствительность датчика восстанавливается очень медленно или не восстанавливается вообще.

В итоге цикл измерения MQ7 - 2.5минуты. Конкуренты (Figaro 3870) делают это за 20 секунд, но требуют за это в 10 раз больше денег.

3.  Рекомендуется подавать измерительное напряжение только в момент измерения. Объяснений никаких не приводится.

4. Чувствительность к угарному газу пока не проверял - бодяжить серную и муравьиную кислоты нет возможности.  Датчик очень чувствителен к этанолу и изопропанолу. Достаточно легкого запаха спирта в помещении и датчик бурно реагирует. К метану, пропану и дыму чувствительность низкая.

5. Питание  5В/1.4В можно получить, включив последовательно c нагревателем контакты реле, зашунтированные резистором 82Ом, и подключить это к источнику в 5В. Реле включается на 60сек и выключается на 90сек соответственно. Реле должно быть, естественно, твердотельным, чтобы управлять им прямо с ардуино.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Porosenok пишет:

Питание  5В/1.4В можно получить, включив последовательно c нагревателем контакты реле, зашунтированные резистором 82Ом, и подключить это к источнику в 5В. Реле включается на 60сек и выключается на 90сек соответственно. Реле должно быть, естественно, твердотельным, чтобы управлять им прямо с ардуино.

Если делать так, то надо резистор как минимум о 0,25Вт, 0,125 не пойдёт, т.к. на нём будет 0,15 выделяться.

Porosenok
Offline
Зарегистрирован: 06.11.2016

ЕвгенийП пишет:

Если делать так, то надо резистор как минимум о 0,25Вт, 0,125 не пойдёт, т.к. на нём будет 0,15 выделяться.

Логично. Я вообще включил последовательно два резистора 0,125Вт по 39Ом.