В этом уроке мы подключим датчик барометрического давления BMP280 к Arduino и запишем результаты на компьютер, используя PuTTY.
О проекте
BMP280 будет подключен с использованием I2C. Мы будем собирать данные и записывать в файл временную метку смены, считывая время, прошедшее с момента запуска Arduino.
Файл будет записан в формате CSV (значения, разделенные запятыми), который часто используется, когда данные со сходной структурой сохраняются в файл или передаются по ссылке. Он совместим с программой MS Excel и может быть просто открыт в ней, чтобы удобно отобразить значения в столбцах и строках.
Используя PuTTY, мы создадим регистратор данных для BMP280, подключенного к Arduino. Как правило, регистратор данных - это электронное устройство, используемое для записи данных с датчиков во времени и их хранения для дальнейшего использования или анализа.
Putty (скачиваем, устанавливаем, настраиваем)
PuTTY можно скачать отсюда. После того, как вы его скачаете, просто запустите программу установки и выберите место, куда вы хотите её установить.
PuTTY - эмулятор терминала. В прошлом программисты вводили и считывали информацию с мейнфреймных компьютеров с терминалами.
А некоторые из них были даже механическими и назывались телетайпами, как в "телеграфной пишущей машинке". PuTTY имеет много доступных типов соединения и протоколов передачи данных, но мы будем использовать простой RS232.
Эмуляторы терминалов широко использовались для подключения к другим удаленным компьютерам до появления Интернета.
На этот раз сконцентрируйтесь сначала на получении программы Arduino, прежде чем запускать и находить данные, записываемые в окно вашего последовательного монитора. Запишите используемый порт в самой верхней части окна (например, COM12).
Закройте окно Serial, так как мы хотим открыть этот же порт в PuTTY. Не нужно беспокоиться, потому что Arduino будет продолжать отправлять данные в порт.
Теперь откройте PuTTY и нажмите «Session» в левой части окна. Введите com-порт (например, COM12) в поле «Последовательная линия» (Serial line) в правой части окна и выберите «Последовательный» (Serial).
С левой стороны выберите "Logging" (Ведение журнала), затем выберите "Printable output" (Вывод на печать) и, возможно, выберите "Always" (Всегда).
Перезапишите это, если это то, что вы хотите. Нажмите кнопку "Browse" (Обзор) и найдите место и имя файла, куда вы можете сохранить файл, который вы записали в журнал.
Хорошей идеей будет поместить расширение имени файла .csv (например, 'logging.csv'), чтобы MS Excel мог его сразу распознать.
Вернитесь в окно сеанса (Session) и в поле "Сохраненные сеансы" (Saved Sessions) введите свое имя или инициалы и нажмите "Сохранить" (Save). Делая это, каждый раз, когда вы открываете PuTTY, просто выберите Saved Session (Сохраненная сессия) и нажмите кнопку "Load" (Загрузить), и вам не придется делать всё это снова.
Чтобы начать регистрацию, просто нажмите кнопку "Open" (Открыть).
Подключаем BMP280 к Arduino
Для получения более подробной информации о том, как BMP280 работает с Arduino Uno, ознакомьтесь с нашим уроком по беспроводной связи между двумя ардуинами.
Теперь подключите компоненты с помощью инструкции ниже.
BMP280 | UNO |
---|---|
VCC | 3.3V |
GND | GND |
SCL | A5 |
SDA | A4 |
CSB | Не используется |
SDD | Не используется |
Наглядно схема соединений будет такой:
Установка библиотек
Библиотеку Adafruit BMP280 можно скачать с нашего сайта отсюда или с Github.
Скетч Ардуино
Скетч (эскиз) для Ардуино Уно скопируйте ниже:
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp;
float QNH = 1024.67; //Change the "1022.67" to your current sea level barometric pressure (https://www.wunderground.com)
const int BMP_address = 0x76;
float pressure;
float temperature;
float altimeter;
//char charRead;
char dataStr[100] = "";
char buffer[7];
////////////////////////////////////////////////////
void setup() {
Serial.begin(9600);
bmp.begin(BMP_address);
} // end setup()
////////////////////////////////////////////////////////////
void loop(void) {
dataStr[0] = 0; //clean out string
pressure = bmp.readPressure() / 100; //and conv Pa to hPa
temperature = bmp.readTemperature();
altimeter = bmp.readAltitude(QNH); //QNH is local sea lev pressure
//----------------------- using c-type ---------------------------
//convert floats to string and assemble c-type char string for writing:
ltoa(millis(), buffer, 10); //conver long to charStr
strcat(dataStr, buffer); //add it onto the end
strcat(dataStr, ", "); //append the delimeter
//dtostrf(floatVal, minimum width, precision, character array);
dtostrf(pressure, 5, 1, buffer); //5 is mininum width, 1 is precision; float value is copied onto buff
strcat(dataStr, buffer); //append the coverted float
strcat(dataStr, ", "); //append the delimeter
dtostrf(temperature, 5, 1, buffer); //5 is mininum width, 1 is precision; float value is copied onto buff
strcat(dataStr, buffer); //append the coverted float
strcat(dataStr, ", "); //append the delimeter
dtostrf(altimeter, 5, 1, buffer); //5 is mininum width, 1 is precision; float value is copied onto buff
strcat(dataStr, buffer); //append the coverted float
strcat(dataStr, 0); //terminate correctly
Serial.println(dataStr);
delay(1000);
} //end main
///////////////////////////////////////////////
Для этих эскизов я не использовал объект String (строка) Arduino. Серьезные программисты избегают этого на самом деле и предпочитают использовать символьные строки типа C (C-type). Подробнее о том, почему следует избегать объекта string мы поговорим в следующих уроках.
Функция loop()
начинает работу с сброса dataStr
до 0, чтобы обновить его, а затем получает метку времени с помощью функции millis()
(количество миллисекунд, прошедших с момента нашего запуска). Теперь его нужно добавить в конец dataStr
, за которым следует переменная, разделенная запятыми.
strcat()
немного сбивает с толку, так как дает нечто подобное:
buffer = strcat(dataStr, temperature)
Но на самом деле буфер является временным хранилищем для хранения результата.
Если соединения выполнены правильно, в последовательном окне Arduino должно отображаться следующее:
На этот раз закройте окно последовательного порта Arduino (PuTTY не откроет порт, если Arduino держит его открытым). Откройте PuTTY и нажмите «Открыть».
После этого Arduino выйдет из последовательного порта, поэтому вы должны увидеть что-то вроде этого:
PuTTY дает вам возможность добавить или перезаписать ваш файл. После сохранения вы можете открыть файл в MS Excel.