Arduino барометр - барограф

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014

В порядке предложения / пожелания. Барограф должен работать годами. Процессы медленные. Может стоит добавить блинк. Медленый, плавный, успокаивающий? Скажем 0,2 сек горит, 2 сек не горит.

Я в своем приборе буду ставить ардуино про-мини лицом к передней панели. Отверстие в пластике и капля термоклея в качестве световода. Синий блинк, Как индикатор нормальной работы программы. По стеклу то ведь стучать бессмысленно, не механический барометр...

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

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 Блинк сделать не проблема, тем более на 13 пине есть диод.

Буду диапазоны писать, сделаю.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

s13 пишет:

.

Отличное решение использовать солнышко для питания прибора!

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

так или так?

 

s13
Offline
Зарегистрирован: 22.05.2016

Как на первом, три ветки по 2 шт. выходное напряжение в этом случае 4.6v что безопасно для схемы и обеспечивает заряд акка до 4.2v в солнечный день.(схема защиты встроенная в акк. отключает заряд, и барограф питается напрямую от солнышка) Если убрать всё кроме BMP180 и меги328, думаю потребление станет совсем мизерным и будет достаточно и пары элементов для подпитки. Три ветки и сейчас избыточно.  А если форуму нужет вариант без даты и DHT , могу поправить под вашу разводку и убрать всё лишнее.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

s13 Спасибо!

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 Добавил моргалку и диапазоны, можно качать.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

Лекс 59 Добавил моргалку и диапазоны, можно качать.

Спасибо. Возможно сегодня уже к вечеру прибор займет свое штатное место. Правда еще с БП порешать. Не уверен, что зарядка от сотового приемлемый вариант для непрерывной работы на долгие годы, даже с некоторыми доработками.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

s13 пишет:

А если форуму нужет вариант без даты и DHT , могу поправить под вашу разводку и убрать всё лишнее.

Сложный это вопрос. Нужно или нет. Я вряд ли могу служить ориентиром. Просто уже многое есть, я писал. Приборы и измерения - старая любовь для меня.

Тот же тестер радиодеталей. Когда еще появился. А и по сей день все новые люди подтягиваются. И новые версии.

У барографа естественно не будет такой популярности, но ведь скажем с год назад даже идея подобного прибора мне в голову не приходила. Я наверняка не один такой. Люди еще будут. Многие со своими хотелками. Некоторые сообразят пользу этого прибора только наткнувшись на его описания.

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

Истинного спроса мы с вами и не узнаем никогда. Пример. Моя тема по осциллографам - первая часть 52 страницы. Уже 13600 просмотров и чило растет. Продолжение уже 24 страницы 4300 просмотров. А в теме отметилось не более десятка людей всего. Активных 2-3. Т.е. интерес есть. Сколько молчунов, кто без проблем повторил и мы об этом не знаем?

У Бодрого 2014, я уверен, аналогичное положение.

А можно просто подождать реакции. Когда появится следующий энтузиаст? ХЗ. Будем ли мы на тот момент следить за темой? ХЗ.

Я бы сказал так: Есть возможность и желание - делайте. В вашем случае возможно достаточно просто текстового файла с описанием что и где надо закомментировать в скетче при исключении того или иного датчика. Возможно пара-тройка вариантов хекса. Но тут я темен. Вам виднее.

Vovan63
Vovan63 аватар
Offline
Зарегистрирован: 02.09.2015

Здравствуйте! Восхищён проделанной работой уважаемых авторов! Ибо сам "не писатель". Попробовал все. Конструкция уважаемого "s13" кажется более БАРОГРАФОМ чем остальные. Буду ждать вариант без часов и DHT. Спасибо.

s13
Offline
Зарегистрирован: 22.05.2016

Рад что вариант построения графика Вам понравился, к сожалению поправить скетч будет время только на следующей неделе.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

В принципе барограф на автономном питании был бы интересен и мне. Проавда не факт, что на батарейке в 3 вольта. Возможно выбиру 3 мизинчика.

Смена графика раз в минуту? Сомнительно. Это надо 3 минуты стоять и смотреть. Я бы пожалуй выбрал вариант с основным графиком суточным по давлению. Перебор графиков по нажатию кнопки. Подсветку жаль, но с мизинчиками вполне реально. Тоже кнопкой. Чисто электрически, без програмных опросов.

Про измерение влажности уже писал. Электронные датчики не катят. Разве что в сухом климате.

РТС там мне не интересен тоже. Внешний датчик температуры аналогично. Только барограф остается.

По автомасштабированию графиков. Такое дело. Кому как лучще. При автомасштабировании действительно резкие перепады давления и мелкие колебания рядом со стабильным уровнем будут выглядеть одинаково "страшно". (Вот попробуйте это объяснить пожилому человеку). Я бы предпочел фиксированый шаг. Пиксель на миллиметр рт.ст. Возможна 2 пискеля на 1 мм. Но я еще не знаю реального диапазона в своей местности. Возможно тогда шкалы не хватит.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Самодельщикам на заметку.
Сейчас изготавливал корпус для барографа. Использовал электротехническую соединительную коробочку. На период мех. обработки и склейки внутренних структур, чтобы не поцарапать внешнюю поверхность покрыл ее строительным скотчем, надеясь, что его липкий слой более безобиден. Фиг там. Очистить оказалось так же сложно, как и от простого скотча. Не помогает даже специальная жидкость для снятия липкого слоя. Зато прекрасно помогло подсолнечное масло. Потом с хоз. мылом и все.

