본문 바로가기
라즈베리파이

🎶 Wirless LED Pot 만들기: NFC 음악 재생의 마법

by 모빌리티키즈 2025. 4. 22.
728x90
반응형

 

레트로 스타일의 디자인을 갖춘 Owntone 미디어 서버로 스마트한 음악 경험을 만들어보세요! NFC 태그로 앨범을 선택하고 Raspberry Pi 기반의 시스템이 Spotify 및 로컬 파일을 Apple HomePods 또는 스피커로 스트리밍합니다. 그리고 회전하는 디스크가 단순한 디자인 요소가 아니라 음악을 선택하는 핵심 역할을 한다면 어떨까요?

바로 NFC 디스크를 활용한 LED 무선 음악 플레이어 프로젝트입니다! 🎵

🛠️ 핵심 개념

이 프로젝트는 Python 애플리케이션을 활용하여 NFC 태그, LED 조명, 입력 컨트롤 및 Owntone 서버를 연결하는 것이 핵심입니다. 모든 시스템은 CircuitPython 개발 보드와 함께 Raspberry Pi에서 구동되며, 소형 모터가 디스크를 실제로 회전시켜 더욱 독창적인 경험을 제공합니다.

소스 코드 및 모든 지원 파일은 GitHub에서 확인 가능하니, 직접 제작해볼 수도 있어요! 🔗

🏗️ 제작 과정

1️⃣ Raspberry Pi 설정

본체 내부에는 Pi Zero W 2를 장착했습니다. 부팅 시간이 조금 길지만 공간을 절약할 수 있어 적절한 선택입니다. SD 카드에 Raspberry Pi OS Bookworm Lite 64비트를 설치하고, SPI 및 UART를 활성화하기 위해 config.txt에 다음을 추가합니다.

ini
dtparam=spi=on  
enable_uart=1  

이제 하드웨어가 준비되었습니다!

2️⃣ 오디오 구성

Pi Model 3 A+에는 3.5mm 헤드폰 잭이 있지만 음질이 좋지 않아 I2S 오디오 HAT을 사용합니다. 저는 Adafruit I2S 3W 스테레오 스피커 보닛을 선택했고, 측면 패널에 스피커를 글루건으로 고정했습니다.

스피커는 3W 또는 5W가 적당하며, 음질은 간단한 음악 감상에는 충분한 수준입니다.

3️⃣ 모터 제어

디스크 회전을 위해 N30 DC 모터를 활용했습니다. 속도는 6-10RPM이며, 부드러운 회전을 위해 세라믹 커패시터를 납땜해 노이즈를 감소시켰어요.

모터를 L9110H H-Bridge 드라이버로 제어하며, 역기전력으로부터 Raspberry Pi를 보호합니다. 하지만, Pi의 GPIO에 직접 모터를 연결하면 위험하니 꼭 모터 드라이버를 사용하세요!

4️⃣ NFC 디스크

여기가 이 프로젝트의 핵심 포인트!

각 디스크에는 NFC 스티커 태그가 숨겨져 있으며, 회전하는 부분 내부에 PN532 NFC 리더가 장착되어 있습니다. 디스크를 올려놓으면 NFC 리더가 태그를 감지하고, 대응하는 앨범 또는 재생목록이 자동으로 플레이됩니다!

bash
SPI 인터페이스를 사용하여 PN532 NFC 모듈을 구성하세요.

디스크 표지는 70x70mm 크기의 끈적한 종이에 인쇄한 후 부착합니다.

5️⃣ 컨트롤 인터페이스

제어판에는 세 가지 손잡이가 있습니다.

  1. 로터리 스위치 (1P3T)
    • PowerBoost를 OFF로 설정
    • 로컬 스피커 선택
    • 원격 스피커 선택
  2. 전위차계 (내부 스위치 포함)
    • 볼륨 조절
    • 음소거 기능
  3. 로터리 인코더
    • 트랙 건너뛰기
    • 재생 / 일시 정지

그리고 WS2812B LED 스트립을 활용하여 디스크 회전에 반응하는 LED 효과를 추가했습니다!

6️⃣ 전원 관리

전원은 10000mAh Li-Po 배터리를 사용했지만, 5000mAh 정도로도 충분할 것입니다. PowerBoost 1000을 활용하여 안정적인 5V 출력을 제공하고 빠르게 충전할 수 있도록 했습니다.

💡 배터리를 사용하지 않는다면 USB-C 포트를 Pi 전원 핀과 직접 연결하면 됩니다.

7️⃣ 배선 및 인쇄

