Комнатная метеостанция с часами

Cessi71
Offline
Зарегистрирован: 21.05.2016

Подключение как в посте #439?

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

это дурдом, поменял выводы(психанул) перепоял

LiquidCrystal lcd(5, 4, 9, 10, 11, 12)

Стало показывать!)

dhta.setup(2); // подключение датчиков температуры и влажности
  dhtb.setup(3);

Только на экране вывод атмосферного давления показывает чифру 2

ВМР180 у меня подкл А0 и А1 првильно?

и часы к А4 и А5?

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Если по моей схеме, то А4 и А5. Да и по схеме Автора тоже... Откуда А0 и А1???

А часы к D11 и D10 по моей схеме и D2 D3 по авторской.

Cessi71
Offline
Зарегистрирован: 21.05.2016

Нет не правильно.... А4,А5.... смотри схему

Cessi71
Offline
Зарегистрирован: 21.05.2016

Опередили... блин- блинский...какой бред.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Спасибо больщое вам!!! Только понять не могу почему тот раз не показывал экран?)

Часы на 2 и 3 контакт?

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Какой скетч льете, такие и контакты должны быть припаяны.У автора

// DS1307:
044 // SDA pin   -> Arduino Digital 2
045 // SCL pin   -> Arduino Digital 3
046 // VCC - VCC
047 // GND - в моем случае подключение к GROUND блокирует работу DS1307, 
048 // поэтому GND не подключено, причину так и не выяснил.
049 DS1307 rtc(2,3);

У меня

 DS1307 rtc(11, 10);//инициализация DS1307 11-SDA, 10-SCL( у меня установлен DS3231 - разницы нет, все работает)

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Уже голова не варит, завтра займусь часиками. Спасибо еще раз вам!!!

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Часы

 DS1307 rtc(2, 3);

А как настроить часы? У автора vvg10

Cessi71
Offline
Зарегистрирован: 21.05.2016

В сетапе есть такие строчки:

//rtc.setTime(18, 48, 00);     // Устанавливаем время 18:48:00 
  //rtc.setDate(06, 12, 2014);   // Устанавливаем дату 06.12.2014
                                 // раскомментируем для записи времени в RTC, после комментируем снова и еще раз прошиваем
angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

//rtc.setTime(16, 26, 00);     // Устанавливаем время 18:48:00
  //rtc.setDate(19, 07, 2016);   // Устанавливаем дату 06.12.2014
   

Прошил все равно 23,00,00      

                 

Cessi71
Offline
Зарегистрирован: 21.05.2016

Но они идут?

 

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

конецно, батерийку снял

Cessi71
Offline
Зарегистрирован: 21.05.2016

Батарейку зачем? Дата тоже не установилась? Часы тикают? Время на экране меняется? Подробные действия при установке времени?

Cessi71
Offline
Зарегистрирован: 21.05.2016

Батарейку зачем? Дата тоже не установилась? Часы тикают? Время на экране меняется? Подробные действия при установке времени? Я надеюсь прошивал так?
rtc.setTime(16, 26, 00);     // Устанавливаем время 18:48:00
  rtc.setDate(19, 07, 2016);   // Устанавливаем дату 06.12.2014
Без слешей.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

убрал //

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

АА простите, дата изменилась,  а вот время сначало 19,38,00 и потом часы набирают за 4 сек до 23,00,00 и идут 23,00,01...

