Большие часы на адресных светодиодах 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
8
2
подменил папку с библиотеками, заработал скетч 1.9 финал. 1.7 бета всё равно не работает, правда ошибка другая. Я не использую BMP280, хотел на 1.7 остановится.
Спасибо!
 

kym13

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

nick 56

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

nick 56

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

Вложения

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

kym13

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

nick 56

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

Вложения

nick 56

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

kym13

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

kym13

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

Вложения

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

nick 56

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

Вложения

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

nick 56

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

Вложения