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

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

Комментарии

Shock Ta

✩✩✩✩✩✩✩
16 Дек 2021
9
5
Спаял часы по финальному скетчу Вячеслава_45 (низкий поклон за код)
3 светодиода на сегмент. Напечатал корпус. Все завелось без танцев с бубном.
И возник вопрос а из чего сделать хороший рассеиватель. Пробую. Напечатал прозрачным PTEG рассеиватели толщиной 3мм но как бы эффект не тот. Рассеивает но точки от светодиодов все ровно хорошо видны.
Может кто имеет опыт печати рассеивателей. ( резать пилить конечно нет желания)
На видео без рассеивателей.
 

maksland

★✩✩✩✩✩✩
13 Янв 2019
225
39
Omsk
матововое оргстекло надо и расстояние до светиков 8-12 мм. Хотя печатал рассеиватели располагая их под 45 градусов на столе и свечение светиков расплывалось "звездой" (и тоже рассеиватели располагал на высоте 10 мм)
 
Изменено:

Shock Ta

✩✩✩✩✩✩✩
16 Дек 2021
9
5
матововое оргстекло надо и расстояние до светиков 8-12 мм
У меня глубина от излучающей поверхности светодиода 18 мм. Хочется сделать что бы сегмент был равномерно засвечено. Завтра попробою белым пластиком напечатать. Все что я видел в интернете ну не приводит к состоянию "вот так хочу"
 

maksland

★✩✩✩✩✩✩
13 Янв 2019
225
39
Omsk
у меня на канале есть видео экспериментов :) при малой яркости светики заметны а на средней уже заливает почти весь сегмент (светодиоды на белой плате + стенки боковые сегментов дихлометаном обработаны до глянца)

https://www.youtube.com/channel/UCFXhjwhAZ3ExiPJiXXTJeQg только там в кучу свалено всё :)
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
2
0
Я тоже сделал часы Вячеслава,но они у него 3х3 и надо печатать на принтере под светодиоды корпус,а его у меня нет, поэтому сделал ещё 4х6 и 6х6 ,сделал квадратом матовое стекло рассеиватель от светильника промышленного СССР и всё нормально получилось и печатать ничего не надо, пробовал листы бумаги и кальки но лучше оргстекла ничего нет,можно и самому заматировать стекло наждачной бумагой, можно ещё отлить в форму из алюминиевого профиля силиконовый клей матового цвета,но это долгая история , получается свет очень хороший и лучше всякого печатания на принтере
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
129
9
А еще в продаже есть алюминиевый профиль для светодиодной ленты:
20220428_093856.jpg20220428_093953.jpg20220428_094011.jpg20220428_093856.jpgsp20220428_093913.jpg
Можно нарезать в виде сегментов семисегментных индикаторов, и приклеить либо прикрутить потайными винтами к несущей конструкции, к листу фанеры в ящике с часами например.
 
Изменено:

maksland

★✩✩✩✩✩✩
13 Янв 2019
225
39
Omsk
сопло 0.4 слой 0.2 ? яркость насколько теряется ?
тут тоже похоже напечатаны светорассеиватели
 
Изменено:

Shock Ta

✩✩✩✩✩✩✩
16 Дек 2021
9
5
@maksland, примерно процентов на 30 точно. Да сопло 0,4 слой 0,2. Но результат вполне приемлем. И отдельные светодиоды не видно и читается хорошо вполне.
 
  • Лойс +1
Реакции: maksland

Leon111_09

★★★✩✩✩✩
6 Июн 2021
404
102
53
Таганрог
forum.wisecomp.ru
@poravos, У вас же в самой ошибке написано: какие-то файлы в библиотеке датчика температуры повреждены. Скачайте из этой темы библиотеку и установите ее в ИДЕ.
 
  • Лойс +1
Реакции: kym13

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
2
0
а,что может делать этот датчик,и что заменяет и какой у него адрес,BME-280 мне обошёлся ещё в прошлом году в 10 у.е вместе с пересылкой