s13
Offline
Зарегистрирован: 22.05.2016

А вот, выкроил кусочек времени и всё лишнее вырезал. Правда времени строить графики нет, сами запускайте и смотрите. Схема как в V5, только без RTC и DHT.


#include <LCD5110_Graph.h>
#include <Wire.h>
#include <BMP085.h>
#include <LowPower.h>
BMP085 dps = BMP085();
int Alt_corr = 3200; // 3200 это 32 метров над уровнем моря (Питер на такой высоте располагается
                     //+ надо добавить несколько метров в зависимости от этажа на котором живете)

long temp3 = 0, Pressure = 0; 
int sotki = 0;    // сотые для давления
unsigned char p_count = 0, p2 = 0;
long P_Min = 500000, P_Max = 0, P_Dt = 0, P_Mid = 0;
signed int P_Mem[217]; //-101308 = 760мм (3 day 20min memory, 72 per 24 hour) 
uint16_t x, y, last_x, last_y;
// nokia 5110 connect
// pin d3 - Serial clock out (SCLK)
// pin d4 - Serial data out (DIN)
// pin d5 - Data/Command select (D/C)
// pin d7 - LCD chip select (CS)
// pin d6 - LCD reset (RST)
LCD5110 myGLCD(3, 4, 5, 6, 7);

#define cont 65 //контрастность

// bmp180 connect
// sda  - a4
// scl  - a5

// Use pin 2 as wake up pin
const char wakeUpPin = 2; // d2 для кнопки
const char lightPin = 11; // d11 подсветка дисплея
const char batPin = 0;    // a0 - ан. вход для контроля батареи 220к/51к

char scr_num = 0;          // Номер экрана для отображения
boolean key_pressed = false; // Признак что кнопку жали
boolean Refresh = true;      // Признак что нужно обновить отрисовку (для экономии батарей)
char light_on = 5;         // длительность подсветки при включении 5*4 = 20с. 

extern unsigned char SmallFont[];  // внешние шрифты
extern unsigned char BigNumbers[];
extern unsigned char TinyFont[];    
char tik = 0;           // счетчик для времени
char Count_Minute = 0;                           

void wakeUp() // прерывание сна по нажатию кнопки
{
  // Just a handler for the pin interrupt.
  detachInterrupt(0); 
  if (light_on > 0) {scr_num++;} // Первый тычок только подсвет
  light_on = 2;            // после нажатия на кнопку подсветка 2*4 = 8с.
  Refresh = true;        // Обновить отрисовку
  key_pressed = true;   // кнопку жали
    if (scr_num > 3) {
      scr_num = 0;
    }

    LowPower.powerDown(SLEEP_500MS, ADC_OFF, BOD_OFF); //антидребезг
    attachInterrupt(0, wakeUp, LOW); // восстановить прерывания от кнопки
} 

//***************************************************************************
void setup() {
  myGLCD.InitLCD();
//  myGLCD.setContrast(cont); //регулировка контраста при необходимости
  myGLCD.setFont(SmallFont);
  Wire.begin();
  
  analogReference(INTERNAL); //1.1v internal op.source

  LowPower.powerDown(SLEEP_1S, ADC_OFF, BOD_OFF);
  // delay(1000);
  dps.init(MODE_ULTRA_HIGHRES, Alt_corr, true); 

  pinMode(wakeUpPin, INPUT);  // Configure wake up pin as input.  
  digitalWrite(wakeUpPin, 1); // pullup
  pinMode(lightPin, OUTPUT);// lcd light pin as output;
  
  dps.getPressure(&Pressure);
  P_Mid = Pressure - 101308; // 101308 = 760mm
  P_Mem[p_count] = P_Mid; // заносим в память первое значение давления для правильной работы усреднения
}

void loop() {

  // Allow wake up pin to trigger interrupt on low.


  dps.getPressure(&Pressure); // считать давление

 // для экранов с инверсным подсветом поменять 0 и 1
  if  (light_on > 0) {
    digitalWrite(lightPin, 1);
    light_on--;
  }
  else digitalWrite(lightPin, 0); // lcd light on/off
  
 


  if (Pressure > 79900){  // 650mm
    P_Mid = (P_Mid + (Pressure - 101308))/2; // усреднение замеров, отбрасываем показания ниже 650мм.(сбоит бывает)
  }

  if (Count_Minute >= 20){ Refresh = true; // каждые 20 мин. запоминаем усредненное значение в память и обновляем графики
    if (p_count == 216) {
      for (int i = 0; i < 216; i++) // сдвигаем если буфер полон
      {
        P_Mem[i] = P_Mem[i+1];
      }
    } 
    else {
      p_count++;
    }
    P_Mem[p_count] = P_Mid; 
    if (Pressure > 79900){
      P_Mid = Pressure - 101308; // новый старт усреднения
    }
    Count_Minute = 0;
  }


//  Отображение экранов
  switch (scr_num)
  {
  case 0:  // summary screen
    Refresh = true;          // Обновить отрисовку каждый цикл
    dps.getTemperature(&temp3);
 
    myGLCD.clrScr(); // Очистка экрана
    myGLCD.setFont(BigNumbers);

    //Давление с BMP180
    myGLCD.printNumI(Pressure / 133.3, 15, 5, 3); //рассчет атмосферного давления
    myGLCD.setFont(SmallFont);
    myGLCD.print(".", 60, 22);
    sotki = ((Pressure / 133.3)-int(Pressure / 133.3))*100;
    myGLCD.printNumI((sotki / 10), 66, 22, 1); 
    myGLCD.printNumI((sotki % 10), 72, 22, 1);// сотые
    myGLCD.print("t=", 20, 35);
    myGLCD.printNumF(temp3 * 0.1, 1, 32, 35);  //температура
    break;

  case 1:  // график давления за сутки с масштабированием
    if (Refresh){    // Рисуем если разрешено обновить
    
    P_Min = P_Mem[p_count]; 
    P_Max = P_Min; // сбросить значения
    if (p_count < 72) {
      p2 = 0;
    } 
    else {
      p2 = p_count - 72;
    }

    for (int i=p_count; i>p2 ; i--) { 
      if (P_Min > P_Mem[i]) {
        P_Min = P_Mem[i];
      } 
      if (P_Max < P_Mem[i]) {
        P_Max = P_Mem[i];
      } 
    }
    P_Dt = P_Max - P_Min;      // макс. разница

    myGLCD.clrScr(); // Очистка экрана
    myGLCD.setFont(TinyFont); // Установка набора символов 
    x=78;
    if (P_Dt > 0){
      for (int i=p_count; i>p2 ; i--) {
        y = ((36 * (P_Max - P_Mem[i]))/P_Dt)+6;  
        if (x == 78) {
          myGLCD.setPixel(x, y);
        } 
        else {
          myGLCD.drawLine(last_x, last_y, x, y);
        }
        last_x = x; 
        last_y = y; 
        x--;
      }
    }

    myGLCD.print("Max:", LEFT, 0);
    myGLCD.printNumF((P_Max +101308)/ 133.3, 2, 20, 0);
    myGLCD.print("24 hour", RIGHT, 0);
    myGLCD.print("Min:", LEFT, 42); 
    myGLCD.printNumF((P_Min+101308) / 133.3, 2, 20, 42);
    }
    break;

  case 2:  // график давления за трое суток  
    if (Refresh){    // Рисуем если разрешено обновить
    P_Min = P_Mem[p_count]; 
    P_Max = P_Min; // сбросить значения
    for (int i=p_count; i>0 ; i = i - 3) { 
      if (P_Min > P_Mem[i]) {
        P_Min = P_Mem[i];
      } 
      if (P_Max < P_Mem[i]) {
        P_Max = P_Mem[i];
      } 
    }
    P_Dt = P_Max - P_Min;      // макс. разница

    myGLCD.clrScr(); // Очистка экрана
    myGLCD.setFont(TinyFont); // Установка набора символов 

    x=78;
    if (P_Dt > 0){
      for (int i=p_count; i>0 ; i = i - 3) {
        y = ((36 * (P_Max - P_Mem[i]))/P_Dt)+6;  
        if (x == 78) {
          myGLCD.setPixel(x, y);
        } 
        else {
          myGLCD.drawLine(last_x, last_y, x, y);
        }

        last_x = x; 
        last_y = y; 
        x--;
      }
    }

    myGLCD.print("Max:", LEFT, 0);
    myGLCD.printNumF((P_Max +101308)/ 133.3, 2, 20, 0);
    myGLCD.print("3 Day", RIGHT, 0);
    myGLCD.print("Min:", LEFT, 42); 
    myGLCD.printNumF((P_Min+101308) / 133.3, 2, 20, 42);
    }
    break;   

  case 3: // напряжение аккумулятора для контроля
    Refresh = true;          // Обновить отрисовку каждый цикл
    myGLCD.clrScr(); // Очистка экрана
    myGLCD.setFont(SmallFont); // Установка набора символов
    myGLCD.print("Bat:", LEFT, 15);    
    myGLCD.printNumF(analogRead(batPin)/176.6, 2, 24, 15);  //напр.батареи (коэфф. подобрать при желании)
    break;
  }

  if (Refresh) {myGLCD.update(); Refresh = false;} // Вывод вместимого буфера на дисплей и сброс признака обновления

  attachInterrupt(0, wakeUp, LOW); 
  
  //    Отключить питание на 4с
   LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF); 
      
   if (!key_pressed) {tik++;} else {key_pressed = false;} // в зачёт 4с. если не тыкали кнопку
   if (tik >=15) {Count_Minute++; tik = 0;} // минута натикала

} // Конец цикла
Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Корпус в первом приближении. Разница показаний температуры внутренним датчиком и внешним термометром 3,5-4 градуса. Но это закрытый почти полностью корпус. Мер по конструктивному изолированию термодатчика на BMP180 я пока не принимал. Перегородки для отедения тепловых потоков не ставил и отверстий в корпусе не сверлил. Стабилизатор внутри корпуса. Думаю после принятия мер разница упадет до 1-2 градусов. Меня это устраивает. Мне важна динамика.

Фото снова не грузится.

 

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Влпрос для s13.

