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

niktim46
niktim46 аватар
Offline
Зарегистрирован: 18.09.2016

RN6LJK пишет:

niktim46 пишет:

только минусовая температура по чему-то завышена

где-то на 2,5 градуса. 

 

1. DHT-22 весьма неточный и капризный датчик. Какой экземпляр попадется. Если их у вас несколько попробуйте установить другой.

2. Если п.1 не помог, то дело в библиотеке. Подберите нужную для 22 модели. Та, которая применяется в этой конструкции  не годится.

3. Если не помогает п.1 и п.2. делаем программную корректировку.

И самое главное что принято за эталон? Может датчик работает правильно?

niktim46
niktim46 аватар
Offline
Зарегистрирован: 18.09.2016

Эталон обычный градусник

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

RN6LJK пишет:

Простите, а о какой метеостанции идет речь? ОБ этой или какой то другой? Если об этой интересно увидеть

вариант с двумя DHT22 и LCD2004.

Похоже - это про мою со 137 поста.

niktim46
niktim46 аватар
Offline
Зарегистрирован: 18.09.2016

  vvg10  Так точно!

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

У меня уже 2,5 года работает на даче. Температуру показывает точно. Вероятно дело все-таки в датчике...

niktim46
niktim46 аватар
Offline
Зарегистрирован: 18.09.2016

Знатоки подскажите как организовать работу модуля Ардуино про мини в ждущем режиме,чтоб секунд 10 модуль работал и минут 5 спал

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

niktim46 пишет:

Знатоки подскажите как организовать работу модуля Ардуино про мини в ждущем режиме,чтоб секунд 10 модуль работал и минут 5 спал

 

А так не пробовали?

delay()

Останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).

Синтаксис
delay(ms)
Параметры

ms: количество миллисекунд, на которое приостанавливается выполнение программы. (unsigned long)

 

Oleg Yakovlev
Offline
Зарегистрирован: 23.08.2017

Помогите с библиотеками.Пожалуйста сбросьте на ow-oleg@mail.ru

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Oleg Yakovlev пишет:

Помогите с библиотеками.Пожалуйста сбросьте на ow-oleg@mail.ru

545 пост

R5S4R1
Offline
Зарегистрирован: 11.10.2017
Просьба для RN6LJK
Спасибо за проект!
 Проект мне очень понравился!
 Будьте добры, пришлите пожалуйста библиотеки.
 nik.koljan21@inbox.lv
Спасибо.
RN6LJK
Offline
Зарегистрирован: 24.03.2013

R5S4R1 пишет:

Просьба для RN6LJK
Спасибо за проект!
 Проект мне очень понравился!
 Будьте добры, пришлите пожалуйста библиотеки.
 nik.koljan21@inbox.lv
Спасибо.

Отправил с версией IDE без глюков на BMP

Попробуйте еще здесь https://yadi.sk/d/5m6E-afT3DZwvn

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Честно говоря меня удивляет не ослабевающий интерес к этому очень простому и примитивному проекту. Четыре с половиной года интереса, хотя столько более интересных проектов опубликовано. У меня эта станция до сих пор трудится, правда вышел из строя модуль часов, и я был вынужден его заменить на новый. Перед этим я приобрел 10 штук часовых модулей и половину опробовал. Так вот хочу сказать, что теперешние, не знаю толи партия такая то ли производитель, но в сравнение по точности не идут с теми, пятилетней давности. Конечно для начинающих такой проект весьма подходящий. Правда я не вижу в продаже 328-х Ардуин именно в таком конструктиве, может не там смотрел.

R5S4R1
Offline
Зарегистрирован: 11.10.2017

Большое спасибо.Все получил, буду пробовать.

woffko
Offline
Зарегистрирован: 13.10.2017

у меня вот так вышло, проэкт просто очень простой и легок для повторения

Внутрений модуль на радио от NFR24l01(SPI),  bpm280(I2C), часы ds3231(I2C), был еще si7021(I2C, он переехал на балкон, но в коде он есть), nano от robotdyn, экран 2004 тоже на I2C так же фоторезитор на A5 и подцветка на D3

  

