Паяльник

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Паяльник » Микроконтроллеры » Метеостанция для дома на LCD T, H, давление, Bluetooth Android


Метеостанция для дома на LCD T, H, давление, Bluetooth Android

Сообщений 1 страница 3 из 3

1

Метеостанция для дома

Температура, влажность на улице
Температура, влажность дома
Измерение атмосферного давления

Вывод данных на дисплей LCD Nokia 5110
Вывод данных на смартфон по Bluetooth
Индикатора работы - мигающий с частотой 2Гц светодиод

// Датчик температуры 18B20 (не реализован)
// Сетевой модуль ENC28J60 (не реализован)

Вся распайка выполнена на монтажной плате
http://s6.uploads.ru/t/yfmUn.jpg

В работе
http://s7.uploads.ru/t/Cuixc.jpg

Видео:

Основа микроконтроллер ATmega328, среда разработки Arduino IDE.

Софт под Android взят с http://arduino-project.net/pogodnaya-st … nventor-2/

Скетч на доработке

0

2

Наконец то руки дошли до метеостанции, и так доработка произошла
Прилепил еще модуль часов
Появился разъем для сетевого модуля ENC28J60 для выдачи метеоданных на проект "народный монитор" (пока не реализован)

http://s1.uploads.ru/t/BujSh.jpg

Скетч, получился довольно неуклюжий, для версии 0.1 пойдет ))

Код:
// Метеостанция Версия 0.1 Температура, Давление, Влажность
// вывод данных через приложение Android на смартфон по Bluetooth
// вывод данных на дисплей LCD Nokia 5110 (Arduino pin 4,5,6,7,8)
// Датчик давления и температуры BMP180 (Arduino pin A4,A5)
// Датчик влажности и температуры DHT-11/22 (Arduino pin A3)
// Датчик температуры 18B20 (пока не реализован)
// Сетевой модуль ENC28J60 для выдачи метеоданных на проект "народный монитор" (пока не реализован)
// Bluetooth модуль HC-05 (пин код 1234) (Arduino pin 2,3)
// Индикатор работы - мигающий с частотой 2Гц светодиод (Arduino pin 13)
// Модуль часов Tiny RTC (Arduino pin A4,A5)

#include <SPI.h>
#include <SoftwareSerial.h>
// Подключение Bluetooth модуля
#define rxPin 2 // Arduino вход от tx HC-05
#define txPin 3 // Arduino out через делитель на rx HC-05 !!!
// Делитель: GND-2k-rxPinHC05(приемник)-1k-txPinArduino(передатчик)
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin); 
char incomingByte;
int cmnd=0;

#include <Wire.h>

#include "RTClib.h"
RTC_DS1307 RTC;

#include <BMP085.h>
BMP085 dps = BMP085();
long Temperature = 0, Pressure = 0;
// Подключение Датчика давления
// Arduino Uno - BMP180
// Any Arduino pins labeled:  SDA  SCL
// Uno, Redboard, Pro:        A4   A5

#include <DHT.h>
#define DHTTYPE DHT11   // тип датчика влажности DHT22/DHT11
#define DHTPIN A3       // пин подключения датчика влажности DHT22
DHT dht(DHTPIN, DHTTYPE);
float H_DHT,T_DHT;

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Подключение Дисплея
// Arduino Uno - LCD Nokia5110
// GND  - Gnd  8
// 3.3v/5v - BL 7 Подсветка
// 3.3v - Vcc  6
// pin 4 - Serial clock out (SCLK)  5
// pin 5 - Serial data out (DIN)  4
// pin 6 - Data/Command select (D/C)  3
// pin 7 - LCD chip select (CS)(CE) 2
// pin 8 - LCD reset (RST) 1

Adafruit_PCD8544 display = Adafruit_PCD8544(4, 5, 6, 7, 8);
//Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t CS, int8_t RST);

const int ledPin =  13;      // пин светодиода
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated
long interval = 1000;
long previousMillisScreen = 0;

void setup()   {
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  //RTC.adjust(DateTime(__DATE__, __TIME__)); // Настройка времени в модуле RTC (берет с компьютера) запускается один раз, затем строка закоментируется
  mySerial.begin(9600);
  pinMode(ledPin, OUTPUT);

  // Подключаем сенсор DHT к A3 аналоговому порту
  dht.begin();
  delay(1000);

  // Инициализация дисплея
  display.begin();

  // Очищаем дисплей
  display.clearDisplay();
  display.display();

  // Устанавливаем контраст
  display.setContrast(40);
  delay(1000);

  // Инициализация датчика BMP180
  Wire.begin(); 
  delay(1000);
  dps.init();  

  display.setCursor(0, 0);
  display.setTextColor(BLACK);
  display.setTextSize(1);
  display.display();
  delay(1000);  
}

