Погодная станция на ардуино с передачей данных на телефон
- Войдите на сайт для отправки комментариев
Пт, 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>004005006#define ONE_WIRE_BUS 8007008OneWire oneWire(ONE_WIRE_BUS);009010DallasTemperature sensors(&oneWire);011012DeviceAddress Thermometer3 = {0130x28, 0x40, 0x28, 0x3B, 0x05, 0x00, 0x00, 0x44 };014DeviceAddress Thermometer1 = {0150x28, 0x83, 0x90, 0x3B, 0x05, 0x00, 0x00, 0xF3 };016017018longTemperature = 0, Pressure = 0, Altitude = 0;019020floatvolt=0;021floattempC1;022floattempC2;023charincomingByte;024floatt;025intx=0;026027028voidsetup() {029030sensors.begin();031sensors.setResolution(Thermometer1, 10);032sensors.setResolution(Thermometer3, 10);033034Wire.begin();035036037038Serial.begin(38400);039}040041voidprintTemperature(DeviceAddress deviceAddress) {042floattempC = sensors.getTempC(deviceAddress);043// Serial.println(tempC,1);044}045046voidloop(){047048sensors.requestTemperatures();049050intsensorValue = analogRead(A0);051floattempC1=sensors.getTempC(Thermometer3);052floattempC2=sensors.getTempC(Thermometer1);053floatvoltage = sensorValue * (25.0 / 1023.0);054charbytes;055056if(Serial.available() > 0) {057incomingByte =Serial.read();058if(incomingByte =='1') {059x=2;060}061if(incomingByte =='2') {062x=1;063}064if(incomingByte =='3') {065x=3;066}067if(incomingByte =='4') {068x=4;069}070}071delay(100);072switch(x) {073case1:074// printTemperature(Thermometer3);075delay(1000);076Serial.println(tempC1,2);077078if(tempC1 > 30) {079delay(1000);080Serial.println("ЖАРКО");081}082083if(tempC1 < -2) {084delay(1000);085Serial.println("ХОЛОДНО");086}087088089break;090case2:091delay(1000);092093094095096Serial.println(tempC2,2);097break;098case3:099delay(1000);100Serial.println(voltage,2);101if(voltage < 10) {102delay(1000);103Serial.println("999");104}105if(voltage > 15) {106delay(1000);107Serial.println("ПИТАНИЕ");108}109110111112break;113case4:114115116117118Serial.print(tempC2,2);119Serial.print(" ");120Serial.print(tempC1,2);121Serial.print(" ");122Serial.println(voltage,2);123Serial.print(" ");124Serial.println();125126delay(6000);127//Serial.println(tempC2,2);128//delay(6000);129//Serial.println(voltage,2);130//delay(6000);131break;132}133}Мой сайт метеостанции на Ардуино. Город Вознесенск, Украина http://vozmeteo.com.ua
Визуализация в виде циферблатов выглядит весьма интересно. Подумалось, что облака на заднем плане можно заменить на изображение с вебки, направленной в небо. Может не так красиво будет, но зато информативно.