// Метеостанция с часами, двумя датчиками температуры и влажности(улица-дом), датчиком давления.
// Компоненты: Arduino Pro.mini.328P, RTC-DS3231, BMP180, DHT21-2шт., LCD 20x4, power LM2596S

 #include <LiquidCrystal.h>
 #include <DS1307.h>
 #include <DHT.h>
 #include <Wire.h>
 #include <BMP085.h>
 #define I2C_ADDRESS 0x77
 #define nullButton 12
 DHT dhta;
 DHT dhtb;
 uint8_t gradus[8] = {0x6,0x9,0x9,0x6,0x0,0x0,0x0};// описываем символ градуса


  DS1307 rtc(2, 3);//инициализация DS1307 11-SDA, 10-SCL( у меня установлен DS3231 - разницы нет, все работает)
  
  Time  t;
  int sh; //часы
  int mn; //минуты
  int sc; //секунды


  LiquidCrystal lcd(5, 4, 9, 10, 11, 12);// подключение контактов Arduino к выводам индикатора: 3-RS, 2-E, 6-D4, 7-D5, 8-D6, 9-D7
                                      // меняем цифры, если подключаем к другим контактам Arduino
                                      
  BMP085 dps = BMP085();// у меня ВМР180, все работает
  long Pressure = 0;


  void setup(void) {
    //pinMode(5, OUTPUT); // контрастность можно задавать не резисторами, а с помощью ШИМ(в данном случае с 5 ноги Arduino на 3 ногу индикатора) 
    //analogWrite(5, n);  // параметр n определяет величину контрастности(от 0 до 255), с моим индикатором оптимально 100
                          // перечень выходов, поддерживающих ШИМ см. в инструкции к конкретной плате Arduino
  Wire.begin();
  delay(100);
  
  dps.init();
 
  dhta.setup(6); // подключение датчиков температуры и влажности
  dhtb.setup(7); 
   
  rtc.halt(false);// Set the clock to run-mode
  
  lcd.begin(20, 4);// Объявляем LCD 20 символов 4 строки
  lcd.createChar(0, gradus);// создаем символ градуса
  
  
  //Записываем в индикатор постоянные данные
  
  lcd.setCursor(0, 1);// вывод второй строки
  lcd.print("Out t");
  lcd.setCursor(10, 1);
  //lcd.write(0xDF); // символ градуса из контроллера индикатора
  lcd.print(char(0));// вывод своего символа градуса
  lcd.print("C");
  lcd.setCursor(13, 1);
  lcd.print("Hum.");
  lcd.setCursor(0, 2);// вывод третьей строки
  lcd.print("In  t");
  lcd.setCursor(10, 2);
  lcd.print(char(0));
  lcd.print("C");
  lcd.setCursor(13, 2);
  lcd.print("Hum.");
  lcd.setCursor(0, 3);// вывод четвертой строки
  lcd.print("Air pressure");
  lcd.setCursor(16, 3);
  lcd.print("mmHg");
  
   
  pinMode(nullButton, INPUT); //кнопка установки минут и секунд в ноль(коррекция хода часов)
  digitalWrite(nullButton, HIGH);// уровень входа высокий, кнопку на GND

  rtc.setTime(19, 48, 00);     // Устанавливаем время 18:48:00 
  rtc.setDate(19, 07, 2016);   // Устанавливаем дату 06.12.2014
                                 // раскомментируем для записи времени в RTC, после комментируем снова и еще раз прошиваем
  }
  void loop(void){
  
  dps.getPressure(&Pressure);
  
  float h1 = dhta.getHumidity();
  float t1 = dhta.getTemperature();
  delay(300);
  
  float h2 = dhtb.getHumidity();
  float t2 = dhtb.getTemperature();
  delay(300);
    
    {
   // вывод первой строки
      // отображение времени
  lcd.setCursor(0, 0);
  lcd.print(rtc.getTimeStr(FORMAT_LONG));// если не нужны секунды (FORMAT_SHORT)
  
      // отображение даты 
  lcd.setCursor(10, 0);
  lcd.print(rtc.getDateStr(FORMAT_LONG));// если дата в формате 06.12.14 (FORMAT_SHORT)
  
  lcd.setCursor(0, 1);// вывод второй строки
  lcd.print("Out t");  
  lcd.setCursor(5, 1);// вывод температуры на улице
  if (t1<=(-10)){
  lcd.print(t1, 1);
    }else if(t1>(-10) && t1<0){
  lcd.write(0x20);
  lcd.print(t1, 1);
    }else if(t1>=0 && t1<10){ 
  lcd.write(0x20);
  lcd.write(0x20);
  lcd.print(t1, 1);
    }else{
  lcd.write(0x20);  
  lcd.print(t1, 1);
  } 
  
  lcd.setCursor(17, 1);// вывод влажности на улице
  if (h1<10){
  lcd.write(0x20);  
  lcd.print(h1, 0);
  lcd.print("%");
    }else if(h1>=100){
  lcd.print("99");
  lcd.print("%");
    }else{
  lcd.print(h1, 0);
  lcd.print("%");
  }
   
  lcd.setCursor(6, 2);// вывод температуры внутри помещения
  lcd.print(t2, 1);
  
  lcd.setCursor(17, 2);// вывод влажности внутри помещения
  if (h2<10){
  lcd.write(0x20);  
  lcd.print(h2, 0);
  lcd.print("%");
      }else{
  lcd.print(h2, 0);
  lcd.print("%");
  }
  
  lcd.setCursor(13, 3);// вывод атмосферного давления
  lcd.print(Pressure/132.2, 0);
  
   
  if (!digitalRead(nullButton)) {
  set_nu:
  t = rtc.getTime();
  sh=t.hour;
  mn=0;
  sc=0;
  rtc.setTime(sh+1,mn,sc); //сброс минут и секунд в ноль(если спешат - sh, если отстают - sh+1)
  }
   }
    }

 

Cessi71
Offline
Зарегистрирован: 21.05.2016