배선은 Perma-Proto 프로토보드를 사용하여 깔끔하게 정리했고, JST 커넥터를 활용하여 모듈을 쉽게 분리할 수 있도록 설계했습니다.

본체는 PLA 소재, LED 디퓨저는 PETG 소재로 인쇄했으며, Bambu A1 Mini 프린터를 사용해 제작했습니다.

 

1단계: 라즈베리 파이

셸에는 Pi Zero 및 Pi Model 3 A+용 장착 구멍이 있습니다. Pi Zero는 부팅 시간이 더 길지만 공간을 덜 차지합니다. Pi 3는 더 많은 열을 발생시키지만 반응성이 더 뛰어나고 Wi-Fi가 더 좋습니다. 지금은 Pi Zero W 2를 선택합니다. 가끔 딸꾹질이 나지만 나는 그걸로 살 수 있습니다.

SD 카드를 가져와 Raspberry Pi OS Bookworm Lite 64비트로 플래시합니다. Bullseye와 함께 엇갈린 결과를 얻었습니다. config.txt에 이 두 줄을 추가하여 SPI 및 UART를 활성화합니다.

dtparam=spi=켜기
enable_uart=1

2단계: 오디오

Pi Model 3 A+에는 3.5mm 헤드폰 잭이 있지만 좋지 않습니다. 오디오 I2S HAT가 적합합니다. Adafruit I2S 3W 스테레오 스피커 보닛이 있습니다. 이 가이드는 모든 I2S HAT에서 작동해야 합니다.

스피커의 경우 3W 또는 5W가 가능합니다. 이전 프로젝트 중 하나에서 가지고 있던 Amazon Basic Speaker에서 내 것을 구했습니다. 음질은... 충분하다. 뜨거운 글루건으로 스피커를 측벽에 붙입니다.

3단계: 모터

20V에서 작동하고 속도가 6-10RPM인 N30 DC 모터를 사용합니다. 선택적으로 모터 단자 사이에 세라믹 커패시터를 납땜하여 소음을 줄이고 저속에서 부드럽게 회전합니다. 모터에 액체 오일을 바르지 마십시오. 소음을 악화시킵니다.

모터를 제어하기 위해 L9110H H-Bridge Motor Driver를 사용합니다(데이터시트의 핀아웃에 주의). 역기전력으로부터 Pi를 보호하고 모터를 앞뒤로 회전시킵니다.

주의 : DC 모터를 Pi GPIO에 직접 연결하지 마십시오. 작동할 수도 있지만 역 EMF와 높은 전류 사용으로 인해 Pi를 튀길 수 있습니다.

쉘의 회전 부분은 30x42x7mm 베어링으로 패널에 연결됩니다.

맞춤형 기어를 인쇄해야 하는 경우:

  1. 피치 서클 직경 : 60mm 및 12mm
  2. 이의 수: 60와 12
  3. 모듈: 1mm

모터 마운트는 분리가 가능하도록 설계되었으므로 자신만의 마운트를 설계하고 인쇄한 다음 두 개의 M2 나사로 본체에 나사로 고정할 수 있습니다. 소음을 줄이기 위해 마운트와 쉘 사이에 고무나 폼과 같은 진동 방지 재료를 추가하십시오.

4단계: 디스크

여기에서 마법이 일어납니다. 인쇄된 각 디스크에는 덮개 아래에 작은 NFC 스티커 태그가 있습니다. NFC 리더는 회전하는 부분 내부에 있지만 리더는 회전하지 않습니다! 각 태그 ID는 Owntone의 앨범 또는 재생 목록과 연결됩니다.

PN532는 NFC 리더의 일반적인 선택이지만 대부분은 이 프로젝트에 비해 너무 큽니다. 나는 HiLetgo에서이 보드를 추천한다; 그것은 작고 회전하는 부분에 잘 맞는다.

PN532와 함께 SPI 인터페이스를 사용해야 합니다. 이 칩의 I2C 인터페이스는 I2C 클럭 스트레칭으로 인해 Raspberry Pi에서 안정적으로 작동하지 않습니다. PCB의 SMB 헤더를 물리적으로 대칭 이동하여 SPI를 사용하도록 NFC 모듈을 구성합니다.

70x70mm 크기의 끈적한 종이에 표지를 인쇄하고 디스크에 붙인 다음 면도칼로 자릅니다.

5단계: 컨트롤

제어판의 세 가지 손잡이는 다음과 같습니다.

로터리 스위치, 이상적으로는 1P3T. 리미터가 있는 2P6T가 있으므로 3가지 위치만 있습니다.

  1. PowerBoost에 대해 "끄기"를 활성화합니다.
  2. 현지 스피커를 선택합니다.
  3. 원격 스피커를 선택합니다.

