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

avgaz
Offline
Зарегистрирован: 23.09.2014

Добрый вечер, может у кто встречал готовое решение для дактчика давление

https://ru.aliexpress.com/item/New-Electric-Unit-Pressure-Transducer-Sen...

выходное напряжение там 0-4.5В но как точно преобразовать его в показания давление, может встречал кто библиотеку для него?

vk007
Offline
Зарегистрирован: 16.06.2015

Не у этого, так у другого продавца https://ru.aliexpress.com/item/Wholesale-price-5-pcs-DC-5V-0-1-2-MPa-pre... есть какие-то графики зависимости

avgaz
Offline
Зарегистрирован: 23.09.2014

Чет какие то не понятные графики вернее формулы в них  ((

Ладно попробуем расчитать по первой формуле VCC=0.6667*P+0.1 где P в Mpa это давление, для примера возмем максимальное 1.2Mpa где судя по графику должно быть на выходе 4.5 а по формуле выходит 0,6667*1,2+0,1=0,90

avgaz
Offline
Зарегистрирован: 23.09.2014

Нашол вот такой вот скетч

//Demo code for calculate the pressure relative to local atmospheric pressure.
// This demo code is used to test 1.2MPa range pressure sensor but not others.
//Store: http://www.aliexpress.com/store/1199788
//      http://dx.com

// Calculation formula for 1.2MPa range sensor:
// VOUT = VCC*(0.75*P + 0.1)
// VOUT is the voltage from the yellow wire of the sensor
// VCC is the supply voltage for red wire of the sensor
// P is the pressure you want to detect
// So P = (VOUT-0.1*VCC)/(0.75*VCC) and VOUT = analogRead(SENSOR) *VCC / 1024.0
// So P =  ( analogRead(SENSOR) / 1024 -0.1 ) / 0.75   and the unit is MPa

/*macro definition of sensor*/
#define SENSOR A0//the YELLOW pin of the Sensor is connected with A0 of Arduino/OPEN-SMART UNO R3

void setup()
{
    Serial.begin(9600);
}
void loop()
{
  int raw = analogRead(SENSOR);
  
  Serial.println("Pressure is");
  float pressure_MPa = (raw / 1024 - 0.1) / 0.75;  // voltage to pressure
  Serial.print(pressure_MPa);
  Serial.println(" MPa");
  
  float pressure_kPa = pressure_MPa * 1000;
  Serial.print(pressure_kPa);
  Serial.println(" kPa");
  
  float pressure_psi = pressure_kPa * 0.14503773773020923;    // kPa to psi
  Serial.print(pressure_psi);
  Serial.println(" psi");
  delay(500);
}

Где есть формула (raw / 1024 - 0.1) / 0.75 где raw это напряжение с датчика, предположим напряжение у нас там 4.5v посчитаем по формуле (4.5/1024-0,1)/0,75=-0.12 что опять какой то бред получается

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avgaz пишет:

Чет какие то не понятные графики вернее формулы в них  ((

Ладно попробуем расчитать по первой формуле VCC=0.6667*P+0.1 где P в Mpa это давление, для примера возмем максимальное 1.2Mpa где судя по графику должно быть на выходе 4.5 а по формуле выходит 0,6667*1,2+0,1=0,90

Эмм. В формуле ещё множитель присутствует - VCC, т.е. ваши 0,90 надо домножить на 5, и получится как раз 4,5. Всё верно с формулой.

vk007
Offline
Зарегистрирован: 16.06.2015

avgaz пишет:

Где есть формула (raw / 1024 - 0.1) / 0.75 где raw это напряжение с датчика, предположим напряжение у нас там 4.5v посчитаем по формуле (4.5/1024-0,1)/0,75=-0.12 что опять какой то бред получается

С каких это пор analogRead() выдает значения в вольтах?

spa-sam
Offline
Зарегистрирован: 14.12.2012

Я делал без формул. По графику видно, что линейная зависимость. На датчике выдаёт показаня от 0.5 до 4.5 вольт при показаниях от 0 до 12.24 кгс/см2. Допустим у нас есть стабильные 5 Вольт, тогда от 0 до 5 В на ADC будет от 0 до 1024, тогда показания  в 0 кгс/см2 будут соотвествовать  показаниям на ADC=102 , а показания в 12.24 кгс/см2 будут соотвествовать  показаниям на ADC=922. Далее через функцию map можем вычислять наши знячения с датчика. 

float P = (map(analogRead(A0), 102, 922, 0, 1224))/100;

avgaz
Offline
Зарегистрирован: 23.09.2014

spa-sam пишет:

Я делал без формул. По графику видно, что линейная зависимость. На датчике выдаёт показаня от 0.5 до 4.5 вольт при показаниях от 0 до 12.24 кгс/см2. Допустим у нас есть стабильные 5 Вольт, тогда от 0 до 5 В на ADC будет от 0 до 1024, тогда показания  в 0 кгс/см2 будут соотвествовать  показаниям на ADC=102 , а показания в 12.24 кгс/см2 будут соотвествовать  показаниям на ADC=922. Далее через функцию map можем вычислять наши знячения с датчика. 

float P = (map(analogRead(A0), 102, 922, 0, 1224))/100;

Пдскажите как мне составить через map мне нужно измерять диапазон от 0 до 3(бар) при 0  analogRead(A0) выдает 114 а при 3 паказания 282 то есть примерно кажды 0.1 бар увеличивают показания на 7 вот как составить map ??

пробовал так float P = (map(analogRead(A0), 114, 282, 0, 3)); выдаеттолько целы значения то есть 1 или 2 а как сделать что бы было и 0.5 и 2.1??

 

ExGen
Offline
Зарегистрирован: 11.09.2018

P =(map(analogRead(A0), 114, 282, 0, 30));

float P = P/10;

ну или типа того может?