внешний модуль(он же балконный модуль) promini 3.3v si7021(I2C),nrf24l01(SPI)

(тут еще сейчас добавлен ds18d20(1wire) и свешен на улицу, в платку зарядки вставлена солнечная батарея на 6в и 300mA на фото этого нет)

на фото экран до конца не отлажен, 2004 с I2C (на фоне паялка, в похожем корпусе)

mixas9999
Offline
Зарегистрирован: 23.10.2017

скинте скеч и библиотеки на fuck.you79@mail.ru 

 

yuraanapa
Offline
Зарегистрирован: 31.05.2017

mixas9999 пишет:

скинте скеч и библиотеки на fuck.you79@mail.ru 

 

Да зачем на мейл,здесь разместите думаю многим интересно ))

RN6LJK
Offline
Зарегистрирован: 24.03.2013

yuraanapa пишет:

mixas9999 пишет:

скинте скеч и библиотеки на fuck.you79@mail.ru 

 

Да зачем на мейл,здесь разместите думаю многим интересно ))

 

545 пост

RN6LJK
Offline
Зарегистрирован: 24.03.2013

yuraanapa пишет:

mixas9999 пишет:

скинте скеч и библиотеки на fuck.you79@mail.ru 

 

Да зачем на мейл,здесь разместите думаю многим интересно ))

отправил, лови

yuraanapa
Offline
Зарегистрирован: 31.05.2017

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

woffko
Offline
Зарегистрирован: 13.10.2017

все библиотеки используются стандартные, библиотека для si7021 используется нета(библиотека SHT2x), надо переделать, но пока все время лень

батарея у балконного модуля используеться очень не оптимально, но там все время её подзаряжает солнечная батарея(без под зарядки аккума на 1800мА хвататет на 2 недели).

код от балконного модуля.

#include <SPI.h>
#include "RF24.h"
#include <Wire.h> //для sht21
#include <SHT2x.h> //для sht21
#include <OneWire.h> //для Ds18d20
#include <DallasTemperature.h> //для Ds18d20

OneWire oneWire(7); //ds18d20 висит на D7
DallasTemperature sensors(&oneWire);

const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
RF24 radio(9,10);
float msg[4];
float term, humi, Vop;

void setup(){ 
  //============================================================Модуль NRF24
  radio.begin();                      // Включение модуля
  radio.setAutoAck(1);                // Установка режима подтверждения приема;
  radio.setRetries(1,1);              // Установка интервала и количества попыток
  radio.setDataRate(RF24_250KBPS);    // Устанавливаем скорость
  radio.setPALevel(RF24_PA_MAX);      // Установка максимальной мощности;
  radio.setChannel(10);               // Устанавливаем канал
  radio.openWritingPipe(pipe);        // Открываем канал передачи
  //====================================================ds18b20
  sensors.begin();
}

void loop(){ 
  
      
      sensors.requestTemperatures();  //не помню для чего, год назад писал.
     
      
      
      msg[0]=SHT2x.GetTemperature();  //температура
      msg[1]=SHT2x.GetHumidity();     //влажность 
      msg[2]=sensors.getTempCByIndex(0);  //температура с датчика на улице
      msg[3]=(1.1*16368)/Vbg();      //напряжение питания ардуины 
      delay(5000);  
      radio.write(&msg, sizeof(msg));  //отправка
      delay(5000);

}
//код для вычисления напряжения питания ардуины
int Vbg() { 
ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0);
long buffersamp=0;
for (int n=0x0; n<=0xff; n++ ) {
ADCSRA |= (1<<ADSC)|(1<<ADEN);  //Starts a new conversion
while (bit_is_set(ADCSRA,ADSC));
buffersamp += ADC; }
buffersamp >>=4; //16368 full scale 14bit
ADCSRA &= ~(1 << ADEN);  // отключаем АЦП
return buffersamp;
 }

