[Из песочницы] Погодная станция на Arduino

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

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

[embedded content]

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

Скриншоты с экрана мобильного телефона imageИзмерение температуры на улице в градусах Цельсия:

image

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

image

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

image

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

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

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

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

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

image

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

image

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

image

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

#define ONE_WIRE_BUS 4

OneWire oneWire (ONE_WIRE_BUS);

DallasTemperature sensors (&oneWire);

DeviceAddress Thermometer1 = { 0×28, 0×00, 0×54, 0xB6, 0×04, 0×00, 0×00, 0×92 }; DeviceAddress Thermometer3 = { 0×28, 0×94, 0xAC, 0xDF, 0×02, 0×00, 0×00, 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.Список необходимых компонентов и ссылки на продавцов в Китае

Исходник программы и статья по созданию программы для андроид телефона

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

© Habrahabr.ru