Помогите пожалуйста разобраться с датчиком давления

SVD
Offline
Зарегистрирован: 05.04.2018

Подскажите пожалуйста, как подружить вот такой датчик давления (JUMO MIDAS S05) с arduino.

Если можно, то было бы не плохо увидеть схему подключения к Mega 2560 и простенький скетч для примера.

Спасибо!

https://1drv.ms/f/s!Ai-6GhJNEDRohzUejPTU30F7BC54

svm
Offline
Зарегистрирован: 06.11.2016

Схема у Вас есть на фото (трехпроводная). Выход через делитель подключаете на аналоговый вход ардуины. Ну а скетч любой для вольтметра. Останется привести в соответствие показания вашего датчика и образцового манометра.

SVD
Offline
Зарегистрирован: 05.04.2018

Помогите пожалуйста. 

Я правильно схему подключения понимаю? https://1drv.ms/f/s!Ai-6GhJNEDRohz60NqHVnTIa98I4

И вот такой скетч пойдет?

const int analogInPin = A0;  // Analog input pin 
 
float sensorValue = 0;        // value read from the pot
float outputValue = 0;        
 
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
 
void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);            
  outputValue = map(sensorValue, 0, 1023, 0, 20);  
  // print the results to the serial monitor:
  Serial.print("Voltage = " );                      
  Serial.println(outputValue);  
  delay(500);                    
}

 

svm
Offline
Зарегистрирован: 06.11.2016

В принципе схема рабочая, но резистор в цепи "земли" лучше не ставить. Лучше если корпус датчика и земля ардуино будут жеско связаны. Если напряжение на выходе датчика во всем диапазоне измерения давления (измерить тестером без ардуины) не превышает напряжение питания ардуино, то и R1 не нужен, если превышает придется ставить делитель напряжения - еще один резистор со входа ардуино на землю.

Насчет скетча - почитайте как правильно его вставлять. Тогда его легче анализировать.

float sensorValue = 0;        // value read from the pot
float outputValue = 0;        
 
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
 
void loop() {
  // read the analog in value:
  sensorValue = analogRead(A0);            
  outputValue = map(sensorValue, 0, 1023, 0, 20);  
  // print the results to the serial monitor:
  Serial.print("Voltage = " );                      
  Serial.println(outputValue);  
  delay(500);                    
}

В принципе никакого криминала в скетче не видно. Кроме того, что в строке 11 Вы читаете из не задекларированного пина. Я заменил на А0.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Функция map() оперирует целыми числами.
Как это связывается с float outputValue ?

SVD
Offline
Зарегистрирован: 05.04.2018

trembo пишет:
Функция map() оперирует целыми числами. Как это связывается с float outputValue ?

А чем ее заменить можно?

svm
Offline
Зарегистрирован: 06.11.2016

Лучше float  на int заменить.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

svm пишет:

Лучше float  на int заменить.

Тогда давление будет от 0 до 20-ти

outputValue = map(sensorValue, 0, 1023, 0, 20);

SVD
Offline
Зарегистрирован: 05.04.2018

svm пишет:

В принципе схема рабочая, но резистор в цепи "земли" лучше не ставить. Лучше если корпус датчика и земля ардуино будут жеско связаны. Если напряжение на выходе датчика во всем диапазоне измерения давления (измерить тестером без ардуины) не превышает напряжение питания ардуино, то и R1 не нужен, если превышает придется ставить делитель напряжения - еще один резистор со входа ардуино на землю.

Насчет скетча - почитайте как правильно его вставлять. Тогда его легче анализировать.

float sensorValue = 0;        // value read from the pot
float outputValue = 0;        
 
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
 
void loop() {
  // read the analog in value:
  sensorValue = analogRead(A0);            
  outputValue = map(sensorValue, 0, 1023, 0, 20);  
  // print the results to the serial monitor:
  Serial.print("Voltage = " );                      
  Serial.println(outputValue);  
  delay(500);                    
}

В принципе никакого криминала в скетче не видно. Кроме того, что в строке 11 Вы читаете из не задекларированного пина. Я заменил на А0.

Замеряю мультиметром по той схеме что скидывал, от 9 В кроны, при атмосферном давлении получаю те же 9 В. Тоесть при 0 бар получаю входное напряжение? Все верно?

svm
Offline
Зарегистрирован: 06.11.2016

SVD пишет:

