Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Прецизионный датчик кубового давления на Arduino

Форум самогонщиков Приборы и электр(он)ика
1 2 1
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
07 Марта 23, 10:46
Коллеги, всем привет!
Решил поделиться поделкой - прецизионным датчиком кубового давления. Может кому пригодится.
Ранее пользовался таким, механическим, https://aliexpress.ru/....44a14aa6s230qC
однако его точность на малых давлениях (до 20 мм рт ст) оставляет желать лучшего.
На Али заказал вот такой датчик и подружил его с Arduino.
https://aliexpress.ru/..._id=65907929150
но он оказался так себе (дешёвка ведь!), не термокомпенсирован, дрейф нуля большой и при строго фиксированном давлении (проверял водным столбом) его показания плывут.
Нашел поприличнее, с термокомпенсацией и без АЦП
https://aliexpress.ru/...000001118551111
перепаял его, благо цоколевка у них одинаковая. Протестировал на давлении воды - показания стабильны и при подборе коэфф. преобразования данные с водяным столбом совпадают мм в мм.
В загашнике завалялся неиспользованний 1,5" дисплей, подумалось, а почему бы его не использовать?
https://aliexpress.ru/....7ccd4aa6L56Eyt
В результате получилось вот так.
После подачи питания необходимо нажать кнопку сброса смещения нуля датчика, оно оказалось небольшим, всего 20-25 мм вод ст.
Сдедует выразить благодарность коллеге Volume за доработанный скетч и библиотеку. Коэфф. преобразования давления в Pascal находится в библиотеке HX710B.
Пины Arduino, дисплея, датчика и кнопки следующие:
9 > CS дисплей
8 > DC дисплей
7 > RES дисплей
6 > SDA дисплей
5 > SCL дисплей
4 > data (out) датчик
3 > clock (sck) датчик
2 > кнопка сброса, второй конец на массу.
P.S. В последствии на Али попался вот такой датчик
https://aliexpress.ru/...000018255263705
также с 24 битным АЦП и уже готовой шиной I2C, более удобный и для встраивания в автоматику, и для показометра. Точность такая же, как и в представленном варианте, на выходе данные уже в Pascal.
внешний вид.jpg
внешний вид.jpg Прецизионный датчик кубового давления на Arduino. Приборы и электр(он)ика.
внутри.jpg
внутри.jpg Прецизионный датчик кубового давления на Arduino. Приборы и электр(он)ика.
после включения.jpg
после включения.jpg Прецизионный датчик кубового давления на Arduino. Приборы и электр(он)ика.

библиотеки.zip 1.1 Мб
скетч XGZP010SB1SOP.zip 1.6 Кб
Gafar652 Студент Владивосток 16 5
Отв.1  05 Сент. 23, 18:02
Здравствуйте, а можно подробней, схему, какая ардуинка,и как все это дело прошивать.
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.2  05 Сент. 23, 21:24
Arduino Pro mini, схема не требуется, поскольку пины, что и куда подключать указано в сообщении, а как программировать - google или яндекс в помощь. Инфы в инете море.
Gafar652 Студент Владивосток 16 5
Отв.3  09 Сент. 23, 06:42
Здравствуйте, а еще подскажите пожалуйста,послелний ,указанный вами датчик давленияaliexpress.ru перепаивается на платку первого указанного вами датчикаaliexpress.ru И еще, там 3 дачика,с диапазонами измерений :0-5,0-10 и 0-100 кпа,какой нужен?

Добавлено через 8мин.:

Да ,и какое для всего этого нужно питание- 3.3 или 5 вольт?
И подойдет такая ардуинка https://m.aliexpress.ru/...000024349272661
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.4  09 Сент. 23, 07:04, через 22 мин
послелний ,указанный вами датчик давленияaliexpress.ru перепаивается на платку первогоGafar652, 09 Сент. 23, 06:42
Добрый день.
Нет конечно, зачем его перепаивать, он ведь уже в DIP корпусе
Скриншот 09-09-2023 070605.jpg
Скриншот 09-09-2023 070605. Прецизионный датчик кубового давления на Arduino. Приборы и электр(он)ика.
и у него всё внутри есть. Работает он со своей стандартной библиотекой XGZP6897D
Для наших дел 5 кПа - выше крыши. Питание любое 3,3V - 5V (2.5-5.5V по описанию)
Gafar652 Студент Владивосток 16 5
Отв.5  09 Сент. 23, 07:21, через 17 мин
А на какой диапазон нужен датчик и ардуинка ,по ссылке ,подойдет?

