Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Компоненты и материалы

Arduino UNO × 1
Adafruit BMP280 × 1
Adafruit OLED 128x32 I2C × 1

О проекте

Приветствуем вас в этом уроке, где мы используем датчик BMP280 для измерения температуры, атмосферного давления и высоты над уровнем моря с помощью платы Arduino UNO и OLED-дисплея. Вот ключевые параметры BMP280 из даташита:

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

В этом проекте мы будем измерять все эти параметры как в метрической, так и в имперской системах единиц. Компоненты, которые нам понадобятся, показаны ниже:

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Тестирование и устранение неисправностей

После подключения модуля рекомендуется протестировать код из примера библиотеки под названием «BMP280test». Если модуль не обнаруживается (как на скриншоте ниже):

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Вы можете запустить сканер I²C (но предварительно отключите любые другие I²C-устройства, такие как LCD или OLED). Если модуль исправен и не имеет проблем с пайкой, сканер покажет его адрес:

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Запишите этот адрес и откройте файл библиотеки (обычно он находится в «Documents/Arduino/Libraries»):

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Откройте файл с помощью подходящего редактора (например, Dev C++):

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Перейдите к строке 41 и измените значение _i2caddr, заменив «a» на адрес, найденный в мониторе последовательного порта:

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Сохраните изменения и закройте файл. Библиотека по умолчанию настроена на работу с модулями, имеющими I²C-адрес 0x77, но используемый здесь модуль имеет адрес 0x76.

Запустите тестовый код снова:

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Фотографии тестирования

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO
Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Надеюсь, проект заработает у вас. Если возникнут проблемы, оставьте комментарий.

Код

Доступны четыре варианта скетчей:

bmp280_Serial_metric.ino

/* Этот код для работы с Adafruit BMP280 (метрическая система)
 * Измеряет температуру и давление, выводит их в Serial Monitor вместе с высотой
 * Модифицированная версия примера Adafruit
 * Обратитесь к www.surtrtech.com или каналу SurtrTech на YouTube */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C интерфейс

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
  /* Настройки по умолчанию из даташита. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Режим работы. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Передискретизация температуры */
                  Adafruit_BMP280::SAMPLING_X16,    /* Передискретизация давления */
                  Adafruit_BMP280::FILTER_X16,      /* Фильтрация. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Время ожидания. */
}

void loop() {
  Serial.print(F("Temperature = "));
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
  Serial.print(F("Pressure = "));
  Serial.print(bmp.readPressure()/100); // давление в гПа
  Serial.println(" hPa");
  Serial.print(F("Approx altitude = "));
  Serial.print(bmp.readAltitude(1019.66)); // «1019.66» — давление (гПа) на уровне моря в вашем регионе
  Serial.println(" m");
  Serial.println();
  delay(2000);
}

bmp280_Serial_Imperial.ino

/* Этот код для работы с Adafruit BMP280 (имперская система)
 * Измеряет температуру и давление, выводит их в Serial Monitor вместе с высотой
 * Модифицированная версия примера Adafruit
 * Обратитесь к www.surtrtech.com или каналу SurtrTech на YouTube */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
  /* Настройки по умолчанию из даташита. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Режим работы. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Передискретизация температуры */
                  Adafruit_BMP280::SAMPLING_X16,    /* Передискретизация давления */
                  Adafruit_BMP280::FILTER_X16,      /* Фильтрация. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Время ожидания. */
}

void loop() {
  float f = bmp.readTemperature()*9/5 + 32; // Перевод из °C в °F
  Serial.print(F("Temperature = "));
  Serial.print(f);
  Serial.println(" *F");
  float P = bmp.readPressure()/3386.39; // Давление в дюймах ртутного столба
  Serial.print(F("Pressure = "));
  Serial.print(P);
  Serial.println(" inHg");
  float A = bmp.readAltitude(1019.66)*3.28084; // Высота в футах
  Serial.print(F("Approx altitude = "));
  Serial.print(A);
  Serial.println(" ft");
  Serial.println();
  delay(2000);
}

bmp280_OLED_m.ino

/* Этот код для работы с Adafruit BMP280 и OLED-экраном (метрическая система)
 * Измеряет температуру и давление, выводит их на OLED-дисплей вместе с высотой
 * Модифицированная версия примера Adafruit
 * Обратитесь к www.surtrtech.com или каналу SurtrTech на YouTube */
