BMP180 точность измерения

fid
Offline
Зарегистрирован: 20.12.2014

Показания датчика отличаются от данных на сайтеГИС-метео на 10 мм.рт.ст.  Городок небольшой.  метеостанция находится примерно 30 м выше  от моего дома. Атм.давление должен быть по идее выше,а у меня показывает ниже на 10 мм.рт.ст. Кусочек кода которая измеряет давление.



#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 pressure;

//---------

char status;
  double T,P;
  status = pressure.startTemperature(); 
  delay(status); 
  status = pressure.getTemperature(T);
  lcd.setCursor(0,1);
      lcd.print("T=");
	   lcd.print(T,2);
	 // lcd.print("C");
	  lcd.setCursor(8,1);
	  lcd.print("D=");
      status = pressure.startPressure(3);
	  delay(status);
	  status = pressure.getPressure(P,T);
      lcd.print(P*0.75006375541921,2);

Если редактировать строку lcd.print(P*0.75006375541921,2); можно добиться приемлимую точность показаний

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

fid пишет:

Если редактировать строку lcd.print(P*0.75006375541921,2); можно добиться приемлимую точность показаний

Дойдите до метеостанции и спросите у них: может там прибор врет на те самые 10мм.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

где у вас находится датчик при проведении измерений ? ещё желательно знать высоту места вашего датчика ( AMSL ) , высоту места барометра метеостанции можно узнать у них.... 

точнее будет - разместить ваш датчик рядом с их барометром , кроме того - сделать усреднение

#include "Arduino.h"
//=================================================================
float AverageArray( float *Array , byte dimension );
//=================================================================
//const float kStdnt = 0.861;                     // коэффициент Стьюдента для P=0,6   и N=20
//const float kStdnt = 1.328;                     // коэффициент Стьюдента для P=0,8   и N=20
//const float kStdnt = 2.093;                     // коэффициент Стьюдента для P=0,95  и N=20
//const float kStdnt = 2.861;                     // коэффициент Стьюдента для P=0,99  и N=20
//const float kStdnt = 3.883;                     // коэффициент Стьюдента для P=0,999 и N=20
//const float kStdnt = 1.38;                      // коэффициент Шовенэ для P=0,98 и N=3
//const float kStdnt = 1.54;                      // коэффициент Шовенэ для P=0,98 и N=4
//const float kStdnt = 1.65;                      // коэффициент Шовенэ для P=0,98 и N=5
//const float kStdnt = 1.73;                      // коэффициент Шовенэ для P=0,98 и N=6
//const float kStdnt = 1.80;                      // коэффициент Шовенэ для P=0,98 и N=7
//const float kStdnt = 1.87;                      // коэффициент Шовенэ для P=0,98 и N=8
//const float kStdnt = 1.91;                      // коэффициент Шовенэ для P=0,98 и N=9
//const float kStdnt = 1.96;                      // коэффициент Шовенэ для P=0,98 и N=10
//const float kStdnt = 2.13;                      // коэффициент Шовенэ для P=0,98 и N=15
//const float kStdnt = 2.24;                      // коэффициент Шовенэ для P=0,98 и N=20
//const float kStdnt = 2.33;                      // коэффициент Шовенэ для P=0,98 и N=25
//const float kStdnt = 2.57;                      // коэффициент Шовенэ для P=0,98 и N=50
//const float kStdnt = 2.81;                      // коэффициент Шовенэ для P=0,98 и N=100
//const float kStdnt = 3.14;                      // коэффициент Шовенэ для P=0,98 и N=300
//const float kStdnt = 3.29;                      // коэффициент Шовенэ для P=0,98 и N=500
//const float kStdnt = 3.48;                      // коэффициент Шовенэ для P=0,98 и N=1000
//=================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
#include "Arduino.h"
//=================================================================
float AverageArray( float *Array , byte dimension )
{
  const float kStdnt = 2.33;
  float total , mo , disp , delta , lowLimit , highLimit;
  byte m , n;
  total = 0;
  for( n = 0; n < dimension; n++ )
    {
      total = total + Array[ n ];
    }
  mo = total / dimension; 
  total = 0;
  for ( n = 0; n < dimension; n++ )
    {
      total = total + pow( ( mo - Array[ n ] ), 2 );
    }
  disp = sqrt( total / dimension );
  delta = disp * kStdnt;
  lowLimit = mo - delta;
  highLimit = mo + delta;
  m = 0;
  total = 0;
  for ( n = 0; n < dimension; n++ )
    {
      if ( Array[ n ] >= lowLimit && Array[ n ] <= highLimit )
        {
          total = total + Array[ n ];
          m++;
        }
    }
  return total / m;
}
//=================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
/*
 * LCD -VCC pin 1 to GND
 * LCD +VCC pin 2 to +5 V
 * LCD V0 pin 3 to 10K resistor:   * ends to +5V and ground   * wiper to LCD
 * LCD A0/RS pin 4 to digital pin 8
 * LCD R/W pin 5 to GND
 * LCD Enable pin 6 to digital pin 9
 * LCD D0 pin 7
 * LCD D1 pin 8
 * LCD D2 pin 9
 * LCD D3 pin 10
 * LCD D4 pin 11 to digital pin 10
 * LCD D5 pin 12 to digital pin 11
 * LCD D6 pin 13 to digital pin 12
 * LCD D7 pin 14 to digital pin 13
 * LCD Brigtness pin 15 to +5 V
 * LCD Brigtness pin 16 to GND
 * LiquidCrystal( A0/RS , RW_x , Enable , D0_x , D1_x , D2_x ,  D3_x , D4 , D5 , D6 , D7 )
 *
 * Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
 * Connect GND to Ground
 * Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
 * Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
 * EOC is not used, it signifies an end of conversion
 * XCLR is a reset pin, also not used here
 */
 
