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

Принцип работы приложения — запускаем на телефоне с ос android, подключаемся к плате arduino по блютузу и, нажимая на иконки, получаем отображение различных данных.
Принцип работы метеостанции простой. При получении с телефона 1, опрашиваем датчик температуры DS18B20, который размещен на улице и отправляем данные на телефон, при получении 2, опрашиваем датчик температуры DS18B20, который размещен в комнате и отправляем данные на телефон. При получении 3, опрашиваем датчик BMP085, а при получении 4 — опрашиваем датчик влажности и тоже отправляем данные.
Сразу отвечу на вопрос «почему отображение данных на мобильном телефоне?». Мне так удобнее, тем более что я экономлю на покупке дисплея, на покупке кнопок и внутреннюю память микроконтроллера. Лень все-таки двигатель прогресса.
Измерение температуры на улице в градусах Цельсия:

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

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

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

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

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

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

После удачного подключения всех датчиков загружаем скетч,
#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.
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 шт.
Исходник программы и статья по созданию программы для андроид телефона
Все замечания и предложения жду в комментариях.
ссылка на оригинал статьи http://habrahabr.ru/post/254465/
Добавить комментарий