Замеряю мультиметром по той схеме что скидывал, от 9 В кроны, при атмосферном давлении получаю те же 9 В. Тоесть при 0 бар получаю входное напряжение? Все верно?

Сомнительно. Лучше поищите информацию по вашему датчику, и разберитесь как он должен работать.

SVD
Offline
Зарегистрирован: 05.04.2018

svm пишет:

Сомнительно. Лучше поищите информацию по вашему датчику, и разберитесь как он должен работать.

Разобрался со схемой подключения датчика. Датчик на выходе выдает значение в мА, как положено при 0 бар – 4 мА, реагирует на изменение давления. Перевожу мультиметр на напряжение, показывает напряжение источника питания.

Подскажите пожалуйста как мне его правильно к ардуине подцепить и что дальше, во что эти 4 мА превратятся?  

svm
Offline
Зарегистрирован: 06.11.2016

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

Поставьте резистор 1 ком с выхода датчика на "землю". Тогда пдение напряжения на нем согласно закона Ома будет 1 В на 1 Ма. Если не устраивает, то ставим 100 Ом - тогда 1 В на 10 мА и т..д. Все зависит от того , что вы хотите. Вот с этого резистора и подавайте на аналоговый вход.

SVD
Offline
Зарегистрирован: 05.04.2018

svm пишет:

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

Поставьте резистор 1 ком с выхода датчика на "землю". Тогда пдение напряжения на нем согласно закона Ома будет 1 В на 1 Ма. Если не устраивает, то ставим 100 Ом - тогда 1 В на 10 мА и т..д. Все зависит от того , что вы хотите. Вот с этого резистора и подавайте на аналоговый вход.

А если подключиться к ардуино через датчик тока? Возможно добиться точных показаний?

svm
Offline
Зарегистрирован: 06.11.2016

В данном случае особого смысла нет. Датчик в диапазоне измерения выдает от 4 до 20 мА. Если взять токоизмерительный резистор 250 Ом, то напржение на нем будет изменяться от 1 до 5 В. При разрешении АЦП ардуино около 5 мВ - это 800 значений, вполне достаточная точность.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

SVD пишет:

svm пишет:

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

Поставьте резистор 1 ком с выхода датчика на "землю". Тогда пдение напряжения на нем согласно закона Ома будет 1 В на 1 Ма. Если не устраивает, то ставим 100 Ом - тогда 1 В на 10 мА и т..д. Все зависит от того , что вы хотите. Вот с этого резистора и подавайте на аналоговый вход.

А если подключиться к ардуино через датчик тока? Возможно добиться точных показаний?


То есть резистор для вас уже не датчик тока?

svm
Offline
Зарегистрирован: 06.11.2016

Я думаю ТС под датчиком тока подразумевал что-то типа INA226

SVD
Offline
Зарегистрирован: 05.04.2018
[code]
int sensorValue = 0;        // value read from the pot
int outputValue = 0;       
  
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
  
void loop() {
  // read the analog in value
  sensorValue = analogRead(A0);           
  outputValue = map(sensorValue, 0, 1023, 0, 25); 
  // print the results to the serial monitor:
  Serial.print("Voltage = " );                     
  Serial.println(outputValue); 
  delay(500);                   
}
[/code]

Подскажите пожалуйста, как мне скетч изменить, что бы на выходе получились значения с сотыми?

kalapanga
Offline
Зарегистрирован: 23.10.2016

SVD пишет:

Подскажите пожалуйста, как мне скетч изменить, что бы на выходе получились значения с сотыми?

Ну как же так-то? Ведь даже не "гуглить", а просто соседнюю страничку на этом же сайте открыть нужно!

Читайте: Serial.print()

SVD
Offline
Зарегистрирован: 05.04.2018

Я в общем со всем разобрался. Спасибо всем!) Ток один вопрос остался. У меня получившееся значение туда сюда прыгает на +- 3% от замеренного мультиметром. Это зависит от точности делителя? 

svm
Offline
Зарегистрирован: 06.11.2016

SVD пишет:

 У меня получившееся значение туда сюда прыгает на +- 3% от замеренного мультиметром. Это зависит от точности делителя? 

Нет, от точности делителя прыгать не может. Врать может, но это можно подкорректировать подобрав коэффииент деления в программе. Коэффициент деления, лучше использовать минимальный, а лучше вообще отказаться от делителя, подобрав значение токоизмерительног резистора. И плюс применить оверсемплинг, на форуме достаточно материала на эту тему. Как пример можно посмотреть http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352905 строки 75-82. За счет оверсемплинга разрядность АЦП повышается с10 до 14 бит. И более стабильные показания.

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

