Погодная станция. Требуется помощь.

Nick23
Offline
Зарегистрирован: 23.10.2014

Привет форумчане. Я Марк. Нашел здесь: http://habrahabr.ru/post/240677/ отличный скетч.

Вот он:

#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include "RTClib.h"
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22

RTC_DS1307 RTC;
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  Wire.begin();
  RTC.begin();
  dht.begin();
  delay(2000);

  dps.init(MODE_ULTRA_HIGHRES, 3200, true); // 3200 это 32 метра над уровнем моря (Питер на такой высоте располагается+ надо добавить несколько метров в зависимости от этажа на котором живете)

}

void loop() {

  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dps.getTemperature(&temp3);
  DateTime now = RTC.now();


  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();


  myGLCD.setFont(SmallFont); // задаем маленький размер шрифта на экране
  myGLCD.clrScr(); // Очистка экрана

  myGLCD.print("Time=", LEFT, 0);  //задаем время
  myGLCD.printNumI(int(now.hour()), 32, 0); // 32,0 означет 32=номер пропуска в строке, те откуда будем печатать. 0=номер строки
  myGLCD.print(":", 45, 0);
  myGLCD.printNumI(int(now.minute()), 50, 0);
  myGLCD.print(":", 62, 0);
  myGLCD.printNumI(int(now.second()), 67, 0);

  myGLCD.print("Date=", LEFT, 10);       //задаем дату
  myGLCD.printNumI(int(now.day()), 32, 10);
  myGLCD.print("/", 44, 10);
  myGLCD.printNumI(int(now.month()), 50, 10);
  myGLCD.print("/", 62, 10);
  myGLCD.printNumI(int(now.year() - 2000), 68, 10);

  myGLCD.print("T=", LEFT, 20); //задаем температуру
  myGLCD.printNumF(t, 2, 13, 20);  //Это температура с DHT22
  myGLCD.print("/", 45, 20);
  myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра

  myGLCD.print("Hum=", LEFT, 30); // задаем влажность с DHT22
  myGLCD.printNumF(h, 2, 28, 30);
  myGLCD.print("%", 63, 30);

  myGLCD.print("Pres=", LEFT, 40); // задаем атмосферное давление
  myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); //рассчет атмосферного давления
  myGLCD.print("mm", 68, 40);

  // Serial.print("  Alt(m):");          кому надо, это текущая высота над уровнем моря
  // Serial.print(Altitude / 100);

  myGLCD.update(); // Вывод вместимого буфера на дисплей
  delay (1000); // Задержка 1 с

}

Возникла проблема. У меня нет датчика: Часы реального времени DS3231. Зато у меня есть датчик DS 1302. Вот никак не пойму как его привязать к данному скетчу. Может кто-то поможет? Буду очень признателен. Заранее спасибо.

 

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Здравствуйте Марк.
Прежде чем привязать ваш модуль часов реального времени, вам нужно сначала отвязать библиотеку RTClib.
Потом найти библиотеку для DS1302. Понять на какие пины можно подключить ваш модуль и потом начать привязывать к скетчу.

P.S. Я бы пошёл таким путём.

Nick23
Offline
Зарегистрирован: 23.10.2014

Пины указывать в библиотеке DS1302? Она у меня есть

Kolchugin
Offline
Зарегистрирован: 15.12.2013

У меня к сожалению нет такого модуля. Пины в библиотеке указывать не нужно. Это вы в скетче прописываете. Вот посмотрите это начало вашего скетча. Я привязал ваш модуль на 8,9 и 11 пины.



#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include <DS1302.h>
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22

DS1302 rtc(8, 9, 11);// Init the DS1302
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

 

Nick23
Offline
Зарегистрирован: 23.10.2014

Я понял спасибо. Но ведь время выставить необходимо именно в библиотеке?

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Нашёл такое видео https://youtu.be/dCevx2I3S38
Там автор выводит время и дату в сериал, в вашем случае вы выводите всё на дисплей.

Nick23
Offline
Зарегистрирован: 23.10.2014

Kolchugin. Спасибо. Завтра попробую, потом отпишу. Я так понял больше ничего не надо в скетче менять?

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Почему не надо, надо :) Не всё так просто, но и не всё так сложно ;)

Nick23
Offline
Зарегистрирован: 23.10.2014

Привет. В скетче вышла ошибка:  rtc.begin();

Nick23
Offline
Зарегистрирован: 23.10.2014

