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

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

Комментарии

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09, @Leon111_09, Не надо драмматизировать ситуацию! Все перепрошили, минутное дело, когда все под руками. Вот почему через Ардуино не идет, вопрос остался открытым для меня.

@bort707, И компим и прошивает. Но вот в програмных тонкостях-извини!

@kym13, Восстановил Ардуинку, закачал hex .... вуаля, полет нормальный. Респект и уважуха за помощь и ТЕРПЕНИЕ. Ну а почему через ino не хочет, буду разбирать не спеша.(y)(y)
 
  • Лойс +1
Реакции: kym13

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@kym13, Восстановил Ардуинку, закачал hex .... вуаля, полет нормальный. Респект и уважуха за помощь и ТЕРПЕНИЕ. Ну а почему через ino не хочет, буду разбирать не спеша.(y)(y)
Подскажу один из вариантов: хекс компилился на другом компе? Тогда и библиотеки скорее всего использовались для этого не ваши. Да и версию IDE я бы на вашем месте все таки обновил до последней.
 
Изменено:

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
Прошли так сказать полевые испытания часов на даче в зимних условиях скетч "Clock_1.8_final" с BME280. Показывают только время, а вместо остального(влажность, давление,температура) ноли, правда при показе температуры цвет ноля синий как и положено при отрицательной температуре. То ли датчик замерз, то ли ардуина, минус не большой от +2 днем до -8 ночью.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@kym13, датчики припаяны или на разъемах? Если на разъемах-могли контакты из-за перепада температур нарушиться. Да и датчик давления,насколько я знаю,не герметичен. Из-за этих же перепадов мог сесть конденсат на датчик давления и стать причиной сбоя.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@Leon111_09,
Всё припаяно, конденсат вряд ли, часы на улице под шиферной крышей (не металл) и окружающая температура не меняется же резко. Я где то читал что ардуина глючит при минусовых температурах, хотя часы же идут. Скорее всего датчик ВМЕ280 косячит.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@Leon111_09,
Зачем на улице второй датчик температуры? Масло масляное. Я второй и не ставил.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Зачем на улице второй датчик температуры?
Но в скетче ведь рассчитано что этот датчик будет находиться в помещении. Насколько я помню,на отрицательную температуру там прописан только один датчик температуры. Вполне может из-за этого и не показывать.
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
@начинающий,
Часы с марта месяца работали
ну тогда добавить нечего, я чета подумал что речь идет о вновь собранных, из новых комплектующих.. .

...Как вариант, если в "тело" датчика попало достаточное количество влаги, то при замерзании (превращении воды в лед) могло порвать либо сам датчик либо его внутренности.
 
  • Лойс +1
Реакции: kym13

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
Ну я же не имею ввиду именно воду, последнюю неделю влажность воздуха 90 и выше процентов. Влага попадает вместе с воздухом в виде паровоздушной смеси в любые щели и конденсируясь на холодных металлических поверхностях превращается в жидкость либо в иней, не обращали внимание на внутренние стороны металлических дверей в подъездах, они зимой всегда покрыты инеем либо наледью, но их же специально никто водой не поливает, далее в последствии колебания температур иней расплавляясь в течении дня превращается в жидкость, а жидкость ночью превращается в лед.
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
в последствии колебания температур
такие действия вызываются большой разницей температур между сторонами двери. В данном случае возле датчика плавная смена температуры и влажности,проветривание внешним воздухом постоянное. Так что эта причина отпадает.
 
  • Лойс +1
Реакции: kym13

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Сколько часов переделано, самое информативное-это температура и время, а остальное ( если только целенаправленно) для красоты( как для меня, обычно, не обращаешь внимание, самоудовлетворение за то, что отображается давление и влажность и все). В последних BMP280 не ставил. Мое мнение.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Избыточное цитирование. Отредактируй или сообщение будет удалено
На вкус и цвет все фломастеры разные. На моих часах температура за окном идет с ДС-ки, а в квартире берет с ВМР. Так же уже и на давление приходится обращать внимание. А вообще я вижу вы не рыбак :).
 
Изменено:

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09,Раньше, когда ездили на рыбалку, приезжаю за человеком, у него во дворе ванна и рыба плавает в ней. Вот он говорит,что t и H не так информативны. Вот когда рыба в ванне на дне-не стоит ехать, а когда на поверхности-ждет удача.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
у него во дворе ванна и рыба плавает в ней.
А если вода замерзла? Прикажете бурить лунку и садиться на контрольный лов? 🤣 🤣 🤣
Когда рыба плавает на поверхности,то это она просит воду заменить в ванной-дышать ей нечем :)
 
  • Лойс +1
Реакции: Boroda22

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Ардуинщикам и рыбакам привет. Часики ( посл версия 1,9) отлично себя показали, пока не наступили морозы. Отрицательные температуры ( датчик 2) отображает некорректно - отсутствует разд точка, не все сегменты цифр светятся, и неправильно по величине отображ температура. Датчик пробовал менять, менял подтяг сопротивление с 4,7кОм на 10кОм ( ранее кто-то писал)-ничего. Есть какие мысли?😗
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
У меня тоже самое, только вместо 18b20 стоит BME280, часы идут, а вот метео данные показывают всякую чушь. Я грешу на ардуину. Хотя в даташите на Атмегу 328 написано рабочая температура от -40 до +85
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
А @kym13, Атмега -то в комнате находится, а датчик -снаружи. Ниже нуля и начинается
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
У меня часы на улице висят. У Вас датчик 18b20 модулем или просто "транзистор"? 18b20 должны работать от -55 до +55. Значит датчик гонит.
 

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
@balent, попробуйте обновить либу microDS18B20, там помом на версии 3.1 и ниже были проблемы с отрицательными температурами. Какой у вас датчик уставлен?

@kym13, могу посоветовать тоже самое, возможно либа бме не правильно/умеет работать с отрицательными значениями...
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@balent, в часах два пина для подключения 18b20: один резервный для комнаты, второй-уличный. Вот уличный отрицательные и показывает. Смотри в скетче,в комментариях-там подписано. У меня этот датчик за окном и все корректно показывает. Кстати, уличный дробные части не показывает-только целые.Дробные показывает комнатный.