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

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

Комментарии

poty

★★★★★★✩
19 Фев 2020
3,223
937
@начинающий, какое-то странное описание. Начать с того, что "заранее установленный в базовых часах разъем для подключения дублирующего табло" ни о чём не говорит. Что в этом разъёме находится, какие сигналы/питание/...? Откуда конкретно (по схеме) эти сигналы берутся?
40-50 метров - серьёзная длина для такого достаточно высокочастотного сигнала (0,8МГц без учёта запаса на передачу "хороших" фронтов). Наиболее перспективно здесь использовать витую пару, но к ней нужно что-то придумать, чтобы сигнал сделать балансным. Однако, если просто добавление провода приводит к зависанию, нужно сначала разбираться с этим, а здесь возвращаемся к первой фразе. Возможно, просто развязки на эмиттерном (истоковом) повторителе будет достаточно, а может и нет.
 
  • Лойс +1
Реакции: Sergo_ST

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
@начинающий, Что в этом разъёме находится, какие сигналы/питание/...? Откуда конкретно (по схеме) эти сигналы берутся?
ранее как то обсуждалось, где то на стр 45...46, выход ардуины D6 который припаян к резюку 300...470 ом после которого подключена лента, это типа схема подключения ленты к ардуине в основных часах, как выяснилось из обсуждения второе табло собранное по той же схеме из той же ленты, подключаем к "выходу" того резистора к которому подключено первое табло, т.е. оба Din обеих лент подключаются параллельно к резистору 470 ом второй конец которого подключен к D6 ардуины. На разъем выведены 1. Dout с резистора подключенного к D6 ардуины паралельно Din первой ленты, 2. GND, 3. +12V с блока питания питающего первую ленту.
 
Изменено:

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
Идея с RS-232/485 очень понравилась. Есть у кого нибудь готовое решение для ленты ws2811, как подключиться ко входу Din на ленте "базовых" часов, и через интерфейс 232 или 485 передать сигнал, обратно его преобразовать и подключить к Din второй ленты второго табло. В итоге два дисплея на расстоянии друг от друга должны показывать одно и тоже.
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
Окажите пожалуйста помощь и поддержку? Идея такая: в коридоре цеха (45 метров) в одном конце будут висеть так называемые "базовые часы", к которым будут подключены метеодатчики. Цель: в противоположном конце коридора повесить табло дублирующее показания базовых часов. Подскажите пожалуйста, как это реализовать? Получается что то типа дублирующего табло, но с разнесением на расстояние 40...60 метров от "базы". Как такое реализовать?
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
По RS-485 передавать периодически нужные данные.
Прошу Вашей помощи в реализации данного способа, я имею ввиду теорию, рисунки, схемы, чертежи, прошивки если требуется, буду благодарен. Дублирующее табло подключенное параллельно входу основного табло кабелем длиной не более 2-х метров работает адекватно, при увеличении длины кабеля начинаются "разные глюки" поэтому видимо требуется введение преобразователей уровней, ну и устройств для согласования, жду Ваших подсказок.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,963
632
44
@начинающий, Я имел в виду на дублирующем табло свой МК, который с базовым устройством через RS485 общается и синхронизирует данные.
 

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
130
9
@начинающий, Я имел в виду на дублирующем табло свой МК, который с базовым устройством через RS485 общается и синхронизирует данные.
ну хотя бы даже так, метеоинформация от датчиков будет отображаться от "первых" так называемых "базовых" часов т.е. первые "базовые часы" обвешены датчиками, и с какого то вывода дуни информация передается на "второе табло" где все отображается синхронно и одновременно с первыми часами? помогите как это реализовать в практике, а с меня фотоотчет.
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,223
937
@начинающий, т.е. и питание по проводу в 50 метров идёт? Тогда это будет второй проблемой.
Первое, что я бы сделал - подключил бы первый пин разъёма на второе табло непосредственно к выводу Ардуино. На входе во второе табло сдублировал бы резистор. Если это не поможет, второй итерацией, поставил бы эмиттерный повторитель между выходом Ардуино и первым пином разъёма. А уж если и это не поможет, то тогда уж заморачивался бы со всякими RS485-ыми.
Но в целом у меня есть сильное подозрение, что проблема-таки в кабеле. Хоть Вы и говорите, что попробовали несколько видов кабелей, но настолько сильно влиять 3 метра кабеля не может никак.
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
@начинающий, вы даже не представляете, насколько тот способ, который вам кажется простым - передавать сигнал ленты с пина Din на другое табло в 50м от первого - насколько этот способ сложнее , нежели собрать еще одни часы с еще одной ардуиной. Да, придется передавать данные. да придется редактировать скетч - но это в разы проще, чем добиться устойчивой работы ленты по проводу в 50м.

