Метеостанция помогите разобратся.

hand_ass_men
Offline
Зарегистрирован: 11.01.2016

Пишу свою первую программу на ардуино. До этого был опыт в Делфи.

Мне нужно чтобы на дисплей пепеременно выводились 2 подпрограммы. и Если первая работает и отображается то вторая тоже могла работать. я так понимаю delay не рулит ибо все стоприт. а часы мен нужны чтоб работали без остановок. ктните номос как сделать((((

void loop () {


  lcd.clear();
  
  digitalClockDisplay();
  delay(5000);
     DHT1();
     delay(7000);
}

 

DIVGENY
Offline
Зарегистрирован: 23.08.2016

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

метеостанция dht + часы

найти уже

готовый похожий пример

убрать delay

Genri5
Offline
Зарегистрирован: 31.05.2016

Для нечала, какое у тебя "железо"?

hand_ass_men
Offline
Зарегистрирован: 11.01.2016

DHT22. RTC3221. LCD1602. Надо что  бы дисплеи менялись по времени, т.е. 5 сек сасы, 5 секнд с датчика. с dalay это не решить. помогите как. может While???

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Не хочу повторятся. Посмотрите тему. http://arduino.ru/forum/programmirovanie/uslozhnit-kod. Там в конце.

hand_ass_men
Offline
Зарегистрирован: 11.01.2016

Страница не найдена((((

msng
Offline
Зарегистрирован: 07.06.2012

в ссылке точка лишняя, там в конце...

DIVGENY
Offline
Зарегистрирован: 23.08.2016

у тебя единицы секунд тикают от 0 до 9

 

   int sek_dec = second / 10; //получаем десятки секунд с помощью целочисленного деления

   int sek_num = second % 10; //и остаток будет единицами секунд

   if ( 0 <= sek_num <=4 )          ; //выводим показния часов

    if ( 5<= sek_num <=9 )          ; //выводим показания датчика

    но я думаю так слишком часто

ptr
Offline
Зарегистрирован: 28.05.2016

Кстати, никто не в курсе, где почитать о том, как математику в метеостанции делать?

То есть, какой глубины и частоты должна быть история изменения температуры, давления и влажности, чтобы прогнозировать погоду, и какую математическую модель для этого разумно использовать на МК?

 

negavoid
Offline
Зарегистрирован: 09.07.2016

Почитать можно вот здесь https://habrahabr.ru/post/117140/ , но в МК эту модель не запихнуть. Я пользуюсь вот таким банальным подходом:

long pressure = getPressure();
const float currentAltitude = 53.18;    // current altitude in METERS
float ePressure = 101325 * pow((1 - currentAltitude / 44330), 5.255); // expected pressure (in Pa) at altitude

    float weatherDiff = pressure - ePressure;
    if (weatherDiff > 250)
    {
      printTftF(1, ST7735_YELLOW, 88, 4, F("Sunny "));
    }
    else if ((weatherDiff <= 250) && (weatherDiff >= -250))
    {
      printTftF(1, ST7735_GREEN, 88, 4, F("Cloudy"));
    }
    else if (weatherDiff < -250)
    {
      printTftF(1, ST7735_CYAN, 88, 4, F("Rainy "));
    }

Результат предсказаний более-менее совпадает, за исключением редких моментов, вот как сейчас - но у нас был штормец, неделю давление было 742, а сейчас уже на неделю установилось под 775, и по прогнозу, естественно, выходит Sunny, но все небо затянуто облаками с залива.

Чтобы эта модель считала правильно, в вычисление разницы weatherDiff нужно ввести корректирующий коэффицент от текущего давления на уровне моря, коий для своей местности можно регулярно брать в инете. Мне хватает точности прогноза и без этого (с дефолтной прикидкой, что на уровне моря сейчас 760.0, хотя это не так и оно довольно-таки изменчиво), поэтому далее я не заморачивался.

ptr
Offline
Зарегистрирован: 28.05.2016

negavoid пишет:

Почитать можно вот здесь https://habrahabr.ru/post/117140/ , но в МК эту модель не запихнуть. Я пользуюсь вот таким банальным подходом:

Это совсем грубо. Если оперировать только давлением, то корректней сохранять хотя бы последние 24 (или даже 48) значений, снятые каждый час, вычислять среднее и максимальное значение скорости изменения давления (производной) и от него уже и плясать. Примерно так старая погодная станция у меня на даче работает. Синоптики ведь предсказывают погоду именно по динамике показаний, а не по их статическим значениям в данный момент.

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

А про математические модели, подобные в Вашей ссылке, я в курсе. Но по ним уж точно не просчитать на МК. Потому и спрашивал что-то упрощенное. Так же погодная станция RST точнее GisMeteo у меня погоду предсказывает на ближайшие несколько часов. Не раз уже спасала от попадалова с использованием цепей на колеса и лебедки )

Но она старая и уже глючит. Вот и есть мысль ей замену сделать на МК.

 

negavoid
Offline
Зарегистрирован: 09.07.2016

ptr пишет:

Это совсем грубо. Если оперировать только давлением, то корректней сохранять хотя бы последние 24 (или даже 48) значений, снятые каждый час, вычислять среднее и максимальное значение скорости изменения давления (производной) и от него уже и плясать. Примерно так старая погодная станция у меня на даче работает. Синоптики ведь предсказывают погоду именно по динамике показаний, а не по их статическим значениям в данный момент.

Я храню последние 4 часа давления и влажности и вывожу графики на дисплей, на глаз оценить динамику вполне хватает. Можно и увеличить интервалы, писать за сутки-двое, будет даже покрасивее.

ptr
Offline
Зарегистрирован: 28.05.2016

Хотел еще скорость и направление ветра фиксировать на МК.

Теоретически, можно скачать откуда-то историю показаний лет за 30 для данной местности и самому попробовать математическую модель сделать. Но это же погрязнешь в системах дифуров на год, не меньше (

 

ptr
Offline
Зарегистрирован: 28.05.2016

negavoid пишет:

 на глаз оценить динамику вполне хватает.

В то то и дело, что "на глаз". А хотелось бы, чтобы эту динамику МК учитывал.

negavoid
Offline
Зарегистрирован: 09.07.2016

А можно и просто несколько дней поработать и купить заводскую профессиональную метеостанцию со всеми датчиками :)

ptr
Offline
Зарегистрирован: 28.05.2016

negavoid пишет:

А можно и просто несколько дней поработать и купить заводскую профессиональную метеостанцию со всеми датчиками :)

Можно. Но не несколько дней. Если конечно, Вы за месяц не миллионы рублей зарабатываете. Вот, например, профессиональная: http://www.marcomm.ru/shop/UID_54.html

Есть и подороже. В России чаще "Перископ" ставят, за несколько миллионов рублей.

Мне так даже на простенький METEOEXPERT больше двух месяцев поработать надо.

 

ptr
Offline
Зарегистрирован: 28.05.2016

На самом деле, еще есть просто фан, самому собрать данные давления, температуры на двух высотах (у грунта и на крыше), влажности на двух высотах (тоже у грунта и у крыши), скорости и направления ветра, яркости солнечного света по нескольким векторам и т.п.

Зато получить точный прогноз на ближайшие 8-12 часов для данного конкретного места. Ну и более-менее точный на ближайшие сутки.

Больше суток GisMeteo меня точно уже обставит, за счет покрытия существенно большей территории и анализе информации со спутников.

negavoid
Offline
Зарегистрирован: 09.07.2016

ух, какой скачок, от avr за пару баксов к метеоэксперту за пять штук )) я-то думал, хотя бы про орегон за несколько сотен ))

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

ptr
Offline
Зарегистрирован: 28.05.2016

negavoid пишет:

орегон за несколько сотен ))

