Купил я датчик 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.
Короче есть кто уже его подключал успешно? Нужна рабочая схемка и скетч
Датчик CO2 (углекислого газа) T6703
Модератор: immortal
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Датчик CO2 (углекислого газа) T6703
Датчик такой с Мегой (2561) работает отлично и без проблем. За неимением в собственности последней подключил к esp8266 и без проблем получаю данные по MQTT. Стандартные библиотеки, ничего выдумывать не нужно . получаю и CO2 и влажность с датчика HUM21D. Скетч выкладывать не хочу, он сильно тестовый и корявый. Но если надо могу прислать.
P.S. Там ньюансы только с пинами, на которые надо сажать, не все корректно работают как i2c в esp8266.
P.P.S. не вижу проблем с "неправильным подключением". Многие датчики подохнут от переполюсовки, или подключения питания на выходные пины. Элементарная внимательность нам поможет.
P.S. Там ньюансы только с пинами, на которые надо сажать, не все корректно работают как i2c в esp8266.
P.P.S. не вижу проблем с "неправильным подключением". Многие датчики подохнут от переполюсовки, или подключения питания на выходные пины. Элементарная внимательность нам поможет.
-
- Сообщения: 136
- Зарегистрирован: Вс сен 02, 2018 8:03 am
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: Датчик CO2 (углекислого газа) T6703
меня больше беспокоит, что контакт SCL надо соединить резистором 4,7кОм. К чему его подтягивать? к нулю или к 5В?
-
- Сообщения: 136
- Зарегистрирован: Вс сен 02, 2018 8:03 am
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: Датчик CO2 (углекислого газа) T6703
в общем у меня никак данные с датчика СО2 не читает
вот такой скетч поместил в отдельный файл
и потом его вызываю в главном файле вот так
далее смотрю в монитор порта и датчик СО2 всегда присылает такие ответы
Ни разу считать данные с датчика не получилось. Предварительно я заливал в ардуино скетч 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
если убрать резистор, то ошибки немного другие
вот такой скетч поместил в отдельный файл
Код: Выделить всё
#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
Потом залил свой скетч и там данные с датчика 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