ARDUINO Часы-метеостанция. Обсуждение проекта

re2p

✩✩✩✩✩✩✩
24 Ноя 2019
7
0
Кто знает? Дата и время с кнопки как то устанавливаются??
 

boris-81

✩✩✩✩✩✩✩
4 Янв 2020
1
0
Добрый день.
Столкнулся с такой проблемой:
Если LED_MODE 1 // тип RGB светодиода: 0 - главный катод, 1 - главный анод то вроде бы работает, только не работает светодиод,
т.к. унего общий катод.
А если LED_MODE 0 // тип RGB светодиода: 0 - главный катод, 1 - главный анод после загрузки синий экран станции 2004 и все,
светодиод сначала что-то показывал, потом перестал ))
Если #define DEBUG 1 // вывод на дисплей лог инициализации датчиков при запуске. Для дисплея 1602 не работает! Но дублируется через порт!
не видит ВМР280, а при загрузке, все работает.

Подскажите куда копать?
 

Igor

✩✩✩✩✩✩✩
29 Дек 2018
3
0
Всем привет.

Я тоже собрал похожее. Но у меня очень большая проблема с показателями температуры и влажности. Просто говоря они очень завышены. Датчик в корпусе практически возле задней панели, вся задняя панель в дырках, но через 5-10 мин после включения температура вырастает до +3-4 градусов. Влажность падает.

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

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

Опрос датчика раз в 2 минуты

Если собрать все на бред борде - работает более менее ок
 

Вложения

AlexBer

★✩✩✩✩✩✩
2 Апр 2019
13
21
Привет!
Я просто разделил корпус Т-образной перегородкой на 3 отсека: дисплей + плата Ардуино с обвеской + светодиод (основное тепловыделение), сенсор BME280 (вынесен от стенки на тонкой шпильке), сенсор СО2. Каждый отсек имеет свои довольно большие вентиляционные отверстия снизу и сбоку. Дырки с проводами загерметизированы. При печати корпуса плотность PLA выбрал небольшую, поэтому стенки достаточно теплоизолирующие. Температуру - конечно примерно - показывает вроде корректную. Совсем точно не проверял.
 

Lord Fire

✩✩✩✩✩✩✩
20 Сен 2019
6
6
коллеги, всем привет!
поразила меня неизвестная науке болезнь: пришли фоторезисторы, всё запаял, но яркость от освещённости не меняется.фоторезистор сопротивление меняет, уровень напряжения на выводе А3, тоже меняется, на d10- ничего. самое чудо начинается при нажатии на сенсорную кнопку: подсветка дисплея уменьшается до указанного значения (я задал 15). через 2-3 секунды, снова дисплей светится на полную (я задал 150). использую прошивку vic2007ch (но у него только шрифт отличается вроде...).
где можно пошарить, что можно покрутить?
 

Серый

★✩✩✩✩✩✩
24 Дек 2019
18
36
Уважаемые коллеги! Всем, у кого проблемы с датчиком СО2, рекомендую сделать следующее:
1. Убедиться, что датчик "дышит" - примерно раз в 6-8-10 секунд внутри датчика загорается красный светодиод (вероятно, лазерный). Его можно разглядеть через нижнее окно. Если датчик не подаёт признаков жизни - проверяйте схему, ищите косяк подключения земли и питания. Если питание и земля подключены правильно, отключите все остальные провода. Если огонька нет - значит всё, "Бобик сдох".
2. Если датчик живой, проверьте подключение линий TX-RX, иногда их путают и меняют местами.
3. Если п1 и п2 положительные, то переделайте скетч таким образом: В функции setup() найдите кусок, отвечающий за инициализацию датчика, и замените его на такой:
C++:
  lcd.print(F("MHZ-19... "));       // датчик СО2
  Serial.print(F("MHZ-19... "));
  mhz19.begin(MHZ_TX, MHZ_RX);
  mhz19.setAutoCalibration(false);  // отключить автокалибровку
  mhz19.getStatus();                // первый запрос в любом случае возвращает -1
  delay(1000);
  for (byte i=0;i<10;i++) {
    if (mhz19.getStatus() == 0) break;
    delay(1000);                    // даём датчику прогреться, и так до 10 раз
  }
                     
  if (mhz19.getStatus() == 0) {     // прочитать статус датчика СО2
    lcd.print(F("OK"));
    Serial.println(F("OK"));
  } else {
    lcd.print(F("ERROR"));
    Serial.println(F("ERROR"));
    status = false;
  }