#include <Adafruit_GFX.h> // Библиотеки для OLED и BMP280
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>

#define SCREEN_WIDTH 128  // Ширина OLED-дисплея в пикселях
#define SCREEN_HEIGHT 32  // Высота OLED-дисплея в пикселях
#define OLED_RESET -1     // Номер пина Reset (или -1, если используется общий с Arduino)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BMP280 bmp;

void setup() {
  bmp.begin(); // Запуск BMP
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Запуск OLED
  display.clearDisplay();
  display.display();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("SurtrTech"); // Имя проекта, можно убрать или заменить
  display.setCursor(32,12);
  display.setTextSize(2);
  display.println("BMP280");
  display.display();
  delay(2000);
}

void loop() {
  display.clearDisplay();
  float T = bmp.readTemperature(); // Температура в °C
  float P = bmp.readPressure()/100; // Давление в Па и перевод в гПа
  float A = bmp.readAltitude(1019.66); // Высота, «1019.66» — давление (гПа) на уровне моря в вашем регионе
  // Если не знаете, измените, пока не получите высоту вашего места

  display.setCursor(0,0);
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.print("Temp");
  display.setCursor(0,18);
  display.print(T,1);
  display.setCursor(50,17);
  display.setTextSize(1);
  display.print("C");
  display.setTextSize(1);
  display.setCursor(65,0);
  display.print("Pres");
  display.setCursor(65,10);
  display.print(P);
  display.setCursor(110,10);
  display.print("hPa");
  display.setCursor(65,25);
  display.print("Alt");
  display.setCursor(90,25);
  display.print(A,0);
  display.setCursor(110,25);
  display.print("m");
  display.display();
  delay(2000);
}

bmp280_OLED_US.ino

/* Этот код для работы с Adafruit BMP280 и OLED-экраном (имперская система)
 * Измеряет температуру и давление, выводит их на OLED-дисплей вместе с высотой
 * Модифицированная версия примера Adafruit
 * Обратитесь к www.surtrtech.com или каналу SurtrTech на YouTube */
#include <Adafruit_GFX.h> // Библиотеки для OLED и BMP280
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BMP280 bmp;

void setup() {
  bmp.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.display();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("SurtrTech");
  display.setCursor(32,12);
  display.setTextSize(2);
  display.println("BMP280");
  display.display();
  delay(2000);
}

void loop() {
  display.clearDisplay();
  float T = bmp.readTemperature()*9/5 + 32; // Температура в °C и перевод в °F
  float P = bmp.readPressure()/3386.39; // Давление в Па и перевод в дюймы ртутного столба
  float A = bmp.readAltitude(1019.66)*3.28084; // Высота, «1019.66» — давление (гПа) на уровне моря в вашем регионе

  display.setCursor(0,0);
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.print("Temp");
  display.setCursor(0,18);
  display.print(T,1);
  display.setCursor(50,17);
  display.setTextSize(1);
  display.print("F");
  display.setTextSize(1);
  display.setCursor(65,0);
  display.print("Pres");
  display.setCursor(65,10);
  display.print(P);
  display.setCursor(100,10);
  display.print("inHg");
  display.setCursor(65,25);
  display.print("Alt");
  display.setCursor(90,25);
  display.print(A,0);
  display.setCursor(110,25);
  display.print("ft");
  display.display();
  delay(2000);
}

Необходимые библиотеки

Схема подключения

Оба модуля используют интерфейс I²C: SDA/SCL подключены к пинам A4 и A5. BMP280 питается от 5 В, а OLED — от 3,3 В.

Точное измерение температуры, давления и высоты с BMP280 и Arduino UNO

Производственный процесс

  1. Интегрированная система контроля доступа с QR, RFID и верификацией температуры
  2. Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
  3. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  4. Бесшовный мониторинг температуры и влажности на Raspberry Pi с EzTemp
  5. Самодельная система термостатирования для домашнего пивоварения: мониторинг и регулирование на Arduino
  6. Raspberry Pi BMP085: точные показания температуры и давления по I2C
  7. Точное измерение и логирование термопар для лабораторных и научных экспериментов
  8. Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
  9. Устройство точного измерения давления и расхода воздуха на аналоговом датчике
  10. Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield