Погодная станция на Arduino

в 21:07, , рубрики: Песочница, метки: ,

Метеостанция предназначена прежде всего для наблюдения за погодой, просмотром текущей температуры, влажности и атмосферного давления. Вещь очень удобная для рыбаков. Я решил сделать свою метеостанцию на основе Arduino, но с отображением данных на мобильном телефоне.

image

Принцип работы приложения — запускаем на телефоне с ос android, подключаемся к плате arduino по блютузу и, нажимая на иконки, получаем отображение различных данных.

Принцип работы метеостанции простой. При получении с телефона 1, опрашиваем датчик температуры DS18B20, который размещен на улице и отправляем данные на телефон, при получении 2, опрашиваем датчик температуры DS18B20, который размещен в комнате и отправляем данные на телефон. При получении 3, опрашиваем датчик BMP085, а при получении 4 — опрашиваем датчик влажности и тоже отправляем данные.

Сразу отвечу на вопрос «почему отображение данных на мобильном телефоне?». Мне так удобнее, тем более что я экономлю на покупке дисплея, на покупке кнопок и внутреннюю память микроконтроллера. Лень все-таки двигатель прогресса.

Скриншоты с экрана мобильного телефона

image

Измерение температуры на улице в градусах Цельсия:

image

Измерение температуры в комнате в градусах Цельсия:

image

Измерение атмосферного давления на улице в мм. рт. ст.:

image

Измерение влажности воздуха в %

Ну а теперь после небольшого обзора работы перейдем к технической части проекта.

Схемы подключения датчиков

Схема подключения датчиков температуры DS18B20

image image

Датчики температуры необходимо подключать параллельно.

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

image

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

image

Схема подключения модуля bluetooth HC-05:

image

После удачного подключения всех датчиков загружаем скетч,

Скетч

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <BMP085.h>
#include <DHT.h> 
#include <DS1307.h>
#include <EEPROM.h>

#define ONE_WIRE_BUS 4

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

DeviceAddress Thermometer1 = { 
  0x28, 0x00, 0x54, 0xB6, 0x04, 0x00, 0x00, 0x92 };  
DeviceAddress Thermometer3 = { 
  0x28, 0x94, 0xAC, 0xDF, 0x02, 0x00, 0x00, 0xB5 }; 

  BMP085 dps = BMP085();     
  long Temperature = 0, Pressure = 0, Altitude = 0;

  DHT dht(8, DHT11);

  char incomingByte; 

 int x=0; 

void setup()   {

  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer3, 10);

  Wire.begin();
  dps.init(MODE_ULTRA_HIGHRES, 21000, true); 
  dht.begin();

  Serial.begin(9600);
}

void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC,1);
}

void loop(){

  sensors.requestTemperatures();

  dps.getPressure(&Pressure);

  int h = dht.readHumidity();
  float t = dht.readTemperature();

    if (Serial.available() > 0) {  
    incomingByte = Serial.read(); 
    if(incomingByte == '1') {
      x=2;
    }
    if(incomingByte == '2') { 
      x=1; 
    }
    if(incomingByte == '3') {
      x=3; 
    }
     if(incomingByte == '4') {
      x=4;
    }
  }
  delay(100);
  switch (x) {
    case 1:
      printTemperature(Thermometer1);
      break;
    case 2:
      printTemperature(Thermometer3);
      break;
    case 3:
      Serial.println(Pressure/133.3,1);
      break;
    case 4:
      Serial.println(h);
      break;
  }
}

Приложение для телефона WSAB работает на ОС андроид 2.3 и выше, скачать WSAB.

Список необходимых компонентов и ссылки на продавцов в Китае

Датчики температуры DS18B20 – 2 шт.

AliExpress.com Датчики температуры DS18B20

Датчик давления BMP085 – 1шт.

AliExpress.com Датчик давления BMP085

Датчик влажности DHT11 – 1 шт.

AliExpress.com Датчик влажности DHT11

Плата Arduino nano V3.0 – 1 шт.

AliExpress.com плата Arduino Nano V3

Bluetooth модуль HC-05 – 1 шт.

AliExpress.com Bluetooth модуль HC-05

Все замечания и предложения жду в комментариях.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js