Я уж не говорю про фантастические проекты передачи сигналов ktyns WS2812 по радиоканалц или по RS485
 
  • Лойс +1
Реакции: начинающий

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
ну не совсем фантастика .... надо только проверить всё в железе :)
 

Leon111_09

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

Divin

★★★✩✩✩✩
30 Янв 2021
436
192
@начинающий,
И вишенка на торте :
"Люблю грозу в начале мая,
Когда весенний, первый гром,
Как бы резвяся и играя,
Грохочет в небе голубом."
Грозозащита? Да не...
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
У уважаемого АСМ-а в соседней теме есть эти часы на базе ESP8266. Можно сделать вторые такие же часы для цеха (наверняка у вас там есть вай-фай), и с базовых часов на ардуине слать в народный мониторинг данные с датчиков. А "цеховые" (на базе есп-шки) будут брать эти же данные с того же аккаунта и выводить их на дисплей. И заметьте,никаких кабелей и наводок. Да и бюджетно получится (сравнительно с изначальной идеей управления второго дисплея по 50 метровому кабелю).
 
  • Лойс +1
Реакции: начинающий

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Всё познается в сравнении (особенно с длинным кабелем :) ). А если расположить часы в цеху в месте с наименьшим излучением то наводки будут минимальные. Чего не скажешь если управлять по длинному кабелю,протянутому через весь цех.
 

poty

★★★★★★✩
19 Фев 2020
3,223
937
Ну, я бы не сказал, что радиопередача будет лучше. Да и на 50м придётся вешать 2 роутера как минимум (стены, переотражения....) или парочку репитеров. Немало получается по стоимости.
А для проводов - яркий пример - Ethernet. Потому и говорю, что нужно брать витую пару и делать какой-то балансер, чтобы защищаться от помех.
Но, очень похоже, что у автора проблема в другом, так как просто кусок кабеля больше 2м, подключенный на управляющий выход Ардуино, подвешивает основные часы.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,963
632
44
Чего не скажешь если управлять по длинному кабелю,протянутому через весь цех.
Дифпара (RS-485) вполне себе нормально живет под различными наводками. Не зря RS-485 практически стандарт для подключения управлением различных станков.
 

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
Так что не губите идею с проводами раньше времени...надо проверить всё на практике
вот думаю готовые модули взять или купить микросхемы и собрать платы ...SN75176BDR 49 рублей один корпус
 
Изменено:
  • Лойс +1
Реакции: начинающий

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Ребята, соорудил часики на ленте, месяц идут, никаких проблем, но вот температура раз в минуту, Ну ооочень долго ждать, обращался к автору, подсказывал, но результата нет. Может,КОМУ НЕ ТРУДНО, хотя бы раз в 10-15 сек сделать, и обозначить, что бы можно второй датчик прицепить ( автор указывал) не получается. Пробовал по отображению температуры всякие варианты с скетчем- увы, мозгов не хватает.Заранее благодарен.
 

Вложения

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
Вот скетч, тут вам и дата, температура и куча датчиков, Время отображения настраивается в строке 127
 

Вложения

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
Не хочет компиляться вот с этим "tmElements_t Now", библиотеки установлены...?