Всем привет. Есть скетч по снятию данных с датчика давления.

// BMP085_test2
// by Filipe Vieira
// Simple test of BMP085 output using default settings using dynamic update.
// In order to take full advantage of dynamic measurement, automatic temperature updates must be disabled.
// To disable automatic updates set AUTO_UPDATE_TEMPERATURE to false in bmp085.h.
// IMPORTANT!! To get correct values you MUST CHANGE init() parameters, in
// this example I've set 50m based on GPS data for my location.

#include <Wire.h>
#include <BMP085.h>

BMP085 dps = BMP085();      // Digital Pressure Sensor

long Temperature = 0, Pressure = 0, Altitude = 0;
unsigned long time1=0;

void setup(void) {
  Serial.begin(9600);
  Wire.begin();
  delay(3000);
 
  // uncomment for different initialization settings
  //dps.init();     // QFE (Field Elevation above ground level) is set to 0 meters.
                  // same as init(MODE_STANDARD, 0, true);
 
  //dps.init(MODE_STANDARD, 101850, false);  // 101850Pa = 1018.50hPa, false = using Pa units
                  // this initialization is useful for normalizing pressure to specific datum.
                  // OR setting current local hPa information from a weather station/local airport (QNH).
 
  dps.init(MODE_STANDARD, 0, true);  // 50 meters, true = using meter units // 50 метров Саратов, либо ставим ноль =0 метров
                  // this initialization is useful if current altitude is known,
                  // pressure will be calculated based on TruePressure and known altitude.

  // note: use zeroCal only after initialization.
  // dps.zeroCal(101800, 0);    // set zero point
}            

void loop(void) {   
  // calculate temperature every 1 sec (dynamic measurement)
  // NOTE: in order to take full advantage of dynamic measurement set AUTO_UPDATE_TEMPERATURE to false in bmp085.h
  if (((millis() - time1)/1000.0) >= 1.0) {     
     dps.calcTrueTemperature();
     time1 = millis();      
  }
 
  dps.getTemperature(&Temperature);
  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
 
  Serial.print("Nik :)");
  Serial.print("  Temp(C):");
  Serial.print(Temperature*0.1,1);
  Serial.print("  Pressure(mm):");
  Serial.println(Pressure/133.3,1);

 // Wait one second before repeating :)
  delay (5000); // ждем 5 секунд
}

 

Не могу разобраться как подключить динамик. Хочу чтобы при определенных значениях (меняются данные в какую либо стороны), buzzer издавал определенные звуки. Кто сможет помочь?

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Nick23 пишет:

Привет. В скетче вышла ошибка:  rtc.begin();

Правильно, это от другой библиотеки, по этому и ошибка. 
Отдельно часы получилось запустить, по примеру что, на видео?

Nick23
Offline
Зарегистрирован: 23.10.2014

Привет. Чет не получается. Пробовал один раз.

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Значит нужно разобраться.
Нарисуйте схему как вы подключали часовой модуль и какой скетч при этом использовали.

Nick23
Offline
Зарегистрирован: 23.10.2014

ок. немного позже. а не можете помочь с buzzer?

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Не не могу. Сначала нужно с часами разобраться. После уже к бузеру переходить.

Nick23
Offline
Зарегистрирован: 23.10.2014

договорились. на связи.

 

Nick23
Offline
Зарегистрирован: 23.10.2014

Библиотека скачена. Установлена. При загрузке скетча выходит ошибка:

String dayAsString(const Time::Day day) {

И дальше тормоз.

 

Nick23
Offline
Зарегистрирован: 23.10.2014

этот скетч загружен. все работает.

// DS1302_Serial_Easy (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// A quick demo of how to use my DS1302-library to
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1302.
// DS1302:  CE pin    -> Arduino Digital 2
//          I/O pin   -> Arduino Digital 3
//          SCLK pin  -> Arduino Digital 4

#include <DS1302.h>

// Init the DS1302
DS1302 rtc(2, 3, 4);

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
 
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
  rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
  rtc.setTime(19, 3, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(28, 3, 2015);   // Set the date to August 6th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
 
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
 
  // Wait one second before repeating :)
  delay (1000);
}

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Nick23 пишет:

этот скетч загружен. все работает.

Т.е. время и дату в мониторе порта показывет?

Nick23
Offline
Зарегистрирован: 23.10.2014

Да, в мониторе все отл. 

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Подключаете модуль часов:

CE pin -> Arduino Digital 8
I/O pin -> Arduino Digital 9
SCLK pin -> Arduino Digital 11

Подправил скетч, пробуйте.



#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include <DS1302.h>
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22


DS1302 rtc(8, 9, 11);
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  Wire.begin();
  rtc.halt(false);
  rtc.writeProtect(false);
  dht.begin();
  delay(2000);

  dps.init(MODE_ULTRA_HIGHRES, 3200, true); // 3200 это 32 метра над уровнем моря (Питер на такой высоте располагается+ надо добавить несколько метров в зависимости от этажа на котором живете)

}

