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

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

Комментарии

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
CNN ,если вы хотите делать цифру в рост человека то набирать светодиоды можно так ,в интернете видел какой чел так сделал
 

Сотнег

★★★★★★★
15 Янв 2020
4,169
1,456
@CNN,
наверное, 4 не получится без усилителя.
2 ещё можно запараллелить без него.

Но сегменты лучше сделать виртуальными, чтобы не ставить усилитель на каждый сегмент.
 

CNN

✩✩✩✩✩✩✩
13 Фев 2021
12
0
наверное, 4 не получится без усилителя.
А что ест усилитель в данном случае? Есть ли проверенные реализации? И, почему 4? 10 например
Но, если по сути, цель проекта отображение информации, и, каждый сегмент работает полностью всегда, ну кроме эффектов перед обновлением данных, которые не являются целью и далеко не всегда используются. Так зачем усложнять задачу и нагружать микроконтроллер?
 

Сотнег

★★★★★★★
15 Янв 2020
4,169
1,456
@CNN,
делов в том, что ваше облегчение работы микроконтроллера выливается в усложнение схемы реализации.
Микроконтроллер вас как за это отблагодарит?

Про усиление управляющего сигнала и жалоба, что без него не заработало:
 
  • Лойс +1
Реакции: CNN

Сотнег

★★★★★★★
15 Янв 2020
4,169
1,456
@CNN,
у вас на каждый сегмент придётся усилитель ставить, а не только перед первым.
 

CNN

✩✩✩✩✩✩✩
13 Фев 2021
12
0
на эти диоды надо чётко подавать сигнал управляющий не менее 4,3 вольта иначе начинается хаотичное зажигание
Если проблема только в этом, тогда не вижу проблемы. Задача сводится к тому, чтобы падение напряжения на участке цепи между диодом D1 и D2 на управляющем контакте было не меньше чем на заводской ленте. Соответственно, если это выполнить, например, на текстолитовой плате и ширину дорожки сделать соответствующей, то проблемы, как бы не должно быть. Может быть здесь проблема не в этом?

у вас на каждый сегмент придётся усилитель ставить, а не только перед первым.
Сделайте, пожалуйста, набросок схемы, что вы пытались мне показать, пардон, но не могу понять
 

Сотнег

★★★★★★★
15 Янв 2020
4,169
1,456
@CNN,
зелёные линии - последовательность передачи сигнала от светодиода к светодиоду,
красные линии - попытка зачеркнуть нарисованное вами ветвление сигнальной линии.
Более детально рисовать лень. Считаю, что и так понятнее некуда.

Шириной дорожки вы исходные 3 вольта одновременно на 4 светодиода всё равно не доведёте.
 

CNN

✩✩✩✩✩✩✩
13 Фев 2021
12
0
@Сотнег, кажется начинаю понимать. Если у меня, например 4 светодиода в одном сегменте, то от сегмента к сегменту у меня будут идти 4 сигнальных провода? Сколько диодов в сегменте,столько проводников между ними, не считая питания. Так?
 

Сотнег

★★★★★★★
15 Янв 2020
4,169
1,456
@CNN,
если первый сегмент сможет работать без сбоев (напоминаю про необходимость усилить исходящий с платы сигнал), остальные будут работать в своём нормальном режиме.
 
  • Лойс +1
Реакции: CNN

Брякомякс

★✩✩✩✩✩✩
14 Янв 2023
83
19
Всем привет!
Может было уже.
А если перевернуть белую плату с адресным светодиодом, свет от него будет виден "с изнанки" ?
При условии, конечно, что с той сторонв на пути света нет меди.

Я вот думаю сделать печатку под что-то похожее, но так, чтобы одна цифра была 10*20, то есть стандартная китайская печатка 10*10 пойдёт как пол-цифры. Или же 8 таких полцифер на часы.

И возникла мысль - а что если сделать это так, чтобы свет шёл с изнанки СД, на просвет тощи платы. Или будет затухать?
Или может лучше убрать не медь,а вообще там делать отверстие.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
455
67
Доброго времени суток. Собрал очередные часы на скетче 1,95 от "Вячеслава 45" но вместо обычной ленты WS2812 применил более современную ленту WS2812 COB с плотностью 160 LED/М, теперь пикселей на табло не видно. Корпус от часов самые дешевые часы заказал на Алиэкспресс, их потроха выкинул свои вставил.
 

Вложения

  • 74.1 KB Просмотры: 29
  • 86.2 KB Просмотры: 29
  • 100.8 KB Просмотры: 25
  • 96.2 KB Просмотры: 26
  • 85.8 KB Просмотры: 24

qwertya

✩✩✩✩✩✩✩
29 Авг 2021
4
0
привет . как можно убрать мерцание? кондёры не помогают.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
455
67
@qwertya, Здесь что установлено
// Настройки ночного режима
#define LIGHT_NIGHT 100 у меня фоторезистор, без него должно быть 255
и здесь #define SET_LIGHT 0 // Настройка яркости (если 0 то автоматическая) 0...25
 

CNN

✩✩✩✩✩✩✩
13 Фев 2021
12
0
@CNN,
если первый сегмент сможет работать без сбоев (напоминаю про необходимость усилить исходящий с платы сигнал), остальные будут работать в своём нормальном режиме.
Подскажите, в качестве информационной шины между сегментами планирую использовать кабель МГТФ, критично ли его сечение? Если да, то какое нужно минимальное. Напомню у меня будет порядка 50 сегментов в каждом около 15 светодиодов. Спасибо.
 

Сотнег

★★★★★★★
15 Янв 2020
4,169
1,456
@CNN,
я не разбираюсь в том, каким образом можно усилить сигнал (согласовать уровни), чтобы раздать его сразу на 15 светодиодов.
Но кабель в этом процессе не участвует.
Когда сигнал попадает в каждое из ответвлений, он уже ничем особо не отличается от обычного сигнала, исходящего с платы.

Предполагаю, в точке пайки (или в микросхеме?), из которой выходит весь этот веер проводов, будет просто чуть повышенное напряжение,
а в каждом из проводков - стандартные 3.3 - 5 V.
Тока там почти нет, поэтому не знаю, по какому закону происходит обратное понижение напряжения.
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
внутри каждого светодиода стоит стабилитрон и превышение 5 вольт будет хаотичное моргание ,это надо будет подбирать светодиоды ,снижение напряжения ниже 4,7 вольта тот же эффект моргания не все светики ,но процентов 20 будет

да забыл сказать мне пришлось делать тестер для ws2812b если надо скину схему и скетч ,на меге 328 поддерживает 255 светодиодов ,содержит led 3 разряда ,мегу 328, и компаратор на операционнике 358

вот этим тестером я пользовался для выявления плохого светодиода
 

Вложения

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

andrey170587

✩✩✩✩✩✩✩
30 Ноя 2021
11
4
Всем привет!Парни такая проблемы в 1.95bme отрицательная температура выводится до -9 потом за место -10 на матрице - 0,а если -11 то -1 в чем траблы?ide 1.8.19,microDS18b20 3.1.1
 
  • Лойс +1
Реакции: Zero-v