Большие часы на адресных светодиодах WS2812B

Большие часы на адресных светодиодах WS2812B
Всем привет, хочу рассказать о том как я попробовал повторить проект, но столкнулся с некоторыми проблемами.

Как-то раз на просторах зарубежного интернета я нашел вот такой проект часов на базе светодиодной ленты WS2812B: Big, Auto Dim, Room Clock, и мне захотелось его повторить. Часы устроены как семи сегментный циферблат и работают на RTC модуле DS3231 . Часы умеют показывать температуру, имеют кнопки для настройки и перевода на зимнее время и обратно, позже я добавил датчик влажности DHT11. Температура уже вместе с влажностью считывалась с этого датчика и выводилась раз в минуту. Хоть и в модуле часов есть температурный датчик, но похоже он показывал температуру не корректно из-за самонагрева (ИМХО).




Untitled Sketch_МП.png
И главное нанести много горячих соплей

IMG_20180907_120755.jpg


Когда все было собрано, повозившись с библиотеками, все заработало. И тут возникло одно большое НО: положения яркости в только в двух позициях меня не устраивало. Тем более на границе значений происходило мерцание. Установка яркости на статичном значении меня тоже не очень устраивала ибо днем при установленном тусклом свете ничего не было видно, а ночью даже со значениями близким к минимуму можно было осветить всю Москву. Поинтересовавшись как в других проектах с этим справляется Alex было решено заменить такой код настройки яркости.

C:
void BrightnessCheck(){
  const byte sensorPin = BRI_PIN; // light sensor pin
  const byte brightnessLow = 1; // Low brightness value
  const byte brightnessHigh = 50; // High brightness value
  int sensorValue = analogRead(sensorPin); // Read sensor
  Serial.print("Sensor is: ");Serial.println(sensorValue);
  sensorValue = map(sensorValue, 0, 255, 1, 100);
  LEDS.setBrightness(sensorValue);
  };
вот такими строчками:
C:
void BrightnessCheck() {

  if (auto_bright) {                         // если включена адаптивная яркость
    if (millis() - bright_timer > 100) {     // каждые 100 мс
      bright_timer = millis();               // сброить таймер
      new_bright = map(analogRead(BRI_PIN), 0, bright_constant, min_bright, max_bright);   // считать показания с фоторезистора, перевести диапазон
      new_bright = constrain(new_bright, min_bright, max_bright);
      new_bright_f = new_bright_f * coef + new_bright * (1 - coef);
      LEDS.setBrightness(new_bright_f);      // установить новую яркость
    }
  }
};

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

И тут все заработало, моей радости не было придела, пока не наступила ночь. Появилась проблема с отключением ленты при полной темноте. Иногда это было только на минуту, а иногда на целую ночь. Еще есть проблема со слабим мерцанием светодиодов если освещения в комнате было мало (например когда работал телик), но это было редко и длилось это одну минуту.

Что касается кода вот сылка на GitHub. Кое-что я перевел для лучшего понимания.

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

Комментарии

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Тормозит на " tmElements_t Now" не задекларировано. Часики хорошие (понаделал их разных) и очень точно вот уже месяц идут, но температуру долго ждать.
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
А никто не замечал знак минус при нулевой температуре, как сделать чтобы нуль всегда был без знака минус?
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
А никто не замечал знак минус при нулевой температуре, как сделать чтобы нуль всегда был без знака минус?
это не совсем так: там в программе идет отсеивание дробной части. Т.е. она не выводится но она есть. Потому и знак минус появляется перед нулем: типа -0,5 градуса. у нас недавно температура плясала возле нуля, так минус то появлялся перед нулем,то исчезал (вывод на светодиоды настроен на два раза в минуту)
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
Библиотека DS3232RTC.h установлена?
У меня компилируется. Настройки такие?
 