void loop() {

  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dps.getTemperature(&temp3);


  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();


  myGLCD.setFont(SmallFont); // задаем маленький размер шрифта на экране
  myGLCD.clrScr(); // Очистка экрана

  myGLCD.print("Time=", LEFT, 0);  //задаем время
  myGLCD.printNumI(int(rtc.getTimeStr()), 32, 0); // 32,0 означет 32=номер пропуска в строке, те откуда будем печатать. 0=номер строки

  myGLCD.print("Date=", LEFT, 10);       //задаем дату
  myGLCD.printNumI(int(rtc.getDateStr()), 32, 10);

  myGLCD.print("T=", LEFT, 20); //задаем температуру
  myGLCD.printNumF(t, 2, 13, 20);  //Это температура с DHT22
  myGLCD.print("/", 45, 20);
  myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра

  myGLCD.print("Hum=", LEFT, 30); // задаем влажность с DHT22
  myGLCD.printNumF(h, 2, 28, 30);
  myGLCD.print("%", 63, 30);

  myGLCD.print("Pres=", LEFT, 40); // задаем атмосферное давление
  myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); //рассчет атмосферного давления
  myGLCD.print("mm", 68, 40);

  // Serial.print("  Alt(m):");          кому надо, это текущая высота над уровнем моря
  // Serial.print(Altitude / 100);

  myGLCD.update(); // Вывод вместимого буфера на дисплей
  delay (1000); // Задержка 1 с

}

 

Nick23
Offline
Зарегистрирован: 23.10.2014

Привет. Загружен подправленный скетч. Результат на картинке

 

Nick23
Offline
Зарегистрирован: 23.10.2014

https://drive.google.com/file/d/0B8VC5Vs5EHloVlBWYWZSclV1UUU/view?usp=sh...

После загрузки исправленного скетча скетча

Nick23
Offline
Зарегистрирован: 23.10.2014

https://drive.google.com/file/d/0B8VC5Vs5EHloMmxEaVpPSFRnX28/view?usp=sh...

А это мой изначальный скетч.

Nick23
Offline
Зарегистрирован: 23.10.2014

У меня датчик не 22, а 11. Исправил в скечте, и вот окончательный результат на экране.

https://drive.google.com/file/d/0B8VC5Vs5EHloa3VrTWJUaGtqU1k/view?usp=sh...

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Может я пока что-то не понимаю, либо часовой модуль у вас не так подключен.
При таком скетче и подключении на пины 8,9,11, в монитор порта, дату и время выводит?





// DS1302_Serial_Easy (C)2010 Henning Karlsen
 // web: http://www.henningkarlsen.com/electronics
 //
 // A quick demo of how to use my DS1302-library to
 // quickly send time and date information over a serial link
 //
 // I assume you know how to connect the DS1302.
 // DS1302:  CE pin    -> Arduino Digital 2
 //          I/O pin   -> Arduino Digital 3
 //          SCLK pin  -> Arduino Digital 4

#include <DS1302.h>

// Init the DS1302
 DS1302 rtc(8, 9, 11);

void setup()
 {
   // Set the clock to run-mode, and disable the write protection
   rtc.halt(false);
   rtc.writeProtect(false);
  
   // Setup Serial connection
   Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
   rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
   rtc.setTime(19, 3, 0);     // Set the time to 12:00:00 (24hr format)
   rtc.setDate(28, 3, 2015);   // Set the date to August 6th, 2010
 }

void loop()
 {
   // Send Day-of-Week
   Serial.print(rtc.getDOWStr());
   Serial.print(" ");
  
   // Send date
   Serial.print(rtc.getDateStr());
   Serial.print(" -- ");

  // Send time
   Serial.println(rtc.getTimeStr());
  
   // Wait one second before repeating :)
   delay (1000);
 }

 

 

Nick23
Offline
Зарегистрирован: 23.10.2014

В монитор выводит. только время неверное.

