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

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

Комментарии

bort707

★★★★★★✩
21 Сен 2020
2,895
860
Да все просто, на уно нано на этом пине висит светодиод, который может просаживать уровень и лента может работать некорректно
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
Всех приветствую! Извиняюсь за долгое отсутствие. Прикрутил BMP280...
И я вас приветствую. С возвращением :) , Нашел в Вашем скетче одну маааленькую ошибочку: в строке с автоматической регулировкой яркости (строка №181: if (setups[4] == 0) brightness = map(analogRead(LIGHT_PIN), 0, 1023, LIGHT_MAX, LIGHT_MIN); ) надо местами менять MIN и MAX. Иначе регулировка работает в обратную сторону: днем тускло,а вечером ярко.
 

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk
не работает приемник, уже и контроллер заменил .
Дело в прошивке (светодиод должен тоже мигать), такие надежды возлагал на радио удлинитель :(
"Иначе регулировка работает в обратную сторону: днем тускло, а вечером ярко." у меня на 1.8 версии корректно работает
на 20 метров надо ... радио удлинитель на ESP делать :)
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
не работает приемник, уже и контроллер заменил .
Дело в прошивке (светодиод должен тоже мигать), такие надежды возлагал на радио удлинитель :(
может все-таки прислушаетесь к моим советам и сделаете удлиннитель без эмулятора дс- сенсора?
Примеров выносных температурных датчиков в инете полно
 

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk
Внедрять в скетч беспроводной датчик не надо, на Коте это уже сделали. Отсутствие возможности пробросить провод на улицу не так часто встречается.
С модулем и без модуля светодиод не должен гореть на приемнике, ошибке в монтаже нет и контроллеры использовал разные.
Прошиваются без проблем, тут в прошивке проблема 100%
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
Внедрять в скетч беспроводной датчик не надо, на Коте это уже сделали.
но он не работает:)

на Коте очень много грамотных железячников, но в программировании они обычно крайне слабо разбираются.
Но дело ваше, можете ждать пока кто-то по той ссылке решит вашу проблему.
 

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk
кому нужен удлинитель ? на метров 100 ! https://shop.ulrichradig.de/Module/Light-Control-DMX/WS2812-Range-Extender.html если я правильно понял по переводу . Название микросхемы прочитать сделать
кажется SN75176A
Интерфейс RS-422 обеспечивает дифференциальную однонаправленную передачу данных по линиям с возможностью соединения «точка–точка» или «master – много slave».
Это еще один интерфейс, который до сих пор достаточно часто применяется в промышленности. RS422 похож на RS-232, но в отличие от последнего использует дифференциальный сигнал для одномоментной отправки и приемки сообщений по разным линиям.
Повышенная стойкость к помехам.
  • Большая дистанция передачи данных – до 1200 метров.
  • Скорость передачи данных зависит от расстояния: если соединение между компонентов всего 10 метров, то она может достигать 10 Мбит/с. А при максимальных 1200 метров – всего лишь 10 кбит/с.
  • Поддержка топологии «точка–точка».
  • Нужен согласующий резистор
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,837
592
44
SN75176B с интерфейсом RS-485, он как раз подходит для работы "master - много slave", т.к. имеет ручное переключение RX-TX.
RS-422 по двум дифпарам бегает. И для RS-422 их скорее всего нужно парой подключать, по одной на каждую дифпару.

1631893990565.png
 
Изменено:

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk
хотя в даташите RS-422 но почитав про 485 всё понятно , микросхема универсальная, недорогая и доступная
интересно как в живую работать будет с ws2812 ?
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,837
592
44
хотя в даташите RS-422
Погуглил схемы. Да, как и предполагал, они ставятся по штуке на каждую дифпару для RS-422, поэтому и упоминание про этот протокол в даташите.
Отличия A от B - максимальная скорость работы. B - до 10 мегабит работает.
 

Leon111_09

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

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk

начинающий

✩✩✩✩✩✩✩
13 Дек 2020
132
9
со схемой примерно понял, а SDA SCL аналоговые или цифровые? вроде как подключаются к А4, А5, а в теле скетча в разделе обработки данных с БМП280 фигурирует оператор digitout,
case 22: { // Режим вывода давления
DigitOut(21, pres / 100, (pres % 100) / 10, pres % 10, 0, led_color); вот тут и возник вопрос посмотреть в схему, может я чего не так понял.пытаюсь "расшифровать" скетч, чтобы понять откуда что берется и заменить BMP на BME, но в примере где есть bme совсем другая его реализация вот сижу ломаю голову, может просто исправить все буквы бмп на бме и скопировать из другого примера кусок где происходит считывание из датчика значения влажности и вставить сюда, и еще нужно будет дописать вывод влаги на ленту и скопировать значек процентов, пока еще чисто в теории пытаюсь себе представить на сколько это реально из двух скетчей создать третий.
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
SDA SCL аналоговые или цифровые? вроде как подключаются к А4, А5,
да,на эти пины и идет подключение. просто на них же подключается и часовой модуль,а связь идет через адрес (там в скетче указан). вы на эти пины подключите сначала часовой модуль, а к часовому модулю (там есть вторая пара пинов) подключите БМП280. все будет работать-у меня так подключено.
 
  • Лойс +1
Реакции: начинающий

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk
Спасибо но это немного другое
У меня цель не трогать скетч и схему а просто подключить без проводов датчик DS18B20. Пошли по пути реверс инженеринга... пока в процессе тестирования
 

Leon111_09

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

maksland

★★★✩✩✩✩
13 Янв 2019
463
105
Omsk
усложнять так уже не буду :( надо доделать то что есть, повесить на стену и забыть :)
платы сегодня забирать с почты, до снега надо запустить