Создание потрясающих световых последовательностей с Arduino и сдвиговым регистром
Компоненты и материалы
| Arduino UNO | 1 шт. |
| Макетная плата (breadboard) | 2 шт. |
| Перемычки (jumper wires) | 55 шт. |
| Сдвиговый регистр 74HC595 | 1 шт. |
| Кнопки | 4 шт. |
| Потенциометр (10 кОм) | 1 шт. |
| Светодиоды (LED) | 8 шт. |
| Резисторы 220 Ом | 9 шт. |
| Резисторы 10 кОм | 4 шт. |
Необходимые инструменты
Руки (сборка на макетной плате не требует специальных инструментов)
Программное обеспечение
Arduino IDE
О проекте
Этот проект позволяет создавать и воспроизводить световые анимации на 8 светодиодах с использованием сдвигового регистра 74HC595 и ЖК-дисплея 16x2. Управление осуществляется четырьмя кнопками через интуитивное меню на дисплее.
Управление
- Кнопка 1 (вверх): увеличение значений, установка светодиода в HIGH
- Кнопка 2 (вниз): уменьшение значений, установка светодиода в LOW
- Кнопка 3 (назад): перемещение курсора назад при создании кадра
- Кнопка 4 (меню): выход в главное меню
Возможности
- Создание до 16 кадров анимации (настраиваемо через ARR_SIZE)
- Настройка скорости анимации (мс между кадрами)
- Настройка количества циклов воспроизведения
- Визуальное редактирование кадров на ЖК-дисплее
- Сохранение анимации в виде байтов для сдвигового регистра
Схема подключения
Подключите компоненты согласно схеме. Обратите внимание: на схеме резисторы показаны растянутыми для наглядности, в реальной сборке их можно разместить компактнее.
Код
#include <LiquidCrystal.h>
#define ARR_SIZE 16 // Количество кадров
#define LIGHTS 8 // Количество светодиодов
const int btn1 = 7, btn2 = 8, btn3 = 9, btn4 = 10;
int bs1 = 0, bs2 = 0, bs3 = 0, bs4 = 0;
const int latchPin = 11;
const int clockPin = 13;
const int dataPin = 12;
byte data;
bool ArrOne[ARR_SIZE][LIGHTS] = {false};
byte lightArrOne[ARR_SIZE] = {0xFF};
int animSpeed = 50;
int loopCount = 5;
const int rs = 15, en = 14, d4 = 3, d5 = 4, d6 = 5, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(btn3, INPUT_PULLUP);
pinMode(btn4, INPUT_PULLUP);
lcd.begin(16, 2);
pinMode(latchPin, OUTPUT);
PrintMenu();
}
void loop() {
bs1 = digitalRead(btn1);
bs2 = digitalRead(btn2);
bs3 = digitalRead(btn3);
bs4 = digitalRead(btn4);
if (bs1 == HIGH) { bs1 = LOW; delay(150); Play(); }
else if (bs2 == HIGH) { bs2 = LOW; delay(150); Create(ArrOne); }
else if (bs3 == HIGH) { bs3 = LOW; delay(150); SetSpeed(); }
else if (bs4 == HIGH) { bs4 = LOW; delay(150); SetLoop(); }
PrintMenu();
delay(150);
}
// Функции меню, воспроизведения, создания кадров, настройки скорости и циклов
// ... (полный код доступен в исходнике)
Производственный процесс
- TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Создание рулетки на 37 светодиодов с Arduino Nano
- Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
- Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
- Сборка аудиореактивной настольной лампы на Arduino Nano
- Автономный робот-следопыт с распознаванием лиц на Arduino Nano и OpenCV
- Медное гальваническое покрытие: умная система на Arduino UNO
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10