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

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

Комментарии

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
подменил папку с библиотеками, заработал скетч 1.9 финал. 1.7 бета всё равно не работает, правда ошибка другая. Я не использую BMP280, хотел на 1.7 остановится.
Спасибо!
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
456
67
@nick 56, ...1.7 бета... ? Зачем? Она и меня не работала. Есть проверенная-перепроверенная(проверял на IDE 1.8.19 и IDE 2.3.2) версия 1.95, если не используете датчики их в самом скетче(выставив нули напротив датчиков) или после прошивки в меню можно отключить, будут просто часы. Если нужно могу выложить скетч 1.95
 
Изменено:

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
а на преведущей странице выложены 2 скетча 1.95, какой правильный?
 

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
все работает, спасибо. Но комнатная температура с десятыми, на мой взгляд, выглядит коряво с приподнятой запятой. Я первые часы собирал 8лет назад, на них комнатная выглядела по симпатичней. Нельзя ли здесь так сделать, вроде все символы в знакогенераторе прописаны.
 

Вложения

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

kym13

★★✩✩✩✩✩
14 Ноя 2020
456
67
@nick 56, Если у вас датчик DS18b20 то можно в настройках вкл. тот датчик что выводит температуру с него без десятых, а если ВМЕ280 то нужно править код в выводе температуры (case 22). Я в программировании ноль, могу только методом научного тыка под свои хотелки код подправить. Думаю подправить код не сложно для тех кто соображает. Из чего табло делали?
 
Изменено:

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
Я в программировании ноль, могу только методом научного тыка под свои хотелки код подправить.
Я такой же, буду пробовать.
Табло сделано из куска сендвич панели. Цифры напечатал на 3д принтере.
 

Вложения

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
А на WS2811 кто нибудь эти прошивки пробовал? Залил в свои восьмилетние часы, не хотят идти.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
456
67
@nick 56, Пробовал, всё работает, в сегментах 2811, а точки по одному 2812. Следует только правильно выставить кол-во светиков на сегмент(иначе на табло будет абракатабра) и соответствующие питание, если лента 2811 то 1 лед/сегм это 3 физических светика, а 2812 при том же раскладе 1 лед=1 светик, а вот точки на 2812 живут своей жизнью(цвет отличается от цвета сегментов), можно конечно и в точки воткнуть 2811 но 6 светиков на точки слишком много места занимают и нужно часть светиков как-то закрывать. И с питанием колхозить чтобы было и 12 и 5 вольт.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
456
67
На Алике появились миниатюрные платы Nano Super Mini v.3 размером 27х22мм
 

Вложения

  • 106.8 KB Просмотры: 8
  • 74.4 KB Просмотры: 8

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
@nick 56, Пробовал, всё работает, в сегментах 2811, а точки по одному 2812.
Зачем туда 2812 лепить, закрыл средний светодиод и всё. Просто не использовать, десятые градуса в температуре. На 2811 исправно работают 8 лет, просто кнопки коррекции не работают, в то время так и не нашёл рабочего скетча.
 

Вложения

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

nick 56

✩✩✩✩✩✩✩
11 Апр 2024
30
3
Запустил новый скетч на старых 2811 часах. Пришлось добавить ещё один сегмент ленты в точки, отключив светодиоды, чтоб не мешали. Автору большое спасибо за такую универсальную прошивку. Из хотелок: не мешало бы кнопками выставлять максимальную и минимальную яркость, чтоб не перешиваться.
 

Вложения

seriy76

✩✩✩✩✩✩✩
18 Окт 2023
1
2
Сделаны из сэндвич панели для откосов и поверх самоклейка под дерево. Окантовка -кабель канал под дерево. Основа -стеклотекстолит. У сэндвич панели снять с одной стороны пластик а на другую наклеить распечатанный шаблон с сегментами и вырезать(с начало пластик а потом пенку) Изнутри сегментов толстым черным маркером закрасить (чтобы не было засветов с соседних сегментов)
 

Вложения

  • 20.6 KB Просмотры: 18
  • 21.9 KB Просмотры: 17
  • Лойс +1
Реакции: Wan-Derer и kym13

next09

✩✩✩✩✩✩✩
26 Янв 2019
9
1
Здравствуйте , в версии 1.9 какой максимум светодиодов на сегмент ? Мне нужно 4 светика на сегмент, будут работать ?
 

next09

✩✩✩✩✩✩✩
26 Янв 2019
9
1
Какие строки переписать надо ?

#define SEGMENT_LEDS 2 Здесь 4 поставить или еще что то ?
 

safonov1932

✩✩✩✩✩✩✩
13 Апр 2024
2
0
Там много мест где нужно поменять. Пока сам не разберёшься со скетчем как это работает как формируются цифры, как работает лента, пройдись по строкам скетча там комментарии что за что и зачем. Не так уж там все мудренно как кажется если вникнуть.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
456
67
@safonov1932, Там много мест где нужно... Не вводите людей в заблуждение. Количество диодов меняется только в одной строке (см.фото), больше в коде ничего менять не нужно.
next09 ...максимум светодиодов ... я подключал 8 на сегмент(226 шт.), а вообще к ардуине на пределе можно подключить 600 светодиодов
 

Вложения

  • 130.5 KB Просмотры: 21

next09

✩✩✩✩✩✩✩
26 Янв 2019
9
1
Спасибо всем ! выставил 4 светика, прошил , работают. Часы супер ! Спасибо автору !
 
  • Лойс +1
Реакции: kym13