Добавлено через 1мин.:

От 0-5?
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.6  09 Сент. 23, 07:29, через 8 мин
ардуинка ,по ссылке ,подойдет?Gafar652, 09 Сент. 23, 07:21
Если она совместима с ATmega328, то подойдет. Пробуй.
Pin датчика
2 + плюс 5v
4 А4 Arduino I2C
5 А5 Arduino I2C
6 - минус
Gafar652 Студент Владивосток 16 5
Отв.7  09 Сент. 23, 07:40, через 12 мин
Так датчик от 0-5 кра брать?
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.8  09 Сент. 23, 08:39, через 60 мин
Так датчик от 0-5 кра брать?Gafar652, 09 Сент. 23, 07:40

Для наших дел 5 кПа - выше крыши. Питание любое 3,3V - 5V (2.5-5.5V по описанию)gol_avto, 09 Сент. 23, 07:04
Gafar652 Студент Владивосток 16 5
Отв.9  09 Сент. 23, 09:02, через 23 мин
Спасибо:)
Kotische Академик Саратов 8.1K 2.5K
Отв.10  09 Сент. 23, 15:06
В последствии на Али попался вот такой датчик
https://aliexpress.ru/...000018255263705
также с 24 битным АЦП и уже готовой шиной I2Cgol_avto, 07 Марта 23, 10:46
А говорил "программировать не умею" )))
Очень интересный девайс!
Если бы у меня не было готового готового китайского показометра для измерения давления, я бы наверное озадачился его применением "в мирных целях".

он оказался так себе (дешёвка ведь!), не термокомпенсирован, дрейф нуля большой и при строго фиксированном давлении (проверял водным столбом) его показания плывут.gol_avto, 07 Марта 23, 10:46
Ну еслиб ко мне обратился, я бы тебе пару идей подкинул как с этим бороться, ну на тет и суда нет )))
Gafar652 Студент Владивосток 16 5
Отв.11  09 Сент. 23, 15:27, через 22 мин
Прошу прощения за назойливость, но я в этой теме, новичок. яВ скетче прописано обращение к библиотеке датчика HX710B и моя попытка поменять на библиотеку XGZP6897D при рроверке приводит к ошибке, так как и дальше в скетче прописан датчик HX710B- ошибка на строке HX710B pressure_sensor;. Я поменял на XGZP6897D pressure_sensor, но тоже выдает ошибку- no matching function for to call to XGZP6897D::XGZP6897D0

Добавлено через 7мин.:

Вот описание скопировал

Arduino: 1.8.13 (Windows 7), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"

