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

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

Комментарии

valek

✩✩✩✩✩✩✩
28 Июн 2019
17
1
Москва
@Старик Похабыч, подключил как на картинке в начале темы. брал питание и от самой ардуины и от внешнего блока. сейчас попробую сделать делитель по 5 вольтам. или другой резистор поставлю. подключил я точно правильно. яркость то регулирует.
 

valek

✩✩✩✩✩✩✩
28 Июн 2019
17
1
Москва
даже не знаю как сформулировать. а изза какого нибудь глюка диоды могут светиться тусклее чем может выставить ардуино? я ради проверки сделал вот такой скетч. и с ним получается все ровно ярче чем светят мои часы после перезагрузки в полной темноте.
#include <Adafruit_NeoPixel.h>

#define LED_COUNT 30

#define LED_PIN 13
byte NowBrigtness = 1;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
// put your setup code here, to run once:
strip.begin(); // запускаем адресные светодиоды
strip.setBrightness(NowBrigtness); // устанавливаем яркость светодиодной ленты
strip.show();
}

void loop() {
// put your main code here, to run repeatedly:
for (int i = 0; i < LED_COUNT; i++)
{
strip.setPixelColor(i, strip.Color(0, 255, 0)); // Красный цвет.
}
// Передаем цвета ленте.
strip.show();
// Ждем 500 мс.
delay(500);
// Выключаем все светодиоды.
//for (int i = 0; i < LED_COUNT; i++)
{
// strip.setPixelColor(i, strip.Color(0, 0, 0)); // Черный цвет, т.е. выключено.
}
// Передаем цвета ленте.
strip.show();
// Ждем 500 мс.
delay(500);
}
 

Игорь2019ok

✩✩✩✩✩✩✩
28 Мар 2019
3
0
Моя версия скетча часов. Один светодиод на сегмент. Две мигающие точки (секунды).
Автоматическое изменение яркости ступенчато, опрос датчика раз в 3 секунды.
Изменение цвета ступенчато, потенциометром. В дальнейшем, есть желание сделать изменения цвета потенциометром плавно, но знаний пока не хватает. И как я понимаю, здесь желающих помочь безвозмездно нет.
Ссылка
Я тоже немного доделывал скетчи. Но хотелось бы тоже помощи
 

ylap

✩✩✩✩✩✩✩
13 Мар 2019
3
5
Всем привет! Допилил себе часы, данные по температуре и влажности выводятся с датчика DHT22. Скетч под любое количество светодиодов.
Приветствую! Схемку не опубликуете? Как подключаете DHT-22? Заранее спасибо!
 

ShevaLoL

✩✩✩✩✩✩✩
20 Авг 2019
7
4
а можно еще и датчик давления прикрутить ?
Можно, но я не пробывал. Есть такая штука BME280 умееют показывать температуру, влажность и давление. Её нужно вместо DHT22 ставить, естественно и код поменяется.
 
  • Лойс +1
Реакции: shocker

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
у меня есть такой датчик но температуру говорят лучше им не мерить
 
Изменено:

shocker

✩✩✩✩✩✩✩
22 Окт 2019
3
0
долго пробую дописать скейтч для датчика Bme280 ,но ни чего не получается (
 

Vadim31rus

✩✩✩✩✩✩✩
10 Ноя 2019
1
1
Добрый день , кто может помочь дополнить данный код часов из статьи. добавить 6 таймеров чтоб работали автоматически без ни каких нажатий . чтоб выводился таймер на табло в определенное время . и после какого то время к примеру через 10 минут переключался на часы
 
  • Лойс +1
Реакции: aнатолий

specpeh

✩✩✩✩✩✩✩
11 Окт 2019
2
1
seo-payeer.ru
6 таймеров? Или будильников? Не понятно как они будуг запускаться . Может что то другое имели в виду?
 

Сергей_К

✩✩✩✩✩✩✩
25 Окт 2019
2
0
Днями на просторах был найден универсальный. Вписываете количество диодов в сегменте и все. Регулируется смена цвета. Очень удобно.
https://www.drive2.com/b/462707479390715926?page=0 источник
код полностью переписан и доведен до ума, еще осталось несколько хотелок (которые еще буду реализовывать), но и в таком виде уже на много лучше чем было. Скетч адаптирован под все ленты как 2811 так и 2812, теперь в скетче можно выбрать количество светодиодов в одном сегметнте, так и количество разделительных точек (для 2811). Датчик освещения теперь работает более плавно и не моргает в сумерках как ненормальный. Есть выбор режима автоматической яркости по датчику (авто яркость имеет настройки), либо ручная яркость. Бесполезная раньше кнопка DTS (летнее/зимнее время) теперь меняет цвет часов на один из 16 записанных, плюс есть возможность включить смену цвета: никогда, раз в минуту, каждые десять минут, каждый час, каждые десять часов. Время отображения температуры можно задать в самом низу скетча. Скетч для простоты и понятия, подробно закоментирован забираем тут yadi.sk/d/AavBf_sUUBOVDQтут обсуждаем ok.ru/profile/61355019403/statuses/66016109251467
Подскажите кто- нибудь, пожалуйста, как убрать первый ноль в часах?
 

андрей44

✩✩✩✩✩✩✩
3 Янв 2020
2
0
Еще бы плеер к ним в качестве будильника цены бы не было.и таймер обр . отсчкета прикрутить
 

720x576

✩✩✩✩✩✩✩
23 Дек 2019
1
0
Все повторил, без температуры (удалил кусок скетча). Но намучился с питанием, то ампер не хватает в блоке, то провод длинный (потери). Из за этого или не идут часы, или некоторые сегменты отличаются по цвету. Решается просто. Если у вас стабильные 5 вольт, то запитайте плату в 5+ пин. Можете для успокоения души добавить конденсатор.
 

Вложения

андрей44

✩✩✩✩✩✩✩
3 Янв 2020
2
0
@720x576, по питанию недавно к другу носил бп 5 в он к осцилографу подкинул его там такая гребенка была он пояснил мне что бп проще в мусор и купить зу от телефона с алиэкспресс бп это боль
 

kub

✩✩✩✩✩✩✩
28 Ноя 2019
1
0
Держи, вроде рабочий скетч для BME 280
Спасибо за скетч, все работает! Только небольшое мерцание есть в авто режиме освещенности в некоторых порогах. Запитывал от разных блоков питания и от аккумулятора. Кто нибудь поборол мерцание? )