Датчик CO2 (углекислого газа) T6703

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Датчик CO2 (углекислого газа) T6703

Сообщение schel4ok » Пн апр 12, 2021 9:36 pm

Купил я датчик CO2, работающий по интерфейсу I2C. Называется T6703-2K 19W11.
И напрягает, что по нему очень мало инфы в инете.
Скетчей нигде нет. Схемы подключения тоже.

Я думал надо соединить SDA, SCL, V+, GND и контакт 6 с ардуиной.
Но потом нашёл схему в даташите от производителя и там вроде написано, что контакт SCL надо соединить резистором 4,7кОм. Только к 5В или к земле не написано. И зачем-то контакт PWM куда-то подключается. Вот тут вырезка
Изображение

Вот тут https://ab-log.ru/smart-house/ethernet/megad-2561-t6703 этот датчик соединяли к контроллеру MegaD и очень оптимистично пишут, что можно его легко вывести из строя неверным подключением пинов. А стоит он 2000.

Короче есть кто уже его подключал успешно? Нужна рабочая схемка и скетч
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Датчик CO2 (углекислого газа) T6703

Сообщение Kod.Begemot » Вт апр 13, 2021 1:58 pm

Датчик такой с Мегой (2561) работает отлично и без проблем. За неимением в собственности последней подключил к esp8266 и без проблем получаю данные по MQTT. Стандартные библиотеки, ничего выдумывать не нужно . получаю и CO2 и влажность с датчика HUM21D. Скетч выкладывать не хочу, он сильно тестовый и корявый. Но если надо могу прислать.
P.S. Там ньюансы только с пинами, на которые надо сажать, не все корректно работают как i2c в esp8266.
P.P.S. не вижу проблем с "неправильным подключением". Многие датчики подохнут от переполюсовки, или подключения питания на выходные пины. Элементарная внимательность нам поможет.
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Датчик CO2 (углекислого газа) T6703

Сообщение schel4ok » Вт апр 13, 2021 3:58 pm

меня больше беспокоит, что контакт SCL надо соединить резистором 4,7кОм. К чему его подтягивать? к нулю или к 5В?
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Датчик CO2 (углекислого газа) T6703

Сообщение schel4ok » Пн апр 26, 2021 7:33 pm

в общем у меня никак данные с датчика СО2 не читает

вот такой скетч поместил в отдельный файл

Код: Выделить всё

#define T6703_Address 0x15                        // T6703 i2C Address
int data [4];
int ppmValue;

void T6703init(){
  initStart(F("Telair T6703 CO2 Sensor"));
  Serial.println("Initializing...............................");
  Serial.println("Starting i2C Communicate ADDR 0x15.........");
  started("Telair T6703 CO2 Sensor");
  delay(delay2s);
  Wire.begin();
  delay(delay1s);
}


void T6703loop(){
  int ppmValue = readSensor();
  if (ppmValue > 0) {
      Serial.println("CO2-Carbon Dioxide Read Value > ");
      Serial.println(ppmValue);
  } else {
      Serial.println("ERROR | Failed to communicate to the sensor");
  }
      delay(delay2s);
}

int readSensor(){
    Wire.beginTransmission(T6703_Address);
    Wire.write(0x04);
    Wire.write(0x13);
    Wire.write(0x8B);
    Wire.write(0x00);
    Wire.write(0x01);
    Wire.endTransmission();
    delay(delay2s);
    Wire.requestFrom(T6703_Address, 4); //Request 4 bytes from the sensor
    data[0] = Wire.read();
    data[1] = Wire.read();
    data[2] = Wire.read();
    data[3] = Wire.read();
    Serial.println("FUNCTION CODE >");
    Serial.println(data[0], HEX);
    Serial.println("");
    Serial.println("BYTE COUNT > ");
    Serial.println(data[1], HEX);
    Serial.println("");
    Serial.println("MOST SIGNIFICANT BIT > 0x");
    Serial.println(data[2],HEX);
    Serial.println("");
    Serial.println("LEAST SIGNIFICANT BIT > 0x");
    Serial.println(data[3],HEX);
    ppmValue = (((data[2] & 0x3F ) << 8) | data[3]);
}

и потом его вызываю в главном файле вот так

Код: Выделить всё

void setup() {
  
  serialInit();
  ethernetInit(); 
  MQTTreconnect();
  bmeInit();
  T6703init();
  
}

void loop() {

  client.loop();
  
  if (!client.connected())  { MQTTreconnect();  }
  if (myTimer10s.isReady()) {   // опрашивать датчики раз в 10 секунд
    bmeLoop();
    T6703loop();
  }
}

далее смотрю в монитор порта и датчик СО2 всегда присылает такие ответы

Код: Выделить всё

19:16:58.832 -> FUNCTION CODE >
19:16:58.832 -> 4
19:16:58.832 -> 
19:16:58.832 -> BYTE COUNT > 
19:16:58.866 -> 2
19:16:58.866 -> 
19:16:58.866 -> MOST SIGNIFICANT BIT > 0x
19:16:58.900 -> 1
19:16:58.900 -> 
19:16:58.900 -> LEAST SIGNIFICANT BIT > 0x
19:16:58.933 -> C6 (тут бывают значения от C5 до C9)
19:16:58.933 -> ERROR | Failed to communicate to the sensor
Ни разу считать данные с датчика не получилось. Предварительно я заливал в ардуино скетч I2Cscanner и убедился, что в мониторе порта видно датчик BME по адресу 76 и датчик T6703 по адресу 15.
Потом залил свой скетч и там данные с датчика BME приходят, а с T6703 всё время ошибка.

Датчик BME просто соединил с контактами SDA, SCL без резисторов. А у датчика T6703 контакт SDA соединил без резистора.
А контакт SCL подтянул к 5В через резистор 4,7кОм.
PIN 1 - I2C_SDA есть встроенная подтяжка на 5V резистором 4.7кОм
PIN 2 - I2C_SCL подтянул к 5V внешним резистором 4.7кОм
PIN 3 - V+
PIN 4 - GND
PIN 5 - не соединял
PIN 6 - GND

если убрать резистор, то ошибки немного другие

Код: Выделить всё

19:37:23.696 -> LEAST SIGNIFICANT BIT > 0x
19:37:23.731 -> 9E (ещё видел такие коды 9A, 95, 96, 97, 98, 99, 9B, 9C, AD, A0, A1, A2, A4)
19:37:23.731 -> ERROR | Failed to communicate to the sensor
Ответить