• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Датчик давления воды i2c

BlueBeard

Member
Спасибо ,по приведенной ссылке мало чего полезного, кроме что автор "много занимался секасом с датчиком", но на их форуме упоминается что в датчике китайский АЦП JHM1200. А вот поиском по "JHM1200" найдено https://forum.arduino.cc/t/my-i2c-device-response-the-same-value-until-i-reconnect-the-power/878743 уже что то с чем можно работать.
 

nikolz

Well-known member

pvvx

Активный участник сообщества
откуда взяли что это датчик давления воды?
у продавца написано, что это датчик газа: working principle: Gas sensor
У какого продавца?
От продаванов на https://ab-log.ru/smart-house/shop
Цифровой датчик давления воды (интерфейс I2C).
Подробнее
Подключается к цифровым портам исполнительных модулей или к разъему XT2 контроллера MegaD-2561
3185 ₽
А тут, на али за 1.2 тр - это комплект:
Будьте внимательны: это цена датчика, доски и процедуры. Пожалуйста, свяжитесь с магазином, чтобы купить его отдельно.
И любой i2c логгер считывает протокол работы с ним ...

И о "working principle":
В датчиках давления для жидкости стоят датчики давления газа и мембрана...
 

BlueBeard

Member
откуда взяли что это датчик давления воды?
где то на просторах инета встречал что кто то прикрутил для управления насосом водоснабжения, а поскольку стоимость аналогового + ads115 аналогична, если не выше, решил пощупать.
 

interkom

New member
Добрый день. У кого нибудь получилось поженить этот датчик с ESPHOME ?
У меня даже скан I2C его не находит
i2c:
scan: true
sda: GPIO4
scl: GPIO5

[19:50:14][i2c.arduino:054]: Results from i2c bus scan:
[19:50:14][i2c.arduino:056]: Found no i2c devices!

Пришло 2 датчика, оба не находятся
Подключены к NodeMCU, даже подтягивающие резисторы 10кОм пробовал ставить, менял местами sda и scl, результат отрицательный.
 

interkom

New member
Дополнения.
Версия ESPHOME - [app:102]: ESPHome version 2022.6.2 compiled on Jul 17 2022
Tasmota и wifi-iot.com датчик находят, но Tasmota судя по всему такой датчик не знает, а wifi-iot.com наверное знает, но в платной версии.
Скорее всего ошибка в ESPHOME. Буду ждать обновлений. Как только датчик начнёт находится сканером, буду продолжать дальше.
 

jangolen

New member
Дополнения.
Версия ESPHOME - [app:102]: ESPHome version 2022.6.2 compiled on Jul 17 2022
Tasmota и wifi-iot.com датчик находят, но Tasmota судя по всему такой датчик не знает, а wifi-iot.com наверное знает, но в платной версии.
Скорее всего ошибка в ESPHOME. Буду ждать обновлений. Как только датчик начнёт находится сканером, буду продолжать дальше.
Получилось считать?
Подрубил к UNO с питанием 3.3в байтики читает
00:05:58.558 -> Received 6 bytes: 4, 19, 2, F1, 9B, FC,
00:05:58.558 -> Pressure 1639153
00:05:58.558 -> Temperature 39932
Если дуть или разряжать, то число относящееся к давлению меняется соответственно, а температура наоборот уменьшается при нагревании.
Перевод в КPA в китайском скрипте явно кривой и ничего не может дать. Явно нужно самим его калибровать. Раз что-то меряет, то остается подобрать формулу аналогичную АЦП аналоговых датчиков.
 

interkom

New member
Получилось считать?
Подрубил к UNO с питанием 3.3в байтики читает
00:05:58.558 -> Received 6 bytes: 4, 19, 2, F1, 9B, FC,
00:05:58.558 -> Pressure 1639153
00:05:58.558 -> Temperature 39932
Если дуть или разряжать, то число относящееся к давлению меняется соответственно, а температура наоборот уменьшается при нагревании.
Перевод в КPA в китайском скрипте явно кривой и ничего не может дать. Явно нужно самим его калибровать. Раз что-то меряет, то остается подобрать формулу аналогичную АЦП аналоговых датчиков.
Нет, пока не получилось.
Если не трудно, выложите плз свой код.
 

Ezhoff