обычно заказчики - компании или государство

Ну Вы же сами предложили купить профессиональную, а не бытовую метеостанцию. А профессиональное оборудование, обычно, частные лица не покупают.

Ну и Орегонов или RST, умеющих фиксировать скорость и напраление ветра, да еще и агрегировать, а не просто показывать, данные с нескольких датчиков температуры и влажности я не встречал.

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

gulin176
Offline
Зарегистрирован: 03.09.2016

расскажите словами что делает ваш код. просто словами представить хочется

alexvs
Offline
Зарегистрирован: 22.07.2014

Тоже интересовался  составлением прогноза на основе данных со своих датчиков. Нашел в свое время статью на эту тему http://mcucpu.ru/index.php/pdevices/datchiki/39-pressure/118-prakticheskoe-ispolzovanie-datchikov-atmosfernogo-davleniya

С помощью своих датчиков фиксирую температуру, давление и влажность в городе (за окном квартиры) и на даче (10км от города). Но городские данные с жуткой погрешностью, т.к. датчики расположены с солнечной (юго-восточной) стороны на уровне 6 этажа, приходится их корректировать с учетом дачных показаний. Ну и никак не могу придумать как сделать собственный анемометр, а так же где и как его расположить. Поэтому, на данный момент, обхожусь прогнозом из интернета, получаю его с сайта openweathermap.org, можно еще eurometeo.ru заюзать, остальные ресурсы денег хотят за прогнозы. Всю инфу о погоде вывожу на 7" дисплей.

Genri5
Offline
Зарегистрирован: 31.05.2016

Есть куча приложений на Андроиде. Например я пользуюсь "Droid27 weather". Предсказывает погоду конкретно для твоей местности. И зачем тогда "огород городить". :-)) Ради интереса?