https://drive.google.com/file/d/0B8VC5Vs5EHloOGZ3ZnpPcFNXa00/view?usp=sh...

Nick23
Offline
Зарегистрирован: 23.10.2014
Kolchugin
Offline
Зарегистрирован: 15.12.2013

Интересно работает, время через секунду показывает.
Подправил скетч, попробуйте.



#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include <DS1302.h>
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22


DS1302 rtc(8, 9, 11);
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  Wire.begin();
  rtc.halt(false);
  rtc.writeProtect(false);
  dht.begin();
  delay(2000);

  dps.init(MODE_ULTRA_HIGHRES, 3200, true); // 3200 это 32 метра над уровнем моря (Питер на такой высоте располагается+ надо добавить несколько метров в зависимости от этажа на котором живете)

}

void loop() {

  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dps.getTemperature(&temp3);


  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();


  myGLCD.setFont(SmallFont); // задаем маленький размер шрифта на экране
  myGLCD.clrScr(); // Очистка экрана

  myGLCD.print("Time=", LEFT, 0);  //задаем время
  myGLCD.print(rtc.getTimeStr(), 32, 0); // 32,0 означет 32=номер пропуска в строке, те откуда будем печатать. 0=номер строки

  myGLCD.print("Date=", LEFT, 10);       //задаем дату
  myGLCD.print(rtc.getDateStr(), 32, 10);

  myGLCD.print("T=", LEFT, 20); //задаем температуру
  myGLCD.printNumF(t, 2, 13, 20);  //Это температура с DHT22
  myGLCD.print("/", 45, 20);
  myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра

  myGLCD.print("Hum=", LEFT, 30); // задаем влажность с DHT22
  myGLCD.printNumF(h, 2, 28, 30);
  myGLCD.print("%", 63, 30);

  myGLCD.print("Pres=", LEFT, 40); // задаем атмосферное давление
  myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); //рассчет атмосферного давления
  myGLCD.print("mm", 68, 40);

  // Serial.print("  Alt(m):");          кому надо, это текущая высота над уровнем моря
  // Serial.print(Altitude / 100);

  myGLCD.update(); // Вывод вместимого буфера на дисплей
  delay (1000); // Задержка 1 с

}

 

Nick23
Offline
Зарегистрирован: 23.10.2014

.03.2015 -- 17:39:48
Friday 29.03.2015 -- 17:39:49
Friday 29.03.2015 -- 17:39:50
Friday 29.03.2015 -- 17:39:51
Friday 29.03.2015 -- 17:39:52
Friday 29.03.2015 -- 17:39:53
Friday 29.03.2015 -- 17:39:54
Friday 29.03.2015 -- 17:39:55
Friday 29.03.2015 -- 17:39:56
Friday 29.03.2015 -- 17:39:57
 

все отл. я питание отцепил от часов

Nick23
Offline
Зарегистрирован: 23.10.2014

пробовать скетч станции?

Nick23
Offline
Зарегистрирован: 23.10.2014

Давай на ты. ок?

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Да это для станции. Давай на ты.

Nick23
Offline
Зарегистрирован: 23.10.2014

брось еще раз итоговый скетч я залью.

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Заливай из 28 сообщения.

Nick23
Offline
Зарегистрирован: 23.10.2014

показатели кривые

Nick23
Offline
Зарегистрирован: 23.10.2014

5 сек

Nick23
Offline
Зарегистрирован: 23.10.2014

я переставил на 11 датчик. время по нолям

Nick23
Offline
Зарегистрирован: 23.10.2014

время не идет.

Nick23
Offline
Зарегистрирован: 23.10.2014

питание отцепил от часиков. все норм. тока год показывает так: 201... пятерка не умещается

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Давай начнём сначала. Собираешь погодную станцию. Модуль часов подключаешь:
CE pin -> Arduino Digital 8
I/O pin -> Arduino Digital 9
SCLK pin -> Arduino Digital 11

Остальные датчики оставляешь как было в оригинале.
Дальше заливаешь вот этот скетч:



// DS1302_Serial_Easy (C)2010 Henning Karlsen
 // web: <a title="http://www.henningkarlsen.com/electronics" href="http://www.henningkarlsen.com/electronics" rel="nofollow">http://www.henningkarlsen.com/electronics</a>
 //
 // A quick demo of how to use my DS1302-library to
 // quickly send time and date information over a serial link
 //
 // I assume you know how to connect the DS1302.
 // DS1302:  CE pin    -> Arduino Digital 2
 //          I/O pin   -> Arduino Digital 3
 //          SCLK pin  -> Arduino Digital 4

