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

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

Комментарии

bort707

★★★★★★✩
21 Сен 2020
3,062
912
Вы резистор на плате модуля 3231 выпаяли? Тот что батарейку с питанием соединяет?
 

konan38

✩✩✩✩✩✩✩
19 Мар 2022
2
0
Все замечательно, идут точно. да резистор выпаял. Спасибо всем помогающим.

Конденсатор на модуль часов 100mF по питанию поставил
 

Serzh2000

✩✩✩✩✩✩✩
8 Фев 2021
8
1
добрый вечер.
собрал пока циферблат и электронику на коленке. возникли два вопроса.
1. какое стекло-рассеиватель кто ставил? попробовал оргстекло матовое как то не очень... мутно. простое стекло с тонировкой пятерочкой... цвета меняет тоже не очень... посоветуйте пожалуйста.
2. в шапке прошивки написано
ВОЗМОЖНОСТИ:
// В режиме часов нажатие на "+" отображает температуру, а на "-" дату
нажимаю на минус
да, высвечивается дата (число, месяц)
нажимаю на плюс... ничего как шли часы так и идут ( в настройках кнопка работает)
https://rutube.ru/video/dec9ee0a00cf768957b58bfe3a9e7b7a/
 

BOT_Zilla

✩✩✩✩✩✩✩
1 Апр 2022
11
7
@Serzh2000, под оргстекло можно подложить пленку-рассеиватель от старого ЖК телевизора или монитора. Под матрицей их там три или четыре штуки лежит. Та что белая матовая, она и нужна.
 
  • Лойс +1
Реакции: Serzh2000

kym13

★★✩✩✩✩✩
14 Ноя 2020
479
70

Serzh2000

✩✩✩✩✩✩✩
8 Фев 2021
8
1
я скетч Clock_1.95_bme_final с 69 стр. скачал. мне очень понравилось как отрабатывается яркость фоторезистором,
а вот анимация при смене минуты нет:( изменил - отрисовка цифры минут, часов.
не понравилось , что только две разделительных точки:( изменил две точки для часов и третья(запятая) при показе температуры.
и расчет температуры только положительная и только целая отрицательная :( изменил оба датчика могут показывать отрицательную с точностью до десятых, причем если в десятых ноль то он не высвечивается.
можно посмотреть на видео https://rutube.ru/video/dec9ee0a00cf768957b58bfe3a9e7b7a/
подключены 2 датчика ds1820... Для уличной температуры у меня выведен на улицу кабель... это надежно и никаких батареек или аккумуляторов не надо.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
479
70
@Serzh2000, Этот скетч на 69 стр. я выкладывал он 100% рабочий и проверенный, специально сейчас проверил на часах при нажатии кнопок "+ -" всё выводится как и должно значит при правке вы где-то "накосячили". Радио удлинитель конечно по желанию, мне например не хотелось делать отверстие в раме под кабель и тянуть его на полкомнаты, батарея на нем литиевая одной зарядки хватает на год минимум. Свой скетч переделанный скиньте сюда, если не жалко конечно, интересно посмотреть.
См. фото их специально сделали чтобы не менять цифры по всему коду.
 

Вложения

  • 72.1 KB Просмотры: 4
Изменено:

Serzh2000

✩✩✩✩✩✩✩
8 Фев 2021
8
1
спасибо что уделили мне время. может что и накосячил, надо посмотреть по внимательнее.
скетч нет не жалко.

//================= Настраиваемые константы НЕ ИЗМЕНЯТЬ и НЕ РЕДАКТИРОВАТЬ !!!!! ==========================

#define NUM_LEDS ((SEGMENT_LEDS * 28)+ 3 ) //2
#define POINT_UP (14 * SEGMENT_LEDS)
#define POINT_DW ((14 * SEGMENT_LEDS) + 1)
#define POINT_comma ((14 * SEGMENT_LEDS) + 2)//

здесь нет ничего страшного
NUM_LEDS ((3светика в сегменте * 28(в каждом семи сегментном индикаторе 7 светиков их 4 индикатора)+3 точки = 87светиков в часах
POINT_UP (14(два первых семи сегмента "час") *3светика в сегменте) -----------это верхняя точка
POINT_DW (14(два первых семи сегмента "час") *3светика в сегменте) + 1верхняя точка----------это средняя точка
POINT_comma (14(два первых семи сегмента "час") *3светика в сегменте) +2верхняя точка и средняя точка ---------------это нижняя запятая
 

Вложения

  • Лойс +1
Реакции: kym13

seriy76

✩✩✩✩✩✩✩
18 Окт 2023
3
2
А нельзя сделать что бы двоеточие работала в режиме часов а в режиме отображения температуры светилася только нижний светодиод двоеточия. 2 вариант- не двоеточие. Только один светодиод. В режиме часов мигание посекундное. В режиме температуры постоянное свечение.
 

seriy76

✩✩✩✩✩✩✩
18 Окт 2023
3
2
По поводу рассеивателя. Любой рассеиватель дает размытость цифр. Мне нравиться вариант- прозрачный акрил или световод от жк тв( edge подсветка) с наклеенным на него тонировкой.Тонировка не очень сильная что бы не изменились цвета.