Большие часы на адресных светодиодах 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
В этом и проблема-как?

Делал на них, тодько на LED индикаторах и Atm8( готовые hex были), нормально работают.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09,После 60ти не только либы с битами, забыл что вчера ел:D:D
 

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
@balent, либа не умеет к сожалению работать с 9 битной температурой. Самый простой вариант это полученную температуру домножить на 8.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
А если вначале просто заменить библиотеку?:oops: @Sergo_ST,Т.е просто не получается
 

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
@balent, если просто замените либу, не факт что все используемые методы будут содержаться в новой либе в том или ином виде.
Я же выше предложил Вам простой вариант, найти место где считывается температура и домножить её на 8.
Где именно это сделать не подскажу тк сейчас нету возможности. Может из ребят кто сейчас здесь сможет подсказать Вам номер или вид нужной строки.

Насколько я помню там за температуру отвечают две переменные temp1 и temp2.
 

sergz1

✩✩✩✩✩✩✩
5 Дек 2021
23
0
Подскажите пожалуйста кто знает, при использовании библиотеки DS3232RTC.h можно выводить/получать отрицательную температуру с 3231, или возможно только положительную получать? Функция temperature(). Или нужно Wire.h использовать для чтения по регистрам и выделению знака для отрицательной температуры?
 

poty

★★★★★★✩
19 Фев 2020
3,223
937
@sergz1, библиотека, фактически, возвращает значащие разряды регистров температуры, иначе говоря, учитывает отрицательные и положительные значения:

DS3232RTC::temperature():
// Returns the temperature in Celsius times four.
int16_t DS3232RTC::temperature()
{
    union int16_byte {
        int16_t i;
        byte b[2];
    } rtcTemp;

    rtcTemp.b[0] = readRTC(RTC_TEMP_LSB);
    rtcTemp.b[1] = readRTC(RTC_TEMP_MSB);
    return rtcTemp.i / 64;
}
 
  • Лойс +1
Реакции: Sergo_ST

bort707

★★★★★★✩
21 Сен 2020
3,046
909

@sergz1,
Как вы практически представляете измерение отрицательных температур этим модулем - будете модуль часов за окно вывешивать?
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
будете модуль часов за окно вывешивать?
Прям сняли с языка :). Хотя... Часы ведь можно и на даче установить. А зимой в домиках без отопления как раз и будут отрицательные температуры. Хотя... Опять же-зачем они ЗИМОЙ на даче в неотапливоём помещении
 

sergz1

✩✩✩✩✩✩✩
5 Дек 2021
23
0
@poty Спасибо за разъяснение.
Часы висят в не отапливаемом гараже, температура около нуля, но может уходить и в минус. Поэтому не пойму, то ли моя ошибка в софте, то ли действительно еще нет минуса, когда я захожу...
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@kym13,Вечер добрый занялся этим скетчем, все прошилось, но время не устанавливается после подключения. Сброс делается,DS3231 исправна с рабочего модуля ( в скетче указаноDS3232RTC! а установлен 3231- опечатка? или мой е подходит?)

@kym13,мОДУЛЬ ds3231НЕ ПОДХОДИТ БЕЗ ИЗМЕНЕНИЙ. я так понимаю, не просто добавить библ DS3231
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
DS3232RTC.h это правильная библиотека, она работает как с микросхемами DS3231 так и с DS3232. Если бы дело было в библиотеке то скетч не компилировался
 

balent

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

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
У меня часы на этом скетче уже несколько месяцев работают. Этот проект был повторен много раз. Ищете ошибку в железе.
Может кнопка залипла или "сопля" где-то и т.д.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@kym13 я неправильно сформулировал, после включения сбрасываю, устанавливаю время, но после установок все по 00, кнопки реагируют правильно, температуру показывает, но время без движения и по00
 
Изменено:
  • Лойс +1
Реакции: kym13

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@balent, у меня есть модуль 1307 (это обрезок 3231), так он ведет себя точно так же. Иногда даже работает. Проверяйте модуль через примеры из библиотеки. Ими же можете установить время с компьютера в модуле.
 

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@Leon111_09, этот модуль снял с рабочих часов. Поставил назад в часы ранние-работает. Что с этим скетчем не так будем бомбить.
 

poty

★★★★★★✩
19 Фев 2020
3,223
937
@balent, так плата-то другая! На ней могут быть проблемы с питанием, сигналом, подтяжкой, замыканиями и прочим, о чём Вам говорили. Сам модуль может быть рабочим, а плата - нет.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@balent,
Специально сейчас собрал стенд(2 Led на сегмент, Ds3231) и проверил скетч, всё работает. Кнопками всё выставляется и сохраняется.
Попробуй этот скетч, он рабочий на 200 %
 

Вложения

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

balent

✩✩✩✩✩✩✩
29 Ноя 2021
53
7
@kym13, Проверил модуль часов на Ардуино, установил время, подсоединю, проверю, может в модуле проблема, тк все устанавливается четко. У меня 1LED в сегменте

Ну, упорно не устанавливается время, даже точки не мигают( температура 1,2, давление, и тп, а время установил, вышел из настроек и по 00) ПИПЕЦ!!, надо смотреть скетч, видимо. Вот прилагаю рабочий сколько ни эксперементировал с ним-как часы. ТОЛЬКО ТЕМПЕРАТУРА РАЗ В МИНУТУ.
 

Вложения