ptr
Offline
Зарегистрирован: 28.05.2016

Genri5 пишет:

Есть куча приложений на Андроиде. Например я пользуюсь "Droid27 weather".

"Есть ли жизнь за МКАДом?"

Вы бы еще спросили, для чего нужны судовые метеостанции...

 

Genri5
Offline
Зарегистрирован: 31.05.2016

Я ничего не спрашивал, а утвердительно смеюсь. Сам себе зделал, тоже, барометр и сравниваю - а есть ли разница между показаниями моего барометра и показаниями приложения. Так вот есть, конечно, но не значительные.

ptr
Offline
Зарегистрирован: 28.05.2016

Genri5 пишет:

Я ничего не спрашивал, а утвердительно смеюсь. Сам себе зделал, тоже, барометр и сравниваю - а есть ли разница между показаниями моего барометра и показаниями приложения. Так вот есть, конечно, но не значительные.

Только по показаниям барометра прогноз будет очень не точен. Важные входные параметры для более-менее точного прогноза на ближайшие несколько часов:
1. Температура вблизи грунта в защищенном от ветра месте (датчик тумана).
2. Температура на высоте свыше 1.5-2 метров над грунтом, на хорошо обдуваемом ветром участке.
3. Влажность вблизи грунта в защищенном от ветра месте (датчик тумана).
4. Влажность на высоте свыше 1.5-2 метров над грунтом, на хорошо обдуваемом ветром участке.
5. Направление ветра
6. Скорость ветра
7. Атмосферное давление
Ну и еще некий массив коэффициентов для данной местности и данного сезона (месяца).

Это то, что мне удалось накопать про метеостанции, позволяющие прогнозировать погоду только на основании локальных датчиков. Мало, не спорю. Из готовых математических моделей нашел только эту: http://www.ab-log.ru/smart-house/weather-station/forecast

 

alexvs
Offline
Зарегистрирован: 22.07.2014

Что за датчик тумана?

Если температуру, влажность и давление, в бытовых условиях, можно измерить (хоть как то), то вот с направлением и скростью ветра - все печально. Готовые устройства - дорогие, а самоделку, мне например, сделать трудно.

ptr
Offline
Зарегистрирован: 28.05.2016

alexvs пишет:

Что за датчик тумана?

Я же описал. Если измерять температуру и влажность вблизи грунта, то несложно вычислить точку росы. Это и получится датчик тумана.

Цитата:

с направлением и скростью ветра - все печально.

Почему? И то и другое несложно сделать даже из деталей от старой компьютерной мыши. Некоторые узлы потребуют умения пользоваться сварочным инвертором, дрелью и болгаркой, что для меня лично, проблем не составляет. Калибровку флюгера можно выполнять на любых датчиках, заранее выставленных, хотя бы на север и юг.

Вот примеры:

http://zelectro.cc/arduino_anemometer

http://cxem.net/house/1-247.php

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ptr пишет:

Кстати, никто не в курсе, где почитать о том, как математику в метеостанции делать?

То есть, какой глубины и частоты должна быть история изменения температуры, давления и влажности, чтобы прогнозировать погоду, и какую математическую модель для этого разумно использовать на МК?

 

Решили потягаться на Ардуинке с суперкомпьютерами?

https://ria.ru/ecovideo/20081217/157465216.html

https://www.gismeteo.ru/news/proisshestviya/12174-superkompyuter-pomozhe...

https://www.overclockers.ru/itnews/70717/shvejcarskaya-meteosluzhba-razv...

 

ptr
Offline
Зарегистрирован: 28.05.2016

andriano пишет:

Решили потягаться на Ардуинке с суперкомпьютерами?

Не мусорьте в тему, все уже написано:

ptr пишет:
получить точный прогноз на ближайшие 8-12 часов для данного конкретного места. Ну и более-менее точный на ближайшие сутки.

Больше суток GisMeteo меня точно уже обставит, за счет покрытия существенно большей территории и анализе информации со спутников.

GisMeteo, я думаю, меня обставит и на краткосрочном платном прогнозе. А вот бесплатный у них менее точен, чем у старенькой RST )

Если уже проводить аналогии, то тягаться собираюсь с судовыми метеостанциями, а пока не определена математическая модель, утверждать, что считать ее будет AVR, а не STM32 или даже Raspberry PI я не могу.

 

Lotus6202
Lotus6202 аватар
Offline
Зарегистрирован: 12.01.2018

Доброе время суток... Собрал метео станцию на ардуинке и TFT , 