이와 같이 내부 스위치가 있는 일반 전위차계입니다. 전위차계는 볼륨을 제어하고 스위치는 음소거처럼 작동합니다.

트랙을 건너뛰고 재생/일시 중지하기 위한 일반 로터리 인코더입니다.

빛을 더하기 위해 이 WS2812B 144-LED 3.3피트 스트립에서 10개의 LED를 잘라냈습니다. 모든 NeoPixel 스트립이 작동한다고 생각합니다. Adafruit에는 이에 대한 훌륭한 가이드가 있습니다.

6단계: 전원

주의 : 연결하기 전에 항상 전압계로 배터리 극성을 확인하십시오.

저는 10000mAh Li-Po 배터리를 가지고 있지만 제가 당신이라면 5000mAh를 사용할 것입니다. PowerBoost 1000 충전기는 안정적인 5V를 제공하고 배터리를 빠르게 충전합니다. 훨씬 더 저렴한 옵션이 있지만 다시 말하지만 이미 가지고 있던 것입니다. PowerBoost는 CC 저항기를 사용하여 USB-C 브레이크아웃에 연결됩니다. USB 브레이크아웃용 마운트는 별도의 부품이므로 전체 쉘을 다시 인쇄하지 않고도 직접 디자인하고 인쇄할 수 있습니다.

배터리가 필요하지 않은 경우 PowerBoost를 건너뜁니다. USB-C 커넥터의 VS 및 GND를 Pi 전원 핀에 연결하기만 하면 됩니다.

7단계: 배선

Perma-Proto는 놀랍습니다. 자신에게 호의를 베풀고 프로토 보드에서 JST 커넥터를 사용하십시오. 이 방법으로 프로젝트를 조립하고 분해하는 것이 훨씬 쉽습니다. 회로도를 주의 깊게 따르고 모든 것을 함께 납땜하십시오. 구성 요소 방향에 주의하십시오.

내가 사용한 재료 목록은 다음과 같습니다.

  1. 전력선 및 오디오용 26AWG 전선
  2. 데이터 라인용 30AWG 와이어
  3. 2.54mm JST 커넥터
  4. 프로토보드용 점퍼 와이어
  5. 스탠드오프 나사

핀 #18, #19, #21은 I2S 오디오용으로 예약되어 있으므로 사용하지 마십시오.

8단계: 인쇄 및 조립

본체는 기본 PLA입니다. 측면 패널은 Bambu PLA Wood입니다. LED 디퓨저는 반투명 PETG입니다. Bambu A1 Mini로 0.16 고품질 프로파일로 모든 것을 인쇄했습니다. 본체 색상에 따라 LED에서 빛이 번지는 것을 방지하기 위해 충전량을 최대 75%(그리드)까지 늘릴 수 있습니다. 상단 부품이 제자리에 고정되어야 합니다. 측벽 또는 기타 느슨한 부품은 얇은 양면 테이프로 고정할 수 있습니다. 하단 패널은 6개의 M2 나사로 고정됩니다.

9단계: 자체 톤

빌드 및 구성 방법에 대한 Owntone 설명서를 따릅니다. 실제로는 그렇게 어렵지 않습니다.

종속성을 설치합니다.

sudo apt-get 설치 \
빌드 필수 git autotools-dev autoconf automake libtool gettext gawk \
gperf 들소 플렉스 libconfuse-dev libunistring-dev libsqlite3-dev \
libavcodec-dev libavformat-dev libavfilter-dev libswscale-dev libavutil-dev \
libasound2-dev libxml2-dev libgcrypt20-dev libavahi-client-dev zlib1g-dev \
libevent-dev libplist-dev libsodium-dev libjson-c-dev libwebsockets-dev \
libcurl4-openssl-dev libprotobuf-c-dev

리포지토리를 복제합니다.

시디\~
cd owntone-server

마스터 브랜치에서 빌드하는 대신 태그를 사용하여 릴리스로 전환하십시오.

자식 스위치 2.8.2

체격.

autoreconf -i
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-install-user
만들다
sudo make 설치

구성 파일을 살펴보고 필요에 따라 설정을 업데이트하십시오.

sudo 나노 /etc/owntone.conf

Spotify 설정만 변경했습니다.

스포티파이 {
비트 전송률 = 3
base_playlist_disable = 참
artist_override = true
album_override = 참
}

음악 폴더를 만듭니다.

mkdir /srv/음악
sudo chmod -R 777 /srv/음악