Залил пока в Нано ваш скетч. Собираюсь поставить ваш вариант на тестовый забег. Жалко, что у меня пока один BMP180, потеряю данные за сутки, а как раз график ползет рядом с нижним пределом. 743 мм. Понравилось, что скетч влетел без единой ошибки, ну после ругани на библиотеки, конечно.

Собственно вопросы:

Нажатие на кнопку включает подсветку. Выбор экрана для изображения тоже кнопкой, в вашем последнем скетче? (ответ да, вопрос снят).

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

Если я выбираю какой-то экран кнопкой, он остается и далее или через период возвращается к умолчанию?

Нижняя и верхняя границы давления у вас как-то ограничены? Нужно ли мне будет его корректировать?

Собственно у меня барограф уже готов в варианте Бодрого 2014. Кроме БП. И внутренних теплоизолирующих структур. Но переделать в ваш вариант проблемой не будет, если он мне понравится больше. Правда если останавливаться на питании от 3 мизинчиков, то его придется лепить снаружи. Корпус из электротехнической клемной коробки 70х70х20. Аккуратный вполне.

Еще момент. Скорее всего буду использовать голую мегу, как и вы. Часов там нет, поэтому внешний кварц ставить не буду. И фьюзы поэтому будут по умолчанию. Или в них стоит что-то изменить?

Запустил прибор на макетной панели. Первое впечатление очень хорошее. Прибор тщательно продуман. Чувствуется, что автор вкладывал душу. Удобно проверять напругу батареи. Несколько мелковаты шрифты для меня. (Зрение, увы, не юноши). Но это не принципиально. Все пространство отдано графику. Наверное это оправдано.

s13
Offline
Зарегистрирован: 22.05.2016

Про умолчание, это тот который при включении ? Возврата нет, можно оставить на любом экране, он так и останется. Верхняя и нижняя границы формируются от текущих разбросов давления за сутки или 3 дня соответственно. По умолчанию фьюзы у меги стоят на внутренний генератор 1Mhz, нужно будет переписать если без кварца, то на внутренний 8Mhz, при этом не стоит затирать калибровочный байт в еепром.  Ещё перед трансляцией указать что дуня на 8. Про подсвет не совсем понял, но можно сделать чтобы первое нажатие только включало подсвет без смены экрана, 2 и далее крутило экраны. Опишите пожелания, постараюсь поправить.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

s13 пишет:

Про умолчание, это тот который при включении ? Возврата нет, можно оставить на любом экране, он так и останется. Верхняя и нижняя границы формируются от текущих разбросов давления за сутки или 3 дня соответственно. По умолчанию фьюзы у меги стоят на внутренний генератор 1Mhz, нужно будет переписать если без кварца, то на внутренний 8Mhz, при этом не стоит затирать калибровочный байт в еепром.  Ещё перед трансляцией указать что дуня на 8. Про подсвет не совсем понял, но можно сделать чтобы первое нажатие только включало подсвет без смены экрана, 2 и далее крутило экраны. Опишите пожелания, постараюсь поправить.

Про трансляцию не понял. Т.е вы используете импульсы 1 мгц в качестве образцовых, или на 8 мгц? В первом случае просто оставляем фьюзы заводскими. Во втором снимаем делитель на 8. (Т.е. внутреннее тактирование на 1 или 8 мгц)?  Поясните плиз.

Про калибровочный байт в ЕЕПРОМ не понял тоже. Это же не PIC контроллер.

Про подсветку все хорошо, менять не нужно.

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

Потребление (ардуино нано со светодиодом) 5-8 ма (периодически скачет). Удивила подсветка - всего 3 ма добавляет.

Автомасштабирование штука хорошая. Но вот уже появилась первая линия с момента запуска. Колебание 0,01 мм. рт.ст. А скачок на весь экран. Этакий вертикальный взлет. Т.е. беглого взгляда на дисплей будет недостаточно, придется еще и в цифры вникать. Возможно просто придется привыкнуть к этому.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Не сможет никто подсказать по дисплею?

Сегодня впервые использовал китайский модуль 5110. Только вчера получил. До этого 3310 с самопальными платками. При питании от 5 вольт и даже от лития 4,11 вольт, экран разделен горизонтальными полосами, сгущающейся книзу окраски. И видно будто влияние помех (бегают строчки). Это нормальное поведение таких дисплеев? На 3310 такого не встречал ни разу. При питании от 3,3 от нано, такого не видно. Но это может быть из-за меньшей контрастности.

s13
Offline
Зарегистрирован: 22.05.2016

Если Вы хотите использовать мегу328 на 8 Mhz, то при компиляции скетча нужно выбрать например (mini 3.3v 8mhz 328) для того чтобы временные интервалы формировались правильно. Мега включается на короткий промежуток времени, результирующее потребление там очень мало. Основной потребитель это экран, он жрёт 0.25ma и от них деться некуда (если только не отключать его при простое.) ваши 5ma кушает светодиод и преобразователь usb-com.  Если будете зашивать хекс программатором, то увидите что там есть калибровочный байт, это какраз для внутреннего генератора. Вообще даже нормально откалиброваннный внутренний генератор даёт уход частоты от 7.5 до 8.5Mhz в зависимости от температуры, может страдать обмен с BMP180 и стабильность работы. Советую ставить кварц на 8 или 16, на потребление это не скажется, а на стабильность влияет благотворно, проверено.