Код от приёмника с экраном


#include <Wire.h>
#include <TimeLib.h>
#include <DS3232RTC.h>
#include <LiquidCrystal_I2C.h>
#include <TimerOne.h>
#include <BMP085.h>
#include <SHT2x.h>
#include <SPI.h>
#include "RF24.h"
 
int ledi,led2;
int t=0;
BMP085 dps = BMP085();   
long Temperature = 0, Pressure = 0, vl;
LiquidCrystal_I2C lcd(0x27,20,04);
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
RF24 radio(9,10);
float msg[3];
 
 
void setup() {
  Wire.begin();
  lcd.begin();                 
  lcd.backlight();
  dps.init();
  setSyncProvider(RTC.get);
  radio.begin();                      // Включение модуля
  radio.setAutoAck(1);                // Установка режима подтверждения приема;
  radio.setDataRate(RF24_250KBPS);    // Устанавливаем скорость
  radio.setChannel(10);               // Устанавливаем канал
  radio.openReadingPipe(1,pipe);      // Открываем 1 канал приема
  radio.startListening();             // Начинаем слушать эфир 
}
 
void loop() {
//приём данных с радио
   if (radio.available()){
         while (radio.available()){
      radio.read(&msg, sizeof(msg));
    }
     }
     
     
   t++;   //таймер обновления экрана, иначе экран мерцает
   if ( t > 200 ) { 
    t=0;
    ledi=analogRead(A7); //фоторезистор для автояркости
    led2=map(ledi, 1000, 400, 10, 250);
    analogWrite(3, led2); //подсветка экрана на D3
    //radio on
    lcd.setCursor(0, 0);
    lcd.print('t'); //температура с si7021
    lcd.print(msg[0], 1);
    lcd.write(0xDF); //значек градуса
    lcd.print(' ');
    lcd.print(msg[1],1); //влажность с si7021
    lcd.print("%");
    lcd.print(' ');
    lcd.print(msg[2],2); //температура за окном с DS18D20
    lcd.write(0xDF);
    lcd.setCursor(10, 1); 
    lcd.print(msg[3],2); //напряжение питания
    lcd.print("v");
    //radio off
    dps.getPressure(&Pressure); 
    dps.getTemperature(&Temperature);
    lcd.setCursor(0, 1);
    lcd.print(Pressure/133.3, 1); //давление с BPM280
    lcd.setCursor(6, 1);
    lcd.print(Temperature*0.1, 1); //темепература с BPM280
    lcd.write(0xDF); //запись значка градуса
   
  //  lcd.print(SHT2x.GetHumidity()); //данные с si7021 подключенный по I2C, он отключен не используется
  //  lcd.print("%");
  //  lcd.setCursor(6, 2);
  //  lcd.print(SHT2x.GetTemperature(), 1);
  //  lcd.write(0xDF);
    }
    
    lcd.setCursor(0, 3); //часы
    lcd2dig(hour());
    lcd.print(":");
    lcd2dig(minute());
    lcd.print(":");
    lcd2dig(second());
    
    lcd.setCursor(10, 3); //дата
    lcd2dig(day());
   
    lcd.print(".");
    lcd2dig(month());
    lcd.print(".");
    lcd2dig(year());
}
void lcd2dig (int num) {
  if (num >= 0 && num < 10) 
  lcd.print("0");
  lcd.print(num);
}
 

P.S. я не буду высылать библиотеки на почту, здесь нет никаких экзотических библиотек, все библиотеки обсалютно штатные. причём они обсалютно все описаны в скетче их все можно найти в менеджере библиотек в arduino ide

santej357
Offline
Зарегистрирован: 19.05.2015

Добрый день!

Замечательный проэкт если есть библиотеки на этот проэкт отправте пожалста на почту audi-s8k777pp@mail.ru зарания благодарин.

mixas9999
Offline
Зарегистрирован: 23.10.2017

А можно вместо bpm085 поставить bpm280?????

woffko
Offline
Зарегистрирован: 13.10.2017

