2 датчика барометра BMP085 на один контролер

servilat
Offline
Зарегистрирован: 12.12.2013

День добрый!

как подключить 2 датчика BMP085 на одну UNO ?

нужно стравнивать показания в 2х точках камер и от разницы показаний давать разрешение на поджиг

реально на UNO или на ProMini?

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013
axill
Offline
Зарегистрирован: 05.09.2011

На обоих можно, два варианта:

1. Железный i2c, у "ненужного" bmp085 на время измерения зажимаем на gnd вход reset, те выводы reset каждого датчика надо подключить на цифровые выходы ардуино

2. Датчики подключить на разные шины i2c. Одна может быть железной, вторая програмной или обе програмной

servilat
Offline
Зарегистрирован: 12.12.2013

i2c разве не позволяет адресно обращяться к устройству?

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

адреса то совпадают.

servilat
Offline
Зарегистрирован: 12.12.2013

День добрый!

подключил 2 датчика по схеме

VSS -> 3.3 V

SDA -> analog pin 4

SCL -> analog pin 5

GND -> GND

вход с датчиков XCRL подключил к земле

1. так вот если оба XCRL на GND при инициализации то данные получаем

 Alt(m):0  Pressure(mm Hg):1.76 Temp:0.00   dPs:235

2. после отключения одного любого входа XCLR от GND получаем

 Alt(m):0  Pressure(mm Hg):1.76 Temp:0.00   dPs:235

3. если при иницыализации оба входа XCRL отключены отключены от земли то получаем

 Alt(m):11  Pressure(mm Hg):785.93 Temp:28.40   dPs:104765

4. если подключаем один из входов(любого датчика) на землю получаем

(1) Alt(m):-944  Pressure(mm Hg):879.30 Temp:62.60   dPs:117211

(2) Alt(m):-261  Pressure(mm Hg):811.75 Temp:34.50   dPs:10820

5. если проинициализировать с одним датчиком то данные получим правильные

Alt(m):11  Pressure(mm Hg):758.09 Temp:26.60   dPs:101054
Alt(m):10  Pressure(mm Hg):758.11 Temp:26.60   dPs:101056
Alt(m):11  Pressure(mm Hg):758.07 Temp:26.60   dPs:101051
Alt(m):11  Pressure(mm Hg):758.13 Temp:26.60   dPs:101059

 

как использовать для второго датчика другие входы контролера допустим А2 и А3?

в библиотеке нужно чтото периписать? сам не увидел.

тестовый код ниже

библиотека http://code.google.com/p/bmp085driver/downloads/detail?name=bmp085v0.4.zip&can=2&q=label:Featured

// BMP085_test1
// by Filipe Vieira
// Simple test of BMP085 output using default settings.
// This example requires AUTO_UPDATE_TEMPERATURE to be true in bmp085.h otherwise temperature will not update.
// IMPORTANT!! To get correct values you MUST CHANGE init() parameters, in
// this example I've set 250m based on GPS data for my location.
 
#include <Wire.h>
#include <BMP085.h>
 
BMP085 dps = BMP085();      // Digital Pressure Sensor
 
long Temperature = 0, Pressure = 0, Altitude = 0;
 
void setup(void) {
  Serial.begin(9600);
  Wire.begin();
  delay(1000);
   
  // uncomment for different initialization settings
  //dps.init();     // QFE (Field Elevation above ground level) is set to 0 meters.
  // same as init(MODE_STANDARD, 0, true);
  
  //dps.init(MODE_STANDARD, 101850, false);  // 101850Pa = 1018.50hPa, false = using Pa units
	                  // this initialization is useful for normalizing pressure to specific datum.
	                  // OR setting current local hPa information from a weather station/local airport (QNH).
	   
	  dps.init(MODE_ULTRA_HIGHRES, 1100, true);  // 11 meters, true = using meter units
	                  // this initialization is useful if current altitude is known,
	                  // pressure will be calculated based on TruePressure and known altitude.
	 
	  // note: use zeroCal only after initialization.
//	   dps.zeroCal(101800, 1100);    // set zero point
	}           
	 
	void loop(void) {
	  dps.getPressure(&Pressure);
	  dps.getAltitude(&Altitude);
	  dps.getTemperature(&Temperature);
	   
	  Serial.print("  Alt(m):");
	  Serial.print(Altitude/100);
	  Serial.print("  Pressure(mm Hg):");
	  Serial.print(Pressure/133.3);
	  Serial.print(" Temp:");
	  Serial.print(Temperature*0.1);
	  Serial.print("   dPs:");
          Serial.println (Pressure);

	  delay(500);
	}

 

 

ales2k
Offline
Зарегистрирован: 25.02.2013

Может питание только на нужном включать?

servilat
Offline
Зарегистрирован: 12.12.2013

шас проверю. спс

не прокатывает, после инициализации если подключаить питание с датчиков не идет информация.

servilat
Offline
Зарегистрирован: 12.12.2013

вроде все!

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

    void loop(void) {
Wire.begin();
dps.init(MODE_ULTRA_HIGHRES, 1100, true);  // 11 meters, true = using meter units
 

	void loop(void) {
Wire.begin();
dps.init(MODE_ULTRA_HIGHRES, 1100, true);  // 11 meters, true = using meter units

  
  	  dps.getPressure(&Pressure);
	  dps.getAltitude(&Altitude);
	  dps.getTemperature(&Temperature);
	   
	  Serial.print("  Alt(m):");
	  Serial.print(Altitude/100);
	  Serial.print("  Pressure(mm Hg):");
	  Serial.print(Pressure/133.3);
	  Serial.print(" Temp:");
	  Serial.print(Temperature*0.1);
	  Serial.print("   dPs:");
          Serial.println (Pressure);

	  delay(1500);
	}

 

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015
dps.init(MODE_ULTRA_HIGHRES, 2000, true);

Проблема аналогичная. Подключение 2-х BMP на одну ардуину. Датчики подключены через мультиплексор и в принципе работают правильно, если проводить их инициализацию ( первая строка текста) каждый раз перед обращениием к ним в основном цикле. Вопрос: какие действия происходят при инициализации BMP, по даташиту в BMP есть EEPROM,  а количество перезаписи EEPROM ограничено, может кто в курсе при инициализации BMP есть ли запись в EEPROM.

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

а зачем две бмпшки на одну ардуину ?

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

Maverik пишет:

а зачем две бмпшки на одну ардуину ?

нужно стравнивать показания в 2х точках камер и от разницы показаний давать разрешение на поджиг

или сравнивать давление в дымоходе и перед топкой - есть тяга+ ? или она -

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

Если кто знает, прошу ответ по существу вопроса поста 9.

 

Ardfun
Offline
Зарегистрирован: 22.05.2016
dps.init(MODE_ULTRA_HIGHRES, 0, true); 

 А если нам нужно узнать абсолютную высоту относительно уровня моря то что писать нужно ?

так как тут при включении высота отсчитывается от момента включения

 

 

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

1. Давление существенно зависит от погоды, поэтому оценка высоты по нему будет очень грубой (недостаточной для практических целей).

2. Как ведет себя конкретный датчик, должно быть описано в дэйташите.

Ardfun
Offline
Зарегистрирован: 22.05.2016

Так мне и нужно высота зависящяя от погоды, в авиации это называется эшелонная высота в ней за высоту абсолютного нуля берется давление в 760 мм.рт.ст. от него и пляшет. Если я что то не то написал то подправте я могу ошибатся