New member
кто-нибудь с подобным датчиком Датчик давления воды i2c работал есть примеры кода даташит или вообще что-нибудь?
Вот написал две функции, одна читает давление, вторая температуру, первую откалибровал сверяя с фактом, со второй ничего не делал, нужно калибровать, но уже сть с чем работать.
// read_press считывает данные давления из датчика
float read_press(){
//Отправьте команду 0xac и прочитайте возвращенные шесть слов. данные раздела
uint8_t buffer[6] = { 0 }; //byte
uint32_t press_raw = 1678500; //unsigned long uint32_t
uint32_t press; //unsigned long uint32_t
buffer[0] = 0xAC;
Wire.beginTransmission(0x78);
Wire.write(buffer[0]); // отправляем команду датчику сформировать ответ
Wire.endTransmission();
delay(5);
while (1) {
if (Wire.available()) { //Прочтите статус IIC, чтобы определить, занят ли IIC.
delay(1);
} else break;
}
//Чтение байтов данных через IIC
int n = Wire.requestFrom(0x78, 6); //обращаемся по адресу, считываем 6 байт, освобождаем шину для других устройств
for (int i = 0; i < n; i++) {
buffer = Wire.read();
}
//Преобразуйте возвращенные значения давления и температуры в фактические значения
press_raw = ((uint32_t)buffer[1] << 16) | ((uint32_t)buffer[2] << 8) | buffer[3];
press = (double)press_raw / 16777.216-99.67;
press = map(press*100, 0, 816, 0, 1000)/100; // По калибровке
return press;
}
// read_temp считывает сырые данные температуры из датчика
float read_temp(){
//Отправьте команду 0xac и прочитайте возвращенные шесть слов. данные раздела
uint8_t buffer[6] = { 0 }; //byte
uint16_t temp_raw = 0; //unsigned int uint16_t
buffer[0] = 0xAC;
Wire.beginTransmission(0x78);
Wire.write(buffer[0]); // отправляем команду датчику сформировать ответ
Wire.endTransmission();
delay(5);
while (1) {
if (Wire.available()) { //Прочтите статус IIC, чтобы определить, занят ли IIC.
delay(1);
} else break;
}
//Чтение байтов данных через IIC
int n = Wire.requestFrom(0x78, 6); //обращаемся по адресу, считываем 6 байт, освобождаем шину для других устройств
for (int i = 0; i < n; i++) {
buffer = Wire.read();
}
//Преобразуйте возвращенные значения температуры в фактические значения
temp_raw = ((uint32_t)buffer[4] << 8) | (buffer[5] << 0);
float temp = (double)temp_raw / 655.36;
//temp = temp * 19000 - 4000;
return temp;
}
 

pvvx

Активный участник сообщества
@Ezhoff - Какая точность и повторяемость замеров у данного датчика?
У таких типов датчиков в 80% случаев показания сильно зависят от температуры...
И датчик относительный (измеряет относительно атмосферного давления) или нет?
 

GDI

New member

enjoynering

Well-known member
У таких типов датчиков в 80% случаев показания сильно зависят от температуры...
Это у аналоговых типа 0мА...20мА такое наблюдается. Тут уже i2c и производителю добавить компенсацию в кристал ничего не стоит (с учётом того сколько они производят в сутки).
 

pvvx

Активный участник сообщества
Это у аналоговых типа 0мА...20мА такое наблюдается. Тут уже i2c и производителю добавить компенсацию в кристал ничего не стоит (с учётом того сколько они производят в сутки).
Для вычисления реальной компенсации требуется калибровка на реальных давлениях и температурах - а это время и цена поделия.
 

enjoynering

Well-known member
Один раз откалибровал и все, а не как у вас в соседней теме с аналоговым и без термокомпесации :)
 

pvvx

Активный участник сообщества
Один раз откалибровал и все, а не как у вас в соседней теме с аналоговым и без термокомпесации :)
Тут калибруй или нет - ещё неизвестно, может ли датчик работать с водой.
На "импортный" кристалл, как пишет китаец-продавец, в даташите писано: для использования с неагрессивными, неионогенными газами, такими как воздух и другие сухие газы.
 

nikolz

Well-known member
Тут калибруй или нет - ещё неизвестно, может ли датчик работать с водой.
На "импортный" кристалл, как пишет китаец-продавец, в даташите писано: для использования с неагрессивными, неионогенными газами, такими как воздух и другие сухие газы.
Я вам сразу написал Выше ,что датчик для газа.
1697960878734.png
 

pvvx

Активный участник сообщества
Я вам сразу написал Выше ,что датчик для газа.
А я ещё раз повторю - пока неизвестно. Есть ли там мембрана в конструкции...
Я их не покупал - жду кто другой проверит, т.к. пока не нужны.
 

StanislavM

New member
Победил кто датчик то?
Купил на алике, несколько штук, хочу замерять давление воды и температуру. По факту не удалось точно определить модель датчика, опирался на даташит XGZP6816D-Barometric-Pressure-Sensor-V1.3

NodeMCU v3. SDA SCL подтянуты через 10kOm к 3.3В

ESPhome сканер его не видит. Программный сканер его определяет по адресу 0х78. Перепробовано куча кода. Все как в даташите и из интерента. В итоге:
1. Датчик принимает команду АС.
2. Срабатывает режим занятости (производит замеры)
3. После этого скидывает 6 байт
4. Показывает бред =)

Request: 6 Stat[100] 19,f7,d9:19f7d9 – 9d,35:40245
44.48C 207.00Pa

Request: 6 - ответ от req=Wire.requestFrom(I2C_device_address, byte(6)); Далее:1 байт (статус) бинарный вывод, 3 байта давления (вывод ulong HEX), 2 байта температура (вывод word 10)

Давлением еще не занимался, занимался для начала температурой. По приложенному даташиту диапазон -40 ... +150, по даташиту на 1200 (тут из сообщений https://en.woosens.com/index.php?m=content&c=index&a=show&catid=98&id=348) диапазон -20 ... +85, что меняет формулу расчета. Код можно тут: https://forum.arduino.cc/t/my-i2c-device-response-the-same-value-until-i-reconnect-the-power/878743

Причем самое что интересное, при нагревании RAW температуры падает =)
при комнатной температуре +22: a2,56:41558
при кипячении в воде +100: 4c,33:19507

у кого то он вообще адекватно работает? тут же https://ab-log.ru/smart-house/ethernet/megad-pressure-sensor он как то работает, работает кто с этим проектом? Там вообще без заморочек, указал пины и все. Может кто код вытащить, как там снимается?
 

Вложения

Сверху Снизу