у меня у самого стоит BPM280, библиотека от 085 подходит, у них кажется только точность самого датчика отличается

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Пока Клапа не запретил, можно. 

woffko
Offline
Зарегистрирован: 13.10.2017

что-то задваиет форум собщения, это сообщение надо удалить

woffko
Offline
Зарегистрирован: 13.10.2017

продолжаю свои злодения в сторону дома умного.
на просторах алиэкспресса был куплен esp-12e от lolin к нему был приделан si7021 и oled экран по i2c(D1 sdl, D2 sda ), так же прицепил nrf24l01(ногус D8 надо подтянуть резистором на 4.7ком к земле)

пока все выглядет так

 

 

балконный модуль используется тот же, в планах освоить mqtt и завести все в majodomo

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

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RF24.h"

#define OLED_RESET D4
Adafruit_SSD1306 display(OLED_RESET);
#define maxString 64
char target[maxString + 1] = "";
#include <SI7021.h>
SI7021 sensor;
int t1;
long t,h;
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
RF24 radio(2,15);
float msg[4];

void setup()   {                
  Serial.begin(115200);
  //============================================================Модуль NRF24
  radio.begin();                           // Включение модуля
  radio.setAutoAck(1);                // Установка режима подтверждения приема;
  radio.setDataRate(RF24_250KBPS);    // Устанавливаем скорость
  radio.setChannel(10);               // Устанавливаем канал
  radio.openReadingPipe(1,pipe);      // Открываем 1 канал приема
  radio.startListening();             // Начинаем слушать эфир
  
 
  display.cp437(true);
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
  display.clearDisplay();
}


void loop() {
 t1++;
   if (radio.available()){
    while (radio.available()){
      radio.read(&msg, sizeof(msg));
    }
   }
 if ( t1 > 20 ) { 
    
h=sensor.getHumidityPercent();

t=sensor.getCelsiusHundredths()/100;
t1=0;
 }
 display.clearDisplay();  
 display.setTextColor(WHITE);
 display.setTextSize(1);
 display.setCursor(0,0);                      
 display.println(utf8rus("температура влажность"));
 display.setTextColor(WHITE);
 display.setTextSize(1);
 display.setCursor(17,9);
 display.print(t);  display.print ( (char) 176);//знак градуса  display.print(" "); display.print(h); display.println("%");  
 display.print(msg[0]); display.print(" "); display.print(msg[1]); display.print(" "); display.print(msg[2]); display.print(" "); display.print(msg[3]); 
 display.display();       
}


char *utf8rus(char *source)
{
  int i,j,k;
  unsigned char n;
  char m[2] = { '0', '\0' };

  strcpy(target, ""); k = strlen(source); i = j = 0;

  while (i < k) {
    n = source[i]; i++;

    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }

    m[0] = n; strcat(target, m);
    j++; if (j >= maxString) break;
  }
  return target;
}

 

rutto
Offline
Зарегистрирован: 22.11.2017

Всем привет.

А подскажите какая станция будет самой точной? На каких комплектующих?

И хочется чтобы она меряла и погоду за бортом + по максимуму

vk007
Offline
Зарегистрирован: 16.06.2015

rutto пишет:

Всем привет.

А подскажите какая станция будет самой точной? На каких комплектующих?

И хочется чтобы она меряла и погоду за бортом + по максимуму

Выбирайте. Думаю, что любая из них обладает достаточной точностью.

rutto
Offline
Зарегистрирован: 22.11.2017

vk007 пишет:

Выбирайте. Думаю, что любая из них обладает достаточной точностью.

Ну вы и Петросян) Подскажите, вы же поняли суть вопроса.

Как лучше передавать данные? провод/беспровод?

woffko
Offline
Зарегистрирован: 13.10.2017

Как вам удобнее так и передавайте, среда передачи(буд-то прово иди радиоканал) на сами измерения не влияет.

Назвать эту поделку метеостанцией нельзя, ибо температура, влажность и давление это не метеостанция.

