Погодная станция на ардуино с передачей данных на телефон
- Войдите на сайт для отправки комментариев
Пт, 18/07/2014 - 19:08
Погодная станция состоит из платы arduino и подключенных к ней датчиков давления, влажности и двух датчиков температуры. Вторым прибором является мобильный телефон или планшет на android.
Принцип работы простой - плата считывает показания датчиков, а при запуске приложения на телефоне отправляется команда через блютуз на плату и плата отправляет показания на телефон. После этого мы уже видим температуру, давление или влажность.
В составе погодной станции использовал:
- Датчики температуры DS18B20 – 2 шт.
- Датчик давления BMP085 – 1шт.
- Датчик влажности DHT11 – 1 шт.
- Arduino nano V3 плата – 1 шт.
- Bluetooth модуль HC-05 – 1 шт.
Скетч
#include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <BMP085.h> #include <DHT.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; } }
Ссылка на приложение http://arduino-project.net/download/arduino-android/WSAB.apk
Как преобразовать строку printTemperature(Thermometer2); для вывода на LCD (lcd.print(что писать сюда?);) ?
TempC,1
А схему подключения можно выложить, куда какие контакты подключать?
красиво получилось
Был бы исходник src xml я бы обратил внимание а так ничего полезного. Я не вникал врде 10метровый блюпуп.
Мы как-то 20000километровый Тыцент будем тыкать.
Нафига знать температуру рядом со стулом?
Вот узнать что в теплицу сосед за твоими помидорами полез полезенй.
Человек хвастается что он eclipse изучает. А не arduino.
Пока не увижу src xml
кАлхОз
безполезный
http://arduino-project.net/pogodnaya-stantsiya-na-arduino/ про все тут написано,...
Не нравится, не сри в теме ))) А как по мне, блютуз удобнее, лежа на диване смотришь погоду через телефон...
WSAB.apk а исходников нет что-ли ведь free?
http://arduino-project.net/android-prilozheniya-dlya-arduino/ внизу с картинкой с знаком вопроса , можно скачать...
http://arduino-project.net/android-prilozheniya-dlya-arduino/ внизу с картинкой с знаком вопроса , можно скачать...
а что это за чудо?
где жаbа c манифестами?
вроде намеки на манифесты есть но это не жаба точно
Что-это?
inhelp, молодец!
А на этого дибила внимания не обращай - он гадит во всех темах.
А можите еще дописать скетч для автоматической перезагрузки в случае зависания с помощью watchdog. Загрузчик я уже перепрошил, сторожевой таймер работает нормально.
Не большая предистория.
Начитался готовых проектов ардуина+андройд
решил для автомобиля сделать датчик температуры и вольтметр
ВСЁ работает -как и в проектах.
Но во всех (других не нашел) проектах -просто кидается информация на андройд и отображается.А андройд посылает на ардуину в зависимости на нажатие кнопок -1,2,3 итд итпПроцес работает безупречно.
Решил модернизировать проект.Что бы когда вольтов стало =0(или температура поднимется выше 40) андройд проиграл мелодию (включился или смс послал итд итп).
Так вот в чем проблема. Когда посылаем переменную в 76 строчке -УСЛОВИЕ на стороне андройда не срабатывает.
Когда посылаем 80 строчку -то все окей.
В низу два кода один для ардуинки.Другой для андройда.Написанный в этом приложении.
Исходник для андройда
Готовый APK для андройда
Помогите пожалуйста.
001
#include <OneWire.h>
002
#include <DallasTemperature.h>
003
#include <Wire.h>
004
005
006
#define ONE_WIRE_BUS 8
007
008
OneWire oneWire(ONE_WIRE_BUS);
009
010
DallasTemperature sensors(&oneWire);
011
012
DeviceAddress Thermometer3 = {
013
0x28, 0x40, 0x28, 0x3B, 0x05, 0x00, 0x00, 0x44 };
014
DeviceAddress Thermometer1 = {
015
0x28, 0x83, 0x90, 0x3B, 0x05, 0x00, 0x00, 0xF3 };
016
017
018
long
Temperature = 0, Pressure = 0, Altitude = 0;
019
020
float
volt=0;
021
float
tempC1;
022
float
tempC2;
023
char
incomingByte;
024
float
t;
025
int
x=0;
026
027
028
void
setup
() {
029
030
sensors.begin();
031
sensors.setResolution(Thermometer1, 10);
032
sensors.setResolution(Thermometer3, 10);
033
034
Wire.begin();
035
036
037
038
Serial
.begin(38400);
039
}
040
041
void
printTemperature(DeviceAddress deviceAddress) {
042
float
tempC = sensors.getTempC(deviceAddress);
043
// Serial.println(tempC,1);
044
}
045
046
void
loop
(){
047
048
sensors.requestTemperatures();
049
050
int
sensorValue = analogRead(A0);
051
float
tempC1=sensors.getTempC(Thermometer3);
052
float
tempC2=sensors.getTempC(Thermometer1);
053
float
voltage = sensorValue * (25.0 / 1023.0);
054
char
bytes;
055
056
if
(
Serial
.available() > 0) {
057
incomingByte =
Serial
.read();
058
if
(incomingByte ==
'1'
) {
059
x=2;
060
}
061
if
(incomingByte ==
'2'
) {
062
x=1;
063
}
064
if
(incomingByte ==
'3'
) {
065
x=3;
066
}
067
if
(incomingByte ==
'4'
) {
068
x=4;
069
}
070
}
071
delay(100);
072
switch
(x) {
073
case
1:
074
// printTemperature(Thermometer3);
075
delay(1000);
076
Serial
.println(tempC1,2);
077
078
if
(tempC1 > 30) {
079
delay(1000);
080
Serial
.println(
"ЖАРКО"
);
081
}
082
083
if
(tempC1 < -2) {
084
delay(1000);
085
Serial
.println(
"ХОЛОДНО"
);
086
}
087
088
089
break
;
090
case
2:
091
delay(1000);
092
093
094
095
096
Serial
.println(tempC2,2);
097
break
;
098
case
3:
099
delay(1000);
100
Serial
.println(voltage,2);
101
if
(voltage < 10) {
102
delay(1000);
103
Serial
.println(
"999"
);
104
}
105
if
(voltage > 15) {
106
delay(1000);
107
Serial
.println(
"ПИТАНИЕ"
);
108
}
109
110
111
112
break
;
113
case
4:
114
115
116
117
118
Serial
.print(tempC2,2);
119
Serial
.print(
" "
);
120
Serial
.print(tempC1,2);
121
Serial
.print(
" "
);
122
Serial
.println(voltage,2);
123
Serial
.print(
" "
);
124
Serial
.println();
125
126
delay(6000);
127
//Serial.println(tempC2,2);
128
//delay(6000);
129
//Serial.println(voltage,2);
130
//delay(6000);
131
break
;
132
}
133
}
Мой сайт метеостанции на Ардуино. Город Вознесенск, Украина http://vozmeteo.com.ua
Визуализация в виде циферблатов выглядит весьма интересно. Подумалось, что облака на заднем плане можно заменить на изображение с вебки, направленной в небо. Может не так красиво будет, но зато информативно.