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

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

Комментарии

Zubec98

✩✩✩✩✩✩✩
22 Апр 2019
7
0
@Leon111_09,
с памятью уже проблема решилась, так как решил использовать код Вячеслава, он и понадёжнее будет. Вот в него бы дополнительный дисплей и вписать
 

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@Zubec98, этот вариант смотрел?)

По датчикам очень хорошая подборка на сайте народного мониторинга, почитай...
https://narodmon.ru/#!kbsens2
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
@Zubec98 ,что вы хотите от часов? только время или еще что? на предыдущей странице я выложил скетч простых часов с температурой. они управляются с пульта.это может заменить экран. и да,у вас остался открытым вопрос по ДНТ22: он НЕ уличный,боится избыточной влаги.
 

Zubec98

✩✩✩✩✩✩✩
22 Апр 2019
7
0
@Leon111_09,
те файлы что вы выложили, после скачивания пишет что повреждены. то я ваш скетч и не смотрел
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
132
9
@Leon111_09,
те файлы что вы выложили, после скачивания пишет что повреждены. то я ваш скетч и не смотрел
возможно архив недокачен, если пользуетесь мазилой иногда приходится идти по пути инструменты / загрузки и там наблюдать недоскаченный файл помеченный (у меня символом воцклицательного знака) жмем правой кнопкой на загружаемый файл, в появившемся списке выбираем что то на подобии "разрешить загрузку файла" и через пол секунды архив станет исправным, в других браузерах может тоже что либо подобное возможно, так что возможны варианты но этот проверьте.
 
Изменено:

Leon111_09

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

Вложения

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
почти закончил универсальный корпус для часов из этой ветки и темы ASM на ESP. Сделал побольше отверстий для вентиляции датчика температуры и давления (жду Вячеслава :) ). Платы индикаторов по 2 светодиода на сегмент, сверху место для датчика освещенности. В этом корпусе крепление к потолку через трубу джокер и надо будет ещё придумать как на стену вешать. Подключал как гирлянду - красота ! матированный с двух сторон акрил 4мм хорошо рассеивает свет светодиодов но на камеру почему то контуры светодиодов видно а в реальности равномерная засветка
 

Вложения

Изменено:
  • Лойс +1
Реакции: Leon111_09 и ASM

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
Подождите немного Вячеслава, в сентябре если время появится то он подключит давление, подправит немного скетч. Ждем версию 1.9 final :)
 

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
корпус для внешнего беспроводного датчика, сам передатчик уже запустил но приемник что то не хочет принимать - горит светодиод постоянно и всё на приемнике
 

Вложения

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

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
такой, не идеально конечно но альтернативы просто нет
и жаль что поддержки никакой для граждан РФ, если кто с Украины помогите с комментариями в той теме
чтобы время побольше сделать
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
такой, не идеально конечно но альтернативы просто нет
чего это "альтернативы нет"? Если не заморачиваться с эмуляцией ds- протокола, выносной датчик можно сделать в разы проще и на любом радиомодуле.
помогите с комментариями в той теме
чтобы время побольше сделать
в какой "той" теме?

@maksland, я там вижу только часики на маленьких матрицах 8х8 Зачем они вам, тут в этой теме хорошие большие часы

А что касается эмулятора датчика Ds по ссылке - то для наших часов он нафик не нужен, выносной датчик можно сделать значительно проще. Берете ds18b20, к нему какой-то маленький мк, например я брал тини85. И любой радиомодуль - нрф24 или hc12 или jdx40. Контроллером снимаете показания с датчика и отсылаете по радио в двоичном или даже текстовом виде. А в скетч наших часов добавляете прием этих данных по радио. Это будет проще, потому что никакой протокол ds не придется эмулировать. И деталей меньше, так как отдельный мк для приемника не нужен, с приемом справится ардуина, управляющая часами.
 

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
нет, я по ссылке открываю Радио удлинитель - эмулятор, датчика DS18b20
с двух компов сейчас проверил
 

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
Вот так радость ! :)
Я уж подумал всё...вы пропали :) я конечно могу навесом припаять датчик давления к старой плате но через пару дней приедут платы уже с местом для BMP. Так что детали подберу и беспроводной датчик температуры домучаю
Смотрю в меню еще нет датчика (откл вкл ) ?
к примеру
(P) включение датчика давления (0 - выкл, 1 - вкл)
(Pt) установка времени отображения давления 0...5 сек.
или это потом ?
 
Изменено:
  • Лойс +1
Реакции: начинающий

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
132
9
Здравствуйте уважаемые спецы. А не подскажете, можно ли к любым из перечисленных в этой теме часам прикрутить "второй дублирующий дисплей" соединив адресную ленту последовательно как в "базовых/основных" часах? И куда подцепить "вход" ленты, к тому же выходу дуни куда подключена "первая лента", через резюк такого же номинала, на другой D-выход, но что то придется дописать в скетче, что бы информация одновременно сливалась к примеру на D12 и D13? или есть еще какието варианты?
хочу во вторую комнату такие часы но состоящие только из ленты и источника питания. Цель: Как правильно подключить Din второй ленты к первым часам?
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
Проще всего, если полностью дубль - то к тому же пину точно такую же ленту.
А если на другой пин - код править надо
 
  • Лойс +1
Реакции: начинающий

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
132
9
А какое расстояние будет до второго индикатора?
ну если кабель по периметру проложить, не сверля стены то примерно не больше 20-ти метров, думал задействовать что то на подобии витой пары.

все таки стремно на один выход вешать две нагрузки хоть и через токоограничивающие сопротивления, (интересно какой подобрать номинал, если одну ленту подключал через 300 Ом, то две каждую через Ом 500...600?) тем не менее может лучше как то так:
#define COLOR_ORDER BRG // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 12; 13 // 12, 13 подключение лент
#define BRI_PIN A3 // А3 фоторезистор

или так:
#define COLOR_ORDER BRG // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 12 // 12 подключение ленты
#define DATA_PIN 13 // 13 подключение ленты
#define BRI_PIN A3 // А3 фоторезистор

хотя почему то мне кажется вариант define DATA_PIN 12; 13 более правдоподобным, во втором случае прога может увидив первый адрес непонять зачем второй, а может это я туплю, что скажете товарищи ?
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
Сдается мне, 20 метров не будет работать, ставьте отдельную дуину

хотя почему то мне кажется вариант define DATA_PIN 12; 13 более правдоподобным, во втором случае прога может увидив первый адрес непонять зачем второй, а может это я туплю, что скажете товарищи ?
обе записи для двух пинов нерабочие. В первом случае будет ошибка, во втором будет работать один пин - тот который описан последним.
Лента не является нагрузкой, можете сажать две на пин, не бойтесь. Но на 20м работать не будет, думаю
 
  • Лойс +1
Реакции: начинающий

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
132
9
обе записи для двух пинов нерабочие. В первом случае будет ошибка, во втором будет работать один пин - тот который описан последним.
Лента не является нагрузкой, можете сажать две на пин, не бойтесь. Но на 20м работать не будет, думаю
Надо пробовать, в теории на столе с метровым куском кабеля сначала, убедиться в работоспособности, а потом просто один кабель заменить на другой (длинный) и проверить, если результат отрицательный забыть на время. Ладно ответ мне понятен, я тут вмешался в диалог, прошу прощения, продолжаем дисскуссию с Вячеслав_45