Наконец то руки дошли до метеостанции, и так доработка произошла
Прилепил еще модуль часов
Появился разъем для сетевого модуля ENC28J60 для выдачи метеоданных на проект "народный монитор" (пока не реализован)
Скетч, получился довольно неуклюжий, для версии 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