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

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

Комментарии

Александр Злюс

✩✩✩✩✩✩✩
10 Фев 2020
19
1
ну ... в меню можно выбрать фиксированный цвет
7. (C) настройка цвета (если 00 то автоматическая) 0...25
один из них точно белый
в этой прошивке нету белого . но вячаслав приоткрыл дверцу )) если автоматом 0 поставить и изменить одну строчку в прошивке и будет белый но и все оттенки которые есть ))) короче куча белый появился только через 3-4 часа а вот в насйтроке фиксировано цвета не будет белого . есть только в прошивке 1,7 белый
 

maksland

★★★✩✩✩✩
13 Янв 2019
442
103
Omsk
Мне уже датчики давления пришли (очень долго на импорте провисели ). можно подпаивать и ждать Вячеслава
что то заглохло всё...
 
Изменено:

Verholaz

★✩✩✩✩✩✩
6 Янв 2021
36
30
66
@ShevaLoL, Добрый вечер. Воспользовался вашим скетчем и хочу спросить как у вас работает фоторезистор. Я сразу не подключил фоторезистор т.к. сначала проверял работу модуля часов, ленты и датчика (AM2302). Но прочитав переписку на этой странице подключил фоторезистор. Сразу скажу фоторезистор не работает, хотя до этого проекта проблем с фоторезисторами не было. Да и яркость ведёт себя странно. Если по управлению яркостью (фоторезистор отсутствует) стоит 1, то после прошивки сразу устанавливается минимальная яркость постоянно. А если 0, то максимальная яркость. Как у вас это работает?
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@Verholaz, я так понял, фоторезистор работает наоборот? Поменять тогда max и min местами в коде фоторезистора.
 

Verholaz

★✩✩✩✩✩✩
6 Янв 2021
36
30
66
@ASM, Добрый вечер. Я писал не вам, но если интересно. В темноте включаю и выключаю фонарик на фоторезистор, и ни чего не происходит.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@Verholaz, что могу посоветовать, проверить подключение фоторезистора. Для этого тестовый скетч загрузить или в этой прошивке вывести в монитор порта и проверить, что выдаёт. Датчик может быть цифровым и аналоговым, соответственно и пины...
 

bort707

★★★★★★✩
21 Сен 2020
2,864
850
@Verholaz, судя по стастистике, участник @ShevaLoL 2 года как на форум не заходил, вряд ли он ответит.
Спрашивайте тут, здесь люди на этом коде собаку съели.
Управление яркостью в коде простейшее, ломаться там нечему, поглядите в скетче
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
129
9
Добрый день. Подключение фоторезистора описано на стр 17 пост № #405
проверьте в скетче блок обращения к фоторезистору, может нужно изменить номер вывода в скетче к которому подключен фоторезистор, воспользуйтесь выложенными примерами, т.е. вероятно в каждом примере прописан фоторезистор, и пин куда он подключен, например А0, если цифра или буква не совпадает с действительностью, соответственно скетч получает информацию об освещенности от пина к которому ничего не подключено.
 
Изменено:

Verholaz

★✩✩✩✩✩✩
6 Янв 2021
36
30
66
Добрый вечер. Фоторезистор настроил. Спасибо за помощь @ASM, @bort707, @начинающий. Напишу последовательность действий (может кому-нибудь пригодится). Прочитал на стр. 17 пост #409 "
И насчет фоторезистора, можно в скетче вот эти параметры поменять если наоборот работает. Верхнюю закоментировать нижнюю раскоментировать или в верхней поменять местами слова <max с min>
new_bright = map(analogRead(BRI_PIN), 0, bright_constant, max_bright, min_bright); // когда темно уменьшает яркость
// new_bright = map(analogRead(BRI_PIN), 0, bright_constant, min_bright, max_bright); // когда темно увеличивает яркость ".
В скетче от @ShevaLoL
строчка только "new_bright = map(analogRead(BRI_PIN), 0, bright_constant, min_bright, max_bright); // считать показания с фоторезистора, перевести диапазон".Добавил строчку "new_bright = map(analogRead(BRI_PIN), 0, bright_constant, max_bright, min_bright); // когда темно уменьшает яркость". Прошил arduino Pro Mini 3 вольтовую. Фоторезистор заработал наоборот. По совету из поста #405 "
Если фоторезистор будет работать наоборот, поменяйте резисторы местами т.е. фоторезистор на землю, а 10К на +5". Подаю питание яркость большая и не меняется. Посмотрел какой у меня фоторезистор, замерил сопротивление при его затемнении - около 30 кОм. Заменил на около 50 кОм, 2 раза заказывал пришли разные. Включил питание фоторезистор заработал. Срабатывает примерно через 1-2 секунды и снижает яркость плавно. Ёщё раз спасибо за советы.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@Verholaz, резистор подбирается в диапазоне 1К-10К, либо модулем, там есть подстроечный резистор
 

djekonil

✩✩✩✩✩✩✩
11 Июн 2019
2
0
Ребята здравствуйте собрал часы отлично работают скетч аж расжован спасибо всем кто старался про сброс секунды можно и не говорить долго искал D7 отлично работает отключил все кроме темп и даты но вот дату не могу настроить где то видел в инете скетч не стал искать по этому хотел спросить без скетча можно какой не будь кнопкой подправить или всетаки скетч нужен кто может ответьте пожалуйста и еше яркость тускловато было поменял этот раздел и стало ярко
 