Ребята подскажите ...  что и где прописать чтобы датчики обновляли показания не каждую секунду а раз в 5 минут . и не цепляло часики...  ткните носом.. уже пол года ипус.  :(     

вот код.

// подключение необхдимых библиотек
#include <dht11.h>
#include <UTFT.h>
#include <DS1307.h>                           // для DS1307   
//#include <DS1302.h>                         // для DS1302                
#include "Adafruit_BMP085.h" 
#include <Wire.h>
Adafruit_BMP085 mySensor;   

DS1307 rtc(11, 12);                                     // Подключаем часы DS1307
//DS1302 rtc(10, 11, 12);                               // Подключаем часы DS1302
Time t;

float tempC;                                            //  переменная температура C
float pressure;                                         //переменная давления


// подключение шрифтов
extern uint8_t SevenSeg_XXXL_Num[];                     // 64x100 pixels 
extern uint8_t SixteenSegment16x24[];                   // 16x24 pixels
extern uint8_t SevenSegNumFont[];                       // 32x50 pixels    
extern uint8_t SmallFont[]; 
// подключение дисплея
UTFT myGLCD(ILI9327,A2,A1,A3,A0);

// подключение датчика DHT11
dht11 DHT;                                              // Объявление переменной класса dht11 
#define DHT11_PIN 10                                    // можно любой пин к примеру A6
//#define dht_apin A6                              // Analog Pin sensor is connected to
 
void setup(){ 
mySensor.begin();                                        // инициализация 
Wire.begin();                                         
rtc.halt(false);                                         // Запускаем часы
myGLCD.InitLCD();                                        // Инициализируем дисплей 
myGLCD.fillScr(VGA_BLACK);                               // Закрашиваем дисплей черным цветом

//--------------------------------------------------------------------------------
// Установка времени
//rtc.setTime(22, 03, 0);                                // час, мин, сек (24 часовой)
//rtc.setDate(02, 01, 2019);                            // день, месяц, год
}

void loop() { 

{int chk;   
chk = DHT.read(DHT11_PIN);                               // Чтение данных с датчика DHT11 (( dht_apin для аналогового пина))
tempC = mySensor.readTemperature ()+1.5;                 //  чтение температуры BMP180
pressure=mySensor.readPressure()/133.33;                 // читаем давление

// вывод часов и даты 
String stringOne = rtc.getTimeStr(); 
myGLCD.setColor(102,255,0);                              // Цвет отображения

myGLCD.setFont(SevenSeg_XXXL_Num);                       // Шрифт для отображения 
myGLCD.print(stringOne.substring(0,2), 30, 2);           //  часы
myGLCD.print(stringOne.substring(3,5), 230, 2);           // Отображаем минуты

//myGLCD.setColor(random(255), random(255), random(255));
myGLCD.fillCircle(195, 32, 6);                           // Верхняя точка   
myGLCD.fillCircle(195, 67, 6);                           // Нижняя точка


//Отображение текущей даты
myGLCD.setFont(SixteenSegment16x24);                   // Шрифт для отображения  
myGLCD.setColor(VGA_AQUA); 
myGLCD.print(rtc.getDateStr(), CENTER, 115);           // Отображение даты
  

myGLCD.setColor(VGA_TRANSPARENT);
myGLCD.print("%", 240, 193);                            // знак флажности
myGLCD.fillCircle(90, 180, 6);                          // знак градусов


myGLCD.setFont(SevenSegNumFont);                        //  Шрифт для отображения 
myGLCD.setColor(223,115,255);                            //  Гелиотроп (Гелиотроповый)цвет
myGLCD.print(String(DHT.temperature -4), 15,170) ;        // температура c DHT 
myGLCD.print(String(pressure), 290, 170);               //    Атмосферное давление 190 

myGLCD.setColor(VGA_TRANSPARENT);
myGLCD.print(String(DHT.humidity), 165,170);              //     Влажность

}
}



//  цветовая гамма 
  
//VGA_BLACK – черный, 
//VGA_SILVER – серебряный
//VGA_GRAY – серый
//VGA_WHITE – белый
//VGA_MAROON – красно-коричневый
//VGA_RED – красный
//VGA_PURPLE – пурпурный
//VGA_FUCHSIA – фуксия
//VGA_GREEN – зеленый 
//VGA_LIME – лайм
//VGA_NAVY – темно-синий
//VGA_BLUE – синий
//VGA_TEAL – сине-зеленый
//VGA_AQUA – морская волна




 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Читаете "blink без delay" и суёте в его чтение сенсоров. Делов на полчаса.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Датчики Вы опрашиваете в строках 47-48. Создаем переменную, в сетапе приравниваем ее миллис, перед этими строками проверяем, разница миллис и вашей переменной больше или равна 5минутам, если да, то выполняем опрос датчиков, а переменную приравниваем миллис. Возможно в сетапе надо будет прочитать датчики.

paradoxin
Offline
Зарегистрирован: 17.08.2020

alexvs! Есть варианты получить скетч этого чуда!? Спасибо!

b707
Offline
Зарегистрирован: 26.05.2017

del