Иногда датчику не хватает одной попытки, и он раскочегаривается 3-4 секунды, прежде чем начать выдавать что-то вменяемое.
 
Изменено:

Серый

★✩✩✩✩✩✩
24 Дек 2019
18
36
Делюсь своим вариантом отображения цифр. Последний символ (LMB) не используется, сейчас он совпадает с предыдущим (UMB) его можно заменить и использовать по своему усмотрению. Последний параметр функции drawDig(.... boolean clean) - очищать колонку после цифры, или нет. Для цифр часов и десятков минут - true, для единиц минут - false). Добавил для того, чтобы можно было выводить цифры не очищая предварительно весь экран. В принципе можно во всех вызовах поставить false, в стандартной версии скетча сработает нормально.

C++:
// символы для больших цифр
uint8_t LT[8] = {0b00111,  0b01111,  0b11111,  0b11111,  0b11111,  0b11111,  0b11111,  0b11111};
uint8_t UB[8] = {0b11111,  0b11111,  0b00000,  0b00000,  0b00000,  0b00000,  0b00000,  0b00000};
uint8_t RT[8] = {0b11100,  0b11110,  0b11111,  0b11111,  0b11111,  0b11111,  0b11111,  0b11111};
uint8_t LL[8] = {0b11111,  0b11111,  0b11111,  0b11111,  0b11111,  0b11111,  0b01111,  0b00111};
uint8_t LB[8] = {0b00000,  0b00000,  0b00000,  0b00000,  0b00000,  0b00000,  0b11111,  0b11111};
uint8_t LR[8] = {0b11111,  0b11111,  0b11111,  0b11111,  0b11111,  0b11111,  0b11110,  0b11100};
uint8_t UMB[8] = {0b11111,  0b11111,  0b00000,  0b00000,  0b00000,  0b00000,  0b11111,  0b11111};
uint8_t LMB[8] = {0b11111,  0b11111,  0b00000,  0b00000,  0b00000,  0b00000,  0b11111,  0b11111};

// ****************************************************************************************
// * Рисует большую цифру для часов/минут                                                 *
// ****************************************************************************************
void drawDig(byte dig, byte x, byte y, boolean clean) {

  char s1[4] = { 32, 32, 32, 32 };
  char s2[4] = { 32, 32, 32, 32 };
  byte i;
  byte cnt = 3;
  
  if (clean) cnt = 4;
  
  switch (dig) {
    case 0:
      s1[0] = 0;
      s1[1] = 1;
      s1[2] = 2;
      s2[0] = 3;
      s2[1] = 4;
      s2[2] = 5;
      break;
    case 1:
      s1[1] = 0;
      s2[1] = 255;
      break;
    case 2:
      s1[0] = 1;
      s1[1] = 1;
      s1[2] = 2;
      s2[0] = 0;
      s2[1] = 7;
      s2[2] = 7;
      break;
    case 3:
      s1[0] = 1;
      s1[1] = 6;
      s1[2] = 5;
      s2[0] = 4;
      s2[1] = 4;
      s2[2] = 5;
      break;
    case 4:
      s1[0] = 0;
      s1[2] = 255;
      s2[0] = 1;
      s2[1] = 1;
      s2[2] = 255;
      break;
    case 5:
      s1[0] = 255;
      s1[1] = 6;
      s1[2] = 6;
      s2[0] = 4;
      s2[1] = 4;
      s2[2] = 5;
      break;
    case 6:
      s1[0] = 0;
      s1[1] = 6;
      s1[2] = 6;
      s2[0] = 3;
      s2[1] = 4;
      s2[2] = 5;
      break;
    case 7:
      s1[0] = 1;
      s1[1] = 1;
      s1[2] = 5;
      s2[1] = 0;
      break;
    case 8:
      s1[0] = 0;
      s1[0] = 3;
      s1[1] = 6;
      s1[2] = 2;
      s1[2] = 5;
      s2[0] = 3;
      s2[1] = 4;
      s2[2] = 5;
      break;
    case 9:
      s1[0] = 0;
      s1[1] = 1;
      s1[2] = 2;
      s2[0] = 7;
      s2[1] = 7;
      s2[2] = 5;
      break;
    case 10:
      break;
  }

  lcd.setCursor(x, y); 
  for (i = 0; i<cnt; i++) lcd.write(s1);
  lcd.setCursor(x, y + 1);
  for (i = 0; i<cnt; i++) lcd.write(s2);  
}
 
