Ci-dessous, les différences entre deux révisions de la page.
wiki:flossmanuals:expression-et-numerique:accueil [2021/04/26 16:16] 127.0.0.1 modification externe |
wiki:flossmanuals:expression-et-numerique:accueil [2021/06/01 18:03] (Version actuelle) damien.muti |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== | + | ====== |
- | + | ||
- | A COMPLÉTER !!! | + | |
* **Porteur(s) du projet** : Célia Auget (DNMADE DG2), Damien MUTI (Prof. de Numérique) | * **Porteur(s) du projet** : Célia Auget (DNMADE DG2), Damien MUTI (Prof. de Numérique) | ||
Ligne 19: | Ligne 16: | ||
+ | ===== Le matériel ===== | ||
+ | ==== Lecteur RFID ==== | ||
+ | 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 : | ||
+ | |||
+ | * {{ : | ||
+ | |||
+ | < | ||
+ | /* Meet | ||
+ | Nouvelle réunion | ||
+ | Rejoindre une réunion | ||
+ | Hangouts | ||
+ | 2 sur 8 224 | ||
+ | RFID | ||
+ | Boîte de réception | ||
+ | Théo Radakovitch < | ||
+ | |||
+ | 14:43 (il y a 2 minutes) | ||
+ | |||
+ | À moi, Célia | ||
+ | |||
+ | Traduire le message | ||
+ | Désactiver pour : anglais | ||
+ | /* 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' |