#include "File_Func.h"
#include <Wire.h>

#include <Adafruit_BMP085.h>
Adafruit_BMP085 BMP;

#include <LiquidCrystal.h>
LiquidCrystal LCD( 8, 9, 10, 11, 12, 13 );
byte DeltaChar[8] ={ B00000 , B00100 , B01010 , B01010 ,
                     B10001 , B10001 , B11111 , B00000 };
                     
const float kPaToMmHg = 0.0075006375541921;

float pressureQFE;
float pressureQNH;

const byte count = 25;
float temperatureArray[ count ];
float pressureArray[ count ];
float altitudeArray[ count ];

float temperature;
float pressure;
float altitude;

unsigned long timeBMPlive;
byte timeBMPdelta = 30;

byte i = 0;
//========================================================================================================
void setup()
{
  LCD.begin( 20 , 4 );
  LCD.createChar( 0 , DeltaChar );   //  LCD.print( '\0' );
  if ( ! BMP.begin( BMP085_ULTRAHIGHRES ) )
  {
    Out_to_LCD_ERROR_BMP085();
  }
  pressureQNH = 101325;
  timeBMPlive = millis();
}
//========================================================================================================
void loop()
{
  if ( ( millis() - timeBMPlive ) > timeBMPdelta )
  {
    temperatureArray[ i ] = BMP.readTemperature();
    pressureArray[ i ] = BMP.readPressure();
    altitudeArray[ i ] = BMP.readAltitude( pressureQNH ); 
    i++;
    if ( i > count - 1 )
    {
      i = 0;
    }
    temperature = AverageArray( temperatureArray , count );
    pressure = AverageArray( pressureArray , count );
    altitude = AverageArray( altitudeArray , count );
    timeBMPlive = millis();
  }
  Out_to_LCD_t_T_QFE_QNH_AMSL();
}
//========================================================================================================
void Out_to_LCD_ERROR_BMP085()
{
  LCD.setCursor( 0 , 0 );
  LCD.write( "Could not find a" );
  LCD.setCursor( 0 , 1 );
  LCD.write( "valid BMP085 sensor," );
  LCD.setCursor( 0 , 2 );
  LCD.write( "check wiring ! " );
  while ( 1 ) {}
}
//========================================================================================================
void Out_to_LCD_t_T_QFE_QNH_AMSL()
{
// очистка экрана                  
  LCD.clear();
// вывод температуры в градусах
  LCD.setCursor( 1 , 0 );
  LCD.print( temperature , 1 );
  LCD.print( " \x99""C" );
// вывод времени
  LCD.print( "  00:00:00" );
// вывод QFE в паскалях
  LCD.setCursor( 0 , 1 );
  LCD.print( "QFE " ); 
  pressureQFE = pressure;
// вывод стрелки
  LCD.print( pressureQFE , 0 );
  LCD.print( " -> " ); 
// вывод QFE в мм.рт.ст.
  LCD.print( pressureQFE * kPaToMmHg , 1 );
  LCD.setCursor( 0 , 2 );
// вывод QNH в паскалях
  LCD.print( "QNH " ); 
  LCD.print( pressureQNH , 0 );
// вывод стрелки
  LCD.print( " -> " );
// вывод QNH в мм.рт.ст.
  LCD.print( pressureQNH * kPaToMmHg , 1 );
// вывод AMSL в метрах
  LCD.setCursor( 0 , 3 );
  LCD.print( "AMSL " );
  LCD.print( altitude , 1 );
  LCD.print( " \xBC" );
}
//========================================================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

