Музыкальная шкатулка на Arduino: MP3-плеер, WS2812, датчик Холла

Музыкальная шкатулка на Arduino — красивый и функциональный проект: при открытии крышки играет случайная мелодия (MP3), загорается светодиодная лента WS2812, вращается фигурка (серво, опционально). Закрыл — всё останавливается. Режимы: случайное воспроизведение или пауза (продолжение с того же места). Датчик Холла + магнит вместо кнопки. MP3-плеер DFPlayer Mini. Точное время DS3231 (опционально). Идеально для детей: сказки, музыка, декор. Умный дом своими руками, подарок, декор комнаты.

Музыкальная шкатулка Arduino MP3 WS2812 датчик Холла

Зачем нужна музыкальная шкатулка на Arduino

Обычная шкатулка играет одну мелодию. Наша — живая: открываешь — случайная мелодия, мигают WS2812, крутится фигурка. Закрываешь — пауза или стоп. Записывай сказки, музыку, приветствия. Режим паузы: ребёнок закрыл — потом продолжит с того же места. Датчик Холла + магнит — надёжно, без износа. DFPlayer Mini — MP3 с SD-карты. WS2812 — анимация, автояркость. Проект для детей, подарка, декора, Нового года. Дёшево, интересно, расширяемо.

Компоненты

  • Arduino Nano/Uno
  • DFPlayer Mini (MP3-плеер)
  • Модуль WS2812 (5–20 светодиодов)
  • Датчик Холла + магнит
  • Динамики 8 Ом 0.5–3 Вт
  • Сервопривод (опционально, для фигурки)
  • Сундучок/шкатулка
  • SD-карта (MP3-файлы)
  • БП 5В 2А+

Подключение

  • DFPlayer: RX → D10, TX → D11 (SoftwareSerial), VCC → 5В, GND → GND, SPK1/SPK2 → динамики
  • WS2812: DIN → D6, VCC → 5В, GND → GND, резистор 330 Ом, конденсатор 1000 мкФ
  • Холл: OUT → D2, VCC → 5В, GND → GND
  • Серво (опционально): сигнал → D9, VCC → 5В, GND → GND

Скетч музыкальной шкатулки

#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <FastLED.h>

#define LED_PIN 6
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];

SoftwareSerial mySerial(10, 11);
DFRobotDFPlayerMini myDFPlayer;

int hallPin = 2;
bool isOpen = false;
unsigned long lastOpen = 0;

void setup() {
  FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
  pinMode(hallPin, INPUT);
  mySerial.begin(9600);
  myDFPlayer.begin(mySerial);
  myDFPlayer.volume(20);
}

void loop() {
  if (digitalRead(hallPin) == HIGH) { // открыта
    if (!isOpen) {
      isOpen = true;
      myDFPlayer.randomAll(); // случайная мелодия
      FastLED.setBrightness(255);
      fill_rainbow(leds, NUM_LEDS, 0, 10);
      FastLED.show();
    }
    lastOpen = millis();
  } else { // закрыта
    if (isOpen && millis() - lastOpen > 10000) { // 10 сек
      isOpen = false;
      myDFPlayer.pause();
      FastLED.clear();
      FastLED.show();
    }
  }
  delay(100);
}
Использует датчик Холла (hallPin) для определения состояния (открыто/закрыто).
При открытии: воспроизводит случайную мелодию на DFPlayer и запускает светодиодную анимацию WS2812B с радугой.
При закрытии: если прошло >10 секунд с момента открытия, приостанавливает воспроизведение и выключает светодиоды.
Используется FastLED для управления RGB-лентой, SoftwareSerial для DFPlayer.

Режимы работы

1. Случайная мелодия: randomAll() при открытии. 2. Пауза: закрыл — пауза, открыл — продолжение. 3. Стоп: закрыл — стоп. 4. Анимация WS2812: rainbow, fill. 5. Серво: вращение фигурки при открытии.

Расширение

Сказки/рассказы. Голосовое управление. OpenHAB MQTT. Wi-Fi ESP8266. Автояркость. Разные мелодии по времени суток. Фигурка на серво. RGB-подсветка. Уведомления Telegram.

Заключение

Музыкальная шкатулка на Arduino — волшебный проект. MP3, WS2812, Холл, DFPlayer. Случайные мелодии, пауза, анимация. Дёшево, красиво, для детей и декора.

FAQ — Музыкальная шкатулка Arduino

Мелодия не играет?

DFPlayer RX → D10, TX → D11. SD-карта FAT32, MP3-файлы 0001.mp3–9999.mp3. myDFPlayer.begin(). Громкость 20.

WS2812 не светятся?

DIN → D6, резистор 330 Ом, конденсатор 1000 мкФ. FastLED.addLeds. Питание 5В 2А+.

Датчик Холла не срабатывает?

OUT → D2. Магнит близко. digitalRead(HIGH) — открыто. Подтяжка 10 кОм если нужно.

Пауза не работает?

millis() — lastOpen > 10000. lastOpen обновляется при открытии. myDFPlayer.pause().

Случайная мелодия?

myDFPlayer.randomAll(). MP3-файлы 0001.mp3–9999.mp3. Больше файлов — случайнее.

OpenHAB интеграция?

ESP8266 + MQTT. Топики /music. Items Switch/String. Управление мелодиями.

Серво для фигурки?

Сигнал → D9. Servo.attach(9). servo.write(90) при открытии.

📁 Скачать примеры