Погодная станция на ардуино с передачей данных на телефон

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

Погодная станция состоит из платы 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

http://youtu.be/z3ldbmcO8Ck

 

Leon010203
Offline
Зарегистрирован: 27.06.2014
 

Как преобразовать строку printTemperature(Thermometer2); для вывода на LCD (lcd.print(что писать сюда?);) ?

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

TempC,1

bengoor
Offline
Зарегистрирован: 27.08.2014

А схему подключения можно выложить, куда какие контакты подключать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

красиво получилось

art100
Offline
Зарегистрирован: 09.03.2014

Был бы исходник src xml я бы обратил внимание а так ничего полезного. Я не вникал врде 10метровый блюпуп.

Мы как-то 20000километровый Тыцент будем тыкать.

Нафига знать температуру рядом со стулом?

Вот узнать что в теплицу сосед за твоими помидорами полез полезенй.

Человек хвастается что он eclipse изучает. А не arduino.

Пока не увижу src xml

кАлхОз

безполезный

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

http://arduino-project.net/pogodnaya-stantsiya-na-arduino/ про все тут написано,...

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

Не нравится, не сри в теме ))) А как по мне, блютуз удобнее, лежа на диване смотришь погоду через телефон...

art100
Offline
Зарегистрирован: 09.03.2014

WSAB.apk а исходников нет что-ли ведь free?

 

inhelp
inhelp аватар
Offline
Зарегистрирован: 23.09.2012

http://arduino-project.net/android-prilozheniya-dlya-arduino/ внизу с картинкой с знаком вопроса , можно скачать...

art100
Offline
Зарегистрирован: 09.03.2014

inhelp пишет:

http://arduino-project.net/android-prilozheniya-dlya-arduino/ внизу с картинкой с знаком вопроса , можно скачать...

а что это за чудо?

 Содержимое папки D:\workarduino\unsorted\inhelpandroidarduinods18b20\WSAB\src\appinventor\ai_tolstuj1982\WSAB

28.08.2014  12:39    <DIR>          .
28.08.2014  12:39    <DIR>          ..
05.06.2014  13:13            33 476 Screen1.bky
05.06.2014  13:13             1 804 Screen1.scm
05.06.2014  13:13             7 632 Screen1.yail

 

где жаbа c манифестами?

вроде намеки на манифесты есть но это не жаба точно

#|
$Source $Yail
|#

(define-form appinventor.ai_tolstuj1982.bluetooth_light.Screen1 Screen1)
(require <com.google.youngandroid.runtime>)

;;; Screen1

(do-after-form-creation (set-and-coerce-property! 'Screen1 'AlignHorizontal 3 'number)
 (set-and-coerce-property! 'Screen1 'BackgroundColor #x00FFFFFF 'number)
 (set-and-coerce-property! 'Screen1 'BackgroundImage "fon3.jpg" 'text)
 (set-and-coerce-property! 'Screen1 'Icon "bulb.png" 'text)
 (set-and-coerce-property! 'Screen1 'Title "bluetooth" 'text)
)

Что-это?

 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

inhelp, молодец!
А на этого дибила внимания не обращай - он гадит во всех темах.

bengoor
Offline
Зарегистрирован: 27.08.2014

А можите еще дописать скетч для автоматической перезагрузки в случае зависания с помощью watchdog. Загрузчик я уже перепрошил, сторожевой таймер работает нормально.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Не большая предистория.

Начитался готовых проектов ардуина+андройд

решил для автомобиля сделать датчик температуры и вольтметр

ВСЁ работает -как и в проектах.

Но во всех (других не нашел) проектах -просто кидается информация на андройд и отображается.А андройд посылает на ардуину в зависимости на нажатие кнопок -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 }

 

blokerun
Offline
Зарегистрирован: 01.05.2016

Мой сайт метеостанции на Ардуино. Город Вознесенск, Украина http://vozmeteo.com.ua

a5021
Offline
Зарегистрирован: 07.07.2013

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