Вложения

  • 76.8 KB Просмотры: 38

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@balent, для начала: у вас стоит версия ИДЕ староватая-Arduino: 1.8.1. и ругается на библиотеку microDS18B20. Обновите для начала ИДЕ. Будет опять ругаться напишете-я вам свои библиотеки скину. или попробуйте скопировать название библиотеки и вбить ее в менеджере библиотек в поиск.и еще одно-в пути к библиотекам/скетчу нет кириллицы? там в логе в путях крякозябры как бы намекают об этом.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
А что значит При первом запуске выбрать режим "----" для обнуления памяти Держать нажатыми при включении или после включения выбрать режим?
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
Нет, после прошивке кнопкой "Set" выбирите на табло "- - - -" и нажмите + или -
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
А что значит При первом запуске выбрать режим "----"
чистится энергонезависимая память от старых записей-бывает, из-за них часы глючат при первом включении после перепрошивки.
 

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
@balent, а по схеме всё совпадает ? может вывода переназначить кое какие надо ?
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Указанный мной скетч компилируется без проблем, а этот, непонятно. Пробую с новой версией IDE
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Указанный мной скетч компилируется без проблем, а этот, непонятно. Пробую с новой версией IDE
Кстати, у вас случаем Нанка не вавгатовская? я тут вспомнил про одни грабли (на которые сам наступил и попрыгал :)) на вавгатовских нанках этот скетч не компилится-ругается чуть ли не на половину библиотек. Мне из-за этих нанок пришлось перезаказывать другие контролеры. На обычных компилится на ура, на вавгатовских или не компилится (если выбирать их в настройках) либо светятся ВСЕ РЖБ (если ставить в настройках обычную нану).
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Избыточное цитирование
у человека скетч не компилится-ИДЕ ругается. Это программное.
Снес все библиотеки, скачал по новой, с этой же IDE, получилось:D. Спасибо за помощь, буду дальше пробовать с железом(y)(y)

Кстати, у вас случаем Нанка не вавгатовская? я тут вспомнил про одни грабли (на которые сам наступил и попрыгал :)) на вавгатовских нанках этот скетч не компилится-ругается чуть ли не на половину библиотек. Мне из-за этих нанок пришлось перезаказывать другие контролеры. На обычных компилится на ура, на вавгатовских или не компилится (если выбирать их в настройках) либо светятся ВСЕ РЖБ (если ставить в настройках обычную нану).
Обычный Китай, сколько на них переделано!
 
  • Лойс +1
Реакции: kym13

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Обычный Китай, сколько на них переделано!
они сейчас в большинстве своем все китайские :). WAVGAT это китайская фирма с алика,они делают как обычные ардуино нано,так и свои фирменные, с таким же названием.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Всем часостроителям вопрос: " Можно ли заменить практически в часах датчик DS18B20 на DS1820?:confused:" (лежит без дела лишка)
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Можно ли заменить практически в часах датчик DS18B20 на DS1820?
вот что пишет интернет:
"Микросхема DS1820 снята с производства, для её замены рекомендуется микросхема DS18S20. Однако, следует обратить внимание на то, что микросхемы DS18S20 в корпусе TO-92 маркируются надписью "DS1820" (без буквы S). Новая микросхема DS18S20 программно совместима со старой DS1820 и, по заверению производителя, в большинстве случаев может быть непосредственной заменой старой DS1820. Возможно, маркировкой без буквы S производитель хотел указать на эту совместимость. Программная совместимость новой DS18S20 со старой DS1820 гарантированно обеспечивается если в программе применен алгоритм из data sheet."
Screenshot_1.png

как минимум-ее нельзя использовать для улицы (зимой уж точно).
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
По моему разница между ними в точности 18b20 +- 0,1 градуса, а 1820 +- 2 градуса
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Пишут, что протоколы разные. Пробовал менять-показывает ерунду. Для дома упаси господь ниже нуля!
 

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
@balent, протоколы абсолютно идентичные, просто либа работает с 12 битами температуры, а датчик 9 битный. Без изменения кода не заработает.