Пишем программный код для подключения датчика давления BM180 к плате Arduino Nano.

В данном уроке, мы подключим датчик BMP180:

считаем с него температуру и давление, а так же выведем на экран данные значения.

Датчик ВМ180 имеет следующие параметры:

  • Диапазон измеряемого давления: 300 – 1100 гектопаскаль (+9000 – -500 м над уровнем моря);
  • Напряжение питания: 1,62 – 5В;
  • Потребление тока в режиме «низкого потребления»: 0,5 мА;
  • IIC интерфейс;
  • Частота шины IIC: 3,5 МГц;
  • Время срабатывания: 4,5 мс;
  • Точность измерения давления: 0,1 гектопаскаль;
  • Точность измерения температуры: 0,1°С;
  • Рабочая температура: -40 — 85°С;

Экран мы возьмем SSD1306, так как экран и датчик BMP185 подключаются к шине I2C — они подключаются на одни и теже ножки нашей платы:

GND -> GND
VIN -> 5V
SDA -> A4
SCL -> A5

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

Программный код:

#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

 

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET LED_BUILTIN // Reset pin # (or -1 if sharing Arduino reset pin)

 

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

 

Adafruit_BMP085 bmp;

 

void setup() {
// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
if (!bmp.begin()) {
display.clearDisplay();
display.setCursor(50,0);
display.println("BMP180 - Error");
display.display();
while (1) {}
 }
}

void loop() {
display.clearDisplay();
display.setCursor(25,0);
display.println("BMP180-Ok");

display.setCursor(5,10);
display.print("Temperature=");
display.print(bmp.readTemperature());
display.write(247);
display.print("C");

display.setCursor(5,20);
display.print("Pressure=");
display.print(bmp.readPressure());
display.print("Pa");

 display.setCursor(5,30);
display.print("P_ctolb=");
display.print(bmp.readPressure()/133);
display.print("mm");

display.display();
delay(2000);
}