logo
+7 (495) 997-37-74
Москва, ул.Международная, 15
02.08.2016

Гидрометеоцентр в каждый дом. Bluetooth погодная станция Arduino

02.08.2016

Как часто мы смотрим по утрам прогноз погоды, и доверяя обещаниям синоптиков о хорошей и ясной погоде, не берем с собой зонт и идем на работу или учебу в легкой одежде? Думаю, такая ситуация случалась в жизни каждого из нас. Так вот теперь, благодаря устройству описанному ниже, вы сможете быть в курсе того что творится за окном в данный момент. Итак, в этот раз мы будем собирать погодную станцию на Arduino с возможностью передачи данных по Bluetooth на компьютер.

Для нашей погодной станции мы будем использовать датчик BME280.  Он хорош тем, что уже имеет на своем борту не только термодатчик и датчик давления, но и гигрометр для измерения влажности воздуха. Диапазон измерения влажности от 0 до 100%. Для сведения стоит сказать, что большинство дешёвых гигрометров способны измерять влажность лишь в диапазоне от 20 до 80%.

В качестве Bluetooth модуля используем Arduino ZigBee и Bluetooth Bee на базе Bluetooth HC-06.

Итак, давайте соберем схему нашей домашней метеостанции:

 


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

Arduino

VCC(3.3V)

GND

SDA(A4)

SCL(A5)

BME280

VCC

GND

SDA

SCL

Теперь скачаем библиотеку для BME280 (в архиве). Далее составим простейший скетч для считывания данных с датчика и отправки их по Bluetooth:

#include <BME280.h>
BME280 bme;
bool metric = false;
void printBME280Data(Stream * client);
/* === Print a message to stream with the altitude, and dew point. === */
void printBME280CalculatedData(Stream* client);
void setup() {

  Serial.begin(9600);
  while (!Serial) {} // Wait
  while (!bme.begin()) {
    Serial.println("Could not find BME280 sensor!");
    delay(1000);
  }
}

void loop() {
  printBME280Data(&Serial);
  delay(500);
}

void printBME280Data(Stream* client) {
  float temp(NAN), hum(NAN), pres(NAN);
  uint8_t pressureUnit(3);   // unit: B000 = Pa, B001 = hPa, B010 = Hg, B011 = atm, B100 = bar, B101 = torr, B110 = N/m^2, B111 = psi
  bme.ReadData(pres, temp, hum, metric, pressureUnit);                // Parameters: (float& pressure, float& temp, float& humidity, bool hPa = true, bool celsius = false)
  Serial.print(pres * 1013.25); //переводим в миллибар, норма 761 мм.рт.ст=1014мбар
  Serial.print(",");
  Serial.print((temp - 32) * 5 / 9, DEC);
  Serial.print(",");
  Serial.print(hum, DEC);
  Serial.print(",");
  Serial.print("|");
  delay(100);
} 

Подключаем плату Arduino к Bluetooth компьютера и можем проверить вывод данных в программе BluetoothSerialTerminal (Windows), либо в любой другой.

Но вывод текстовой информации не так красив и информативен. В этом случае сделаем для нашей станции графический интерфейс. Для создания его воспользуемся языком программирования Processing. Это легкий и быстрый инструментарий для проектирования интерфейсов и анимации. Основан Processing на языке Java.

Была составлена следующая программа (код в архиве) и получен следующий результат:

 

Если Вам понравился проект, то расскажите о нем своим знакомым и друзьям, сделав репост и поставьте лайк. Это послужит нам стимулом для новых интересны проектов.