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

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

Комментарии

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@lafrof, да,все правильно: один контакт кнопки на пин,второй на gnd. И так на обоих кнопках. Уж с чем-чем, а с кнопками никогда не было проблем :).А сами кнопки исправны?
 

lafrof

✩✩✩✩✩✩✩
19 Янв 2022
18
2
@Leon111_09, да покупал 6 шт все звонятся на кроткую при нажатии, уже просто припаял провода замыкаю и ни чего. Часы на стадии сборки в корпус, сижу думаю где отверстия делать под кнопки и датчики, а кнопки не работают.

@Leon111_09, я уже думаю может там еще какую то кнопку нужно чтобы ввести в режим настройки?
 

Leon111_09

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

lafrof

✩✩✩✩✩✩✩
19 Янв 2022
18
2
прошу прощения а на какой пин третья ? я просто уже не вывожу!

по ходу гон какой то модуля времени( после отключения питания начинает считать время от того которое прописано в скетче)
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
по ходу гон какой то модуля времени( после отключения питания начинает считать время от того которое прописано в скетче)
а что вы хотели, если у вас в сетапе прописано 23 января?
C++:
Now.settime(0,49,23,23,1,22,6);
-у вас так и будет при каждом рестарте устанавливаться
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@lafrof,
После прошивки и установки времени в модуль закоментируйте эту строку
Now.settime(0,49,23,23,1,22,6); и снова прошейте. И одну библиотеку в верху DS1307 уберите( у Вас две там подключены).
bort707 Вам правильно выше ответил.
 

lafrof

✩✩✩✩✩✩✩
19 Янв 2022
18
2
закоментировал и убрал , вобщем при нажатии кнопки в мониторе порта вижу такое(нажатии любой кнопки мин. часы, идет сброс секунд)
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
так часы и минуты не меняются! только сброс секунд.
я читаю только то, что вы пишете :) Вы не жаловались на часы и минуты, только на секунды :)
Старайтесь как-то спрашивать яснее, что ли.
А еще лучше - не спрашивать сразу, а сначала попробовать найти ответ самостоятельно.
 

poravos

✩✩✩✩✩✩✩
30 Янв 2021
11
1
Я откомпилировать не как не могу выдаёт ошибку
Arduino: 1.6.5 (Windows 8.1), Плата"Generic ESP8285 Module, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, dtr (aka nodemcu), 40 MHz, 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, All Flash Contents, 115200"

Используем библиотеку ESP8266WiFi в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi

Используем библиотеку ESP8266WebServer в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WebServer

Используем библиотеку ESP8266mDNS в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266mDNS

Используем библиотеку ESP8266HTTPUpdateServer в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266HTTPUpdateServer

Используем библиотеку EasyNTPClient в папке: C:\Program Files (x86)\Arduino\libraries\EasyNTPClient

Используем библиотеку RTClib в папке: C:\Program Files (x86)\Arduino\libraries\RTClib

Используем библиотеку FastLED в папке: C:\Program Files (x86)\Arduino\libraries\FastLED

Используем библиотеку Wire в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\Wire

Используем библиотеку SparkFun BME280 в папке: C:\Users\poravos\Documents\Arduino\libraries\SparkFun_BME280

Используем библиотеку OneWire в папке: C:\Program Files (x86)\Arduino\libraries\OneWire

Используем библиотеку DallasTemperature в папке: C:\Program Files (x86)\Arduino\libraries\DallasTemperature



C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3 -I C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/signing.py --mode header --publickey C:\Users\poravos\Desktop\Clock_ESP_5/public.key --out C:\Users\poravos\AppData\Local\Temp\build3565958162193216618.tmp/core/Updater_Signing.h