Изменено:

Lord Fire

✩✩✩✩✩✩✩
20 Сен 2019
6
6
коллеги, всем привет!
поразила меня неизвестная науке болезнь: пришли фоторезисторы, всё запаял, но яркость от освещённости не меняется.фоторезистор сопротивление меняет, уровень напряжения на выводе А3, тоже меняется, на d10- ничего. самое чудо начинается при нажатии на сенсорную кнопку: подсветка дисплея уменьшается до указанного значения (я задал 15). через 2-3 секунды, снова дисплей светится на полную (я задал 150). использую прошивку vic2007ch (но у него только шрифт отличается вроде...).
где можно пошарить, что можно покрутить?
Всем привет и извинения!!! Простая ошибка в монтаже: без очков запаял на А2 вместо А3....
 

FisherMax

✩✩✩✩✩✩✩
30 Авг 2019
1
0
Первым делом перепиливаем соединение первого пина между платой дисплея и чёрненькой микросхемой айтуси (указал на картинке, это минусовой контакт подсветки дисплея). Дальше спаиваем все компоненты как на картинке. Мосфет я использовал IRF3205, но подойдут любые, которые размыкаются от 5V.
А зачем нужен полевик и скальпель, если всё решается кодом?
 

Вложения

Nлья

★★✩✩✩✩✩
19 Мар 2019
11
54
А зачем нужен полевик и скальпель, если всё решается кодом?
В свое оправдание могу сказать, что данный подход с датчиком освещенности был реализован еще за месяц до того, как аналогичную штуку сделал Алекс Гайвер в своем очередном обновлении... после... на его примере, когда я увидел, что можно обойтись без полевика, самому было смешно )))) Сказывается моя неопытность...
 
  • Лойс +1
Реакции: FisherMax

Dadza

★★✩✩✩✩✩
29 Окт 2019
51
66
Минск
Всем привет. Правильно ли я понимаю, что у датчика MH Z19 целых 2 сенсора? Получается, что надо как-то предусмотреть в корпусе наличие двух отверстий под эти сенсоры?
2049.png
 

tulyak

✩✩✩✩✩✩✩
7 Окт 2019
9
6
Сенсорные кнопки, эти красные, с мрамором не работаю кстати. Весьма удивлен был. Пришлось простую кнопку ставить. хотя простые сенсоры в черных коробочках работают - включают свет и юсб порт. А можно ли сенсор удара вместо кнопки? легкими постукиваниями управлять?
IMG_20191207_154143-1.jpgIMG_20191214_061245-1.jpgIMG_20191214_061511-1.jpgIMG_20191207_154042-1.jpg
Есть несколько вопросов. Можно ли добавить пару датчиков с UART? Чисто на отображение. Но с условием включения и анализа своейсреды с каждого примерно раз в полчаса для экономии ресурса датчиков. Это PMS5003 и датчик формальдегида. И можно ли сделать синхронизацию часов с web сервера и публикацию данных с датчиков на локальный http сервер?
 

dimonick

★✩✩✩✩✩✩
2 Янв 2020
20
20
Kyiv
@tulyak, не вижу каких либо трудностей что по замене на датчик удара, что по подключению других датчиков, главное чтоб пинов хватило...
 

Серый

★✩✩✩✩✩✩
24 Дек 2019
18
36
Всем привет. Правильно ли я понимаю, что у датчика MH Z19 целых 2 сенсора? Получается, что надо как-то предусмотреть в корпусе наличие двух отверстий под эти сенсоры?
Посмотреть вложение 7927
Неправильно. Это входное и выходное отверстие. Датчик нужно размещать так, чтобы воздух мог свободно проходить сквозь датчик. Например, если поместить MHZ в нижней части корпуса, а остальную электронику в верхней, и сделать в корпусе вентиляционные отверстия снизу и сверху, то за счёт нагрева воздуха от электроники внутри корпуса будет постоянная "тяга" снизу вверх. Датчик лучше развернуть верхним (по картинке) окном вниз.
 

Denvor

