MPS20N0040D (датчик давления) работает в 1/5 диапазона

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

В продолжение темы: http://arduino.ru/forum/obshchii/laboratornyi-stend-dlya-izmereniya-davleniya

Подключил такой  датчик,
по такой схеме:
Датчик - Nano
VCC - 5V
OUT - D2
SCK - D3
GND - GND
и через плоттер получил такой график:

Код: 

/*
Pressure Measurements with the
MPS20N0040D Breakout Board
with the HX710B/HX711 ADC
5V Supply Voltage
 */
#include <Q2HX711.h>

const byte MPS_OUT_pin = 2; // OUT data pin
const byte MPS_SCK_pin = 3; // clock data pin
int avg_size = 10; // #pts to average over

Q2HX711 MPS20N0040D(MPS_OUT_pin, MPS_SCK_pin); // start comm with the HX710B

void setup() {
  Serial.begin(9600); // start the serial port
}

void loop() {
  float avg_val = MPS20N0040D.read();
  delay(10);
  Serial.println(avg_val,0); // print out the average
}

Датчик на 40кПа, что соответствует 300 мм рт.ст., но начинает зашкаливать уже при 65 мм рт.ст. (показания тонометра)
Возможно ли как-то решить данную проблему? Где-то слышал, что проблема в библиотеке, якобы она не подходит к данному операционному усилителю, но ничего подходящего найти не смог.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
  void setGain(byte gain = 128);

MPS20N0040D.setGain(1);

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Форум ужимает картинки, если их размеры превышают примерно 780 пикселей. Поэтому картинки бОльшей ширины размещать на форуме не рекомендуется - на них ничего не видно.

2. Совершенно непонятно, что Вы измеряли, как это делали, что изображено на графике и что получается в коде. Поясните, пожалуйста.

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

1. Учту

2. Как вы и советовали, врезался датчиком в магистраль тонометра и снял с него показания. На графике изображена зависимость давления в магистрали тонометра от времени, во время измерения пульса на руке. В коде берутся значения в датчика и выводится в серийный порт

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

Думаю неверно применил ваш совет, диапазон не изменился. Можете подробнее объяснить?
 


/*
Pressure Measurements with the
MPS20N0040D Breakout Board
with the HX710B/HX711 ADC
5V Supply Voltage
 */
#include <Q2HX711.h>

void setGain(byte gain = 128);

const byte MPS_OUT_pin = 2; // OUT data pin
const byte MPS_SCK_pin = 3; // clock data pin
int avg_size = 10; // #pts to average over

Q2HX711 MPS20N0040D(MPS_OUT_pin, MPS_SCK_pin); // start comm with the HX710B

void setup() {
  Serial.begin(9600); // start the serial port
}

void loop() {
  float avg_val = MPS20N0040D.read();
  delay(10);
  Serial.println(avg_val,0); // print out the average
}
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

поставьте настройку усиления к примеру в setup -

MPS20N0040D.setGain(1);

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020
#include <Q2HX711.h>

void setGain(byte gain = 128);

const byte MPS_OUT_pin = 2; // OUT data pin
const byte MPS_SCK_pin = 3; // clock data pin
int avg_size = 10; // #pts to average over

Q2HX711 MPS20N0040D(MPS_OUT_pin, MPS_SCK_pin); // start comm with the HX710B

void setup() {
  MPS20N0040D.setGain(1);
  Serial.begin(9600); // start the serial port
}

void loop() {
  float avg_val = MPS20N0040D.read();
  delay(10);
  Serial.println(avg_val,0); // print out the average
}

Так?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

lluceu пишет:

1. Учту

2. Как вы и советовали, врезался датчиком в магистраль тонометра и снял с него показания. На графике изображена зависимость давления в магистрали тонометра от времени, во время измерения пульса на руке. В коде берутся значения в датчика и выводится в серийный порт

1. Это надо не учитывать, а переделывать - не видно же ничего!

2. Так а что именно выдает датчик и в каких единицах?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

lluceu пишет:

#include <Q2HX711.h>

void setGain(byte gain = 128);

const byte MPS_OUT_pin = 2; // OUT data pin
const byte MPS_SCK_pin = 3; // clock data pin
int avg_size = 10; // #pts to average over

Q2HX711 MPS20N0040D(MPS_OUT_pin, MPS_SCK_pin); // start comm with the HX710B

void setup() {
  MPS20N0040D.setGain(1);
  Serial.begin(9600); // start the serial port
}

void loop() {
  float avg_val = MPS20N0040D.read();
  delay(10);
  Serial.println(avg_val,0); // print out the average
}

Так?

А теперь объясните, что именно Вы сделали и с какой целью.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

lluceu пишет:

#include <Q2HX711.h>

void setGain(byte gain = 128);

const byte MPS_OUT_pin = 2; // OUT data pin
const byte MPS_SCK_pin = 3; // clock data pin
int avg_size = 10; // #pts to average over

Q2HX711 MPS20N0040D(MPS_OUT_pin, MPS_SCK_pin); // start comm with the HX710B

void setup() {
  MPS20N0040D.setGain(1);
  Serial.begin(9600); // start the serial port
}

void loop() {
  float avg_val = MPS20N0040D.read();
  delay(10);
  Serial.println(avg_val,0); // print out the average
}

Так?

да, библиотеку не смотрел, потом можно усиление попытаться подобрать 1,2,4,8,16 и тд

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

Никаких изменений, упорно измеряет до 70 мм рт.ст.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

ua6em пишет:

  void setGain(byte gain = 128);

MPS20N0040D.setGain(1);

Там библиотека то три строчки.

Gain может быть 128(default), 64 и 32. Если мы хотим растянуть шкалу, то наверное, мне так кажется, имеет смысл растянуть шкалу, установив усиление на 32.

MPS20N0040D.setGain(32);

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Насколько я понял из вывода в статье, ссылка на которую приведена в предыдущем посте - 40 кПа товарищ тоже не получил. Типа сам датчик на 40, а обвязка лажает.

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

Ничего не меняется, ощущение что 70мм рт.ст. предел для данного датчика, хотя везде пишется о 40кПа, что примерно 300мм рт.сб.
А при установке 

MPS20N0040D.setGain(32);

вообще белибирду выдаёт, которая сона никак с давлением не связана. На значения 128, на 16 выдаёт, но так же до 70 мм рт.ст.

В общем хелп, как можно расширить диапазон с 9,3 хотя бы до 18кПа? Так можно будет замерить хотя бы какие-то импульсы во время измерения систолического давления

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

Есть ли шанс решить данную проблему?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

lluceu пишет:

Есть ли шанс решить данную проблему?

а если создать давление и зафиксировать, какую картинку рисует при усилении 32?

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

Зафиксировать давление? Или что показывает? Показания не отличаются ни при каком усилении.
Здесь в конце вроде бы нашли решение: http://arduino.ru/forum/obshchii/datchik-davleniya-s-atsp-hx710b-podklyuchenie-k-arduino

lluceu
lluceu аватар
Offline
Зарегистрирован: 21.07.2020

Можно ЗАКРЫВАТЬ тему, в скетче ничего менять не нужно, всё решилось подпайкой резистора 14кОм между 2-й ногой на "mps20n0040d" и VCC на плате (по совету нужно было 15кОм, но не хватило резистора. Диапазон видимо расширился не полностью, но в моём случае и этого с головой, в общем ставьте 15кОм)