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

Собрал метеостанцию, но показания с датчика СО2 постоянно 5000, при тесте датчики показывают все ОК. Отсоединяю датчик показания меняются на -1. Подскажите что не так ,может сам датчик?
 

Комментарии

Mikhail_ptz

✩✩✩✩✩✩✩
29 Янв 2019
6
0
При включении тестируются датчики, если с ними все ОК, показывает на экране. При переходе в основной экран, показания датчика СО постоянно 5000
 

Вложения

Александр Симонов

★★★✩✩✩✩
2 Авг 2018
489
126
410-430 при включении это похоже нормально. У меня также. Пробовал мерять СО2 на улице, может у тебя правда дома 5000 ppm?
 

Александр Симонов

★★★✩✩✩✩
2 Авг 2018
489
126
В этих сенсорах есть автокалибровка, которая подстраивается каждые 24 часа. Попробуй оставить сенсор (или всю метеостанцию) включенной на день-два.

Дополню: либо поискать в даташите на сенсор комманду принудительной калибровки, вынести датчик на улицу и перекалибровать его.
 

alex-anp

✩✩✩✩✩✩✩
28 Фев 2019
7
2
Всем доброго времени суток! Прошу помощи в дополнении проекта Алекса https://alexgyver.ru/meteoclock/ часы-метеостанция с контролем СО2. Нужно в скетч добавить выход на реле включения вентилятора при загорании на выбор либо желтого либо красного цвета светодиода.
Вот код по такой доработке. Нужно добавить инициализацию порта для управления реле. И заменить функцию setLED. Собственно в нее добавлено 3 строчки, включения и выключения реле, в зависимости от цвета диода.


C++:
// Пины
// Пин подключения реле
#define RELE_PIN 10


void setLED(byte color) {
  // сначала всё выключаем
  if (!LED_MODE) {
    analogWrite(LED_R, 0);
    analogWrite(LED_G, 0);
    analogWrite(LED_B, 0);
  } else {
    analogWrite(LED_R, 255);
    analogWrite(LED_G, 255);
    analogWrite(LED_B, 255);
  }
  switch (color) {    // 0 выкл, 1 красный, 2 зелёный, 3 синий (или жёлтый)
    case 0:
      break;
    case 1:
          analogWrite(LED_R, LED_ON);
          // Включаем реле
          digitalWrite(RELE_PIN, HIGH);
      break;
    case 2:
          analogWrite(LED_G, LED_ON);
          // Выключаем реле
          digitalWrite(RELE_PIN, LOW);
      break;
    case 3:
      if (!BLUE_YELLOW) analogWrite(LED_B, LED_ON);
      else {
        analogWrite(LED_R, LED_ON - 50);    // чутка уменьшаем красный
        analogWrite(LED_G, LED_ON);
      }
      // Включаем реле
      digitalWrite(RELE_PIN, HIGH);
      break;
  }
}
 
  • Лойс +1
Реакции: Znacki.ru

J-si

✩✩✩✩✩✩✩
2 Мар 2019
1
0
Подскажите пожалуйста, как отключить автокалибровку Mh-z19b,
 

alex-anp

✩✩✩✩✩✩✩
28 Фев 2019
7
2
Доработка прошивки для выключения подсветки на ночь.

C-like:
// ------------------------- НАСТРОЙКИ --------------------
// Час включения и выключения подсветки
#define BL_START 7
#define BL_STOP 1


// И исправленная функция отрисовки часов
// в конце добавил управление подсветкой
void drawClock(byte hours, byte minutes, byte x, byte y, boolean dotState) {
  // чисти чисти!
  lcd.setCursor(x, y);
  lcd.print("               ");
  lcd.setCursor(x, y + 1);
  lcd.print("               ");

  //if (hours > 23 || minutes > 59) return;
  if (hours / 10 == 0)
    drawDig(10, x, y);
  else
    drawDig(hours / 10, x, y);

  drawDig(hours % 10, x + 4, y);
  // тут должны быть точки. Отдельной функцией
  drawDig(minutes / 10, x + 8, y);
  drawDig(minutes % 10, x + 12, y);

  // Управление подсветкой
  // Для сов, которые засыпают после полуночи
  #if (BL_STOP < BL_START)
    if (BL_STOP <= hours && hours < BL_START) lcd.noBacklight();
      else lcd.backlight();
  #else
    if (BL_START <= hours && hours < BL_STOP) lcd.backlight();
      else lcd.noBacklight();
  #endif

}
Еще думаю можно подтянуть дополнительное питание подсветки через резистор. Тогда она будет не выключаться а гаснуть до слабого свечения.
 
Последнее редактирование:

alex-anp

✩✩✩✩✩✩✩
28 Фев 2019
7
2
Есть вопросик, хочу сделать возможность корректировки времени без перепрошивки ардуины. Самый простой способ, на мой взгляд - это командами через монитор компорта. Типа H15 [Ентер] M33 [Ентер].

C-like:
  if (Serial.available() > 0) {
      String buf_txt = Serial.readString();
      
      if (buf_txt.substring(0,1) == "H"){
        Serial.println("Set Hours -> "+buf_txt.substring(1,3));
      }

      if (buf_txt.substring(0,1) == "M"){
        Serial.println("Set Minute -> "+buf_txt.substring(1,3));
      }

  }
Собственно не смог найти, в каком формате надо подавать значения в функцию DateTime()?
 