в этом варианте точность измерения высоты - +/- 35 см , давления и температуры - +/- 0 ( сравнивал с показаниями четырёх порогов двух ВПП Пулково....

И ЕЩЁ - какое давление вы получаете от метеостанции ? скорее всего - QNH минимальное приведённое давление по району ( площади ) ( ПРИВЕДЁННОЕ  к среднему уровню моря AMSL ) - как расчитать его из QFE СТАНЦИИ - узнайте на станции...

ваш датчик даёт QFE !!!!!!!!!!!!!!!!!!!!!!!!!!!!! позвоните на метео, попросите QFE и сравните с вашим.....

из ваших данных можно высчитать , что высота рельфа у вас = 10 мм.рт.ст * 11 м/мм.рт.ст. = 110 м AMSL , а метеостанции = 140 м

кататак :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

в этом варианте точность измерения высоты - +/- 35 см , давления и температуры - +/- 0 ( сравнивал с показаниями четырёх порогов двух ВПП Пулково....

И ЕЩЁ - какое давление вы получаете от метеостанции ? скорее всего - QNH минимальное приведённое давление по району ( площади ) ( ПРИВЕДЁННОЕ  к среднему уровню моря AMSL ) - как расчитать его из QFE СТАНЦИИ - узнайте на станции...

ваш датчик даёт QFE !!!!!!!!!!!!!!!!!!!!!!!!!!!!! позвоните на метео, попросите QFE и сравните с вашим.....

из ваших данных можно высчитать , что высота рельфа у вас = 10 мм.рт.ст * 11 м/мм.рт.ст. = 110 м AMSL , а метеостанции = 140 м

кататак :)

faraddin
Offline
Зарегистрирован: 11.08.2013

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

Maverik
Offline
Зарегистрирован: 12.09.2012

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

еще интересно - кто-нибудь сравнивал bmp180 и bmp085 по точности ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

моя - нет ! у миня нету 180....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

faraddin пишет:

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

точность как и ВОСТОК - дело тонкое, Петруха !

сравнивать показания трёх датчиков без ЮСТИРОВОЧНОГО/ОБРАЗЦОВОГО - трата времени

faraddin
Offline
Зарегистрирован: 11.08.2013

SU-27-16 пишет:

сравнивать показания трёх датчиков без ЮСТИРОВОЧНОГО/ОБРАЗЦОВОГО - трата времени

Я их сравниваю а не калибрую, и свое время трачу на что хочу. Я лишь говорил, что и на станции так же врать прибор может.

А дома вариометр мне нужен ровно затем, зачем он вообще пришел из авиации в портативные устройства - парапланеризм.

fid
Offline
Зарегистрирован: 20.12.2014

     Я просто хотел сделать игрушку, типа низкое давление на экране плавает рыбка (что можно на рыбалку). А оказывается на рыбалку влияет не точное значение атм.дав. ,а его изменение за определенный промежуток времени. Я не рыбак и это подсказали заядлые рыбаки. Всем спасибо за советы!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

faraddin пишет:

SU-27-16 пишет:

сравнивать показания трёх датчиков без ЮСТИРОВОЧНОГО/ОБРАЗЦОВОГО - трата времени

Я их сравниваю а не калибрую, и свое время трачу на что хочу. Я лишь говорил, что и на станции так же врать прибор может.

А дома вариометр мне нужен ровно затем, зачем он вообще пришел из авиации в портативные устройства - парапланеризм.

и на станции так же врать прибор может - может, но в допуске !!!!!!!!!!! самолётики не сшибают же антенны с крыш 17-ти этажек, и землю не роют..... 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Карлсона встретите - привет ему ! ,  ( я про встречу на земле, а не в полёте ) и Энгельсону - тоже привет !

faraddin
Offline
Зарегистрирован: 11.08.2013

fid пишет:

     Я просто хотел сделать игрушку, типа низкое давление на экране плавает рыбка (что можно на рыбалку). А оказывается на рыбалку влияет не точное значение атм.дав. ,а его изменение за определенный промежуток времени. Я не рыбак и это подсказали заядлые рыбаки. Всем спасибо за советы!

И кто Вам мешает? У меня все три прибора всегда имеют одинаковое отличие. Если на одном давление упадет на 10 условных енотов, то и на всех это будет 10 условных енотов. Вот и Вы просто сдвиньте рамки нужного Вам давления по показаниям Вашего же прибора.

Maverik
Offline
Зарегистрирован: 12.09.2012

Цитата:

А дома вариометр мне нужен ровно затем, зачем он вообще пришел из авиации в портативные устройства - парапланеризм.

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

SU-27-16 пишет:

Карлсона встретите - привет ему ! ,  ( я про встречу на земле, а не в полёте ) и Энгельсону - тоже привет !

Энгельсону можете сами передать  https://paraplan.ru/forum/profile.php?mode=viewprofile&u=17033  :-)

 

Цитата:
моя - нет ! у миня нету 180....

видимо придется самому глянуть.  у мну лежат на полке bpm 085,  bmp180 и ms5611

 

 

msng
Offline
Зарегистрирован: 07.06.2012

fid пишет:

Если редактировать строку lcd.print(P*0.75006375541921,2); можно добиться приемлимую точность показаний

к этой строке надо прибавлять или отнимать дельту (разницу высот) от того что говорит ваша станция и говорит гисметео

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

так ВОВСЕ делать низя ! опасно для здоровья... даже кашлянуть не успеете...

Наземные службы еще пытались что-то уточнить, но ведущий гнул свою линию: «Фенол, я шестьсот двадцать третий, разрешите снижение». Не слушал генерал и ведомых. Едва 601-й (ведущий левой пары и группы Су-27) начал докладывать расположение истребителей, как Гребенников его оборвал: «Да подожди, надо снизиться сначала!»

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

 

 

604-й: Шестой, у тебя работает хоть что-нибудь?

606-й: А кто его знает!

 

В такой обстановке от РП должна была прозвучать единственная команда пилотам - «Всем немедленно в набор высоты!», но она не прозвучала.

 

 

При выполнении четвертого разворота в кабине Ил-76 сработала сигнализация, предупреждающая об опасном сближении с рельефом местности. Замигало желтое табло: «Опасно, земля!», прерывисто зазвучала сирена. Руководство по летной эксплуатации предписывает в этом случае немедленно и энергично перевести самолет в режим набора высоты, увеличить режим работы двигателей вплоть до максимального. Гребенников обязан был предупредить ведомых об опасности и предстоящем маневре.

 

Ил-76 счастливым образом прошел по небольшой лощине в горах, на высоте 32 м над землей, прежде чем пойти на набор высоты.

 

 

по данным приборов ИЛ-76, летевшие впереди Су-27 снизились до 600 м

 

 Всё оффициальное.... Это про точность... И - кто какое давление использует... Рыбаки или пилоты....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

https://paraplan.ru/forum/profile.php?mode=viewprofile&u=17033  :-)

...с таким прибором  - вероятен ПОЛОН РОТ ЗЕМЛИ :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

msng пишет:

fid пишет:

Если редактировать строку lcd.print(P*0.75006375541921,2); можно добиться приемлимую точность показаний

к этой строке надо прибавлять или отнимать дельту (разницу высот) от того что говорит ваша станция и говорит гисметео

НЕТ ! не в этой ! Вы что, все постоянные под сибя собираетесь забрать ? 

...Бойль-Мариотт , Планк и др. В этой - Лаплас...

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

msng пишет:

fid пишет:

Если редактировать строку lcd.print(P*0.75006375541921,2); можно добиться приемлимую точность показаний

к этой строке надо прибавлять или отнимать дельту (разницу высот) от того что говорит ваша станция и говорит гисметео

для рыбаков - да, можно.... если для пилотов так считать - то не нано нам такого !!!!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

faraddin пишет:

fid пишет:

     Я просто хотел сделать игрушку, типа низкое давление на экране плавает рыбка (что можно на рыбалку). А оказывается на рыбалку влияет не точное значение атм.дав. ,а его изменение за определенный промежуток времени. Я не рыбак и это подсказали заядлые рыбаки. Всем спасибо за советы!

И кто Вам мешает? У меня все три прибора всегда имеют одинаковое отличие. Если на одном давление упадет на 10 условных енотов, то и на всех это будет 10 условных енотов. Вот и Вы просто сдвиньте рамки нужного Вам давления по показаниям Вашего же прибора.

вам - #18 :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

SU-27-16 пишет:

faraddin пишет:

fid пишет:

     Я просто хотел сделать игрушку, типа низкое давление на экране плавает рыбка (что можно на рыбалку). А оказывается на рыбалку влияет не точное значение атм.дав. ,а его изменение за определенный промежуток времени. Я не рыбак и это подсказали заядлые рыбаки. Всем спасибо за советы!

И кто Вам мешает? У меня все три прибора всегда имеют одинаковое отличие. Если на одном давление упадет на 10 условных енотов, то и на всех это будет 10 условных енотов. Вот и Вы просто сдвиньте рамки нужного Вам давления по показаниям Вашего же прибора.

вам - #18 :(

в формуле Лапласса - ЕНОТЫ не сокращаются , а учитываются пропорционально , и ещё с извращениями математическими....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

у вас классные приборы, раз кажут так дружно.... A чо кажут-то ??????

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

основное - не для рыбалки - QNE , QNH , QFE - нет ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

вариометр - это в полёте.... просто производная.....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

fid пишет:

     Я просто хотел сделать игрушку, типа низкое давление на экране плавает рыбка (что можно на рыбалку). А оказывается на рыбалку влияет не точное значение атм.дав. ,а его изменение за определенный промежуток времени. Я не рыбак и это подсказали заядлые рыбаки. Всем спасибо за советы!

ДЫК, сделал ???????????? парашютисты не валят ? не приползают побить морду лица ? :)