s13
Offline
Зарегистрирован: 22.05.2016

Лекс 59 пишет:

Автомасштабирование штука хорошая. Но вот уже появилась первая линия с момента запуска. Колебание 0,01 мм. рт.ст. А скачок на весь экран. Этакий вертикальный взлет. Т.е. беглого взгляда на дисплей будет недостаточно, придется еще и в цифры вникать. Возможно просто придется привыкнуть к этому.

Не переживайте, за сутки он станет вполне себе графиком :)

Дисплеи попадаются разные, под некоторые приходится подобрать контраст (в скетче разкоментировать)

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

s13 пишет:

 Советую ставить кварц на 8 или 16, на потребление это не скажется, а на стабильность влияет благотворно, проверено.

Спасибо за разъяснения. Я уже сняд хекс. На нано 5 в, 16 мгц. Ничего, переделаю.

Вы меня озадачили. У меня  пока мало практики с BMP180. Поэтому уверенно спорить не могу, но сомнение у меня есть. Датчик тактовые импульсы разве не от МК берет? Не заметно на нем собственного генератора. Действительно могут быть проблемы рассогласования? Не сталкивался пока, но я пока от меги без кварца и не работал с этим датчиком.

s13
Offline
Зарегистрирован: 22.05.2016

Лекс 59 пишет:

У меня  пока мало практики с BMP180. Поэтому уверенно спорить не могу, но сомнение у меня есть. Датчик тактовые импульсы разве не от МК берет? Не заметно на нем собственного генератора. Действительно могуть быть проблемы рассогласования? Не сталкивался пока, но я пока от меги без кварца и не работал с этим датчиком.

Зависал барометр без кварца, данные проскакивали неверные с bmp (от этого защита в коде), в общем сами смотрите, может у Вас и без кварца нормально будет работать годами.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

s13 пишет:

Зависал барометр без кварца, данные проскакивали неверные с bmp (от этого защита в коде), в общем сами смотрите, может у Вас и без кварца нормально будет работать годами.

Понял. Спасибо. Я не мазохист, тоже перестрахуюсь.

s13
Offline
Зарегистрирован: 22.05.2016

Всех прошу извинить торопыгу, поправил код в сообщении 263, теперь давление (сотые) выводит правильно, и подсветку подправил чтобы от первого нажатия экран не менялся. Да, совсем забыл - кнопку желательно зашунтировать конденсатором 0.1 от дребезга.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Сорри. Будет несколько длинно.

Впечатления/пожелания. Вариант от s13, это действительно прибор для измерения давления. Заточеный на регистрацию динамики изменения давления. В этом качестве он очень хорош. Почти идеален.

Пожелания (если это не сложно и можете/хотите поправить легко и просто, из серии личных хотелок) Видимо будет удобнее, чтобы первое нажатие на кнопку просто включало подсветку, без смены графиков. Чтобы не приходилось их перелистывать без необходимости.

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

Мои личные размышления. (Это НЕ пожелания). Под мои особенности эксплуатации. Этот прибор требует вдумчивого анализа, как всякий серьезный прибор. Ну есть рост. А насколько? Нужно цифры смотреть. А 2,5 мм за сутки плавно, это много или мало? А кривая будет одинаково крутой и при 0,1 мм и при 10 мм разницы. Несколько поможет трехсуточный график. Но это требует внимания и анализа. Себе я могу такой прибор сделать. А вот своей маме я бы предпочел в варианте Бодрого 2014. Чтобы было видно, значительные колебания за период, или почти на месте стоят. Но маме не нужен тграфик температуры. Он нужен только мне и то на определенный период экспериментов в квартире. И ей бы я сделал его вариант, но без температуры и на всю шкалу (возможно позже сам попытаюсь разобраться и изменить скетч, пока мне это не по зубам). Дилема.

s13
Offline
Зарегистрирован: 22.05.2016

Лекс 59 пишет:

Видимо будет удобнее, чтобы первое нажатие на кнопку просто включало подсветку, без смены графиков. Чтобы не приходилось их перелистывать без необходимости.

 

Уже сделано.

Лекс 59 пишет:

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

Мои личные размышления. (Это НЕ пожелания). Под мои особенности эксплуатации. Этот прибор требует вдумчивого анализа, как всякий серьезный прибор. Ну есть рост. А насколько? Нужно цифры смотреть. А 2,5 мм за сутки плавно, это много или мало? А кривая будет одинаково крутой и при 0,1 мм и при 10 мм разницы. 

По личному наблюдению перепад в 1мм за сутки случался пару раз за полгода, при этом график тоже интересен. Трёхсуточный в любом случае выглядит нормально.

Даже запечатлел на память когда давление почти стояло :)

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

s13 пишет:

По личному наблюдению перепад в 1мм за сутки случался пару раз за полгода, при этом график тоже интересен. Трёхсуточный в любом случае выглядит нормально.

Даже запечатлел на память когда давление почти стояло :)

Видимо у нас разный климат. За период экспериментов с барографом: Было двое суток (не меньше. Просто начало экспериментов) когда держалось 754. Я уж думал датчик мертв. Потом фиксировал, как раз перед переходом на ваш вариант за полсуток с 758 до 743. Цифры специально не регистрировал. Поэтому на единицу-две могу врать. Вот этот перепад чувствовал даже я.

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