XGZP010SB1SOP:18:11: error: no matching function for call to 'XGZP6897D::XGZP6897D()'
XGZP6897D pressure_sensor;
^~~~~~~~~~~~~~~
In file included from D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:1:0:
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:17:5: note: candidate: XGZP6897D::XGZP6897D(uint16_t)
XGZP6897D(uint16_t K); // K depends on sensor. See datasheet.
^~~~~~~~~
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:17:5: note: candidate expects 1 argument, 0 provided
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:14:7: note: candidate: constexpr XGZP6897D::XGZP6897D(const XGZP6897D&)
class XGZP6897D
^~~~~~~~~
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:14:7: note: candidate expects 1 argument, 0 provided
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:14:7: note: candidate: constexpr XGZP6897D::XGZP6897D(XGZP6897D&&)
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:14:7: note: candidate expects 1 argument, 0 provided
XGZP010SB1SOP:19:1: error: 'U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI' does not name a type
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 6, /* cs=*/ 9, /* dc=*/ 8, /* reset=*/ 7);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino: In function 'void setup()':
XGZP010SB1SOP:30:3: error: 'u8g2' was not declared in this scope
u8g2.begin();
^~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:30:3: note: suggested alternative: 'u8g_t'
u8g2.begin();
^~~~
u8g_t
XGZP010SB1SOP:33:35: error: no matching function for call to 'XGZP6897D::begin(const int&, const int&)'
pressure_sensor.begin(DOUT, SCLK);
^
In file included from D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:1:0:
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:18:10: note: candidate: bool XGZP6897D::begin()
bool begin(); // true: device responding. false:device not responding
^~~~~
C:UsersAdmnDocumentsArduinolibrariesXGZP6897Dsrc/XGZP6897D.h:18:10: note: candidate expects 0 arguments, 2 provided
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino: In function 'void loop()':
XGZP010SB1SOP:43:25: error: 'class XGZP6897D' has no member named 'is_ready'
if (pressure_sensor.is_ready()) {
^~~~~~~~
XGZP010SB1SOP:44:29: error: 'class XGZP6897D' has no member named 'get_value'
raw = pressure_sensor.get_value(1);
^~~~~~~~~
XGZP010SB1SOP:47:64: error: 'class XGZP6897D' has no member named 'raw2mmWtr'
Serial.print("mm W:"); Serial.println(pressure_sensor.raw2mmWtr(raw),0);
^~~~~~~~~
XGZP010SB1SOP:49:59: error: 'class XGZP6897D' has no member named 'raw2pascal'
Serial.print(" Pa:"); Serial.print(pressure_sensor.raw2pascal(raw));
^~~~~~~~~~
XGZP010SB1SOP:50:62: error: 'class XGZP6897D' has no member named 'raw2mmHg'
Serial.print("mm Hg:"); Serial.print(pressure_sensor.raw2mmHg(raw),0);
^~~~~~~~
XGZP010SB1SOP:56:7: error: 'u8g2' was not declared in this scope
u8g2.clearBuffer();
^~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:56:7: note: suggested alternative: 'u8g_t'
u8g2.clearBuffer();
^~~~
u8g_t
XGZP010SB1SOP:58:20: error: 'u8g2_font_unifont_t_cyrillic' was not declared in this scope
u8g2.setFont(u8g2_font_unifont_t_cyrillic);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:58:20: note: suggested alternative: 'u8g_font_unifont_8_9'
u8g2.setFont(u8g2_font_unifont_t_cyrillic);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
u8g_font_unifont_8_9
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino: In function 'void tft_out(long int)':
XGZP010SB1SOP:72:3: error: 'u8g2' was not declared in this scope
u8g2.clearBuffer();
^~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:72:3: note: suggested alternative: 'u8g_t'
u8g2.clearBuffer();
^~~~
u8g_t
XGZP010SB1SOP:75:16: error: 'u8g2_font_ncenB18_tn' was not declared in this scope
u8g2.setFont(u8g2_font_ncenB18_tn);
^~~~~~~~~~~~~~~~~~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:75:16: note: suggested alternative: 'u8g_font_ncenB18r'
u8g2.setFont(u8g2_font_ncenB18_tn);
^~~~~~~~~~~~~~~~~~~~
u8g_font_ncenB18r
XGZP010SB1SOP:77:30: error: 'class XGZP6897D' has no member named 'raw2mmWtr'
u8g2.print(pressure_sensor.raw2mmWtr(raw),0);
^~~~~~~~~
XGZP010SB1SOP:78:16: error: 'u8g2_font_unifont_t_cyrillic' was not declared in this scope
u8g2.setFont(u8g2_font_unifont_t_cyrillic);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:78:16: note: suggested alternative: 'u8g_font_unifont_8_9'
u8g2.setFont(u8g2_font_unifont_t_cyrillic);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
u8g_font_unifont_8_9
XGZP010SB1SOP:92:30: error: 'class XGZP6897D' has no member named 'raw2mmHg'
u8g2.print(pressure_sensor.raw2mmHg(raw),1);
^~~~~~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino: In function 'void zero_offset_fix()':
XGZP010SB1SOP:101:5: error: 'u8g2' was not declared in this scope
u8g2.clearBuffer();
^~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:101:5: note: suggested alternative: 'u8g_t'
u8g2.clearBuffer();
^~~~
u8g_t
XGZP010SB1SOP:103:18: error: 'u8g2_font_unifont_t_cyrillic' was not declared in this scope
u8g2.setFont(u8g2_font_unifont_t_cyrillic);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:PRESSURE50412.370635XGZP010SB1SOPXGZP010SB1SOP.ino:103:18: note: suggested alternative: 'u8g_font_unifont_8_9'
u8g2.setFont(u8g2_font_unifont_t_cyrillic);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
u8g_font_unifont_8_9
XGZP010SB1SOP:104:26: error: 'class XGZP6897D' has no member named 'wait_ready_timeout'
if (!pressure_sensor.wait_ready_timeout(1000, 20)){
^~~~~~~~~~~~~~~~~~
XGZP010SB1SOP:115:32: error: 'class XGZP6897D' has no member named 'read_average'
long raw = pressure_sensor.read_average(64);
^~~~~~~~~~~~
XGZP010SB1SOP:116:21: error: 'class XGZP6897D' has no member named 'set_offset'
pressure_sensor.set_offset(raw);
^~~~~~~~~~
exit status 1
no matching function for call to 'XGZP6897D::XGZP6897D()'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.12  09 Сент. 23, 16:11, через 44 мин
А говорил "программировать не умею" )))
Очень интересный девайс!Kotische, 09 Сент. 23, 15:06
Дык, честно ни бум бум. if.... go to - что это значит? Даже гугл не помошник 😂
Это не я, это всё Volume.

