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

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

Комментарии

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
"со всякими плюшками и хотелками " с этого места по подробнее - какие особенности и изменения?
надо описание, 95 я так понял там bme прикручен а тут ?
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@maksland, Давно собирал, помню что настраивать можно кнопками не перепрошивая контроллер, Вы скетч откройте и посмотрите там в комментариях всё описано.
 
  • Лойс +1
Реакции: начинающий

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Приветствую всех ,не идёт компиляция версий 1.95 и 1.98 , по умолчанию стоит 1 светодиод на сегмент,ставлю по 6 на сегмент и 4 точки в итоге ардуино пишет что не хватает динамической памяти 1911 байт ,есть возможность победить это дело или чем больше светодиодов ,тем больше памяти либо убрать там датчики и оставить 1 bme и анимации они не нужны
больше 3 светодиодов ардуино не осиляет,маловато
 
Изменено:

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Я хотел ,чтобы ардуино скомпилировал под 6 светодиодов ,а он отказывается делать это и говорит что не хватает динамической памяти,у меня не 3d принтера и я хотел чтобы по 6 диодов из ленты 144 на метр сделать нормальной высоты цифры,а максимально только 3 светодиода заложено в скетче
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@sashok1958, А где Вы нашли в скетче количество LED на точки? Там же написано ..точки по одному светодиоду. Я попробовал на Nano 8 LED на сегмент всё компилируется при 9 и 10 LED на сегмент компилируется но ругается что может работать не корректно. Проверил версий 1.95 и 1.98
 

Вложения

  • 168.5 KB Просмотры: 21
  • 180.4 KB Просмотры: 19
Изменено:

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Вы поменяли количество светодиодов в строке 79,а в строках 147,148,149,264,265,266 изменять данные не надо
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@sashok1958, Не надо нигде больше ничего менять, в строке 138 в версии 1.95 и 147 в версии 1.98 функция #define NUM_LEDS ((SEGMENT_LEDS * 28) + 2) сама рассчитывает все значения от того что Вы ввели в строке 75 и 79 соответственно. Эту функцию специально сделали чтобы по всему коду не менять ничего. Поставил количество LED в начале и всё, остальное программа сама рассчитает.
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Спасибо теперь понял ,что в скетче есть функция расчёта количества светодиодов изначально
 

sashok1958

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

Sergo_ST

★★★★★★✩
15 Мар 2020
809
736
@sashok1958, Просто кидаете в корень флешки папки 01, 02, 04. Флешка желательно должна быть предварительно отформатирована в FAT16 или FAT32.
Прошивку перезалил, тк были бы проблемы из-за постоянной отрисовки дисплея...
 
Изменено:

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Sergo_ST прошивку залил часа 4 назад и работает нормально пока,выключил все датчики и тестирую без датчиков 6 светодиодов на сегмент,увеличу до 8 ,а дальше уже мега не потянет,
Sergo_ST , а датчик BMP 180 подойдёт вместо 280 ,а то похоже он у меня дохлый,пробовал на высотомере и предыдущих часах,ничего не показывает,есть bme280
 
Изменено:

Sergo_ST

★★★★★★✩
15 Мар 2020
809
736
@sashok1958, Имелось ввиду были бы проблемы с озвучкой.
а датчик BMP 180 подойдёт вместо 280
Просто так нет, там все завязано на конкретной либе, а работа с 180/085 кардинально отличается от 280-х.
Если это будет востребовано, как будет время, напишу свою прошивку с поддержкой всех датчиков и тд.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@sashok1958, ...есть bme280... Так в этих часах и должен стоять ВМЕ280. У Вас контроллер Mega?
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
kym13 у Sergo_ST, скетче заложен BMP280 он у меня есть но штука капризная показывает адрес 0x76 ,но ничего не выдаёт
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@sashok1958, В нете набери в поисковике " проверить ВМР280 скетч" залей и проверь рабочий он у тебя или нет.
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Всё спасибо разобрался ,датчик bmp280 рабочий,адрес у него что-то 0x58 .китаец подсунул нестандартное устройство,отличие от bme280 только отсутствие датчика влажности, да забыл спросить ,а у ВАС Sergo_ST ночной режим включается автоматически или в скетче тоже устанавливается время
 

Sergo_ST

★★★★★★✩
15 Мар 2020
809
736
@sashok1958, Прошивка без изменений, за исключением добавленной работы с SD картой.
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Приветствую всех, что-то фото датчик ардуино аналоговый не работает ,похоже операционник дохлый,поставил резистор и фоторезистор ,яркость меняется,а так прошива от Sergo_ST работает отлично и голосом болтает тоже хорошо,но надо искать советский маленький динамик на полватта ,чтобы качественно работал без шуршания,да забыл сказать фоторезистор поставил на 128 килоом 5537 работает корректно и резистор на 10 килоом
 
Изменено:
  • Лойс +1
Реакции: Sergo_ST и kym13

Sergo_ST

★★★★★★✩
15 Мар 2020
809
736
@sashok1958, Попробуйте усилитель 8002A(как на DF плеере), он очень хорошо отсекает шумы.
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
Sergo_ST ,а этот усилок 8002A он что с встроенном пороговым шумодавом
 

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
мне матовое стекло идёт для рассеивателей, думаю как бы разработать универсальный корпус часов чтобы все красиво собиралось, размешалось, вешалось и тд и тп
как то топорно всё получается :( нужна рука матёрого дизайнера !
под SD слот уже в 50x50 не вписаться, буду рисовать новую плату .... охота плюшки Sergo_ST проверить
 

sashok1958

✩✩✩✩✩✩✩
15 Май 2021
42
5
maksland мне нравятся проекты Sergo_ST так ,как в них подробно по полочкам всё расписано ,для хорошей видухи ,надо цифры паять на стекло текстолите двухстороннем ,на одной стороне светодиоды а на второй шина и каждую цифру надо заблокировать компьютерным электролитом 1000х6 вольт.У меня питание подходит на конец ленты ,а схема запитывается с начала ленты.,Матовое стекло от дневного света СССР сейчас трудно найти,я беру обычное оргстекло и натягиваю на него два слоя дорогой кальки ,она немного потолще обычной вот и получается нормально.Раньше ИКЕА были материалы для этого дела
 

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
так и делаю :)

но сейчас хочу цифры полегче - 8ae3071b-bf19-4991-8de0-d15b8a8ed70c.jpg
и там сплошная плата не подойдёт