Добавить в корзинуПозвонить
Найти в Дзене
Паяльник и код

CH32V003J4M6, WS2812b Новогодний шар на ёлку

Купил в магазине шар Обычный RGB светодиод моргает Очень неинтересно. Поэтому сделаем свой шар Шар будет на аккумуляторе, с перезарядкой, с 4 лампочками. Кнопкой будут регулироваться эффекты 1. Красивый белый Шар 2. Микроконтроллер CH32V003J4M6 3. Четыре WS2812b светодиодов 4. Кнопка вкл/выкл 5. Кнопка 6. Аккумулятор 7. Плата зарядки TP4056 Про микроконтроллер тут и тут Шар вот такой Схема электрическая На макетной плате Проект в MounRiver Studio. Файлы проекта будут в конце статьи Некоторые комментарии Используем библиотеку ch32v003fun. В ней есть пример для управления WS2812b. Но тут оказалась проблема. Она использует SPI, а CH32V003J4M6 не поддерживает (уже заказал платы CH32V003F4P6 потом попробую пример). Пришлось написать свой обработчик. Файл в проекте softwareNeopixel.h. Чтобы всё заработало нужно подключить файл-заголовок из ch32v003fun с названием ch32v003_GPIO_branchless.h Функция инициализации получилась следующей void init_gpio() {
GPIO_port_enable(GPIO_port_C);
GPIO_p
Оглавление

Купил в магазине шар

-2

Обычный RGB светодиод моргает

-3

Очень неинтересно. Поэтому сделаем свой шар

Шар будет на аккумуляторе, с перезарядкой, с 4 лампочками. Кнопкой будут регулироваться эффекты

Что понадобится?

1. Красивый белый Шар

2. Микроконтроллер CH32V003J4M6

3. Четыре WS2812b светодиодов

4. Кнопка вкл/выкл

5. Кнопка

6. Аккумулятор

7. Плата зарядки TP4056

Про микроконтроллер тут и тут

Сборка

Шар вот такой

-4

Схема электрическая

-5

На макетной плате

-6

Исходный код

Проект в MounRiver Studio. Файлы проекта будут в конце статьи

Некоторые комментарии

Используем библиотеку ch32v003fun. В ней есть пример для управления WS2812b. Но тут оказалась проблема. Она использует SPI, а CH32V003J4M6 не поддерживает (уже заказал платы CH32V003F4P6 потом попробую пример). Пришлось написать свой обработчик. Файл в проекте softwareNeopixel.h. Чтобы всё заработало нужно подключить файл-заголовок из ch32v003fun с названием ch32v003_GPIO_branchless.h

Функция инициализации получилась следующей

void init_gpio() {
GPIO_port_enable(GPIO_port_C);
GPIO_pinMode(GPIOv_from_PORT_PIN(
GPIO_port_C, 4), GPIO_pinMode_O_pushPull, GPIO_Speed_10MHz);
GPIO_pinMode(GPIOv_from_PORT_PIN(
GPIO_port_C, 1), GPIO_pinMode_I_pullUp,
GPIO_Speed_In);
}

На PC4 - WS2812b, на PC1 – кнопка переключения режимов

Состояние кнопки определяется кодом

button_is_pressed = !GPIO_digitalRead(PC1);

Количество светодиодов задается

#define LED_NUM 4

Массив, где хранится цвет светодиодов

uint8_t colorData[3*LED_NUM];

В библиотеке led_func.h описаны основные функции управления светодиодами
LED_OFF - отключить
LED_WARM_WHITE – белый WARM
LED_COLD_WHITE – белый WHITE
LED_CUSTOM – выбор цвета всей ленты
LED_ONE – цвет одного светодиода
LED_RANDOM – случайный цвет
LED_TWINKLE_RED – мерцание в красном
LED_TWINKLE_BLUE – мерцание в синем
LED_TWINKLE_GREEN – мерцание в зеленом
LED_TWINKLE_YELLOW – мерцание в жёлтом

Пример, чтобы шар стал красным

LED_CUSTOM(colorData, LED_NUM,255,0,0);

Второй светодиод красный

LED_ONE(colorData, 255,0,0,1);

Можно комбинировать, использовать по очереди и другие варианты

В проекте задано 18 разных эффектов

Окончательная сборка

-7

Все убираем под крышку

-8

Результат

Первый тест мерцание

-9

А вот уже на ёлке с бантиком

Просто светит белым

-10

Синим

-11

Красным

-12

А вот с эффектами

-13

Пишите код своих эффектов в комментариях. Подписывайтесь на канал!!!

Ссылки

Проект - https://disk.yandex.ru/d/Fhob_NlqnYRRvQ