все характеристики датчиков, в том числи и точность можно найти в интернетах 
si7021 https://www.silabs.com/documents/public/data-sheets/Si7021-A20.pdf

BMP280 http://www.hkmjd.com/Attachments/product/201401/52e1fb718c181.pdf

DHT22 https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

DHT11 https://akizukidenshi.com/download/ds/aosong/DHT11.pdf

bwn
Offline
Зарегистрирован: 25.08.2014

rutto пишет:

Как лучше передавать данные? провод/беспровод?

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

vasilii48
Offline
Зарегистрирован: 27.01.2018

Отличная работа, Хочу собрат все комплектуючи имеются.

Прошу вислати библиотки vasilii48@mail.ruvasilii48@mail.ru

Спасибо!

vasilii48
Offline
Зарегистрирован: 27.01.2018

Здравствуйте vvg10!

Я собрал Ваш проект “Метеостанция с часами, двумя датчиками температуры и влажности(улица-дом), датчиком давления, LCD 20x4.”

Arduino Uno v3, программа v1.0.5.

Метеостанция мне понравилась, запустилась.

Возникли некоторые вопросы, если можно я Вам задам:

По установи времени в DS1307 (часы идут).

//rtc.setTime(09, 32, 00);     // Устанавливаем время 18:48:00

  //rtc.setDate(02, 02, 2018);   // Устанавливаем дату 06.12.2014

                                 // раскомментируем для записи времени в RTC, после комментируем снова и еще раз прошиваем.

Я раскомментирую:

//  //rtc.setTime(02, 02, 00);    

//  //rtc.setDate(02, 02, 2018); (изменение в скетче после “раскомментирую”)

 Мне кажется не произошла раскомментирование. На примерах других

cкетчах строчка, которая раскомментировалась активировалась (изменяла цвет) и убирались “// “.

Ввел дату и время, выполнил “после комментируем снова и еще раз прошиваем”

Время и дата на часах не изменились.

Что я не так делаю?

Если я правильно понял, что корректировку часов можно произвести  кнопкой NULL.

Я подключил ее к Arduino Uno v3 pin12(не знаю правильно или нет)

А как производить корректировку часов не знаю (форуме не нашел).

Убедительно прошу Вас объяснить (я в программировании почти “0”).

Василий. vasilii48@mail.ruvasilii48@mail.ru

yojik
Offline
Зарегистрирован: 20.02.2015

//rtc.setTime(09, 32, 00);     // Устанавливаем время 18:48:00

  //rtc.setDate(02, 02, 2018);   // Устанавливаем дату 06.12.2014

                                 // раскомментируем для записи времени в RTC, после комментируем снова и еще раз прошиваем.

Я раскомментирую:

//  //rtc.setTime(02, 02, 00);    

//  //rtc.setDate(02, 02, 2018); (изменение в скетче после “раскомментирую”)

Раскоментировать - значит убрать слеш

rtc.setTime(02, 02, 00);    

rtc.setDate(02, 02, 2018)

vasilii48
Offline
Зарегистрирован: 27.01.2018

yojik

Большое Вам сбасибо.

Все выставились.

Спасибо.

vasilii48
Offline
Зарегистрирован: 27.01.2018

Занимаюсь метеостанцией VVG10. Скетч и библиотеки от VVG10. Компиляция выполнилась

На дисплее показывает время с датой, атмосферное давление температуру и важность

TnanCи Hum.nan, так как спалил DHT11. Получил датчики установил DHT11 ( R 10kк pin2)

Выполнил компиляцию (замечаний не было) загрузил, температура и влажность  nan.

Открываю примеры DHTtest  компилирую загружаю и открываю монитора порт

Status   Humidity (%)     Temperature (C)             (F)

TIMEOUT            nan                        nan                        nan

Согласно его скетча DHTподключаю pin 4 и pin5 (Цифровые входы-выходы)

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

  dhtb.setup(5);

Другие пробовал библиотеки не подошли.

Что надо подправить?