Arduino Máy nghe MP3 RFID

Trong bài hướng dẫn này, chúng ta sẽ khám phá quá trình tạo một máy nghe MP3 dựa trên RFID bằng cách sử dụng Arduino, đầu đọc RFID RC522 và một module MP3. Module MP3 được trang bị thẻ nhớ micro SD để lưu trữ nhiều bài hát. Mỗi thẻ RFID đại diện cho một bài hát, và số lượng thẻ RFID khớp với số bài hát.

Khi quẹt một thẻ RFID trước đầu đọc RFID, Arduino sẽ phát bài hát tương ứng với thẻ RFID đó.

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Serial MP3 Player Module
1×Micro SD Card
1×3.5mm Aux Speaker
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Mô-đun RFID/NFC RC522 và Máy nghe MP3

Nếu bạn chưa biết về Mô-đun RFID/NFC RC522 và trình phát MP3 (bố trí chân, cách hoạt động, cách lập trình ...), hãy tìm hiểu về chúng trong các bài hướng dẫn sau:

Sơ đồ đấu dây

sơ đồ nối dây cho Arduino RFID rc522 mp3 player

This image is created using Fritzing. Click to enlarge image

Để đơn giản hóa việc thiết lập, các chân của mô-đun RC522 được kết nối trực tiếp với các chân của Arduino. Tuy nhiên, kết nối trực tiếp này có thể gây ra các vấn đề, vì các chân ra của Arduino cung cấp 5V, trong khi các chân của mô-đun RC522 được thiết kế cho hoạt động ở 3.3V. Nên điều chỉnh điện áp giữa các chân của Arduino và các chân của mô-đun RC522 để phòng ngừa các sự cố tiềm ẩn. Để tham khảo chi tiết hơn, vui lòng tham khảo Arduino - RFID/NFC (nhận diện bằng tần số vô tuyến / giao tiếp trường gần). Bản sơ đồ được cung cấp cho thấy cách các điện trở có thể được sử dụng để điều chỉnh 5V xuống 3.3V:

mô-đun rc522 cho Arduino với sơ đồ đấu nối có nguồn ổn áp

This image is created using Fritzing. Click to enlarge image

※ Lưu ý:

Thứ tự các chân có thể khác nhau tùy theo nhà sản xuất. LUÔN SỬ DỤNG CÁC NHÃN ĐƯỢC IN TRÊN MODULE. Hình ảnh ở trên cho thấy sơ đồ chân của các mô-đun từ thương hiệu DIYables.

Chuẩn bị

  • Lưu trước danh sách các bài hát bạn muốn phát trên thẻ microSD.
  • Lắp thẻ nhớ microSD vào mô-đun MP3.
  • Kết nối mô-đun MP3 với Arduino.
  • Kết nối loa với mô-đun MP3 tới một
  • Kết nối loa với nguồn điện.
  • Kết nối đầu đọc RFID với Arduino.

Vì UID thường không được in trên thẻ RFID, bước đầu tiên chúng ta cần thực hiện là tìm ra UID của các thẻ. Điều này có thể được thực hiện bằng cách:

  • Sao chép mã dưới đây và mở bằng Arduino IDE
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rfid-mp3-player */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 // Arduino Pin connected to the SS of the RFID reader #define RST_PIN 5 // Arduino Pin connected to the RST of the RFID reader MFRC522 rfid(SS_PIN, RST_PIN); void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed // print NUID in Serial Monitor in the hex format 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }
  • Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên cho Arduino
  • Mở Serial Monitor
  • Chạm lần lượt từng thẻ RFID hoặc chìa khóa từ (keyfob) lên module RFID-RC522
  • Ghi chú UID xuất hiện trên Serial Monitor, như hình dưới đây:
COM6
Send
Tap RFID Tag on reader 0x51, 0x3D, 0xC1, 0xAC 0x6A, 0x4C, 0x12, 0x6D 0xB0, 0x1F, 0x92, 0x11
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Chúng tôi sẽ sử dụng các UID RFID này để cập nhật mã Arduino ở dưới đây.

Mã Arduino - Trình phát MP3 RFID

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rfid-mp3-player */ #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 // Arduino Pin connected to the TX of the Serial MP3 Player module #define ARDUINO_TX 6 // Arduino Pin connected to the RX of the Serial MP3 Player module #define SS_PIN 10 // Arduino Pin connected to the SS of the RFID reader #define RST_PIN 5 // Arduino Pin connected to the RST of the RFID reader #define SONG_NUM 3 // 3 songs + 3 RFID cards, change it as your need MFRC522 rfid(SS_PIN, RST_PIN); SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); byte RFID_UIDs[SONG_NUM][4] = { { 0x51, 0x3D, 0xC1, 0xAC }, // UPDATE THIS VALUE FROM PREPARATION STEP { 0x6A, 0x4C, 0x12, 0x6D }, // UPDATE THIS VALUE FROM PREPARATION STEP { 0xB0, 0x1F, 0x92, 0x11 } // UPDATE THIS VALUE FROM PREPARATION STEP // ADD MORE IF NEEDED }; void setup() { Serial.begin(9600); mp3.begin(9600); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed Serial.print("Tag 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("Playing song "); Serial.println(index); mp3_command(CMD_PLAY_W_INDEX, index); // Play mp3 } } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // the number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { mp3.write(frame[i]); } }

Hướng dẫn từng bước

  • Sao chép mã nguồn ở trên và mở bằng Arduino IDE
  • Cập nhật các UID bạn đã thu được ở bước chuẩn bị vào mã nguồn ở trên.
  • Tải mã nguồn lên Arduino
  • Chạm từng thẻ RFID lên module RFID-RC522 lần lượt
  • Kiểm tra âm thanh từ máy nghe MP3
  • Nếu mọi thứ diễn ra suôn sẻ, mỗi thẻ RFID sẽ liên kết với một bài hát.
  • Bạn có thể ghi tên bài hát lên mỗi thẻ RFID.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.