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

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

Комментарии

Plohish

★✩✩✩✩✩✩
18 Ноя 2019
35
12
ws2812b где на каждом светодиоде свой контроллер , в вашей прошивке будут работать ?
 

Вячеслав_45

★★✩✩✩✩✩
10 Июл 2020
72
64
ws2812b где на каждом светодиоде свой контроллер , в вашей прошивке будут работать ?
Да. По одному светодиоду на сегмент

Да. По одному светодиоду на сегмент
У меня на таких собраны часы. Почти год работают
 

Plohish

★✩✩✩✩✩✩
18 Ноя 2019
35
12
если с одним на сегмент, придется делать каждый сегмент ячейкой )), а то я надеялся отделаться "насверлить дырок в листе фанеры"

У меня на таких собраны часы. Почти год работают
а что делали , чтоб весь сегмент "засвечивался" равномерно?
 

Вячеслав_45

★★✩✩✩✩✩
10 Июл 2020
72
64
Сегменты пустые ничем не заполнял. Расстояние от светодиода до экрана примерно 20-25 мм. Экран делал из обычного листа А4 ламинированного с одной стороны, к ниму на ПВА приклеен профиль сегментов вырезан из плотного картона 2 мм, потом перегородки между сегментами где-то 20 мм (из этого же картона) и ещё картонка с дырками под светодиоды, и все это добро на горячие сопли. Корпус из МДФ панелей.
 

Вячеслав_45

★★✩✩✩✩✩
10 Июл 2020
72
64
@maksland,
буду делать ваш вариант
попробую на ws2811 , там три светодиода на сегмент ))
осталось только дождаться ленту из китая и узнать у вас как подключен датчик температуры
Как на картинке только жёлтый на D10
 

Вложения

suhorukov-p

✩✩✩✩✩✩✩
16 Фев 2019
47
6
Зачем ты оборачиваешь своё сообщение в чужую цитату?
Моя версия прошивки....
Светодиоды WS2812 - 30 шт
часы DS3231
температурный DS18B20

А где INO файл для прошивки через ардуино???
@Вячеслав_45, дайте пожалуйста исходник, а то с хексами не понятно как шить, у вас их там два. если через avrdude то какой куда ставить и какие фьюзы выстовлять
 

suhorukov-p

✩✩✩✩✩✩✩
16 Фев 2019
47
6
@Plohish, естественно всё запустится, а ты уже прошил? и как прошивать будешь, можешь подсказать? я тож хочу такие сделать часики, мне только температура на DS18b20 нужна, и ещё интересно в той прошивке, отрицательную температуру показывает? а то где-то подобные прошивки по подались и там только до -0,8 С показывало.
 

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
DS3231 к каким контактам подключаем ? а то кнопка "-" и SDA на A5 сидят
 

Вячеслав_45

★★✩✩✩✩✩
10 Июл 2020
72
64
схема подключения и чем прошить нех, немного поправленная прошивка

DS3231 к каким контактам подключаем ? а то кнопка "-" и SDA на A5 сидят
кнопку "-" на контакт 5 а не на А5

@Plohish, естественно всё запустится, а ты уже прошил? и как прошивать будешь, можешь подсказать? я тож хочу такие сделать часики, мне только температура на DS18b20 нужна, и ещё интересно в той прошивке, отрицательную температуру показывает? а то где-то подобные прошивки по подались и там только до -0,8 С показывало.
отрицательную не показывает (точнее не пробовал) расчет при создании был на отображение комнатной температуры, в будущем наверное допишу и отрицательную, была еще идея сделать два датчика температуры, надо над этим подумать.
 

Вложения

Изменено:

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
кнопки к 5в через резисторы подтягивать не нужно или не помешает ? я просто платку рисую всё в одном
 

suhorukov-p

✩✩✩✩✩✩✩
16 Фев 2019
47
6
ждусь доработанную версию, чтоб отрицательную температуру показывало, а то живя на севере, положительной температуры маловато будет))))

ребята, я в прошивки не рублю, спаять, разработать платы и схемы, это моё, а программирование в одного не получается
 

Вячеслав_45

★★✩✩✩✩✩
10 Июл 2020
72
64
новая версия прошивки часов
  • добавлено отображение минусовой температуры
  • еще пункт в меню
  • поправлен выбор цвета при смене минут
  • изменены некоторые обозначения пунктов меню (подробнее описание в архиве)
  • немного изменен процесс опроса датчика температуры
 

Вложения

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

suhorukov-p

✩✩✩✩✩✩✩
16 Фев 2019
47
6
СПАСИБО ВАМ ОГРОМНОЕ, Добрый человек. Буду заливать прошивку и пробовать. А прошивку (хекс) заливать через usbasp программатор???
 

Вячеслав_45

★★✩✩✩✩✩
10 Июл 2020
72
64
СПАСИБО ВАМ ОГРОМНОЕ, Добрый человек. Буду заливать прошивку и пробовать. А прошивку (хекс) заливать через usbasp программатор???
Ардуину Можно напрямую через usb программой в архиве. Пробовал заливается за пару секунд