Saltar la navegación

Rfid + Mp3 Código

En la programación, en el código vas a encontrar estas líneas:

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "SPI.h"
#include <MFRC522.h
#include <MFRC522Extended.h

Estas indican los nombres de las librerías que vas a necesitar para que funcione. Unas son para
comunicar un componente con otro, otra para ver los resultados en el Monitor serie y las necesarias
para hacer funcionar el lector de Rfid y el lector de Mp3.

Si no tenéis estas librerías, deberéis de ir a Herramientas>Administración Bibliotecas
librerias 0
Y buscad las librerías que se necesitan. 
Nota: Cuando se sube un código a un Arduino, si no se tienen las librerías que el código necesita,
el mismo programa avisa del error.
librerias 1
Localiza la librería e instálala.

Codigo completo

Hay que cambiar el codigo de cada tarjeta.

//sacosta.org
//cada una de las Tarjetas registradas hace sonar el sonido asociado o una función: next, previous, pause, start.....
//hemos cambiado delay por millis()
//ampliado número de Tarjetas
//Tarjeta 211 para(pausa) la reproducción de un sonido.
//Tarjeta 212 reinicia la reproducción despues de la pausa (start)
//Tarjeta 213 reproduce el sonido siguiente al último reproducido o en reproducción(PREVIOUS)
//Tarjeta 214 reproduce el sonido anterior al último reproducido o en reproducción(NEXT)
//Tarjeta 215 FIJA A UN VALOR DETERMINADO EL VOLUMEN 0-30 Baja volumen a un valor determinado
//Tarjeta 216 FIJA A UN VALOR DETERMINADO EL VOLUMEN 0-30 Sube volumen a un valor determinado
//Pueden hacerse 4 tarjetas: muy bajo, bajo, alto, muy alto 
//he cambiado el modo lectura para facilitar la introducción de los códigos de las tarjetas
//Muestra por LCD (2004: 20 columnas y 4 filas) canción y tarjeta
 
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "SPI.h"
#include <MFRC522.h>
#include <MFRC522Extended.h>
 
//Connexiones LCD (20 04) I2C a Arduino
//SDA a A4 de arduino uno o arduino nano
//SCL a A5 de arduino uno o arduino nano
 
// Define pines modulo RFID RC522
#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 mfrc522(SS_PIN, RST_PIN); 
MFRC522::MIFARE_Key key;
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27,20,4);  // 0x27 es el código del tipo de LCD, 27 es la dirección por defecto. 20 es el numero de columnas y 4 de las filas
int tarjeta;//variable con la que asociaremos un código de tarjeta a un número
String sonido;//variable para dar nombre a la reproducción o a la función de la tarjeta
String archivo="RFID_MP3_LCD.INO";//nombre del programa arduino que aparecerá en la pantalla
char st[20];
 
// Define pines modulo DFPlayer Mini 
SoftwareSerial mySoftwareSerial(5, 6); // Pin RX del MP3 pasanado por la resistencia va a D6,Pin TX va a D5
DFRobotDFPlayerMini myDFPlayer;
String strID = "";
unsigned long TiempoAhora = 0;//variable utilizada para captar el valor de millis() en un momento dado
const int      TIME       =  1000; //tiempo para fijar un "delay".
 
void setup() 
{
   lcd.init();
   //Pone en marcha el LCD
   lcd.backlight();
   //Pone en marcha la luz de fondo del LCD
   
 //Comunicación serial con el modulo MP3
  mySoftwareSerial.begin(9600);
  // Inicia  serial
  Serial.begin(9600);
  // Inicia  SPI bus
  SPI.begin();
  // Inicia mfrc522
 mfrc522.PCD_Init(); 
  
  // Mensajes iniciales en  monitor serie
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini"));
  Serial.println(F("Inicializando módulo DFPlayer... (3~5 segundos)"));
 //Mensajes iniciales en el LCD
 lcd.setCursor(0, 0);  
 lcd.print(archivo);
 lcd.setCursor(0, 1);
 lcd.print("DFRobot DFPlayerMini");
 lcd.setCursor(0, 2);
 lcd.print("sacosta.org");
 lcd.setCursor(0, 3);
 lcd.print("Inicializando...");
 
  if (!myDFPlayer.begin(mySoftwareSerial))//si no se inicializa
   {
    Serial.println(F("No inicializado:"));
    Serial.println(F("1.Chequee las conexiones del DFPlayer Mini"));
    Serial.println(F("2.Inserte la Tarjeta SD"));
 lcd.clear();
 lcd.setCursor(0, 0); //
 lcd.print("No inicializado:");
 lcd.setCursor(0, 1);
 lcd.print("Revise conexiones");
 lcd.setCursor(0, 2);
 lcd.print("del DFPlayer Mini");
 lcd.setCursor(0, 3);
 lcd.print("Inserte la TarjetaSD");
    
    while (true);
  }
  Serial.println();
  Serial.println(F("Módulo DFPlayer Mini inicializado!"));
  myDFPlayer.setTimeOut(500); //Timeout serial 500ms
  myDFPlayer.volume(30);  //Set volume value (0~30).
  myDFPlayer.EQ(0); //Equalización normal
  Serial.println("Acerca tu Tarjeta Acerca tu Tarjeta...");
  Serial.println();
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(archivo);
 lcd.setCursor(0, 1); 
 lcd.print("DFPlayer Mini OK");
 lcd.setCursor(0, 2);
 lcd.print("Acerca tu Tarjeta");
 lcd.setCursor(0, 3);
 lcd.print("al lector RFID");
  
}
 
