• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 он как то работает, работает кто с этим проектом? Там вообще без заморочек, указал пины и все. Может кто код вытащить, как там снимается?
 

Вложения

Сверху Снизу