Часы на каких пинах? Закоментируйте строку 154 и перепрошейтесь.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

D2 D3, что с 154 сделать?

Еще вопросик, можно сделать: через  каждое 3 мин например на весь экране динамическое движение и потом вернулось опять показания?

Cessi71
Offline
Зарегистрирован: 21.05.2016

Две палки наклонные поставь в начале 154 строки шоб зелененкой стало. Какие 3 миуты ? У тебя часы как следует не работают..... Сделаешь часы- потом дальше думать будем.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Вроде работает.

Cessi71
Offline
Зарегистрирован: 21.05.2016

Что "вроде работает"?

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Да работает, не сбивается, спасибо)

Cessi71
Offline
Зарегистрирован: 21.05.2016

Дык за что спасибо? У теб код то не правильно работает..... У Тебя кнопки не правильно подключены!!!!!!! Какая- кнопка скорее всего постоянно замкнута и идет постоянноая коректировка часов!!!! Отключи все кнопки и убери две косые палки со строки что я писал. Прошейся. Отпишись о результате.

Cessi71
Offline
Зарегистрирован: 21.05.2016

Спасибой сыт не будешь. Лучшее спасибо - это для меня будет когда ты весь скетч запустишь и хоть чуть- чуть осмыслишь свои ошибки (поймешь что мы делали) и по чему я тебе задавал те, или иные вопросы... и не будешь тупо копировать, будешь старатся понять - КАК ЖЕ ОНО РАБОТАЕТ!!!!! Почему стоят те цыферки ,а не другие?

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Так понятно, что я вам надоел, но я далек от программированния  и кнопки у меня не стоят.

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Расскажите по порядку, что происходит. С самого начала. Плата прошита. Часы установлены. Питание выключено. Включаете питание. Что на индикаторе и как меняется?

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Вот результат, но часы сбиваются при откл. электроинергии батарейка есть 3,3в.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

// все исправил)

Cessi71
Offline
Зарегистрирован: 21.05.2016

Строки, что я писал - убрали две косых перед строкой, вписали туды текущее время.. прошились. Потом быстренько палки в зад нарисовали и опять прошилли!!!)))))

Cessi71
Offline
Зарегистрирован: 21.05.2016

Часы походу со скакивают на одно и тоже время?

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Все хорошо, вверху написал что исправил)

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

То Cessi71

Может и мне поможете? Долго бился над этим, но так и не победил, пришлось даже кнопку Reset поставить. После отключения питания зависают датчики температуры и влажности.

Cessi71
Offline
Зарегистрирован: 21.05.2016