void print_clock ()   {
DateTime now = RTC.now();
/*  int TDay=now.day();
  int TMonth=now.month();
  int TYear=now.year();
  int THour=now.hour();
  int TMinutes=now.minute();
  int TSeconds=now.second(); 
  display.print(TDay);
  display.print(".");
  display.print(TMonth); // Добавляем незначащий 0
                                  // 4 = 04
  display.print(".");
  display.print(TYear % 100); // 2 разряда от года для компактности
                                   // 2016 = 16
  display.print(" ");
  display.print(THour);  // Добавляем незначащий 0
  display.print(":");
  display.println(TMinutes); // Добавляем незначащий 0 */
  
  char string1[] = " Hello, my name is Vadim... ";
  sprintf(string1, "%02d.%02d.%02d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second()); // Задаем формат 00:00:00
  display.println(string1);
  
}

void print_TH_in ()   {
   dps.getPressure(&Pressure); 
   dps.getTemperature(&Temperature);
   display.print("T ");
   display.println(Temperature*0.1,2); // Температуру в градусах Цельсия
   display.print("P ");
   display.println(Pressure/133.3,2); // Выводим давление в мм.рт ст */
  
}
void print_TH_out ()   {
  H_DHT = dht.readHumidity();
  T_DHT = dht.readTemperature();
//  display.println(" Street weather");
  display.print("H ");
  display.println(H_DHT); // Выводим влажность
  display.print("T ");
  display.println(T_DHT); // Выводим температуру
  
}

void loop() 
{

  ////////////////////// Мигание светодиода - START /////////////////  
  unsigned long currentMillis = millis(); 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   
    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
  //////////////////////// Мигание светодиода - END //////////////////// 



  ///////////////////// Вывод на экран метеоданных //////////////////////
  display.clearDisplay();
  print_TH_in (); // Выводим Температуру внутри помещения и давление (BMP180)
  display.print("--------------");
  print_clock (); // Выводим дату и время
  print_TH_out (); // Выводим Влажность и Температуру снаружи (DHT11/DHT22)
  display.display(); // Все показываем
  /////////////////////////////////////////////////////////////////////////////////// 


  /////////////// Прием и отправка данных на смартфон по Bluetooth (програмный UART) //////////////

  if (mySerial.available() > 0) {  
    incomingByte = mySerial.read();
    // команды от приложения смартфона 
    if(incomingByte == '1') {
      cmnd=2;
    }
    if(incomingByte == '2') { 
      cmnd=1; 
    }
    if(incomingByte == '3') {
      cmnd=3; 
    }
    if(incomingByte == '4') {
      cmnd=4;
    }
  }
  
  if (cmnd>1 && x<cmnd) {  // При получении команды от 1-4 смартфона производим измерения
                     dps.getPressure(&Pressure); 
                     dps.getTemperature(&Temperature);
                     H_DHT = dht.readHumidity();
                     T_DHT = dht.readTemperature();
                   }
  // А затем отправка метеоданных на смартфон
  switch (cmnd) {
  case 1:
    mySerial.println(Temperature*0.1); // T1
    //      Serial.println(Temperature*0.1); // T1
    cmnd=0; // обнуляем, чтобы не производить лишних измерений без команды
    break;
  case 2:
    mySerial.println(T_DHT);  // T2
    //      Serial.println(T_DHT);  // T2
    break;
  case 3:
    mySerial.println(Pressure/133.3,2);  // P
    cmnd=0;
    //      Serial.println(Pressure/133.3,2);  // P
    break;
  case 4:
    mySerial.println(H_DHT); // Hum
    cmnd=0;
    //      Serial.println(H_DHT);  // Hum
    break;
  }   
  ////////////////////////////////////////////////////  

}

В скетче приведены все подключения для всех датчиков
Для питания дисплея Nokia5110 используется стабилизатор AMS1117 3.3

0

3

Не плохо было бы сделать, циферки по-крупнее, и переключающиеся экраны с метеоданными, датой, временем через определенное время.

0


Вы здесь » Паяльник » Микроконтроллеры » Метеостанция для дома на LCD T, H, давление, Bluetooth Android


создать форум