아두이노 - RFID MP3 플레이어 | Arduino - RFID MP3 Player
이 튜토리얼에서는 아두이노, RC522 RFID 리더, 그리고 MP3 플레이어 모듈을 사용하여 RFID 기반 MP3 플레이어를 만드는 과정을 탐구할 것입니다. MP3 플레이어 모듈은 여러 곡이 저장된 마이크로 SD 카드를 갖추고 있습니다. 각각의 RFID 카드는 하나의 노래를 대표하며, RFID 카드의 수는 노래의 수와 일치합니다.
RFID 리더기 앞에서 RFID 카드를 스와이프하면, 아두이노가 그 특정 RFID 카드와 연결된 해당 노래를 재생합니다.
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | RFID/NFC RC522 Kit (reader + tags) | 쿠팡 | Amazon | |
1 | × | RFID Key Fob | 쿠팡 | Amazon | |
1 | × | Serial MP3 Player Module | 쿠팡 | Amazon | |
1 | × | Micro SD Card | Amazon | |
1 | × | 3.5mm Aux Speaker | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon | |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
RFID/NFC RC522 모듈과 MP3 플레이어(핀아웃, 작동 방식, 프로그래밍 방법 등)에 대해 잘 모르시면, 다음 튜토리얼에서 해당 내용을 학습하세요:
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
설정을 간소화하기 위해, RC522 모듈의 핀은 아두이노 핀에 직접 연결됩니다. 그러나, 이 직접 연결은 문제가 발생할 수 있습니다. 왜냐하면 아두이노의 출력 핀은 5V를 제공하는 반면, RC522 모듈의 핀은 3.3V 운용을 위해 설계되었기 때문입니다. 잠재적인 문제를 예방하기 위해 아두이노 핀과 RC522 모듈의 핀 사이의 전압을 조절하는 것이 바람직합니다. 보다 자세한 지침은 아두이노 - RFID RC522 튜토리얼을 참조하십시오. 제공된 다이어그램은 저항을 사용하여 5V를 3.3V로 조절하는 방법을 보여줍니다:
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
※ NOTE THAT:
핀의 배치는 제조사에 따라 달라질 수 있습니다. 항상 모듈에 인쇄된 라벨을 사용하세요. 위의 이미지는 DIYables 브랜드의 모듈 핀배열을 보여줍니다.
미리 플레이하고 싶은 노래 목록을 마이크로 SD 카드에 저장하세요.
마이크로 SD 카드를 MP3 플레이어 모듈에 삽입하세요.
MP3 플레이어 모듈을 아두이노에 연결하세요.
스피커를 MP3 플레이어 모듈에 연결하세요.
스피커를 전원 공급원에 연결하세요.
RFID 리더기를 아두이노에 연결하세요.
UID가 일반적으로 RFID 태그에 인쇄되어 있지 않기 때문에, 우리가 해야 할 첫 번째 단계는 태그의 UID를 찾아내는 것입니다. 이것은 다음과 같이 할 수 있습니다:
아래 코드를 복사하고 아두이노 IDE로 열기
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 5
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("Tap RFID Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print("0x");
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
if (i < (rfid.uid.size - 1))
Serial.print(", ");
}
Serial.println();
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}
아두이노 IDE에서 코드를 아두이노로 업로드하려면 Upload 버튼을 클릭하세요.
시리얼 모니터 열기
RFID-RC522 모듈에 RFID 카드/키홀더를 하나씩 탭하세요.
시리얼 모니터에 표시되는 UID를 기록하세요. 다음과 같이 보입니다:
Tap RFID Tag on reader
0x51, 0x3D, 0xC1, 0xAC
0x6A, 0x4C, 0x12, 0x6D
0xB0, 0x1F, 0x92, 0x11
우리는 아래의 아두이노 코드를 업데이트하기 위해 이 RFID UID들을 사용할 것입니다.
#include <SPI.h>
#include <MFRC522.h>
#include <SoftwareSerial.h>
#define CMD_PLAY_NEXT 0x01
#define CMD_PLAY_PREV 0x02
#define CMD_PLAY_W_INDEX 0x03
#define CMD_SET_VOLUME 0x06
#define CMD_SEL_DEV 0x09
#define CMD_PLAY_W_VOL 0x22
#define CMD_PLAY 0x0D
#define CMD_PAUSE 0x0E
#define CMD_SINGLE_CYCLE 0x19
#define DEV_TF 0x02
#define SINGLE_CYCLE_ON 0x00
#define SINGLE_CYCLE_OFF 0x01
#define ARDUINO_RX 7
#define ARDUINO_TX 6
#define SS_PIN 10
#define RST_PIN 5
#define SONG_NUM 3
MFRC522 rfid(SS_PIN, RST_PIN);
SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX);
byte RFID_UIDs[SONG_NUM][4] = {
{ 0x51, 0x3D, 0xC1, 0xAC },
{ 0x6A, 0x4C, 0x12, 0x6D },
{ 0xB0, 0x1F, 0x92, 0x11 }
};
void setup() {
Serial.begin(9600);
mp3.begin(9600);
delay(500);
mp3_command(CMD_SEL_DEV, DEV_TF);
delay(200);
SPI.begin();
rfid.PCD_Init();
Serial.println("RFID 태그를 리더에 태핑하세요");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
Serial.print("태그 UID:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
for (int index = 0; index < SONG_NUM; index++) {
if (rfid.uid.uidByte[0] == RFID_UIDs[index][0] && rfid.uid.uidByte[1] == RFID_UIDs[index][1] && rfid.uid.uidByte[2] == RFID_UIDs[index][2] && rfid.uid.uidByte[3] == RFID_UIDs[index][3]) {
Serial.print("노래 재생 ");
Serial.println(index);
mp3_command(CMD_PLAY_W_INDEX, index);
}
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}
void mp3_command(int8_t command, int16_t dat) {
int8_t frame[8] = { 0 };
frame[0] = 0x7e;
frame[1] = 0xff;
frame[2] = 0x06;
frame[3] = command;
frame[4] = 0x00;
frame[5] = (int8_t)(dat >> 8);
frame[6] = (int8_t)(dat);
frame[7] = 0xef;
for (uint8_t i = 0; i < 8; i++) {
mp3.write(frame[i]);
}
}
위의 코드를 복사하고 Arduino IDE로 열기
준비 단계에서 얻은 UID들을 위 코드에 업데이트합니다.
코드를 Arduino에 업로드하세요.
RFID 태그를 하나씩 RFID-RC522 모듈에 탭하세요.
MP3 플레이어에서 나오는 소리를 확인하세요.
모든 것이 원활하게 작동한다면, 각 RFID 카드는 한 곡과 연결될 것입니다.
각 RFID 카드에 노래 이름을 표시할 수 있습니다.
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.