vvg10,ни чего не понял (. как зависает после отключения питания? А после включения что происходит?

Первое чтобы я сделал, это использовал другую библиотеку. На сколько я понял, у Вас DHT21. В библиотеке в Вашем архиве поддержка его не заявлена. Есть библиотека по интереснее и с поддержкой Вашего датчика.

Второе- увеличил бы задержку между опросами датчиков. По даташиту время опроса составляет минимум 1,7сек т.е. задержку сделать около 2сек. Дилеем или миллис - решать вам.

 

 

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Тоже интересно насчет библиотеки Dht21 и есть разница между dht22?

Cessi71
Offline
Зарегистрирован: 21.05.2016

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

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Cessi71 пишет:

vvg10,ни чего не понял (. как зависает после отключения питания? А после включения что происходит?

Первое чтобы я сделал, это использовал другую библиотеку. На сколько я понял, у Вас DHT21. В библиотеке в Вашем архиве поддержка его не заявлена. Есть библиотека по интереснее и с поддержкой Вашего датчика.

Второе- увеличил бы задержку между опросами датчиков. По даташиту время опроса составляет минимум 1,7сек т.е. задержку сделать около 2сек. Дилеем или миллис - решать вам.

 

 

Происходит следующее: отрубается сеть(дача, всякое бывает), при появлении сети все запускается, кроме этих датчиков. Сначала пишет, что их просто нет, потом находит, но показания "0". При нажатии кнопки Reset - все появляется как надо. Насчет DHT21, это тот же 22, только в другом корпусе, так что библиотека думаю ни при чем. Насчет задержки - мысль здравая, попробую. Спасибо.

Cessi71
Offline
Зарегистрирован: 21.05.2016

Мдя... про библиотеки я неправ... сейчас глянул-должна подходить.

З.Ы. можно и в сетапе задержку поставить. Может они иннициализировтся не успевают...

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Пробовал поставил dht22 не пашет.

Cessi71
Offline
Зарегистрирован: 21.05.2016

Что пробовал? Куда поставил? На фото же все пашет.

З.Ы. У них подключение РАЗНОЕ!!! DHT22 3-й вывод может вообще в воздухе висеть, а четвертый нужно на землю.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Да библиотеку поменял

Cessi71
Offline
Зарегистрирован: 21.05.2016

Когда меняешь библиотеку нужно скетч править. В том скетче другая библиотека не будет работать , без правки.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Cessi71 а что нужно менять?

Cessi71
Offline
Зарегистрирован: 21.05.2016

Смотреть по библиотеке.... Там в примерах все описывается.... Вам если не вникаете в смысл кода (а вы не вникаете, раз пины тыкаете от фонаря), это не нужно.... тупо следуйте инструкциям человека, написавшего скетч.....

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

А можно с 1 кнопки настроивать дату и часы?

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Конечно можно, только... извините, не с Вашими познаниями в данной теме... Без обид...

Cessi71
Offline
Зарегистрирован: 21.05.2016

У меня три кнопки.

SET- длительное удержание- вход/выход в настройки, короткими нажатиями - перемещение(часы, минуты,сек и т.д.)

+ и-   соответственно увеличит и уменьшить. Если любые кнопки не нажимались 10 сек-выход из режима установки.

 

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

дя я не обижаюсь) все понимаю.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

В последней строке на экране место: Air pressure

где заглавная буква А, появился знак % (%ir pressure), в чем может быть причина?

 

 

 

Drambynik
Drambynik аватар
Offline
Зарегистрирован: 14.05.2016

Имеется такая вот метеостанция с часами

DHT22 - 2 шт

BMP180

часы ds3231 и экранчик.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <BMP085.h>

#define DHTTYPE DHT22  
LiquidCrystal_I2C lcd(0x3F, 16, 2);
DHT dht(8, DHTTYPE);
DHT dht2(10, DHTTYPE);

BMP085 dps = BMP085();
long Temperature = 0, Pressure = 0;

int incomingByte = 0;
int i,h,y,f;

 ///// часы ..
byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(0x68);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{

  Wire.beginTransmission(0x68);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(0x68, 7);

  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

void printTime() {
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  
  char time[10];
  char data[11];
  
  snprintf(time, sizeof(time),"%02d:%02d:%02d",           
           hour, minute, second);
           
  snprintf(data, sizeof(data), "%02d.%02d.%02d",            
            dayOfMonth, month, year);
  lcd.setCursor(0, 0);
  lcd.print(data);
  lcd.setCursor(0, 1);
  lcd.print(time);
  
}

void setup()
{
	lcd.begin();
 	lcd.backlight();
	dht.begin();
  Wire.begin();
  Serial.begin(9600);
  delay(1000);
  dps.init(MODE_STANDARD, 3200, true);
}

void temp()
{
  int h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    lcd.print("Failed DHT");
    return;
  }
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(hic);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(h);
  lcd.print("%");
  }

void temp2()
{
  int ho = dht2.readHumidity();
  float to = dht2.readTemperature();
  if (isnan(ho) || isnan(to)) {
    lcd.print("Failed DHT OUT");
    return;
  }
  // Compute heat index in Celsius (isFahreheit = false)
  float hico = dht.computeHeatIndex(to, ho, false);
  lcd.setCursor(0, 0);
  lcd.print("OutTemp: ");
  lcd.print(hico);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(ho);
  lcd.print("%");
  }

void barometer()
{
  dps.getPressure(&Pressure);
  dps.getTemperature(&Temperature);

  lcd.setCursor(0, 0);
  lcd.print(Pressure/133.3);
  lcd.print(" mmHg ");
  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(Temperature*0.1);
  }


void loop()
{
 if (Serial.available() > 0 ) {  //если есть доступные данные
  incomingByte = Serial.read() - '0';
  if (incomingByte ==1){
      // установка часов
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  second = 00;
  minute = 00;
  hour = 15;
  dayOfWeek = 7; // день недели
  dayOfMonth = 31; // день
  month = 7;
  year = 16;

  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
    }
     }
     
  //дата и время
  for(i=0; i <=8; i++){
  printTime();
  delay(500);
  }
  lcd.clear();
  //темпиратура внутри
  for(h=0; h <=8; h++){
  temp();
  delay(500);
  }
  lcd.clear();
  //барометр
  for(f=0; f <=8; f++){
  barometer();
  delay(500);
  }
  lcd.clear();
  //темпиратура за окном
  for(y=0; y <=8; y++){
  temp2();
  delay(500);
  }
  lcd.clear();
}

Хочу прикрутить esp8266 и отправлять данные на народный мониторинг. Подскажите как всё провернуть. Всё что находил это есп8266+датчики без ардуин. Как отправлять данные ардуиной через есп?