Последнее редактирование:

NikitaZP

✩✩✩✩✩✩✩
5 Мар 2019
1
0
Привет, нужна помощь) Экран дисплея ничего не показывает, тупо горит подсветка, адрес менял...
С чем это может быть связано?
 

alex-anp

✩✩✩✩✩✩✩
28 Фев 2019
7
2
Привет, нужна помощь) Экран дисплея ничего не показывает, тупо горит подсветка, адрес менял...
С чем это может быть связано?
Там с обратной стороны крутилка есть, ее надо покрутить потихоньку, пока не появятся циферки и станут максимально контрастными.
 

upixz

✩✩✩✩✩✩✩
9 Мар 2019
1
0
вчера сделал. все здорово, спасибо., вопрос а можно сделать регулировку яркости дисплея? по времени а то ночью слишком яркий
 

alex-anp

✩✩✩✩✩✩✩
28 Фев 2019
7
2
вчера сделал. все здорово, спасибо., вопрос а можно сделать регулировку яркости дисплея? по времени а то ночью слишком яркий
Можно, я сделал. Для управления подсветкой нужно добавить еще один проводок для управление с помощью ШИМ сигнала с ардуино.
Провод пускается со свободного пина с ШИМ (НАПРИМЕР 10) на верхний контакт перемычки на дисплее (перемычку снять).
Ну и прошивку подкорректировать.
Мой вариант прошивки на гитхабе - https://github.com/alex-anp/alexgyver_meteo_clock
 
  • Лойс +1
Реакции: THIEF60

rock

★✩✩✩✩✩✩
20 Мар 2019
10
12
Мой вариант корпуса:

3.JPG
2.JPG


Датчики вынесены отдельно. Разъём питания использовал DC5.5x2.1mm, ну потому, что БП у меня халява с такими штекерами :)

STL для повторения или для основы своего варианта: https://yadi.sk/d/2JY00BJpWVtLKw

Ну или тут:
Зы. Рамку и подставку можно напечатать отличным от корпуса цветом, будет отлично смотреться ;)
 

Вложения

Vedro401

✩✩✩✩✩✩✩
26 Мар 2019
5
0
Приет. У меня возникли некоторые трудности и надеюсь тут мне помогут их решить.

В проекте меня в основном интересовал контроль уровня СО2 и я заказал MH-Z19, но когда он пришел мне не удалось получить с него данные.
Я заливал скетч из примеров библиотеки (пробовал и MHZ19_getppm и MHZ19_zerocalib ) но ардуина не могла получить с него ответ

error: can't get MH-Z19 response.
MH-Z19 now warming up... status:error: can't get MH-Z19 response.
-1

Думал может плохой контакт, прозванивал и все прозванивается.
Номера пинов не напутал. (const int rx_pin = 2; const int tx_pin = 3; )
Сам датчик подмигивает красным светодиодом через белую пленку.

Может кто-то знает в чем может быть проблема?

photo_2019-03-26_10-01-59.jpg
 

rock

★✩✩✩✩✩✩
20 Мар 2019
10
12
tx -> rx и rx->tx

Это "приём" и "передача". Если приёмник соединить с приёмником, а передатчик с передатчиком, то какая будет связь? )
 

Vedro401

✩✩✩✩✩✩✩
26 Мар 2019
5
0
tx -> rx и rx->tx

Это "приём" и "передача". Если приёмник соединить с приёмником, а передатчик с передатчиком, то какая будет связь? )
Понял, спасибо. Это выглядит для меня немного контринтуитивно но я только начинаю, буду знать)

Но теперь он застрял в состоянии

MH-Z19 now warming up... status:0

Висит в нем уже минут 20. Я опять делаю что-то не так?
 

rock

★✩✩✩✩✩✩
20 Мар 2019
10
12
Проблема с питанием кажется. Как питаешь датчик? Попробуй дать внешнее 5В питание датчику. Или просто пересобери схему
 

Vedro401

✩✩✩✩✩✩✩
26 Мар 2019
5
0
Проблема с питанием кажется. Как питаешь датчик? Попробуй дать внешнее 5В питание датчику. Или просто пересобери схему
Питал от ардуины, сейчас подал внещние 5в и теперь выдает

MH-Z19 now warming up... status:-1

Уже без can't get MH-Z19 response.

photo_2019-03-27_19-56-16.jpg
 

Vedro401

✩✩✩✩✩✩✩
26 Мар 2019
5
0
Какой-то странный скетч.
Непонятно зачем #include <ESP8266WiFi.h>,
#define MH_Z19_RX D4 такой синтаксис IDE вообще не принимает
после замены этого плюгуло варнингом про переполнение инта
Но я все равно его зашил но с тем же результатом. Зависает в Preheating
 

Dan52

★✩✩✩✩✩✩
8 Фев 2019
27
12
@Vedro401, на схеме с последнего фото, как мне кажется,
не хватает перемычки gnd arduino-минус внешнего питания
 
  • Лойс +1
Реакции: FisherMax

Vedro401

✩✩✩✩✩✩✩
26 Мар 2019
5
0
@Vedro401, на схеме с последнего фото, как мне кажется,
не хватает перемычки gnd arduino-минус внешнего питания
Добавил, без эффекта, все так же возвращает нули.
Да и не понимаю как это должно было повлиять? Датчик питается и шлет сигнал, ардуина его замеряет и понимает, зачем им иметь общую землю?