В прошлом уроке Мы научились делать термометр, используя для этого цифровой датчик температуры DS18B20, и выводить данные на OLED дисплей.
В этом уроке мы расширим возможности и добавим к проекту еще барометр BMP180, это даст нам возможность следить не только за температурой, но и за атмосферным давлением.
В этом уроке нам понадобится:
- Датчик температуры DS18B20 1 метр. (Герметичный)
- Экран 0.96 128X64 OLED,
- Breadboard
- Набор проводов Папа-Папа
- Микроконтроллер Arduino
- Резистор
- Барометр BMP180 GY-68
Для реализации проекта нам необходимо установить сразу несколько библиотек:
- OneWire Arduino Library
- OLED I2C OLED_I2C с поддержкой Русского и Украинского языка.
- Dallas Temperature
- Adafruit BMP085 Библиотека для работы с датчиком давления BMP085
Сборка:
1) OLED дисплей подключаем к arduino следующим образом:
Arduino Uno | Экран 0.96 128X64 OLED |
---|---|
5V или 3.3V | VCC |
GND | GND |
Pin 9 | SCL |
Pin 8 | SDA |
Для удобства подключения можно использовать макетную плату.
2) Датчик температуры DS18B20 подключается к arduino следующим образом:
Распиновка для влагозащитного датчика DS18B20 с метровым проводом:
Arduino UNO | Влагозащитный датчика DS18B20 |
---|---|
5V или 3.3V | Красный провод ( 5V) |
GND | Черный провод (GND) |
Pin 10 | Желтый провод (Сигнальный) (Необходимо подтянуть резистором 4,7кОм к 5V |
3) Барометр BMP180 GY-68 подключается к Arduino следующим образом:
Arduino UNO | Барометр BMP180 |
---|---|
3.3V ! |
Vin |
GND | GND |
A5 | SCL |
A4 | SDA |
В нашем случае, для удобства мы подключили все модули к питанию 3.3 Вольта. Более наглядную схемы подключения можно посмотреть на фотографии ниже.
Теперь, когда мы подключили все модули, можно приступить к написанию скетча для Arduino. Предварительно необходимо установить библиотеки указанные выше.
#include <Wire.h> #include <Adafruit_BMP085.h> // Библиотека для работы с барометром float P; // В данную переменную мы будем пересчитывать давление в милиметры ртутного столба Adafruit_BMP085 bmp; #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 10 // номер пина к которому подключен DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); char buffer[25]; char buffer1[25]; #include <OLED_I2C.h> OLED myOLED(8, 9, 8); // Подключение дисплея, 8pin - SDA , 9pin - SCL extern uint8_t RusFont[]; // Русский шрифт extern uint8_t MegaNumbers[]; // Подключение больших шрифтов extern uint8_t SmallFont[]; // Базовый шрифт без поддержки русскийх символов. void setup() { sensors.begin(); myOLED.begin(); bmp.begin(); myOLED.setFont(RusFont); } void loop() { // Выводим на экран показания температуры sensors.requestTemperatures(); myOLED.clrScr(); // очищаем экран myOLED.setFont(RusFont); myOLED.print("Ntvgthfnehf", CENTER, 0); // вывод текста русскими буквами myOLED.setFont(SmallFont); myOLED.print("iarduino.ru", CENTER, 55); // вывод текста myOLED.setFont(MegaNumbers); myOLED.print(String(sensors.getTempCByIndex(0) , 1), CENTER, 10); // Отображение значения температуры, с точностью до десятых myOLED.update(); delay(2000); // Пауза 2 секунды // Выводим на экран показания атмосферного давления myOLED.clrScr(); // очищаем экран myOLED.setFont(RusFont); myOLED.print("Lfdktybt", CENTER, 0); // вывод текста русскими буквами myOLED.setFont(SmallFont); myOLED.print("iarduino.ru", CENTER, 55); // вывод текста P=bmp.readPressure(); P=(float)0.0075*P; // пересчитываем давления в привычные нам мм ртутного столба. myOLED.setFont(MegaNumbers); myOLED.print(String(P , 1), CENTER, 10); // Отображение значения давления, с точностью до десятых myOLED.update(); delay(2000); }
Данный скетч можно скачать по следующей ссылке: Скетч урока №8.
В результате наше устройство отображает сперва температуру, которую фиксирует датчик DS18B20, а спустя 2 секунды он выводит на экран текущее давление, зафиксированное с помощью барометра BMP180.
Обсуждение