В этой статье мы рассмотрим создание системы измерения атмосферного давления на основе датчика BMP180 и платы Arduino Uno. В первую очередь для того, чтобы иметь возможность подключения датчика BMP180 к плате Arduino, необходимо скачать библиотеку, предназначенную для работу с датчиком BMP180. Сделать это можно по следующему адресу: https://github.com/adafruit/Adafruit-BMP085-Library. После прикрепления этой библиотеки мы получим доступ к специальным функциям, которые значительно упростят взаимодействие платы Arduino с датчиком BMP180.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Датчик барометрического давления BMP180 (купить на AliExpress).
- Резистор 220 кОм (купить на AliExpress).
- Соединительные провода.
- Макетная плата.
Работа схемы
После подключения заголовочного файла скачанной библиотеки нам уже не стоит беспокоиться по поводу установления соединения между платой Arduino Uno и датчиком BMP180. Мы можем просто вызвать специальные функции, которые сделают это за нас. Нам будет нужно просто инициализировать ЖК дисплей и показывать на нем полученные от датчика значения.
Схема устройства представлена на следующем рисунке.
В ЖК дисплее 16x2 мы имеем 16 контактов, без использования черного цвета можно использовать 14 контактов. Контакты черного цвета можно запитать или оставить "пустыми". То есть из 14 контактов мы имеем 8 контактов данных (7-14 или D0-D7), 2 контакта питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (VEE-controls определяет насколько толстыми будут выглядеть символы на экране дисплея) и 3 контакта управления (RS&RW&E).
В схеме мы использовали только 2 контакта управления ЖК дисплея. Контакт контраста и контакт READ/WRITE используются редко поэтому в нашем случае их можно просто замкнуть на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения данных. В этом случае нам будет необходимо только управлять контактами ENABLE и RS чтобы передавать на ЖК дисплей символы и данные.
В схеме необходимо будет сделать следующие соединения платы Arduino с ЖК дисплеем:
PIN1 или VSS на землю
PIN2 или VDD или VCC к источнику питания +5 В
PIN3 или VEE на землю (обеспечивает ЖК дисплею максимальную контрастность – удобно для начинающих)
PIN4 или RS (Register Selection – выбор регистра) к контакту PIN8 платы ARDUINO UNO
PIN5 или RW (Read/Write) на землю (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) к контакту PIN9 платы ARDUINO UNO
PIN11 или D4 к контакту PIN10 платы ARDUINO UNO
PIN12 или D5 к контакту PIN11 платы ARDUINO UNO
PIN13 или D6 к контакту PIN12 платы ARDUINO UNO
PIN14 или D7 к контакту PIN13 платы ARDUINO UNO
Программная среда ARDUINO IDE позволяет нам взаимодействовать с ЖК дисплеем в 4-битном режиме. Этот режим заложен в Arduino по умолчания и сокращает число контактов, необходимых для взаимодействия с ЖК дисплеем. Более подробно об этом можно прочитать в статье про подключение ЖК дисплея к плате Arduino.
То есть, в результате мы подсоединили 6 контактов ЖК дисплея к плате Arduino, из которых 4 контакта данных и 2 контакта управления.
Исходный код программы
Для подключения датчика BMP180 к плате Arduino Uno мы должны сделать следующие вещи:
1. #include <Adafruit_BMP085.h>
2. #include <Wire.h>
3. #include <LiquidCrystal.h>
4. Serial.begin(9600);
5. String PRESSUREVALUE = String(bmp.readPressure());
6. String TEMPARATUREVALUE = String(bmp.readTemperature());
Первым делом нам необходимо подключить заголовочный файл скачанной нами библиотеки (#include <Adafruit_BMP085.h>) чтобы получить доступ к специальным функциям для работы с датчиком BMP180. После подключения этого файла мы без всяких трудностей сможем считывать значения с датчика BMP180.
Далее мы должны разрешить последовательное соединение (C communication) с помощью подключения заголовочного файла “#include <Wire.h>”.
После этого мы сможем считывать значение давления с датчика с помощью вызова функции ”String PRESSUREVALUE = String(bmp.readPressure());”. В результате этой команды считанное значение давления будет сохранено в строке “PRESSUREVALUE”.
Также мы можем считать с датчика значение температуры с помощью вызова функции ”String TEMPARATUREVALUE = String(bmp.readTemperature());”. В результате этой команды считанное значение температуры будет сохранено в строке “TEMPARATUREVALUE”.
Также в программе мы должны подключить заголовочный файл для работы с ЖК дисплеем - #include <LiquidCrystal.h>. По умолчанию ЖК дисплей будет работать в 4-битном режиме.
Далее мы должны указать плате Arduino тип ЖК дисплея, с которым мы будем работать. Поскольку мы задействовали ЖК дисплей 16х2, то в нашем случае эта команда будет выглядеть следующим образом: ‘lcd.begin(16,2);‘.
После этого мы должны сообщить плате Arduino номера ее контактов, к которым мы подключили ЖК дисплей. В нашем случае это будет команда “LiquidCrystallcd(8, 9, 10, 11, 12, 13);”.
Далее представлен полный текст программы с комментариями, поясняющими смысл отдельных команд.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <Adafruit_BMP085.h> #include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // номера контактов платы Arduino, к которым подключены контакты RS,EN,D4,D5,D6,D7 ЖК дсиплея char PRESSURESHOW[4]; // инициализация массива символов на 4 элемента для хранения значения давления char TEMPARATURESHOW[4]; // инициализация массива символов на 4 элемента для хранения значения температуры Adafruit_BMP085 bmp; void setup() { lcd.begin(16, 2); lcd.print(" CIRCUITDIGEST"); // вывод приветственной строки на ЖК дсиплей lcd.setCursor(0, 1); delay (2500); delay (2500); lcd.clear(); // очистить ЖК дисплей Serial.begin(9600); // старт последовательного порта на скорости 9600 бод/с if (!bmp.begin()) { Serial.println("ERROR"); // если возникла ошибка при связи датчика с последовательным портом while (1) {} } } void loop() { lcd.print("Pressure= "); String PRESSUREVALUE = String(bmp.readPressure()); // считывание значения давления с датчика PRESSUREVALUE.toCharArray(PRESSURESHOW, 4); // конвертация строки в символьный массив lcd.print(PRESSURESHOW); // отображение на ЖК дисплее значения давления lcd.print("hPa "); lcd.setCursor(0, 1); // установка курсора в нулевой столбец первой строки lcd.print("Tempar.="); String TEMPARATUREVALUE = String(bmp.readTemperature()); // считывание значения температуры с датчика TEMPARATUREVALUE.toCharArray(TEMPARATURESHOW, 4); // конвертация строки в символьный массив lcd.print(TEMPARATURESHOW); // отображение на ЖК дисплее значения температуры lcd.print("C "); lcd.setCursor(0, 0); // установка курсора в нулевой столбец нулевой строки delay(1000); } |
Видео, демонстрирующее работу схемы
На эту тему также можно посмотреть следующее познавательное видео:
2 198 просмотров