Большие часы на адресных светодиодах 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. Кое-что я перевел для лучшего понимания.

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

Комментарии

Leon111_09

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

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09, скетч устанавливается При включении делаю сброс, устанавливаю время, режимы. Потом время всеравно по 00, , точки не мигают, температуру отображает, опять в настройках время по 00, выход на LED работает ( зачем его менять? хотя не проблема презалить), яркость меняется от освещенности, температура меняется, а часы стоят
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
Как вариант проверить правильность подачи питания на модуль RTC3231, ну и не лишним было бы убедиться в исправности батарейки CR2032 в модуле RTC3231, илиречь идет о микросхеме DS3231 извлеченной из этого модуля и попыткой ее завести без обвязки модуля? p.s. #1,219
Сброс делается,DS3231 исправна с рабочего модуля
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09, модуль проверял с библиотеками из примеров ID. с монитора устанавливал время, дату, все ОК, потом подсоединяю к часам- по 00
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
потом подсоединяю к часам- по 00
модуль к часам подключается на пины А4 и А5. Если их перепутать местами то будет выводить нули. Показания датчиков не зависят от модуля часов-будут выводиться правильно.
P.S. Батарейка тут не при чем: она нужна только для сохранения времени при потере питания в часах. При включенном состоянии часы должны идти независимо от то есть батарейка или ее вообще нет. Можете попробовать включить часы вообще без батарейки.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@начинающий, 3,1V!

модуль к часам подключается на пины А4 и А5. Если их перепутать местами то будет выводить нули. Показания датчиков не зависят от модуля часов-будут выводиться правильно.
Понятно, что датчики от часов не зависят, к тому, что информация выводится корректно. А если в модуле не работает чип памяти? Я то устанавливал время при проверке, а вот после отключения не проверял. На других часах этот модуль работает четко с сохранением времени. Может все таки проблема в том, что библиотека 3232 а стоит 3231?
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
В скетче из поста 1,231 схема подключения диодов другая, поэтому ничего не отображается. У меня только точки разделительные мигают.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
А если в модуле не работает чип памяти?
Этот чип используется только для сохранения настроек будильника,в работе часов он не принимает почти никакого участия: у меня на огрызке DS3231 (модуль 1307,о котором я писал раньше) нет вообще микросхемы памяти. Это проблема с выводом времени: в проверка ,как вы писали, модуль работает нормально.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09, Залил в эту Ардуино скчет из примеров ID, в мониторе выставляется время, дата, работает,. После отключения и включения все работает, выводится на монитор. Т.е Ардуино рабочая и модуль подключен правильно. А без модуля должны сохраняться установленные показания времени? Все таки в скетче что-то, чудес не бывает. Черточки, знака какого?

@kym13, Другие показания отображаются корректно, все правильно подключено

@kym13, Да, другое подключение, месяц работал на ура. Только температуру не могу сделать почаще.
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
А без модуля должны сохраняться установленные показания времени?
А как они БЕЗ модуля сохранятся? Они как раз в модуле и хранятся-ардуина только выводит показания с модуля на светодиоды. Весь отсчет времени ведется в модуле часов. Скиньте пожалуйста фото ваших часов и отдельное фото вашей ардуины.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
А сколько раз в минуту отображается температура? и сколько Вам надо
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
другое подключение, месяц работал на ура.
Ну так чего же проще: сравните два скетча ( в частности, те строки,которые относятся к часам) и сделайте соответствующие изменения :)
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@kym13,Но некомпится

@kym13,отображается раз в минуту, надо 4-5 раз.

@Leon111_09,Прошил это же железо своим скетчем из ранее прикрепленного-все работает, значит программное .
Получается так

@Leon111_09, Сравнить не смогу, мозгов не хватает, тем более по-разному написаны
 
Изменено:

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09,вообще ерунда отображается, установки от кнопок не работают. Но я пины поменял как впервом
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Но я пины поменял как впервом
главное пины часового модуля на А4 и А5 подключить. А вообще довольно странно: у меня этот скетч в часах уже месяца три наверно работает не выключаясь. И хорошо работает.
Попробуйте в скетче закомментировать строчку #include <Wire.h> (она самая первая будет).
 
Изменено:

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09,Ничего не поменялось, как будто не совпадают сегменты, или количество LED.У меня 28+2, GBAFEDC. Полтергейтс какой-то!
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@balent, у вас же вроде 1 светодиод на сегмент идет если не ошибаюсь? В строке №50 по идее должна стоять единица (#define SEGMENT_LEDS 1). Это такова настройка под вашу матрицу.
P.S. Все-таки приложите фото вашей конструкции пожалуйста: охотно взглянуть на этого диковинного зверька :)
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent
"Seven_segment_clock_ws2812b-30_foto" этот скетч для лент на WS2811, поэтому у меня на на ленте WS2812 кракозябры показывает. Вы какую ленту используете?

@Leon111_09,
У него по ходу лента WS2811, а у неё один пиксель это три диода.
Тот скетч который у него отлично работал для лент на WS2811