Owntone 서비스를 활성화합니다.

sudo systemctl owntone.service 활성화
sudo systemctl 시작 owntone.service

이제 Owntone은 http://<pi-host-name>:3689 에서 사용할 수 있습니다.

10 단계 : 스포티 파이

Owntone 인터페이스에서 공식 가이드에 설명된 대로 Spotify에 로그인해야 합니다. OwnTone이 시작될 때마다(Pi를 켤 때마다) Spotify에서 저장된 모든 재생 목록을 로드합니다. 확실히 시간이 걸립니다. 나는 내가 듣는 재생 목록만 있는 가족 요금제에서 전용 계정을 사용합니다.

11단계: 위성 보드

Seeed XIAO 또는 Adafruit QT Py 보드는 작기 때문에 하나를 선택하십시오. RP2040 기반 보드는 일반적으로 비용이 저렴합니다. 이 프로젝트에서 XIAO nRF52840을 사용합니다. 이 보드는 NeoPixel LED 스트립을 제어하고 아날로그 입력을 읽는 두 가지 작업을 수행합니다. 또한 보드가 즉시 시작되므로 이제 Pi가 부팅되는 동안 LED 애니메이션을 재생할 수 있습니다.

CircuitPython 펌웨어로 보드를 플래시하고 circuitpython.org 에서 올바른 펌웨어를 찾으십시오. 컴퓨터에 연결되었을 때 썸 드라이브로 감지되어야 합니다. Adafruit에 대해 자세히 알아보세요.

보드에 라이브러리를 설치합니다(Pi가 아닌 컴퓨터에서 실행).

pip 설치 circup
Circup NeoPixel 설치
Circup 설치 adafruit_led_animation
Circup 설치 adafruit_ticks
Circup 설치 adafruit_led_animation

이제 src/board에서 보드로 Python 파일을 복사하면 완료됩니다.

주의: 다른 전원으로 전원이 공급되는 동안 보드를 컴퓨터에 연결하지 마십시오. 컴퓨터 내부의 USB 컨트롤러에 전원을 다시 공급하고 구울 수 있습니다.

12단계: 앱 제어

src 에서 Pi의 ~/recordplayer 로 모든 것을 복사하십시오.

환경을 활성화합니다.

CD ~/레코드 플레이어
sudo apt 설치 python3-dev libgpiod-dev python3-libgpiod
파이썬 -m venv .venv
소스 .venv/bin/activate
pip 설치 -r requirements.txt
sudo chmod 777 ./실행
에코 @reboot ~/recordplayer/run | 크론탭 -

사용 가능한 스피커와 출력을 찾으십시오.

파이썬 파이 / outputs.py

사용하려는 원격 스피커의 ID를 playback.py 의 OUTPUTS에 삽입합니다. "0"을 유지하십시오 - 현지 사용자를위한 것입니다.

출력 = [
["0"],
["remote_output_id", "another_remote_id_if_any"],
]

테스트해 보세요.

./달리다

 

13단계: 라이브러리

library.py 에서 연결된 재생 목록 및 앨범이 있는 NFC 태그 ID 목록을 찾을 수 있습니다.

재생 목록 = {
"rfid_id": {
"uris": "라이브러리:앨범:123456789",
"셔플": "거짓",
},
"04422601654003": {
"uris": "스포티파이:재생 목록:37i9dQZF1DWUrmUI5ur5GK",
"셔플": "참"
},
}

리더기에 NFC 태그를 놓고 아래 명령을 실행하면 태그 ID가 표시됩니다. 복사하여 library.py 에서 사용하십시오.

저널 ctl / usr / bin / python

Spotify URI는 일반 Spotify URI입니다. Owntone UI에서 찾을 수 있습니다. Owntone은 앨범에 대한 URI를 표시하지 않습니다. URL에서 추출해야 합니다. 브라우저에서 앨범을 열고 URL을 복사한 다음 http://recordplayer:3689/#/music/albums/8249546791409011466 에서 library:album:8249546791409011466로 변경합니다.

library.py 에서 변경한 후 Pi를 다시 시작합니다.

 

🎯 마무리

이 프로젝트는 NFC 태그를 활용한 혁신적인 음악 플레이어로, 기술적 도전과 DIY 정신이 담긴 작품입니다. 이 시스템을 확장하여 Spotify 연동 기능을 강화하거나, 음악 시각화를 추가하는 것도 흥미로운 아이디어겠죠?

🎵 음악을 손으로 만지는 새로운 경험, 직접 만들어보세요!

 

 

728x90
반응형