C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed/bin/xtensa-lx106-elf-g++ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -D_GNU_SOURCE -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/sdk/include -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/sdk/lwip2/include -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/sdk/libc/xtensa-lx106-elf/include -IC:\Users\poravos\AppData\Local\Temp\build3565958162193216618.tmp/core -c -w -Werror=return-type -Os -g -free -fipa-pta -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++17 -MMD -ffunction-sections -fdata-sections -fno-exceptions -DMMU_IRAM_SIZE=0x8000 -DMMU_ICACHE_SIZE=0x8000 -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10605 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_ESP01" -DLED_BUILTIN=2 -DFLASHMODE_DOUT -DF_CRYSTAL=40000000 -DESP8266 -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266 -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\variants\esp8285 -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WebServer\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266mDNS\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266HTTPUpdateServer\src -IC:\Program Files (x86)\Arduino\libraries\EasyNTPClient\src -IC:\Program Files (x86)\Arduino\libraries\RTClib -IC:\Program Files (x86)\Arduino\libraries\FastLED\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\Wire -IC:\Users\poravos\Documents\Arduino\libraries\SparkFun_BME280\src -IC:\Program Files (x86)\Arduino\libraries\OneWire -IC:\Program Files (x86)\Arduino\libraries\DallasTemperature C:\Users\poravos\AppData\Local\Temp\build3565958162193216618.tmp\Clock_ESP_5.cpp -o C:\Users\poravos\AppData\Local\Temp\build3565958162193216618.tmp\Clock_ESP_5.cpp.o

Clock_ESP_5.ino:1:10: fatal error: Constants.h: No such file or directory
compilation terminated.
Multiple libraries were found for "SparkFunBME280.h"

Used: C:\Users\poravos\Documents\Arduino\libraries\SparkFun_BME280

Not used: C:\Program Files (x86)\Arduino\libraries\SparkFun_BME280

Ошибка компиляции.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Clock_ESP_5.ino:1:10: fatal error: Constants.h: No such file or directory
И не будет компилироваться: вы забыли положить в папку со скетчем этот файл: ошибка ясно об этом говорит. Кстати, в этом файле задаются все первичные настройки.
Arduino: 1.6.5 (Windows 8.1)
И не мешало бы обновить IDE: уже давно вышла версия 1.8.15.
 

poravos

✩✩✩✩✩✩✩
30 Янв 2021
11
1
Cтало ещё хуже.
Arduino: 1.6.5 (Windows 8.1), Плата"Generic ESP8266 Module, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Используем библиотеку SPI в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\SPI

Используем библиотеку ESP8266WiFi в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi

Используем библиотеку ESP8266WebServer в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WebServer

Используем библиотеку ESP8266mDNS в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266mDNS

Используем библиотеку ESP8266HTTPUpdateServer в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266HTTPUpdateServer

Используем библиотеку EasyNTPClient в папке: C:\Program Files (x86)\Arduino\libraries\EasyNTPClient

Используем библиотеку RTClib в папке: C:\Program Files (x86)\Arduino\libraries\RTClib

Используем библиотеку FastLED в папке: C:\Program Files (x86)\Arduino\libraries\FastLED

Используем библиотеку Wire в папке: C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\Wire

Используем библиотеку SparkFun BME280 в папке: C:\Users\poravos\Documents\Arduino\libraries\SparkFun_BME280

Используем библиотеку OneWire в папке: C:\Program Files (x86)\Arduino\libraries\OneWire

Используем библиотеку DallasTemperature в папке: C:\Program Files (x86)\Arduino\libraries\DallasTemperature



C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3 -I C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/signing.py --mode header --publickey C:\Users\poravos\Desktop\Clock_ESP_5/public.key --out C:\Users\poravos\AppData\Local\Temp\build6085467129353971181.tmp/core/Updater_Signing.h

C:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed/bin/xtensa-lx106-elf-g++ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -D_GNU_SOURCE -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/sdk/include -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/sdk/lwip2/include -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/sdk/libc/xtensa-lx106-elf/include -IC:\Users\poravos\AppData\Local\Temp\build6085467129353971181.tmp/core -c -w -Werror=return-type -Os -g -free -fipa-pta -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++17 -MMD -ffunction-sections -fdata-sections -fno-exceptions -DMMU_IRAM_SIZE=0x8000 -DMMU_ICACHE_SIZE=0x8000 -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10605 -DARDUINO_ESP8266_GENERIC -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_GENERIC" -DLED_BUILTIN=2 -DFLASHMODE_DOUT -DESP8266 -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266 -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\variants\generic -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\SPI -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WebServer\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266mDNS\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266HTTPUpdateServer\src -IC:\Program Files (x86)\Arduino\libraries\EasyNTPClient\src -IC:\Program Files (x86)\Arduino\libraries\RTClib -IC:\Program Files (x86)\Arduino\libraries\FastLED\src -IC:\Users\poravos\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\Wire -IC:\Users\poravos\Documents\Arduino\libraries\SparkFun_BME280\src -IC:\Program Files (x86)\Arduino\libraries\OneWire -IC:\Program Files (x86)\Arduino\libraries\DallasTemperature C:\Users\poravos\AppData\Local\Temp\build6085467129353971181.tmp\Clock_ESP_5.cpp -o C:\Users\poravos\AppData\Local\Temp\build6085467129353971181.tmp\Clock_ESP_5.cpp.o

In file included from Clock_ESP_5.ino:17:
C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:14:21: note: '#pragma message: FastLED version 3.004.000'
14 | # pragma message "FastLED version 3.004.000"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:65,
from Clock_ESP_5.ino:17:
C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastspi.h:135:23: note: '#pragma message: No hardware SPI pins defined. All SPI access will default to bitbanged output'
135 | # pragma message "No hardware SPI pins defined. All SPI access will default to bitbanged output"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from Clock_ESP_5.ino:2:
C:\Users\poravos\AppData\Local\Temp\build6085467129353971181.tmp\Constants.h:8:29: error: 'D5' was not declared in this scope
8 | #define ONE_WIRE_BUS_2 D5 // PIN датчика ds18b20
| ^~
Clock_ESP_5.ino:24:21: note: in expansion of macro 'ONE_WIRE_BUS_2'
In file included from C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:48,
from Clock_ESP_5.ino:17:
C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastpin.h: In instantiation of 'class FastPin<6>':
C:\Program Files (x86)\Arduino\libraries\FastLED\src/platforms/esp/8266/clockless_esp8266.h:21:49: required from 'class ClocklessController<6, 20, 50, 30, RGB, 0, false, 50>'
C:\Program Files (x86)\Arduino\libraries\FastLED\src/chipsets.h:578:7: required from 'class WS2812Controller800Khz<6, RGB>'
C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:105:52: required from 'class WS2812B<6, RGB>'
C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:302:39: required from 'static CLEDController& CFastLED::addLeds(CRGB*, int, int) [with CHIPSET = WS2812B; unsigned char DATA_PIN = 6; EOrder RGB_ORDER = RGB]'
Clock_ESP_5.ino:103:56: required from here
C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastpin.h:210:24: error: static assertion failed: Invalid pin specified
210 | static_assert(validpin(), "Invalid pin specified");
| ~~~~~~~~^~
Multiple libraries were found for "SparkFunBME280.h"

Used: C:\Users\poravos\Documents\Arduino\libraries\SparkFun_BME280

Not used: C:\Program Files (x86)\Arduino\libraries\SparkFun_BME280

Ошибка компиляции.
 

poravos

✩✩✩✩✩✩✩
30 Янв 2021
11
1
Подскажите в чём ошибка
void loop() // Основной цикл
{
BrightnessCheck(); // Проверка яркости
DSTcheck(); // Проверить DST
TimeAdjust(); // Проверить, изменяется ли время
TimeToArray(); // Получить массив светодиодов с требуемой конфигурацией
TempToArray();
HumidityToArray();
FastLED.show(); // Массив светодиодов дисплея
if (TempShow = = true) задержка (5000);
if (HumidityShow == true) задержка (5000);
}
Выдаёт такое вот stray '\321' in program
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@poravos,
Буквы написаны кириллицей(русские), проверьте буквы (O, A, C, Y) в общем все буквы которые есть в русском и аглицком алфавите
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru

poty

★★★★★★✩
19 Фев 2020
3,223
937
Знаки сравнения не допускают пробела между ними (TempShow == true).
Функции "задержка" нет и не может быть в С. Есть delay.
 
  • Лойс +1
Реакции: Leon111_09 и kym13