#include <DS1302.h>

// Init the DS1302
 DS1302 rtc(8, 9, 11);

void setup()
 {
   // Set the clock to run-mode, and disable the write protection
   rtc.halt(false);
   rtc.writeProtect(false);
  
   // Setup Serial connection
   Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
   rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
   rtc.setTime(19, 3, 0);     // Set the time to 12:00:00 (24hr format)
   rtc.setDate(28, 3, 2015);   // Set the date to August 6th, 2010
 }

void loop()
 {
   // Send Day-of-Week
   Serial.print(rtc.getDOWStr());
   Serial.print(" ");
  
   // Send date
   Serial.print(rtc.getDateStr());
   Serial.print(" -- ");

  // Send time
   Serial.println(rtc.getTimeStr());
  
   // Wait one second before repeating :)
   delay (1000);
 }

Открываешь монитор порта. Если время и дату показывает, заливаешь этот скетч:




#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include <DS1302.h>
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22


DS1302 rtc(8, 9, 11);
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  Wire.begin();
  rtc.halt(false);
  rtc.writeProtect(false);
  dht.begin();
  delay(2000);

  dps.init(MODE_ULTRA_HIGHRES, 3200, true); // 3200 это 32 метра над уровнем моря (Питер на такой высоте располагается+ надо добавить несколько метров в зависимости от этажа на котором живете)

}

void loop() {

  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dps.getTemperature(&temp3);


  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();


  myGLCD.setFont(SmallFont); // задаем маленький размер шрифта на экране
  myGLCD.clrScr(); // Очистка экрана

  myGLCD.print("Time=", LEFT, 0);  //задаем время
  myGLCD.print(rtc.getTimeStr(), 32, 0); // 32,0 означет 32=номер пропуска в строке, те откуда будем печатать. 0=номер строки

  myGLCD.print("Date=", LEFT, 10);       //задаем дату
  myGLCD.print(rtc.getDateStr(), 32, 10);

  myGLCD.print("T=", LEFT, 20); //задаем температуру
  myGLCD.printNumF(t, 2, 13, 20);  //Это температура с DHT22
  myGLCD.print("/", 45, 20);
  myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра

  myGLCD.print("Hum=", LEFT, 30); // задаем влажность с DHT22
  myGLCD.printNumF(h, 2, 28, 30);
  myGLCD.print("%", 63, 30);

  myGLCD.print("Pres=", LEFT, 40); // задаем атмосферное давление
  myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); //рассчет атмосферного давления
  myGLCD.print("mm", 68, 40);

  // Serial.print("  Alt(m):");          кому надо, это текущая высота над уровнем моря
  // Serial.print(Altitude / 100);

  myGLCD.update(); // Вывод вместимого буфера на дисплей
  delay (1000); // Задержка 1 с

}

 

 

 

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Да...   Фотографию покажи, то что на экране показывает.

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Залей этот скетч и прибивай на стену.

#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include <DS1302.h>
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22


DS1302 rtc(8, 9, 11);
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  Wire.begin();
  rtc.halt(false);
  rtc.writeProtect(false);
  dht.begin();
  delay(2000);

  dps.init(MODE_ULTRA_HIGHRES, 3200, true); // 3200 это 32 метра над уровнем моря (Питер на такой высоте располагается+ надо добавить несколько метров в зависимости от этажа на котором живете)

}

void loop() {

  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dps.getTemperature(&temp3);


  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();


  myGLCD.setFont(SmallFont); // задаем маленький размер шрифта на экране
  myGLCD.clrScr(); // Очистка экрана

 // myGLCD.print("Time=", LEFT, 0);  //задаем время
  myGLCD.print(rtc.getTimeStr(), 18, 0); // 32,0 означет 32=номер пропуска в строке, те откуда будем печатать. 0=номер строки

 // myGLCD.print("Date=", LEFT, 10);       //задаем дату
  myGLCD.print(rtc.getDateStr(), 12, 10);

  myGLCD.print("T=", LEFT, 20); //задаем температуру
  myGLCD.printNumF(t, 2, 13, 20);  //Это температура с DHT22
  myGLCD.print("/", 45, 20);
  myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра

  myGLCD.print("Hum=", LEFT, 30); // задаем влажность с DHT22
  myGLCD.printNumF(h, 2, 28, 30);
  myGLCD.print("%", 63, 30);

  myGLCD.print("Pres=", LEFT, 40); // задаем атмосферное давление
  myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); //рассчет атмосферного давления
  myGLCD.print("mm", 68, 40);

  // Serial.print("  Alt(m):");          кому надо, это текущая высота над уровнем моря
  // Serial.print(Altitude / 100);

  myGLCD.update(); // Вывод вместимого буфера на дисплей
  delay (1000); // Задержка 1 с

}

 