Verholaz

★✩✩✩✩✩✩
6 Янв 2021
36
30
66

@ASM,
Добрый вечер. В моём случае оказалось достаточно замены фоторезистора. На будущее возьму на заметку. Спасибо.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@djekonil, ничего не понятно. Что за скетч) Самое простое, это принудительно записать время и дату в настройках в сам модуль часов, делается это быстро, на примере из библиотеки этих часов, потом эту строку удаляешь и пользуешься)
 

djekonil

✩✩✩✩✩✩✩
11 Июн 2019
2
0
понял да да как сам не допер большое спасибо большое ASM

этот скетч синхронизация с пк для настройки даты и времени потом прошиваем скетч часов но время и дата остаются не тронутым
 

Вложения

Verholaz

★✩✩✩✩✩✩
6 Янв 2021
36
30
66
Добрый вечер. У меня часы получились примерно такие:]IMG_20210707_202810.jpgIMG_20210707_202730.jpgIMG_20210707_202727.jpg
Примерно потому что ещё не закончил полностью. Скетч взял из #431. Вместо BME280 поставил BMP280. Отключил время с Ds3231 и влажность с BME280. Вернул незначащие нули и в дате включил нижнюю точку. Использование ESP8266 в подобных семисегментных часах не вижу смысла (по крайней мере для себя точно). Всем удачи.
Добрый вечер. Закончил изготовление часов. На фотографии вид корпуса с задней и нижней стороны с ножками. Можно будет позже покрыть корпус лаком. Всем удачиIMG_20210718_193715.jpg]
]
 

Вложения

Изменено:

maksland

★★★✩✩✩✩
13 Янв 2019
442
103
Omsk
корпус как будто из дерева, а почему Ds3231 отключили ?
ESP8266 у нас в соседней ветке, мне понравилось что без кнопок и данные в народный мониторинг будут отправляться из моей деревушки :)
и синхронизация по атомным часам :)
ASM бы проверил монтаж на плате чтобы я платы заказал и опробовал в деле. А то есть подозрение что что то не туда подключил.
А по этому проекту ждём человека чтобы он этот самый BMP280 прикрутил в скетче и часы можно сказать идеально законченные !
У меня в качестве светорассеивателя применяется матированный с двух сторон акрил - с расстояния 8-10мм светодиод не различим и весь сегмент равномерно засвечен, только при самой минимальной яркости в центре пятно более засвечено.
 

Вложения

Изменено:

Verholaz

★✩✩✩✩✩✩
6 Янв 2021
36
30
66

@ASM,
Добрый день. Корпус сделал из бруска 11*60*2200мм и рейки 5*11*2200мм. Срез под 45 градусов делал при помощи стусло (брусок). Рейку резал под прямым углом и вклеил впереднюю часть корпуса (выполняет роль упора для матрицы часов). На ESP8266 у меня есть Clock-Informer (автор Сэм). Мой вариант 2*4(2 ряда по 4 матрицы max7219). Семисегментные индикаторы менее информативны. В эти часы я прошил старую ардуино нано (несколько лет прошивал на макетке и паял саму плату). С DS3231 отключил только вывод температуры.
 

Вложения

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

maksland

★★★✩✩✩✩
13 Янв 2019
442
103
Omsk
Что малоинформативно то да, хотя много и не надо от часов требовать. И так давление, 2 температуры, дата и еще эффекты в плане выбора и смены цвета. Вот если матрицу ws2812 7*26-30 то можно что то организовать. Но всё такое прожорливое будет... они оказывается когда выключены (не горят) то тоже ток кушают. Вот всё на лампу смотрю, давно смотрю... надо делать ! :)
 
Изменено:

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
129
9
Ну могу подкинуть еще идею, Здрасте всем. Что если..., кто возьметься научить эти часы говорить время каждый час или пол часа, например раз в час полноценное произношение пяти коротких сигналов, шестого удлинненного сигнала, затем произношение наступившего времени, к примеру: пик, пик, пик, пик, пик, пиииик, десять часов ровно, а каждые пол часа либо просто короткий звуковой сигнал информирующий о прошествии очередной 30-ти минутке либо произношение к примеру шестнадцать часов тридцать минут. Говорят такое можно реализовать с помощью китайского модуля чтения файлов с карты памяти типа такого: dfplayer mini player module for arduino
 

maksland

★★★✩✩✩✩
13 Янв 2019
442
103
Omsk
есть еще модуль со встроенной памятью на 4мб, 2 таких лежат ...
выявил небольшую проблему - почти в полной темноте (когда яркость минимальна ) при отображении температуры имеется дрожание/мерцание показаний (все светодиоды), днем нормально
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
Добрый вечер ребят.Озаботился я этими часами: понравился проект. Все получилось,но вылезла проблема:заменил DS3231 на DS1307 (благо,они почти похожие:последние без датчика температуры). Все заработало,но! часы не идут. Тупо стоят,хотя в примерах время устанавливается в тестовом скетче в порт время и дата выводится.Но часы время НЕ отсчитывают. Как думаете,модуль часов сдох или еще какая причина? скрины вывода в порт прилагаю (там видо что время выводится неизменным).
 

Вложения