✩✩✩✩✩✩✩
5 Дек 2018
10
0
Отличный проект! тоже собираю. Подключил ардуино, кнопку, экран и RTC. При включении на пару секунд высвечиваются прямоугольники во всех сегментах строк 1 и 3, через 2 сек - вообще во всех сегментах. Что может быть, с чего начать диагностику?
 

dimonick

★✩✩✩✩✩✩
2 Янв 2020
20
20
Kyiv
Отличный проект! тоже собираю. Подключил ардуино, кнопку, экран и RTC. При включении на пару секунд высвечиваются прямоугольники во всех сегментах строк 1 и 3, через 2 сек - вообще во всех сегментах. Что может быть, с чего начать диагностику?
Сзади на экране есть крутила контраста, включи ардуинку и покрути ее до видимости
 

Dadza

★★✩✩✩✩✩
29 Окт 2019
51
66
Минск
@Серый, какое отверстие в датчике является входным?
Я правильно понял, что его надо размещать подальше от электроники, что бы не искажались значения датчика от тепла электроники?
 

dimonick

★✩✩✩✩✩✩
2 Янв 2020
20
20
Kyiv
это я сразу подкрутил - включение сегментов видно, в каждом сегменте отображается прямоугольник
Проверить корректность подключения дисплея. Адрес дисплея узнавали или просто использовали какой был в прошивке?
 

Серый

★✩✩✩✩✩✩
24 Дек 2019
18
36
@Серый, какое отверстие в датчике является входным?
Я правильно понял, что его надо размещать подальше от электроники, что бы не искажались значения датчика от тепла электроники?
Этому датчику в целом пофиг на температуру, его можно ставить в любом месте. Главное, чтобы было устойчивое естественное движение воздуха сквозь него. Я в своей конструкции ставил вниз, поэтому так и написал. BME280 обязательно нужно ставить вниз или в отдельный отсек, чтобы не врал.

Вот мой вариант компоновки. Без претензии на идеал, просто для примера. Справа MH-Z19B, чуть левее центра - BME280. Напротив датчиков в нижней стенке корпуса отверстия для входа воздуха, в верхней - для выхода. Позади MH-Z есть свободное пространство, чтобы не перекрывать выходное окно. Входное - то, которое получается снизу, если держать датчик так, как на картинке. Хотя, имхо разницы никакой, где вход, а где выход, главное чтобы воздух проходил.
P_20191223_124422.jpg
 
  • Лойс +1
Реакции: Dadza

Denvor

✩✩✩✩✩✩✩
5 Дек 2018
10
0
Проверить корректность подключения дисплея. Адрес дисплея узнавали или просто использовали какой был в прошивке?
Соединения проверил - вроде все нормально. Адреса попробовал и 0x27 (симптомы выше) и 0x3f - при этом срабатывает только первая фаза - отображаются черные сегменты в 1 и 3-ей строке. Какие еще могут быть адреса? Может оторвать все и отладить только дисплей и ардуино?

PS загрузил тестовую прошивку - надпись отобразилась. То есть, сама ардуина, дисплей - рабочие. Адрес верный. Попробовать другие варианты прошивки?
PPS Частично заработало. надо было запустить дебаг и почитать :( В общем, подстроил адрес 280 и заработало, но 280-й данных не дает. Видел здесь пару постов о такой же проблеме, но вроде никто не отписал, что решение нашлось. То есть, эта модификация датчика нормально работает на отдельном скетче, но выдает ошибку в скетче метеостанции. Похоже, или датчик менять или библиотеку
 
Изменено:

Denvor

✩✩✩✩✩✩✩
5 Дек 2018
10
0
Добрый день, не хочет работать датчик давления. Первым использовал 180, потом 280. менял адреса в библиотеке на 77 или на 76. Все равно при отладке пишет ошибка. Помогите. Еще заметил, что меняешь адрес на 76, не запускается. датчик-GY-BM E/P 280, но потом получилось наоборот, 77 не запускается, 76 запускается, датчики рабочие, проверил через FRprog. Я так понимаю, что вряд ли кто поможет. Может есть возможность переделать на 180 датчик?
Удалось решить?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Увидел пост выше и не понял, что значит менял адреса ? Ардуина ИДЕ для i2c имеет в базе сканер адресов, т.е. берете плату с подключением по i2c и тут же ее сканирует - записываете адрес и только потом приступаете к изучению самой платы посредством скетчей с примерами