В этот раз я опишу процесс подключения цифрового датчика атмосферного давления BMP085 к Arduino.
Этот датчик я собираюсь использовать в проекте домашней метеостанции, поэтому опишу работу с ним максимально подробно.
Характеристики BMP085
- Пределы измерения абсолютного давления 30-110кПа (300-1100hPa) (-500…9000 метров над уровнем моря)
- Питание 1.8 — 3.6В (Vdda), 1.62 — 3.6В (Vddd)
- Низкий уровень шума:
0.06hPa (0.5м) в стандартном режиме
0.03hPa (0.25м) в режиме ультравысокого разрешения
0.1m возможно при применение программного фильтра. - Интерфейс: I2C
- Разрешение: 0.01 hPa, 0.1 С
Расположение и назначение выводов BMP085
Подключение BMP085 к Arduino
Схема подключения довольно простая:
- VCC на BMP085 подключаем к +3,3 V Arduino
- SDA на BMP085 подключаем к пин 20 (SDA) Arduino Mega 2560 (аналоговый пин 4 на Arduino Uno)
- SCL на BMP085 подключаем к пин 21 (SCL) Arduino Mega 2560 (аналоговый пин 5 на Arduino Uno)
- GND на BMP085 подключаем к GND Arduino
Для работы с датчиком в среде Arduino необходимо установить дополнительную библиотеку bmp085.
bmp085.rar (51,9 KiB, 5 534 hits)
Скачайте архив и распакуйте его содержимое в \arduino-1.xx\libraries\
Тестовый скетч, который выводит в окно Монитора порта высоту, давление и температуру:
#include <Wire.h>
#include <BMP085.h>BMP085 dps = BMP085();
long Temperature = 0, Pressure = 0, Altitude = 0;
void setup(void) {
Serial.begin(9600);
Wire.begin();
delay(1000);dps.init();
}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.println(Temperature*0.1);
delay(2000);
}
Результат работы:
Установка датчика атмосферного давления
Датчик атмосферного давления устанавливается в помещении вдали от окон и отопительных приборов. Атмосферное давление зависит от высоты над уровнем моря места, где производится измерение; поэтому требуется калибровка датчика давления перед его использованием. Для правильной установки прибора необходимо воспользоваться показаниями другого барометра или данными ближайшей метеостанции (с учётом разности высот, определённой по подробной топографической карте; 10 м подъёма соответствует уменьшению давления примерно на 1 мм рт.ст. или 1.3 гПа(мБ)).
© meteocenter.net
У меня в Serial Monitor'e не выводится действительное значение высоты над уровнем моря (Alt). Вместо этого выводятся хаотично "0", "1", или "-1". Значения атмосферного давления и температуры выводятся корректно. В чём ошибка?
у меня такой проблемы не возникало
Запишите Serial.print(Altitude/100., X); X число разрядов после запятой, у вас всё нормально только не выводит дробную часть числа, например Serial.print(Altitude/100., 1);. Вывод будет 1.4
Serial.print(Altitude/100.,2); Вывод будет 1.45.
Пара вопросов по значениям напряжений:
1) На данной плате с датчиком (GY-65) есть линейный стабилизатор на 3,3В, означает ли это, что линию VCC можно подключать к +5В?
2) Уровни напряжений на линиях A4/A5 соответствуют стандарту LVTTL (т.е. с макс. напряжением 3,3В вместо 5В, и это реализовано программно через соотв. вызов analogWrite() ) и никакого дополнительного преобразования уровней для BMP085 не требуется?
1 не проверял. подключал на 3,3
2 для Arduino преобразования уровней не требуется
I2C использует выходы с открытым стоком. Преобразования уровней не требуется, но требуются подтягивающие резисторы к +Uпит (в случае с Arduino - к +5В)
меня интересует, какое напряжение выдает барометр при разных давлениях? и какие это выводы? как измерить это напряжение?
спасибо!