Себе, пожалуй сделаю ваш прибор. А там посмотрим. В конце-концов телефоны есть. Созвонимся с мамой. А когда придут заказанные датчики, изображу еще и вариант Бодрого 2014. Дальше практика покажет.

В любом случае спасибо за поправки в скетче и вашу работу. Зря она не пропадет точно.

aruinoVit
Offline
Зарегистрирован: 22.11.2015

Все таки уверен что с автомасштабированием лучше(уже писал что при смене диапазона будет брехня если в память заносить- понял это тестируя прибор: располагая его в пакете и накачивая давление) и для хоть какой то пользы надо 2-3 дня(2 дня делал только потому что считать проще - ну чисто мне в моем конкретном коде), мин - макс написал и понятно как менялось(какие там 1-2 мм - пока отлаживал зимой 3 дня - скакало по 30-40 мм - аж думал что пишу не то в память). А влажность тож полезная штука - можно ее выводить только по кнопке например и отрисовать по другому(температуру линией, влажность заполненной линией например). А вообще от экрана сильно зависит читаемость. Я пока разбирался с экраном от дохлого сименса - починил его - так и осталось на нокии)) Если брать кытайский ыкран - то какой оптимальнее? Подскажите пожалуйста кто разные покупал.

 

s13
Offline
Зарегистрирован: 22.05.2016

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

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Не утерпел. Бросился переделывать вариант bodriy2014 в подходящий для мамы. Т.е. без графика температуры.

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

 if(millis()-tik_tak>1000){//данные оbновляем каждую секунду

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

Необратимых изменений в скетч пока не вносил. Скетч от лишнего (что не буду использовать) пока не чистил.

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

 

[code]
//страничка проэкта http://srukami.inf.ua/barograf_lite_5110.html
#include <Adafruit_GFX.h>//установить
#include <Adafruit_PCD8544.h>//установить
#include <Wire.h>//уже есть в системе
#include <Adafruit_BMP085.h>//установить
//пользовательские настройки!!!#########################################
long obnov_press=1; //частота обновления графика давления в секундах
//long obnov_temp=1; //частота обновления графика температуры в секундах
#define tip_gr_p 0 //тип графика давления 1-столбы,0-линия
//#define tip_gr_t 0 //тип графика температуры 1-столбы,0-линия
#define cont 50 //контрастность
#define lite 0 // подсветка всегда-2,отключить-0,авто-1,3-по тактовой кнопке
#define pin_foto A3 //пин фоторезистора
#define porog_svet 100 //порог срабатывания авто-подсветки
#define j_svet 50 //яркость подсветки от 1 до 253
#define min_p 730 //минимальное давление в вашем регионе, для красивого графика 
#define max_p 770 //максимальное давление в вашем регионе, для красивого графика
#define migaem 0 //мигаем светодиодом на каждую секунду(1-включить,0-отключить)
//пользовательские настройки!!!#########################################
byte mass[83],mass1[83];
byte x_p =0, x_t =0;
int pres;float temp;
Adafruit_PCD8544 display = Adafruit_PCD8544(6, 5, 4, 3, 2);//подключение дисплея
Adafruit_BMP085 bmp;
unsigned long tik_tak =0,tik_press=0,tik_temp=0;
unsigned long vr_pr=obnov_press*1000;
//unsigned long vr_temp=obnov_temp*000;
void setup(){
  bmp.begin(); 
  pinMode(pin_foto,INPUT_PULLUP);pinMode(13,OUTPUT); 
  pinMode(8,OUTPUT);digitalWrite(8,LOW);   //GND LCD
  pinMode(7,OUTPUT);digitalWrite(7,HIGH);  //VCC LCD
  display.begin();display.setContrast(cont);
  display.display(); display.setTextSize(1);
  display.setTextColor(BLACK);display.display();}
void loop() { 
  if(lite==0){pinMode(9,INPUT);}  //подсветка выключена LCD
  if(lite==1){
    if(analogRead(pin_foto)>porog_svet){pinMode(9,OUTPUT);analogWrite(9,255-j_svet);} //подсветка авто LCD
    if(analogRead(pin_foto)<porog_svet){pinMode(9,INPUT);}}  
  if(lite==2){pinMode(9,OUTPUT);digitalWrite(9,LOW);}//подсветка всегда включена LCD
  if(lite==3){
    if(analogRead(pin_foto)<porog_svet){pinMode(8,OUTPUT);analogWrite(9,255-j_svet);} //подсветка по нажатию кнопки
    if(analogRead(pin_foto)>porog_svet){pinMode(8,INPUT);digitalWrite(9,HIGH);}} 
  if(millis()-tik_tak>1000){//данные оbновляем каждую секунду
    if(migaem==1){digitalWrite(13,HIGH);delay(100);digitalWrite(13,LOW);}
    tik_tak=millis();pres=bmp.readPressure()/133;temp=bmp.readTemperature();
    display.clearDisplay();    
    display.drawLine(83,10,83, 47, BLACK);
    display.drawLine(0,10,0, 47, BLACK);display.drawLine(0,47,83, 47, BLACK);
    display.drawLine(0,10,83, 10, BLACK);
    display.setCursor(0,0);display.print(pres);display.print("mm");
   // display.setCursor(0,10);display.print(pres);display.print("mm");
    display.setCursor(42,0);display.print(temp);display.print("C");
   // display.setCursor(42,10);display.print(temp);display.print("C");
    for(byte i=0;i<83;i++){
      if(tip_gr_p==1){display.drawLine(i,47,i, 47-mass[i], BLACK);}//if(tip_gr_t==1){display.drawLine(i+42,47,i+42, 47-mass1[i], BLACK);}
      if(tip_gr_p==0){display.drawPixel(i, 47-mass[i], BLACK);}//if(tip_gr_t==0){display.drawPixel(i+42, 47-mass1[i], BLACK);}}
      display.display();} 
    if(millis()-tik_press>vr_pr){
      tik_press=millis();mass[x_p]=(pres-min_p)/(64.0/(max_p-min_p));
      if(x_p<83){x_p++;}
      if(x_p==83){for(byte i=0;i<83;i++){mass[i]=mass[i+1];}}} 
  }
      //if(millis()-tik_temp>vr_temp){
      //tik_temp=millis();mass1[x_t]=int(temp)/2;
      //if(x_t<83){x_t++;}
      //if(x_t==83){for(byte i=0;i<83;i++){mass1[i]=mass1[i+1];}}}
}    
[/code]

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 Привет!

Напишите что хотите получить на выходе, я подправлю и нипишу как я это сделал.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

Лекс 59 Привет!

Напиши что хечешь получить на выходе, я подправлю и нипишу как я это сделал.

Мне уже стыдно просить. Это я тут праздношатающийся пенсионер, вам приходится на жизнь зарабатывать.

Но не буду кокетничать.

На основе последнего скетча.

Выбор диапазона - нужно. График температуры- нет. Значение температуры - да.

Надписи -нет. Значения давления и температуры - в верхнюю строчку. На всю оставшуюся область рамку для графика.

График линия и точка, выбор.

Фоторезистор - на ваше усмотрение. Я использовать не буду.

Что интересно в переделаном варианте, рамка и надписи не мигают. Мигает только линия графика.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:
....Мне уже стыдно просить. Это я тут праздношатающийся пенсионер, вам приходится на жизнь зарабатывать.....

Не парьтесь, мне если не интересно или не могу так и скажу.

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

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Пока прибор находился у меня в корпусе, выяснил такую вещь. Корпус выполняет роль термостата, несмотря на изоляцию и вентиляцию. Т.е. он перестает отображать динамику температуры. Разница в показаниях не столь велика, меньше 2 градусов, но показания температуры меняются слабо. Т.е. некоторая доля истины в утверждениях на форуме есть.

Это вполне можно решить конструктивно - BMP180 вне корпуса. Либо в нише. Или термоизоляцией прикрутить в медной пластинке, которую можно вывести за пределы корпуса.

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

Для bodriy2014. "Ты" "Вы" от людей, к которым я отношусь с уважением, тем более на техническом форуме, я воспринимаю спокойно. Не заморачивайтесь этим. Пишите как привыкли. А моя привычка выкать - так сложилось, всегда держу дистанцию. От вас приму любое обращение без напряга.

А фото приложил с трудом. Только после редактора и обрезки. Хотя снимаю и так на минимальном разрешении камеры. Делать это каждый раз лень.

donPavlensio
Offline
Зарегистрирован: 27.05.2016

Лекс 59 пишет:

Это вполне можно решить конструктивно - BMP180 вне корпуса. Либо в нише. Или термоизоляцией прикрутить в медной пластинке, которую можно вывести за пределы корпуса.

Только имейте ввиду, что bmp180 чувствителен к яркому освещению, под прямым солнечным светом показания уползают в невообразимые дали. Так что размещение вне корпуса, пожалуй, не лучший вариант.

 

 

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59

Новая версия доступна на страничке , пробуйте отпишитесь.

Ниже по шагам пишу что делал,

-переделал надписи сверху

-переделал линии рамки(все подписал чтоб было понятно)

-убрал отрисовку массива температуры(массив пока не убирал может пригодиться)

-увеличил размер массива давления чтоб хватило на ширину дисплея

-расширил отрисовку массива давления на весь дисплей

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

-добавил в настройки переключение по давлению на сотые и без них.

-проверил и сфоткал.

Это кстати я пальцем нажимал.))

 

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

