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

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

Комментарии

maksland

★★★✩✩✩✩
13 Янв 2019
464
107
Omsk
я только про это подумал ... :), подпаяю датчик на проводах и можно прошивать

Leon111_09 для датчика температуры я распечатал экран Стивенсона, буду крепить на магнитах чтобы не портить сайдинг
 
Изменено:

Leon111_09

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

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
Ребят,подскажите пожалуйста неучу почему ругается компилятор на эту строчку: sensor.requestTemp() (258-я строка); вроде же объявил переменную. Скетч целиком прикладываю.
 

Вложения

Геннадий П

★★★★★★✩
14 Апр 2021
1,845
593
44
@Leon111_09, В библиотеке iarduino_Pressure_BMP которую используешь нет такой функции.

C++:
#include <iarduino_Pressure_BMP.h>  // библиотека Adafruit_BMP280_Library датчика BMP280
iarduino_Pressure_BMP sensor(0x76); // присваиваем датчику BMP280 переменную sensor на адресе (0x76)
 
  • Лойс +1
Реакции: Leon111_09

ASM

★★★★✩✩✩
26 Окт 2018
1,515
295
@Leon111_09, подправь код под библиотеку, примеры есть в самих библиотеках) пока нет возможности посмотреть код)
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
@Leon111_09, подправь код под библиотеку, примеры есть в самих библиотеках) пока нет возможности посмотреть код)
Уже подправил. Компилятор норм прошел. Только нет возможности проверить. Попробуйте прошить и отпишите пожалуйста результат. На всякий случай прикрепил библиотеки.
 

Вложения

ASM

★★★★✩✩✩
26 Окт 2018
1,515
295
@Leon111_09, я уже завершил проект этот, не проверить)
Теперь на ESP)
 

Leon111_09

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

maksland

★★★✩✩✩✩
13 Янв 2019
464
107
Omsk
в бмп не очень точный и для комнатного лучше оставить возможность выноса за пределы часов
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
295
@maksland, как не очень точный) хорошо показывает, как и спиртовой)
 

Leon111_09

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

maksland

★★★✩✩✩✩
13 Янв 2019
464
107
Omsk
Вентиляционных более чем достаточно, проводов через отверстие в 20мм тоже можно будет проложить достаточно (крепление к потолку через трубу). Хочу предусмотреть все варианты размещения и часов и датчиков. На плате предусмотрены 2 датчика ds18b20 и в меню возможность их отключения поэтому в bme/p 280 использоваться должны только датчики давления/влажности (bme280). Я нравится скетч Вячеслава в этой ветке как самый доделанный (меню, универсальность). Но от с 13 июля тут не появлялся (надеюсь в отпуске :) ). Я не против того чтобы сделать версию комнатных часов всего с одним датчиком BME280 без ds18b20 (температура и давления с влажностью). Но пока хочется допилить этот вариант не жертвуя другим датчиком. Именно закончить чтобы не было "и так сойдет ", "будет время - доделаю" или "из того что было " чем страдает много хороших проектов.
 

Вложения

Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
@Leon111_09, привет а на 168 аддуино влезет ?
нет,не влезает. но мне тут какой-то скетч попадался-по размеру подходил. вам под 168-ю надо искать не универсальную (под разное кол-во светиков),а "узкоспециализированную",под одно определенное количество светодиодов.
 

bort707

★★★★★★✩
21 Сен 2020
2,902
863
А почему "не универсальную"? Расход памяти прямо пропорционален числу светиков- что в универсальной, что в специальной прошивке. Поэтому при равной длине ленты универсальная ничем не хуже специальных. А если "не влезает" - надо просто уменьшить число диодов.
Только универсальную надо брать из архива ветки полугодовой или годовой давности, а то потом ее тут переделывали все кому ни лень, получилась каша с топором какая-то
 

Leon111_09

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

bort707

★★★★★★✩
21 Сен 2020
2,902
863
просто все упирается в память (ее обьем): в универсальной зашивается несколько массивов под разное количество светодиодов. и это сказывается на обьеме
откуда вы взяли этот бред- про несколько массивов? Вы в код то загляните...ничего подобного там нет.

И, кстати, в первую очередь на обьеме кода сказывается не число светиков ( оно в любом случае не превышает 100-150 - а это немного), а неуемные хотелки юзеров по добавлению все новых датчиков и прочих перделок и сопелок :)
Так что начинать переделку кода под атмегу 168 нужно с выкидывания из прошивки всего лишнего.
 
  • Лойс +1
Реакции: Leon111_09

maksland

★★★✩✩✩✩
13 Янв 2019
464
107
Omsk
видел проект на attiny85 ... с wifi модулем. Но автор на связь не вышел :(
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
Так что начинать переделку кода под атмегу 168 нужно с выкидывания из прошивки всего лишнего.
тут я с вами согласен полностью.
P.S. кстати,вот скетч часов под атмегу168: вывод часов и температуры,управление с инфракрасного пульта,универсальный скетч под разное кол-во светодиодов в сегменте. да,скетч не мой (уже не помню откуда его качал и чей он).
 

Вложения

Изменено: