Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
wiki:flossmanuals:rfid-lecteur-mp3:accueil [2021/05/17 11:51] damien.muti |
wiki:flossmanuals:rfid-lecteur-mp3:accueil [2022/06/23 22:17] (Version actuelle) damien.muti [Arduino] |
||
|---|---|---|---|
| Ligne 17: | Ligne 17: | ||
| ===== Le matériel ===== | ===== Le matériel ===== | ||
| - | ==== | + | ==== |
| - | Il existe plusieurs lecteur RFID. Des lecteurs à la fréquence de 125kh et d' | + | Il existe plusieurs lecteur RFID. Des lecteurs à la fréquence de 125kh et d' |
| + | Nous utilisons ici le module RFID RC522 fonctionnant à 13, | ||
| + | {{ : | ||
| + | |||
| + | La documentation sur ce capteur est la suivante : | ||
| + | * Gotronic : [[https:// | ||
| + | * Github : [[https:// | ||
| + | * Arduino : [[https:// | ||
| + | |||
| + | le tableau de câblage est le suivant : | ||
| + | ----------------------------------------------------------------------------------------- | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | SPI SS NSS 10 53 D10 10 10 | ||
| + | SPI MOSI MOSI 11 / ICSP-4 | ||
| + | SPI MISO MISO 12 / ICSP-1 | ||
| + | SPI SCK | ||
| + | | ||
| + | |||
| + | |||
| + | Le câblage sur la carte Arduino est le suivant : | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Pour pouvoir utiliser ce module, **la bibliothèque " | ||
| + | {{ : | ||
| + | {{ : | ||
| + | |||
| + | Le programme de test de la carte, permettant de lire la valeur d'un tag RFID et de l' | ||
| + | |||
| + | ==== Module Son Grove - MP3 v3.0 ==== | ||
| + | Le module utilisé ici est le module Grove - MP3 V3 de chez Seeeduino. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Toute la documentation est accessible sur le lien suivant : | ||
| + | * [[https:// | ||
| + | |||
| + | Le module n'est pas livré avec une carte SD. il est nécessaire d'en avoir une à disposition pour stoquer les musiques qui doivent être jouées. | ||
| + | L' | ||
| ===== Plans et schémas de fonctionnement ===== | ===== Plans et schémas de fonctionnement ===== | ||
| + | ==== Câblage du circuit==== | ||
| + | On couple le montage comportant le lecteur RFID et le module Grove MP3 : | ||
| + | * Le module RFID est câblé comme précédemment : [[wiki: | ||
| + | * Le module Grove MP3 est branché sur le connecteur D2 de la Carte [[https:// | ||
| ===== Programmes ===== | ===== Programmes ===== | ||
| + | ==== Arduino ==== | ||
| + | Le code permettant de contrôler le lancement d'un son à partir de la détection d'une carte RFID (13,6MHz) est la fusion des code permettant de contrôler le lecteur RFID et le module son Grove MP3 : | ||
| + | |||
| + | * {{ : | ||
| + | |||
| + | < | ||
| + | /* Voir Théo Radakovitch < | ||
| + | |||
| + | /* Typical pin layout used: | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | SPI SS SDA(SS) | ||
| + | SPI MOSI MOSI 11 / ICSP-4 | ||
| + | SPI MISO MISO 12 / ICSP-1 | ||
| + | SPI SCK | ||
| + | */ | ||
| + | ////////////////////////// | ||
| + | #include " | ||
| + | |||
| + | |||
| + | #ifdef __AVR__ | ||
| + | #include < | ||
| + | SoftwareSerial SSerial(2, 3); // RX, TX | ||
| + | #define COMSerial SSerial | ||
| + | #define ShowSerial Serial | ||
| + | |||
| + | WT2003S< | ||
| + | #endif | ||
| + | |||
| + | #ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE | ||
| + | #define COMSerial Serial1 | ||
| + | #define ShowSerial SerialUSB | ||
| + | |||
| + | WT2003S< | ||
| + | #endif | ||
| + | |||
| + | #ifdef ARDUINO_ARCH_STM32F4 | ||
| + | #define COMSerial Serial | ||
| + | #define ShowSerial SerialUSB | ||
| + | |||
| + | WT2003S< | ||
| + | #endif | ||
| + | |||
| + | |||
| + | uint8_t vol = 31; | ||
| + | uint32_t spi_flash_songs = 0; | ||
| + | uint32_t sd_songs = 0; | ||
| + | STROAGE workdisk = SD; | ||
| + | struct Play_history { | ||
| + | uint8_t disk; | ||
| + | uint16_t index; | ||
| + | char name[8]; | ||
| + | }* SPISong, *SDSong; | ||
| + | |||
| + | void readSongName(struct Play_history* ph, uint32_t num, STROAGE disk) { | ||
| + | Mp3Player.volume(0); | ||
| + | delay(100); | ||
| + | switch (disk) { | ||
| + | case SPIFLASH: | ||
| + | Mp3Player.playSPIFlashSong(0x0001); | ||
| + | break; | ||
| + | case SD: | ||
| + | Mp3Player.playSDRootSong(0x0001); | ||
| + | break; | ||
| + | case UDISK: | ||
| + | Mp3Player.playUDiskRootSong(0x0001); | ||
| + | break; | ||
| + | } | ||
| + | ShowSerial.println(" | ||
| + | for (int i = 0; i < num ; i++) { | ||
| + | delay(300); | ||
| + | ph[i].disk = disk; | ||
| + | ph[i].index = Mp3Player.getTracks(); | ||
| + | Mp3Player.getSongName(ph[i].name); | ||
| + | Mp3Player.next(); | ||
| + | } | ||
| + | ShowSerial.println(" | ||
| + | Mp3Player.pause_or_play(); | ||
| + | Mp3Player.volume(14); | ||
| + | delay(100); | ||
| + | } | ||
| + | |||
| + | void getAllSong() { | ||
| + | uint8_t diskstatus = Mp3Player.getDiskStatus(); | ||
| + | ShowSerial.println(diskstatus); | ||
| + | spi_flash_songs = Mp3Player.getSPIFlashMp3FileNumber(); | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.println(spi_flash_songs); | ||
| + | if (spi_flash_songs > 0) { | ||
| + | SPISong = (struct Play_history*)malloc((spi_flash_songs + 1) * sizeof(struct Play_history)); | ||
| + | readSongName(SPISong, | ||
| + | } | ||
| + | if (diskstatus && 0x02) { // have SD | ||
| + | sd_songs = Mp3Player.getSDMp3FileNumber(); | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.println(sd_songs); | ||
| + | if (sd_songs > 0) { | ||
| + | SDSong = (struct Play_history*)malloc((sd_songs + 1) * sizeof(struct Play_history)); | ||
| + | ShowSerial.println(" | ||
| + | readSongName(SDSong, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | void printSongs() { | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.print("< | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.println(); | ||
| + | ShowSerial.println(" | ||
| + | for (int i = 0 ; i < spi_flash_songs; | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.print(SPISong[i].index); | ||
| + | ShowSerial.print("< | ||
| + | ShowSerial.print(SPISong[i].name); | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.println(); | ||
| + | } | ||
| + | ShowSerial.println(" | ||
| + | for (int i = 0 ; i < sd_songs; i++) { | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.print(SDSong[i].index); | ||
| + | ShowSerial.print("< | ||
| + | ShowSerial.print(SDSong[i].name); | ||
| + | ShowSerial.print(" | ||
| + | ShowSerial.println(); | ||
| + | } | ||
| + | } | ||
| + | //////////////////////////////// | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | #define SS_PIN 10 | ||
| + | #define RST_PIN 9 | ||
| + | |||
| + | MFRC522 rfid(SS_PIN, | ||
| + | |||
| + | MFRC522:: | ||
| + | |||
| + | // Init array that will store new NUID | ||
| + | byte nuidPICC[4]; | ||
| + | |||
| + | int valRFID = 0; // numéro de tag RFID | ||
| + | |||
| + | //DFPLAYER | ||
| + | |||
| + | #include < | ||
| + | |||
| + | |||
| + | |||
| + | int ledPin = 6; | ||
| + | |||
| + | |||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // | ||
| + | |||
| + | SPI.begin(); | ||
| + | rfid.PCD_Init(); | ||
| + | |||
| + | for (byte i = 0; i < 6; i++) { | ||
| + | key.keyByte[i] = 0xFF; | ||
| + | } | ||
| + | |||
| + | Serial.println(F(" | ||
| + | Serial.print(F(" | ||
| + | printHex(key.keyByte, | ||
| + | |||
| + | |||
| + | |||
| + | Serial.println(" | ||
| + | |||
| + | ///////////////// | ||
| + | |||
| + | while (!ShowSerial); | ||
| + | ShowSerial.begin(9600); | ||
| + | COMSerial.begin(9600); | ||
| + | ShowSerial.println(" | ||
| + | Mp3Player.init(COMSerial); | ||
| + | |||
| + | ShowSerial.println(" | ||
| + | getAllSong(); | ||
| + | printSongs(); | ||
| + | Mp3Player.volume(vol); | ||
| + | |||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | void light() { // éclaire la led 3secondes après déclenchement son | ||
| + | digitalWrite(ledPin, | ||
| + | digitalWrite(ledPin, | ||
| + | } | ||
| + | |||
| + | |||
| + | void printHex(byte *buffer, byte bufferSize) { | ||
| + | for (byte i = 0; i < bufferSize; i++) { | ||
| + | Serial.print(buffer[i] < 0x10 ? " 0" : " "); | ||
| + | Serial.print(buffer[i], | ||
| + | } | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | | ||
| + | */ | ||
| + | void printDec(byte *buffer, byte bufferSize) { | ||
| + | for (byte i = 0; i < bufferSize ; i++) { | ||
| + | Serial.print(buffer[i] < 0x10 ? " 0" : " "); | ||
| + | Serial.print(buffer[i], | ||
| + | Serial.println("" | ||
| + | //valRFID = buffer[i]; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | int convertNumRFID(byte *buffer, byte bufferSize) { | ||
| + | int valRFID = 0; | ||
| + | for (byte i = 0; i < bufferSize ; i++) { | ||
| + | valRFID += buffer[i]; | ||
| + | } | ||
| + | Serial.print(" | ||
| + | Serial.println(valRFID); | ||
| + | return valRFID; | ||
| + | } | ||
| + | |||
| + | void audio(int cmd) { | ||
| + | ShowSerial.print(" | ||
| + | if (workdisk == SD) { | ||
| + | Mp3Player.playSDRootSong(cmd); | ||
| + | ShowSerial.print(cmd + ": "); | ||
| + | ShowSerial.print(SDSong[cmd - ' | ||
| + | } | ||
| + | if (workdisk == SPIFLASH) { | ||
| + | Mp3Player.playSPIFlashSong(cmd - ' | ||
| + | ShowSerial.print(cmd + ": "); | ||
| + | ShowSerial.print(SPISong[cmd - ' | ||
| + | } | ||
| + | ShowSerial.println(); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | |||
| + | // Reset the loop if no new card present on the sensor/ | ||
| + | if ( ! rfid.PICC_IsNewCardPresent()) | ||
| + | return; | ||
| + | |||
| + | // Verify if the NUID has been readed | ||
| + | if ( ! rfid.PICC_ReadCardSerial()) | ||
| + | return; | ||
| + | |||
| + | printDec(rfid.uid.uidByte, | ||
| + | valRFID = convertNumRFID(rfid.uid.uidByte, | ||
| + | //debug | ||
| + | Serial.print(" | ||
| + | Serial.println(valRFID); | ||
| + | |||
| + | |||
| + | Serial.println(); | ||
| + | |||
| + | // Halt PICC | ||
| + | rfid.PICC_HaltA(); | ||
| + | |||
| + | // Stop encryption on PCD | ||
| + | rfid.PCD_StopCrypto1(); | ||
| + | |||
| + | |||
| + | // | ||
| + | // | ||
| + | |||
| + | if (valRFID == 387) { // Sapin | ||
| + | audio(1); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | |||
| + | if (valRFID == 403) { //Ours | ||
| + | audio(7); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | |||
| + | if (valRFID == 280) { // Chien | ||
| + | audio(3); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | |||
| + | if (valRFID == 499) { // Chaise | ||
| + | audio(4); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | |||
| + | if (valRFID == 607) { // Bateau | ||
| + | audio(5); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | if (valRFID == 673) { // Perroquet | ||
| + | audio(6); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | if (valRFID == 581) { // Vache | ||
| + | audio(2); | ||
| + | Serial.println(" | ||
| + | light(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Pour que ce code fonctionne, il convient de placer les sons au formats " | ||
| + | * Sapin | ||
| + | * Ours | ||
| + | * Chien | ||
| + | * Chaise | ||
| + | * Bateau | ||
| + | * Perroquet | ||
| + | * Vache | ||
| + | |||
| + | L' | ||
| ==== Références : Contrôle d’accès par badge RFID avec Arduino ==== | ==== Références : Contrôle d’accès par badge RFID avec Arduino ==== | ||
| Le programme permettant de détecter l' | Le programme permettant de détecter l' | ||