Nick23
Offline
Зарегистрирован: 23.10.2014

1. после загрузки скетча времени:
29.03.2015 -- 18:25:04
Friday 29.03.2015 -- 18:25:05
Friday 29.03.2015 -- 18:25:06
Friday 29.03.2015 -- 18:25:07
Friday 29.03.2015 -- 18:25:08
Friday 29.03.2015 -- 18:25:09
Friday 29.03.2015 -- 18:25:10
Friday 29.03.2015 -- 18:25:11

далее загружаю скетч станции.

все отл. но. секунды идут вот так: 02,03,05,06,08... и одна цифра года не уместилась. 201..

 

Nick23
Offline
Зарегистрирован: 23.10.2014

пробую новый скетч.

 

Nick23
Offline
Зарегистрирован: 23.10.2014

КЛАСС !!! СПАСИБО !!! Я сильно напрёг?

 

Nick23
Offline
Зарегистрирован: 23.10.2014

На стену пока его рано. Хочу пищалку воткнуть. Типа извещатель об изменении параметров.

Nick23
Offline
Зарегистрирован: 23.10.2014

Если часики отстали, то сначала гружу скетч со временем, сохраняю. потом опять станцию? я верно мыслю?

Nick23
Offline
Зарегистрирован: 23.10.2014
Nick23
Offline
Зарегистрирован: 23.10.2014

Огромное спасибо пользователю : Kolchugin за помощь в написании скетча "ПОГОДНАЯ СТАНЦИЯ" !!!

Kolchugin
Offline
Зарегистрирован: 15.12.2013

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





#include <LCD5110_Graph.h>
#include "DHT.h"
#include <Wire.h>
#include <BMP085.h>
#include <DS1302.h>
#define DHTPIN 10     // 10 pin для датчика DHT22
#define DHTTYPE DHT22


DS1302 rtc(8, 9, 11);
BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);

long temp3 = 0, Pressure = 0, Altitude = 0;

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)

LCD5110 myGLCD(3, 4, 5, 6, 7);

extern unsigned char SmallFont[];

void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  Wire.begin();
  rtc.halt(false);
  rtc.writeProtect(false);
  dht.begin();
  delay(2000);

  dps.init(MODE_ULTRA_HIGHRES, 3200, true); // 3200 это 32 метра над уровнем моря (Питер на такой высоте располагается+ надо добавить несколько метров в зависимости от этажа на котором живете)

}

void loop() {

  dps.getPressure(&Pressure);
  dps.getAltitude(&Altitude);
  dps.getTemperature(&temp3);


  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();


  myGLCD.setFont(SmallFont); // задаем маленький размер шрифта на экране
  myGLCD.clrScr(); // Очистка экрана

  myGLCD.print("Time=", LEFT, 0);  //задаем время
  myGLCD.print(rtc.getTimeStr(FORMAT_SHORT), 32, 0); // 32,0 означет 32=номер пропуска в строке, те откуда будем печатать. 0=номер строки

  myGLCD.print("Date=", LEFT, 10);       //задаем дату
  myGLCD.print(rtc.getDateStr(FORMAT_SHORT),32, 10);

  myGLCD.print("T=", LEFT, 20); //задаем температуру
  myGLCD.printNumF(t, 2, 13, 20);  //Это температура с DHT22
  myGLCD.print("/", 45, 20);
  myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра

  myGLCD.print("Hum=", LEFT, 30); // задаем влажность с DHT22
  myGLCD.printNumF(h, 2, 28, 30);
  myGLCD.print("%", 63, 30);

  myGLCD.print("Pres=", LEFT, 40); // задаем атмосферное давление
  myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); //рассчет атмосферного давления
  myGLCD.print("mm", 68, 40);

  // Serial.print("  Alt(m):");          кому надо, это текущая высота над уровнем моря
  // Serial.print(Altitude / 100);

  myGLCD.update(); // Вывод вместимого буфера на дисплей
  delay (1000); // Задержка 1 с

}