svm пишет:

За счет оверсемплинга разрядность АЦП повышается с10 до 14 бит.

Вы это всерьез?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

Вы это всерьез?

Есть такая религия. Результат какой-никакой даёт, но и мусорные младшие биты плодит, причём не особо предсказуемо, т.к. распределение случайной величины толком неизвестно. Все начинают со слов: "допустим, нормальное" :)))

Микрочип разродилась даже аппнотом на эту тему.

svm
Offline
Зарегистрирован: 06.11.2016

andriano пишет:

svm пишет:

За счет оверсемплинга разрядность АЦП повышается с10 до 14 бит.

Вы это всерьез?

ЕвгенийП пишет:

andriano пишет:

Вы это всерьез?

Есть такая религия. Результат какой-никакой даёт, но и мусорные младшие биты плодит, причём не особо предсказуемо, т.к. распределение случайной величины толком неизвестно. Все начинают со слов: "допустим, нормальное" :)))

Микрочип разродилась даже аппнотом на эту тему.

Ну допустим, не совсем всерьез в буквальном понимании этого слова. Но те не менее стабильность показателей за счет усреднения значительно возрастает. А мусорные последние биты что при 10 битном так и псевдо 14 при хорошем питании и стабильном измеряемом сигнале скачут примерно одинаково +-1 в младшем разряде. Только в первом случае 10 разряд, во втором 14. Так что здесь вопрос веры. И если время измерения не критично, то метод себя вполне оправдывает.

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

ЕвгенийП пишет:

Есть такая религия. Результат какой-никакой даёт, но и мусорные младшие биты плодит, причём не особо предсказуемо, т.к. распределение случайной величины толком неизвестно. Все начинают со слов: "допустим, нормальное" :)))

Евгений, и Вы туде же!

Кроме случайной погрешности там есть еще систематическая, которая вообще никак от оверсэмплинга не зависит. И это уже не результат веры, а объективный факт.

То, что при "тупом" повторении измерений результат вряд ли можно считать прогнозируемым, - тоже факт. 

И то, что какую-то пользу от оверсэмплинга можно получить только при достаточно сложной методике измерения - с добавлением шумового сигнала в измерительную цепь - тоже факт.

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

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

svm пишет:

Ну допустим, не совсем всерьез в буквальном понимании этого слова. Но те не менее стабильность показателей за счет усреднения значительно возрастает. А мусорные последние биты что при 10 битном так и псевдо 14 при хорошем питании и стабильном измеряемом сигнале скачут примерно одинаково +-1 в младшем разряде. Только в первом случае 10 разряд, во втором 14. Так что здесь вопрос веры. И если время измерения не критично, то метод себя вполне оправдывает.

1. Ни разу не сомневаюсь в том, что усреднение во многих случаях может оказаться полезным, но при чем здесь оверсэмплинг?

2. Скачет разряд (в Вашей терминологии - бит) или нет - никак не влияет на то, достоверен он или нет. Разряд может быть стабильно недостоверным. И в случае оверсэмплинга все дополнительные "нескачущие" разряды именно такими и являются. Т.е. при оверсэмплинге просто возрастает количество мусорных битов (как справедливо заметил Евгений), хотя они и перестают скакать.

А вывод простой: усреднению - да, оверсэмплингу - нет.

А для того, чтобы избавиться от "дрожания" последних разрядов, существуют совершенно другие, я бы сказал - специализированные - методы (которые, кстати, не исключают и оверсэмплинга в качестве своей составляющей). Они неоднократно публиковались на этом форуме, в том числе и мной. Ищите, да обрящете.

svm
Offline
Зарегистрирован: 06.11.2016

andriano пишет:

То, что при "тупом" повторении измерений результат вряд ли можно считать прогнозируемым, - тоже факт. 

А как-же народная мудрость "семь раз отмерь-один отрежь"?

С систематической погрешностью, согласен, но за счет усреднения 255 измерений, случайные выбросы будут сведены к минимуму.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

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

Не будьте таким серьёзным. Я написал тоже самое, что и Вы двумя полуфразами "есть такая религия" и "распределение неизвестно". Что ещё нужно говорить? :)))))))))

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

svm пишет:

... за счет усреднения 255 измерений, случайные выбросы будут сведены к минимуму.

Раз пошла такая пьянка, я бы предпочел усреднение по 256 измерениям.