Добавлено через 3мин.:

Прошу прощения за назойливость, но яGafar652, 09 Сент. 23, 15:27
Я скинул оригинальную библиотеку для этого датчика, там примеры со скетчем. Его и пользуй. Тот, который ранее, не предназеачен для этого датчика.

Добавлено через 6мин.:

скетче прописано обращение к библиотеке датчика HX710B и моя попытка поменять на библиотеку XGZP6897DGafar652, 09 Сент. 23, 15:27
В этом скетче не надо ничего менять. Он не для этого датчика XGZP6897D
koolhatcker Специалист РФ 196 64
Отв.13  28 Сент. 23, 17:45
также с 24 битным АЦП и уже готовой шиной I2C, более удобный и для встраивания в автоматику, и для показометраgol_avto, 07 Марта 23, 10:46
Подтверждаю. Переживал, что XGZP6847D не будет работать от 3,3В с STM32, но трудится замечательно уже почти 2 года(0-10kPa).
До него брал MS5837. Тоже датчик хороший. Электрически и программно с ним всё получилось. Но присоединяться очень неудобно. Всё крошечное. В итоге свернул ему голову(( После чего и заказал XGZP6847D.
dranek Магистр Минск 230 135
Отв.14  01 Окт. 23, 07:26
Нашел немного дешевле.
XGZP6857D
https://sl.aliexpress.ru/p?key=wFqMUSR
Думается мне надо брать 0-10 кПа. А лучше сразу -50- 50 кПа, а вдруг с вакуумом захочетмя поиграться.
Как у него с агрессивными средами?
Не портится от спиртовых паров?
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.15  01 Окт. 23, 19:00
-50 кПа не многовато для вакуума? До - 25 вакуумируют, если что.
koolhatcker Специалист РФ 196 64
Отв.16  01 Окт. 23, 19:23, через 24 мин
Как у него с агрессивными средами?dranek, 01 Окт. 23, 07:26
Официально - никак. For Non-corrosive Gas or Air. Но зачем помещать его в агрессивную среду?

Добавлено через 19мин.:

-50 кПа не многовато для вакуума?gol_avto, 01 Окт. 23, 19:00
Видимо -25...+25 кПа - это нестандартный диапазон для этих датчиков.
Там АЦП 24 бита. Как по мне, при таком раскладе, ваааще без разницы: -25...+25 или -50...+50.
dranek Магистр Минск 230 135
Отв.17  01 Окт. 23, 21:21
Понятно, значит -40...+40 кПа из предлагаемых в магазине.
Агрессивная среда в предполагаемом мной использовании горячая кислая барда или спиртовые пары с кислым брызгоуносом от браги. Ранее таким не занимался, но думаю подключать его тогда надо с маслом в тонкой трубке.
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.18  01 Окт. 23, 21:48, через 28 мин
но думаю подключать его тогда надо с маслом в тонкой трубке.dranek, 01 Окт. 23, 21:21
Дык, от куба длинная силиконовая трубка, желательно вертикально или хотя бы вверх, далее капельница, а в неё иглу от шприца - аля жиклер и буфер. Всё - работает годами.
gxtkjdjl Профессор архангельск 6.4K 1.7K
Отв.19  03 Окт. 23, 15:23
коллеги а этот датчик без ардуины можно применить ? типа как тот же MQ-3, например, что бы в г.б работал, как аварийный.