donPavlensio пишет:

Только имейте ввиду, что bmp180 чувствителен к яркому освещению, под прямым солнечным светом показания уползают в невообразимые дали. Так что размещение вне корпуса, пожалуй, не лучший вариант.

Да, конечно. Любой термодатчик на солнце будет разогреваться. Физика в голом виде. И любой термометр нужно прятать от солнца. ВМР180 не исключение.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

Лекс 59

Новая версия доступна на страничке , пробуйте отпишитесь.

Спасибо. Пробую. Отпишусь.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

У метеорологов есть много нюансов на счет установки датчиков они могут и от солнца врать и от ветра скачет давления,

 многие кто делают серьезные замеры уделяют этому не меньше сил чем написанию ПО

a5021
Offline
Зарегистрирован: 07.07.2013

donPavlensio пишет:
Только имейте ввиду, что bmp180 чувствителен к яркому освещению, под прямым солнечным светом показания уползают в невообразимые дали. Так что размещение вне корпуса, пожалуй, не лучший вариант.

Встречал замечания о светочувствительности bmp180, но у меня этот сенсор, смотрящий в голом виде на улицу (но без прямого солнечного засвета), показывает практически то же самое, что и находящиеся рядом Si7021 и DS18B20. Насчет саморазогрева и завышения показаний температуры, не представляю, как с его потребляемой мощностью можно хоть чего-нибудь разогреть.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014