void loop() 
{
  // En espera de Tarjeta
  if ( ! mfrc522.PICC_IsNewCardPresent()|| !mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);//analitza el tipus de tarja
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
    //si no és una Mifare classics vuelve a empezar el loop
  }
 
  strID = "";
  for (byte i = 0; i < 4; i++) {
    strID +=
      (mfrc522.uid.uidByte[i] < 0x10 ? "0" : "") +
      String(mfrc522.uid.uidByte[i], HEX) +
      (i != 3 ? ":" : "");
  }
  strID.toUpperCase();
  
  if (validateCard(strID)) {
    Serial.print("*** El ID de tu tarjeta es: ");
    Serial.println(strID);
    Serial.print("");
 lcd.clear();
 lcd.setCursor(0, 0); //
 lcd.print(tarjeta);
 lcd.setCursor(0, 1);
 lcd.print(strID);
 lcd.setCursor(0, 2);
 lcd.print("");
 lcd.setCursor(0, 3);
 lcd.print("");
 
 //función de las tarjetas, condicionada a variable tarjeta
    if(tarjeta==1){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(1);
   }
   if(tarjeta==2){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(2);
   }
    if(tarjeta==3){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(3);
   }
   if(tarjeta==4){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(4);
   }
     if(tarjeta==5){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(5);
   }
     
   if(tarjeta==6){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(6);
   }
      if(tarjeta==7){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(7);
   }
    if(tarjeta==8){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(8);
   }
   if(tarjeta==9){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(9);
   }
     if(tarjeta==10){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(10);
   }
   // para añadir más canciones///////////////////////////////////////////
   // copiar este codigo y cambiar el numero de orden
   /*
   if(tarjeta==10){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.play(10);
   }
   */
   ///////////////////////////////////////////////////////////////////////
   //las siguientes tarjetas son las de función: Next, Previous, Pause, Volumen, etc. 
   if(tarjeta==211){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.pause();  //Pause the mp3
   }
    if(tarjeta==212){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.start(); // Play
   }
   if(tarjeta==213){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.next();  //Next mp3
   }
   if(tarjeta==214){
   Serial.println("Tarjeta  - Acesso liberado!!");
   Serial.println(tarjeta);
   Serial.println(sonido);
   print_lcd();
   myDFPlayer.previous();  //Previous mp3
   }
   if(tarjeta==215){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.volume(20); //Volumen a 20
   }
   if(tarjeta==216){
    Serial.println("Tarjeta  - Acesso liberado!!");
    Serial.println(tarjeta);
    Serial.println(sonido);
    print_lcd();
    myDFPlayer.volume(30);//Volumen a 30
   }
 
      //delay(1000);
      TiempoAhora = millis();
      while(millis() < TiempoAhora+TIME){
      } 
}}
bool validateCard(String usercard) {
  // ID  de las tarjetas y variables que incorpora
 //////////////////////////TARJETAS USUARIO 1
 //Estos códigos son los códigos de un juego de tarjetas
 //Esta pensado para ser utilizado por dos usuarios con diferentes tarjetas.
 
  if(usercard.indexOf("55:58:34:21") >= 0) { //tarjeta 1 Usuario 1
    sonido="";
    tarjeta=1;
    sonido="PLOU I FA SOL";//a rellenar nombre sonido o función. Pueden dejarse sólo las comillas
    return true;
  }
  else if(usercard.indexOf("24:42:A7:2B")>= 0) {//tarjeta 2 Usuario 1
   sonido="";//No tocar. sirve para borrar anterior nombre
   tarjeta=2;
   sonido="LA MOSCA";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("FB:A8:4D:AC") >= 0) {//tarjeta 3 Usuario 1
   sonido="";
   tarjeta=3;
   sonido="PETITA GRANOTETA";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:7C:36:21") >= 0) {//tarjeta 4 Usuario 1
   sonido="";
   tarjeta=4;
   sonido="LA LLUNA";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:1E:74:21") >= 0) {//tarjeta 5 Usuario 1
   sonido="";
   tarjeta=5;
   sonido="ESQUIROL";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:0B:3F:21") >= 0) {//tarjeta 6 Usuario 1
   sonido="";
   tarjeta=6;
   sonido="EL LLEO";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:CA:54:21") >= 0) {//tarjeta 7 Usuario 1
   sonido="";
   tarjeta=7;
   sonido="EL GALL I LA GALLINA";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("F2:C9:A6:2C") >= 0) {//tarjeta 8 Usuario 1
   sonido="";
   tarjeta=8;
   sonido="CARAGOL";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:D9:8B:21") >= 0) {//tarjeta 9 Usuario 1
   sonido="";
   tarjeta=9;
   sonido="PLOU I FA SOL";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("00:B0:BF:2A") >= 0) {//tarjeta 10 Usuario 1
   sonido="";
   tarjeta=10;
   sonido="LA MOSCA";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("3C:EA:16:DF") >= 0) {//tarjeta 211 Usuario 1
   sonido="";
   tarjeta=211;
   sonido="Pause";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("F2:C5:B3:2C") >= 0) {//tarjeta 212 Usuario 1
   sonido="";
   tarjeta=212;
   sonido="Play";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("19:3D:13:8F") >= 0) {//tarjeta 213 Usuario 1
   sonido="";
   tarjeta=213;
   sonido="Next";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("2B:1B:4F:AC") >= 0) {//tarjeta 214 Usuario 1
   sonido="";
   tarjeta=214;
   sonido="Previous";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("B3:A1:3A:0B") >= 0) {//tarjeta 215 Usuario 1
   sonido="";
   tarjeta=215;
   sonido="Volumen Bajo";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("A9:91:15:8F") >= 0) {//tarjeta 216 Usuario 1
   sonido="";
   tarjeta=216;
   sonido="Volumen Alto";//a rellenar nombre sonido o función
   return true;
  }
  
   //////////////////////////TARJETAS USUARIO 2
   //NO ANULAR LAS TARJETAS DEL OTRO USUARIO, 
   //si se anulan las tarjetas de usuario 1, debe cambiarse el else if de la tarjeta 1  por if
  
  else if(usercard.indexOf("55:58:34:21") >= 0) { //tarjeta 1 Usuario 2
   sonido="";
   tarjeta=1;
   sonido="Imagine";//a rellenar nombre sonido o función. Pueden dejarse sólo las comillas
   return true;
  }
  else if(usercard.indexOf("03:E6:AD:38")>= 0) {//tarjeta 2 Usuario 2
   sonido="";//No tocar. sirve para borrar anterior nombre
   tarjeta=2;
   sonido="Sonido 2";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("FB:A8:4D:AC") >= 0) {//tarjeta 3 Usuario 2
   sonido="";
   tarjeta=3;
   sonido="Sonido 3";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:7C:36:21") >= 0) {//tarjeta 4 Usuario 2
   sonido="";
   tarjeta=4;
   sonido="Sonido 4";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:1E:74:21") >= 0) {//tarjeta 5 Usuario 2
   sonido="";
   tarjeta=5;
   sonido="Sonido 5";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:0B:3F:21") >= 0) {//tarjeta 6 Usuario 2
   sonido="";
   tarjeta=6;
   sonido="Sonido 6";//a rellenar nombre sonido o función
   return true;
  }
  
  if(usercard.indexOf("55:CA:54:21") >= 0) {//tarjeta 7 Usuario 2
   sonido="";
   tarjeta=7;
   sonido="Sonido 7";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("F2:C9:A6:2C") >= 0) {//tarjeta 8 Usuario 2
   sonido="";
   tarjeta=8;
   sonido="Sonido 8";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("55:D9:8B:21") >= 0) {//tarjeta 9 Usuario 2
   sonido="";
   tarjeta=9;
   sonido="Sonido 9";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("00:B0:BF:2A") >= 0) {//tarjeta 10 Usuario 2
   sonido="";
   tarjeta=10;
   sonido="Sonido 10";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("3C:EA:16:DF") >= 0) {//tarjeta 211 Usuario 2
   sonido="";
   tarjeta=211;
   sonido="Pause";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("F2:C5:B3:2C") >= 0) {//tarjeta 212 Usuario 2
   sonido="";
   tarjeta=212;
   sonido="Play";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("19:3D:13:8F") >= 0) {//tarjeta 213 Usuario 2
   sonido="";
   tarjeta=213;
   sonido="Next";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("2B:1B:4F:AC") >= 0) {//tarjeta 214 Usuario 2
   sonido="";
   tarjeta=214;
   sonido="Previous";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("B3:A1:3A:0B") >= 0) {//tarjeta 215 Usuario 2
   sonido="";
   tarjeta=215;
   sonido="Volumen Bajo";//a rellenar nombre sonido o función
   return true;
  }
  else if(usercard.indexOf("A9:91:15:8F") >= 0) {//tarjeta 16 Usuario 2
   sonido="";
   tarjeta=216;
   sonido="Volumen Alto";//a rellenar nombre sonido o función
   return true;
  }
  //NO TOCAR por si introducen una tarjeta desconocida 
  else{
   sonido="";
   tarjeta=300;
   sonido="TARJETA DESCONOCIDA";//a rellenar nombre sonido o función
   return true;
   }
}
void print_lcd(){
 lcd.clear();
 lcd.setCursor(0, 0); //
 lcd.print("TARJETA ");
 lcd.setCursor(9, 0); //
 lcd.print(tarjeta);
 lcd.setCursor(0, 1);
 lcd.print(strID);
 lcd.setCursor(0, 2);
 lcd.print("");
 lcd.setCursor(0, 3);
 lcd.print(sonido); 
 }