Фиксация min. и max. уличной температуры за сутки
- Войдите на сайт для отправки комментариев
Втр, 25/02/2014 - 10:15
Уважаемые форумчане, прошу помощи в написание части скетча для домашней метеостанции. Задача состоит в том чтобы фиксировать с последующем отображением на lcd дисплее минимальную и максимальную, дневную и ночную уличную температуру.
Просмотор форума и поиск в интернете пока не дал результатов. Только начал осваивать ардуино и пока самому трудно понять с чего начинать. Для своей метеостанции использую ардуино про мини, датчик температуры и влажности DHT 22 , датчик давления BMP085.
Дисплей lcd 20x4, также модуль часов DS1307. Так же есть задача отбражения тренда повышения и понижения атмосферного давления.
Надо кроме переменной "текущая температура" ввести еще две переменных: "минимальная температура" и "максимальная температура". После этого при каждом измерении сравниваем измеренное термометром значение с минимумом и максимумом. Если текущая температура выше максимума - то обновляем максимум присвоением ему текущего значения, с минимумом - поступаем соответственно.
Andrey_Y_ спасибо за совет. Я в программировании полный ноль, если можно напишите примерно часть кода как это реализовать. Со всем не давно начал осваивать язык ардуино и еще далек до самостоятельного написания программ. Пока пытаюсь брать уже готовые скетчи или часть из них.
Но это будет абсолютный минимум и максимум (за все время измерений).
А для расчета за сутки, надо определиться что под этим понимается: сутки с 00 до 23, или сутки - это текущее время и предыдущие 23:59 часа?
Соответственно, надо либо раз в сутки сбрасывать максимум и минимум, либо каждый час смещать показания назад.
Tomasina.
Благодарю за комментарий! Буду пробывать использовать Ваш пример кода.
Но это будет абсолютный минимум и максимум (за все время измерений).
А для расчета за сутки, надо определиться что под этим понимается: сутки с 00 до 23, или сутки - это текущее время и предыдущие 23:59 часа?
Соответственно, надо либо раз в сутки сбрасывать максимум и минимум, либо каждый час смещать показания назад.
Не могли бы вы набросать такой же код для датчика DS18b20 ? очень бы хотелось иметь данную фичу у себя в акваконтроллере
Сейчас запостить код сложно - пишу с телефона.
Подключаете библиотеки Wire и DallasTemperature, открываете комплектные к ним примеры чтения с датчиков и добавляет к коду строки 28-33 из вышеприведенного кода. Собственно, тот пример для DHT22 и есть родной от библиотеки, с этим дополнением.
я сейчас сам на работе, так что мне не кспеху :) если не сложно то как будет время чикрните сюда его, а я вечером тоже попробую сам
При компилировании ошибка, что не объявлены переменные t и h.
Добавил 2 строки:
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
float currentHumi = dht.readHumidity();
float currentTemp = dht.readTemperature();
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
}
Загрузил в UNO max.t фиксирует, min.t одни нули.
Tomasina спасибо за помощь, подскажите как решить проблему с мин.T и значения сохранять в память.
Для датчика DS18b20 есть вот такой скетч:
Пробывал убрать из него все что связано Ethernet, оставить только вывод данных на lcd. Не полчилось.
Что может:
Искать подключенные датчики при старте
Опрашивать датчики через нужный интервал времени
Для каждого датчика запоминаеть максимальное и минимальное значения.
Для каждого датчика запоминаеть превыдущее значение. Если оно было выше, рисуется стрелка "вниз", если наоборот: "вверх", иначе отображается "круг".
Нашел здесь: https://github.com/elagin/Arduino-terarium
http://electronics-lab.ru/blog/mcu/46.html
DHT11:
Частота опроса не более 1 Гц (не более раза в 1 сек.)
DHT22:
Частота опроса не более 0.5 Гц (не более раза в 2 сек.)
.....нужно учитывать, что если скорость обращения будет высокая вместо данных Вы будете получать CRC Error...
Благодарю, то что нужно, обязательно попробую прикрутить к своему
Разобрался почему не фиксировалась minT, пробывал измерять при комнатной тепературе, при первоначальных установках значений минТ = 0. Установил отрицательное значение, стало отображаться и фиксироваться.
Вот пример:
Дальше буду пыаться , сделать чтоб значения соранялись в память и сбрасывались, определеный период времени. Думаю что, по такому же принципу можно показания давления и влажности фиксировать.
у тебя одна и та же температура читается дважды (строки 23-24).
в строках 22 и 26 замени t и h на currentTemp и currentHumi
а строку 23 удали.
Спасибо за подсказку, придеться и строку 40,41 пеписать.
Я на основе этого сделал следующим образом:
У вас выходит не за сутки, а за весь период работы.
ага. Заодно можно избавиться от delay. Вот примерное направление развития: раз в 5 сек обновляем информацию, каждые 24 часа обнуляем минмаксы.
P.S. Так как RTC нету, то отсчет "суток" ведется от момента включения, плюс может быть незначительное "плавание" точности отсчета суток (в пределах пары сек в сутки).
Есть DS1307 (пост 1), точность точно падать не будет.
Я проще сделал, с помощью RTC перезагрузка ардуинки раз в сутки.
Скетч писал для домашней метеостанции, фиксация мин. и макс. темп. делал для того чтобы можно было посмотреть какая была за сутки.