Датчик давления воздуха в ресивер и ардуино
- Войдите на сайт для отправки комментариев
Вс, 27/01/2019 - 01:55
Собственно возникла необходимости контролировать давления в ресивере с помощью ардуино.
Имеем: Ардуино Уно, дисплей 1602, датчик вот этот он до 12 атм, 3 контакта +5в, -, вых 0-5в.
В этом я новичек, почитав стать схожие по содержанию, пришел к такому решению, что надо построить функцию зависимости давления от напряжения, за основу взял код с форума
Уравнение получилось
-4.5x+12y-6=0
x=2.67y-1.33
Где x - давление, y - напряжение
Пока проверял только силой своих легких, но лумается мне 1 атм я выдуть бы смог, да и показания бегут только десятками и сотками целое число даже не сдвинулось.
01 |
#include <Wire.h> |
02 |
#include <LiquidCrystal_I2C.h> |
03 |
04 |
LiquidCrystal_I2C lcd(0x27,16,2); / |
05 |
06 |
#define SensorPin 0 //пин на котором датчик |
07 |
08 |
void setup () |
09 |
{ |
10 |
lcd.init(); |
11 |
analogReference(DEFAULT); |
12 |
lcd.setCursor (0,0); |
13 |
lcd.print( "Pressure is:" ); |
14 |
} |
15 |
16 |
17 |
void loop () |
18 |
{ |
19 |
20 |
static int avgVadc = 0; |
21 |
avgVadc = (avgVadc * 3 + analogRead(SensorPin))/4; //скользящее среднее |
22 |
|
23 |
|
24 |
|
25 |
float val = avgVadc * 5.0 / 1024.0; |
26 |
float Pressuare = 2.66 * val - 1.33 ; |
27 |
28 |
lcd.setCursor(0,1); |
29 |
lcd.print( " " ); |
30 |
lcd.setCursor(0,1); |
31 |
lcd.print (Pressure); |
32 |
|
33 |
} |
Пока проверял только силой своих легких, но лумается мне 1 атм я выдуть бы смог
я вас конечно не знаю, может вы Геркулес, но вообще давление, которое может создать типичный человек своими легкими - как правило не превышает 0.2 -0.3 атм
А еще есть такие полезные штуки, как автомобильный/велосипедный насосы.
Кароч сносил все это богатство на случку к компрессору и все оказалось не очень, безбожно врет или как говорят у нас в РБ "Кажа Ху*ню"
фото 1 тут 4 атм
фото 2 тут 6 атм
прокалибруйте свой датчик в попугаях ацп
т.е. просто выводите значения ацп в порт или на экран и запишите соответствие между значением и давлением.
Потом посмотрите на линейность и дальше будет понятно, как пересчитать данные.
Чем меньше шаг по давлению, тем достовернее пересчет можно получить.
прокалибруйте свой датчик в попугаях ацп
т.е. просто выводите значения ацп в порт или на экран и запишите соответствие между значением и давлением.
Потом посмотрите на линейность и дальше будет понятно, как пересчитать данные.
Чем меньше шаг по давлению, тем достовернее пересчет можно получить.
Данные есть
0атм - 0.5в
1атм- 0.84в
2атм- 1.17в
3атм- 1.5в
4атм- 1.85в
5атм- 2.20в
6атм- 2.52в
7атм- 2.85в
8атм- 3.17в
дальше компрессор сбрасывает.
Близко к V=0.5+P*0.33375
т.е, А - значение ацп, а Р - давление
если А<100 Р=0
иначе Р=(А-100)*13,5/923
ИМХО на кой там float???? чисто МК нагрузить, чтобы жизнь сказкой не казалась ?!
int - выше крыши и ошибок меньше, если с математикой лады.
UPD необходимо следить за переполнением переменной во время расчета и все будет хорошо.
т.е, А - значение ацп, а Р - давление
если А<100 Р=0
иначе Р=(А-100)*13,5/923
немножко не врубаюсь по формуле, поясните 13.5/923 это что?
Пока рабочий вариант предложил sadman41 с уравнением V=0.5+P*0.33375,
мое уравнение получилось исходя из этого P=(V-0.48)/0.33666, по вычислениям даже в сотки вписываюсь но это на бумаге.
Походу большую роль играет источник питания и запитка датчика через ардуино, отсюда вопрос стабилизирован ли выход 5в ардуино???
UPD: Кароч толком не могу подобрать коэффициент, поэтому завтра отдам датчик знакомому метрологу, он обещал откалибровать по эталонным приборам.
Там обычно менее 5 вольт
это вес в атмосферах младшего разряда ацп
13,5 это интерполяция ваших данных по давлению до +5В по формуле от sadman41
на деле датчик по ДШ линеен только до 12 атм, и 4,5 В
так что следовало бы для корректности добавить условие, если А> 923 Р > 12
вот так ваши вольты можно привести к значению ацп А=V*1023/5
считаете для каждого давления в таблице свое А, потом подставляете А в непонятную формулу и сравниваете Р
У меня такой же датчик используется в проекте, моя калибровка
P = 15 * (A -96) - результат в миллибарах - чтобы значения были целыми и точность не терялась
на участке от 0 до 6 бар врет не более 0.1 бар, что вполне устраивает
А больше 6 бар у меня не бывает
т.е. если персчитать грубо в миллибары получим 13,5*1000/923 = 14,6 , что близко к 15 , учитывая еще измерения вольтов и давления на коленке
т.е. если персчитать грубо в миллибары получим 13,5*1000/923 = 14,6 , что близко к 15 , учитывая еще измерения вольтов и давления на коленке
Ваша формула отлично подходит. Вот значения полученые на эталонном оборудовании метрологом.
Не могли бы вы объяснить как вы посчтиталь линейную интерполяцию и у вас вышло 13.5 и я так понимаю вы взяли 923 как верхнее значение ацп при 12 атм???
P, МПа
U, В
0
0,4944
0,1
0,8286
0,2
1,1605
0,3
1,4950
0,4
1,8285
0,5
2,1625
0,6
2,4955
0,7
2,8295
0,8
3,1610
0,9
3,4961
1,0
3,8280
1,1
4,1599
1,2
4,4904
1,3
4,8277
Не могли бы вы объяснить как вы посчтиталь линейную интерполяцию и у вас вышло 13.5 и я так понимаю вы взяли 923 как верхнее значение ацп при 12 атм???
уравнение прямой по 2 точкам (вариант 2 )- выбрать правильные 2 точки, преобразовать в нужный вид, проверить.
UPD. на краях измерительных диапазонов у датчиков обычно нелинейность большая, выбирать точку лучше не самые крайние, а если знаешь поведение конкретного датчика - вообще труда не составляет.
В формулу от sadman41 подставляете 5в и находите Р, получаете давление на верхнем краю диапазона ацп
нет, весь ваш рабочий диапазон укладывается в напряжения от 0,5 до 5В, 0,5в это примерно 100 в значениях ацп, а 5в - 1023, т.е. весь диапазон в значениях ацп 1023-100 =923, а вес мл. разряда 13,5/923
Когда мы пишем в формуле (А-100), то отбрасываем незначащий начальный участок в 0,5В и остается 923 значащих разряда.
значение 923 просто попадает на 12атм, т.к. оно находится на 4,5в = 5в-0,5в, т.е. тоже 1023-100 =923. но по сути это число с другим смыслом, просто примерное значение ацп на 4,5в
нет, весь ваш рабочий диапазон укладывается в напряжения от 0,5 до 5В, 0,5в это примерно 100 в значениях ацп, а 5в - 1023, т.е. весь диапазон в значениях ацп 1023-100 =923, а вес мл. разряда 13,5/923
Когда мы пишем в формуле (А-100), то отбрасываем незначащий начальный участок в 0,5В и остается 923 значащих разряда.
значение 923 просто попадает на 12атм, т.к. оно находится на 4,5в = 5в-0,5в, т.е. тоже 1023-100 =923. но по сути это число с другим смыслом, просто примерное значение ацп на 4,5в
и в чем смысл выводить уравнение прямой, когда есть готовая формула?
пожалуй я бы и сам не отказался узнать, почему пошел именно тем путем