Первое впечатление очень хорошее. Для себя пожалуй тоже остановлюсь на таком.

Внес небольшие изменения. Изменил диапазон, тем более, что летом давление будет ниже. Убрал букву "С" и сместил показания термометра на 5 точек. Пробел, короче, сделал.

Сотые включил. Они помогают определить работает-завис, без мигания.

Сейчас немного постоит так. Полсуток-сутки и в корпус снова.

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

Спасибо.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 В тотале есть функция сравнить содержимое двух файлов, отлично подсвечивает различия.

Там асом быть не нужно, тем более чем больше постигаешь-тем больше понимаешь что дурак!)

donPavlensio
Offline
Зарегистрирован: 27.05.2016

Лекс 59 пишет:

Да, конечно. Любой термодатчик на солнце будет разогреваться. Физика в голом виде. 

Нет, там не по температуре, а по давлению начинает врать. И не только от Солнца, вообще от яркого света.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

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

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

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

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

А от чего питаете? если от АКБ или батарейки, нужно добавить сон чтоб заряда хватало на долго.

Если от сети то выигрыш ~10мА не важен.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

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

А от чего питаете? если от АКБ или батарейки, нужно добавить сон чтоб заряда хватало на долго.

Если от сети то выигрыш ~10мА не важен.

Пока от сети. И данный БП вряд ли станет штатным. Таких у меня не так много. Про батарейное я думал. Но это несколько позже. Как я понимаю проблема не столь проста. Перевести в ДИП - не проблема. На ардуино один светодиод уже несколько ма. А сдувать его с ардуинок рука не поднимается. Каждому свое.

Если вас всерьез заинтересует и вы переделаете программу на засыпание и т.д. (на минимальное энергопотребление) - будет неплохо. Я могу нарисовать схему в ДИПе и даже печатку тиснуть (хотя там и макетки зауши),  скажем под ту-же коробочку. Она хоть и великовата пока, но с как будет с батареями - ХЗ. И в любом случае она стандартная.

Из возможных вариантов питания я считаю целесообразным от 3 мизинчиков. Тогда и хватит надолго и плату согласования для дисплея делать не нужно.

Пока поставил период обновления 1000, а там посмотрим.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

Пока от сети. И данный БП вряд ли станет штатным. Таких у меня не так много. Про батарейное я думал. Но это несколько позже. Как я понимаю проблема не столь проста. Перевести в ДИП - не проблема. На ардуино один светодиод уже несколько ма. А сдувать его с ардуинок рука не поднимается. Каждому свое.

Если вас всерьез заинтересует и вы переделаете программу на засыпание и т.д. - будет неплохо. Я могу нарисовать схему в ДИПе и даже печатку тиснуть (хотя там и макетки зауши),  скажем под ту-же коробочку. Она хоть и великовата пока, но с как будет с батареями - ХЗ. И в любом случае она стандартная.

Пока поставил период обновления 1000, а там посмотрим.

-на ардуинах светодиод никогда не снимаю, просто тот резистор что к нему идет отпаиваю и поворачиваю на 90градусов, он остается на плате и не теряется, но уже не питает диод.

-сделать сон не проблема, вы главное определитесь какой прибор в корпусе оставите.

-на печатку такое простецкое не вижу смысла.

-литиевой 1-й банки или трех пальчиковых батареек для питания хватит вполне.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

-сделать сон не проблема, вы главное определитесь какой прибор в корпусе оставите.

-на печатку такое простецкое не вижу смысла.

-литиевой 1-й банки или трех пальчиковых батареек для питания хватит вполне.

Окей. Несколько дней, минимум, практики. Мало ли что и как. Отпишусь.

А с литием. Я буду вряд-ли. Это сейчас я помню и могу повозиться и аккумы доступны. Что будет через несколько лет?

Сорри за оффтоп. Небольшая история. Несколько лет назад в гости к знакомому. На двери изнутри целая система. С двигателями, реечными передачами, рычагами. Под магнитный замок.

-А почему не используешь?

-Резервный аккумулятор сдох.

-Давно?

-Пару лет назад...

Когда я снова был у него недавно, системы на дверях уже небыло.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

.....

Сорри за оффтоп. Небольшая история. Несколько лет назад в гости к знакомому. На двери изнутри целая система. С двигателями, реечными передачами, рычагами. Под магнитный замок.

-А почему не используешь?

-Резервный аккумулятор сдох.

-Давно?

-Пару лет назад...

Когда я снова был у него недавно, системы на дверях уже небыло.

Улыбнуло!

Я когда-то был в МСК госторбайтером (еще по студенческой бедности) и такие замки приходилось ставить))))

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

А он делал сам. Для себя. В условиях мощного тогда завода. Рукастый весьма мужик. Там все было в высшей степени продумано и профессионально...

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