Подключение датчика давления к Arduino для сбора данных о давлении и времени

Я пытаюсь создать регистратор данных давления, используя Arduino и Mindman MP47P-03-F1 ( https://www.mindman.com.tw/proimages/pdf/E_MP47_S.pdf) датчик давления, датчик подключается к внешнему источнику питания 12–24 В постоянного тока. Я подключил аналоговый провод к A0 Arduino и добавил еще один провод от GND к датчику. Я получаю стабильное показание напряжения (~ 1 В), но давление неправильное, и он не реагирует на изменения давления. Может кто-нибудь сказать мне, что я делаю неправильно? это пример кода:

const int analogPin = A0; 
const float slope = -0.1;
const float intercept = 0.6;
const unsigned long startTime = millis();

void setup() {
  Serial.begin(9600);
  Serial.println("Time (s)\t\tPressure (MPa)");
}

void loop() {
  unsigned long elapsedTime = millis() - startTime;
  int sensorValue = analogRead(analogPin);
  float voltage = sensorValue * (5.0 / 1023.0);  
  float pressure = slope * (voltage - intercept);

  Serial.println(sensorValue);
  Serial.print(elapsedTime / 1000.0);
  Serial.print("\t\t");
  Serial.println(pressure);

  delay(1000); 
}

Изменить: я изменил код так, как предлагали некоторые на форуме arduino:

const int sensorPin = A0;
const int offset = 201; // регулировка нулевого давления
const int fullScale = 1023; // регулировка максимального давления
float sensorType = 1000.0; // кПа
float pressure; // конечное давление
const unsigned long startTime = millis();

void setup() {
  Serial.begin(9600);
}

void loop() {
  unsigned long elapsedTime = millis() - startTime;
  pressure = (analogRead(sensorPin) - offset) * sensorType / (fullScale - offset);
  

  Serial.print(analogRead(sensorPin));
  Serial.print("\t\t");
  Serial.print(elapsedTime / 1000.0);  
  Serial.print("\t\t");
  Serial.println(pressure, 4);
  delay(1000);
}

Давление равно 0, но у меня продолжаются скачки показаний давления, когда давление не прикладывается. вот фото проводки.

, 👍1

Обсуждение

программа должна реагировать на изменение давления... отключите ардуино и проверьте выход датчика вольтметром, @jsotola

@НикС. - Какой хороший комментарий ты написал! Часть «Кроме того, ваше уравнение неверно...» великолепна и могла бы стать частью отличного ответа. Возможно, вы не знаете, что ответы в комментариях к Arduino SE не одобряются., @VE7JRO

@НикС. - Почему бы не включить часть комментария «Я просто дал подсказки» в ответ? Я уверен, что постоянные участники этой группы согласятся, что ответы и частичные ответы в разделе комментариев к вопросу не приветствуются :) НГ, @VE7JRO


1 ответ


1

Как упоминает jsotola в комментариях, вам обязательно следует сначала убедиться, что датчик давления работает с помощью мультиметра, желательно на столе с регулируемым источником питания, от которого вы можете питать свой датчик. Убедитесь, что вы можете измерить давление, подаваемое в датчик, другими способами; простой манометр может сработать.

Тогда вам придется исправить ваше уравнение — оно перевернуто, поскольку на графиках давление показано как входное значение, а выходное значение — как напряжение, но когда вы конвертируете напряжение в давление, процесс переворачивается. , поэтому мы вычисляем крутизну следующим образом: берем диапазон давления (выход) и делим его на диапазон напряжения (вход) ->; 1,1 МПа / 4,4 В = 0,25 В_дюйм. Теперь мы знаем, что при 0,6 В выходное давление составляет -0,1 МПа, поэтому мы составили линейное уравнение той формы, которую вы сделали -> y = mx + b и подставляем значения: -0,1 МПа = 0,25 МПа/В * (0,6 В) + b. Если вы решите на b, вы получите -0,25.

Следовательно, давление = 0,25X – 0,25 должно быть уравнением, по которому вы сравниваете давление, подаваемое в датчик, с напряжением, которое вы измеряете.

Если вы обнаружите, что с помощью этого уравнения вы измеряете правильное давление, но после повторной реализации вашей программы Arduino вам все равно не повезет, я бы проверил, правильно ли подключены заземления - очень важно иметь все задействованных оснований на одном и том же «уровне». В качестве бонуса, в зависимости от Arduino, вы можете использовать дифференциальные каналы АЦП чипа, но, насколько я знаю, для этого вам придется записывать напрямую в регистры.

,

откуда мне нужно измерить напряжение датчика? у него есть ЖК-экран, на котором я могу видеть изменения давления, но Arduino не видит этих изменений, например, от 0 МПа до 0,008 МПа., @Omer Davidi

Кроме того, время от времени у меня возникают скачки напряжения, которые меняют показания давления., @Omer Davidi

Вы должны измерить напряжение от белого провода к синему проводу (от аналогового выхода к постоянному току). Действительно ли у вас есть источник давления, больший, чем это ничтожное (вероятно, окружающее) значение? Он настолько мал, что составляет менее 1% от полной шкалы, что ниже разумного отношения сигнал/шум, основанного на значении +/- 2,5% полной шкалы – это также может быть шум. Есть ли у вас запасной велосипедный ручной насос, к которому вы можете прикрепить подходящую насадку и опробовать ее? Может, со сквозным манометром? В любом случае, 1 В звучит разумно при ~0 МПа, поэтому, если вы не оказываете давление, превышающее окружающее, это выглядит нормально. Что за шипы?, @Nick S.

Насколько велики шипы? У тебя есть заглушка на входе в ПС (вижу только шланг)? Вы пытались измерить выходной сигнал без Arduino, желательно с помощью осциллографа? Есть ли у вас второй PS, который вы можете протестировать (на будущее — в следующий раз вам следует приобрести два, чтобы вам не приходилось пытаться выяснить, устраняете ли вы неполадки в соединении или в самом датчике)? Вы блок питания от БП отключили? Зачем вам нужен дополнительный датчик для подключения провода аналогового выхода к самому Arduino? Опять же, в идеале у вас должен быть известный источник ненулевого давления, который вы можете подать на PS., @Nick S.