[Из песочницы] Погодная станция на Arduino
Метеостанция предназначена прежде всего для наблюдения за погодой, просмотром текущей температуры, влажности и атмосферного давления. Вещь очень удобная для рыбаков. Я решил сделать свою метеостанцию на основе Arduino, но с отображением данных на мобильном телефоне.Принцип работы приложения — запускаем на телефоне с ос android, подключаемся к плате arduino по блютузу и, нажимая на иконки, получаем отображение различных данных.
Принцип работы метеостанции простой. При получении с телефона 1, опрашиваем датчик температуры DS18B20, который размещен на улице и отправляем данные на телефон, при получении 2, опрашиваем датчик температуры DS18B20, который размещен в комнате и отправляем данные на телефон. При получении 3, опрашиваем датчик BMP085, а при получении 4 — опрашиваем датчик влажности и тоже отправляем данные.
[embedded content]
Сразу отвечу на вопрос «почему отображение данных на мобильном телефоне?». Мне так удобнее, тем более что я экономлю на покупке дисплея, на покупке кнопок и внутреннюю память микроконтроллера. Лень все-таки двигатель прогресса.
Скриншоты с экрана мобильного телефона Измерение температуры на улице в градусах Цельсия:
Измерение температуры в комнате в градусах Цельсия:
Измерение атмосферного давления на улице в мм. рт. ст.:
Измерение влажности воздуха в %
Ну, а теперь после небольшого обзора работы перейдем к технической части проекта.
Схемы подключения датчиков Схема подключения датчиков температуры DS18B20
Датчики температуры необходимо подключать параллельно.
Схема подключения датчика BMP085:
Схема подключения датчика DHT11:
Схема подключения модуля bluetooth HC-05:
После удачного подключения всех датчиков загружаем скетч, Скетч
#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.Список необходимых компонентов и ссылки на продавцов в Китае
Исходник программы и статья по созданию программы для андроид телефона
Все замечания и предложения жду в комментариях.