Saltar la navegación

Código Rfid y Mp3

Video de ejemplo

Cambio del código de las tarjetas

Os recordamos que debéis cambiar el código de cada tarjeta
que aparece en nuestra programación por los vuestros.
Buscad donde aparezcan todas las tarjetas y las vais cambiando.
Tenéis toda la información en el apartado "Codigo de las tarjetas"
de la nube anterior, la que fucniona con tarjetas RFID.

Librerias necesarias

Este código lleva incorporado unas librerias que debéis tener instaladas
en vuestro Arduino. En caso negativo, mirad el apartaado correspondiente
del capitulo anterior.

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

Y buscad las librerías que se necesitan. 
librerias
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. Localiza la librería e instálala.

Muy importante:
Cuando subamos el código a la placa Arduino hay que tener todo conectado para que reconozca 
todos los dispositivos. Para garantizar posibles problemas, hay que tener conectados los altavoces.

Código

//sacosta.org
//inclou canvi brillantor targes 204 i 205
//afegir tres sons diferents per a tres repeticions del llamp
//canvi delay a millis
//inclou que pots deixar la targe a sobre aplicat a targes 1-14
//les 201, 202, 203(per funció única), 204 i 205(per si es volen fer mées d'un esglaó de canvi) no ho porten incorporat
//cada targeta fa sonar un so i encen la tira un a un d'un color/colors determinat
//la tarja 14 apaga el so i la tira
//línies 43-58 defineixen els color de cada tarja de color fixe
//ID targes linies 305-382
//Targes especials
//targeta 201 Fixa el volum a un valor determinat 10 (el volum pot anar de 0 a 30)
//targeta 202 Fixa el volum a un valor determinat 20 (el volum pot anar de 0 a 30)
//targeta 203 Fixa el volum a un valor determinat 30 (el volum pot anar de 0 a 30)
//targeta 204 incrementa la brillantor entre mínim i màxim +40
//targeta 205 decrementa la brillantor entre màxim i mínim -40
#include <Adafruit_NeoPixel.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "SPI.h"
#include <MFRC522.h>
#include <MFRC522Extended.h>
//#include <require_cpp11.h>
//#include <deprecated.h>
// Define pines modulo RC522
//#define SS_PIN 10
//#define RST_PIN 9
//Configuracions
const int      PIN       =  6; // Pin Arduino a senyal tira
const int      NUMPIXELS = 60; // Número de neopíxels de la tira
const int      SS_PIN    = 10; // Data PIN DE MFRC522 A PIN 10 ARDUINO
const int      RST_PIN   =  9; // Reset PIN DE MFRC522 A PIN 9 ARDUINO
const int      TIME      =150; //
const int      BRILLANTOR= 20; //Brillantor dels neopixels
MFRC522 mfrc522(SS_PIN, RST_PIN); 
MFRC522::MIFARE_Key key;


//Variables: pixels
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


//Definició de colors
const uint32_t red=pixels.Color(193, 0, 0);//1 vermell
const uint32_t green=pixels.Color(0, 193, 0);//2 verd
const uint32_t blue=pixels.Color(0, 79, 169);//3 blau
const uint32_t purple=pixels.Color(0, 255, 255);//4 blau claret
const uint32_t taronja=pixels.Color(195, 105, 0);//5 groc
const uint32_t taronja_claret=pixels.Color(139, 42, 0);//6 taronja
const uint32_t blau_clar=pixels.Color(0, 118, 35);//7 verd blavos
const uint32_t violeta=pixels.Color(255,47, 84);//8 rosa
const uint32_t violeta_fort=pixels.Color(255, 0, 198);//9 violeta
const uint32_t blanc=pixels.Color(200,200,200);//10 blanc
const uint32_t chocolate=pixels.Color(210, 5, 30);//11 vermell rosa
const uint32_t verd_blavos=pixels.Color(0, 255, 128); //12 blau verdos
const uint32_t hotpink=pixels.Color(25,25,112);//13 blau nit
const uint32_t yellow=pixels.Color(166, 136, 0);//14 groc                    
const uint32_t blank=pixels.Color(0, 0, 0);//apagat


//Variables per a llamp
int t_llamp=15;// temps pujada llamp
int num_llamps=3; //nombre de llamps
int repeticio=0;
//Variables arc de sant martí
int t_on=50;//temps per a pujar arc de sant martí
int brillantor=80;//pots modificar el Brightness de la tira amb les tecles 204(+) i 205(-) 
int brillantor_max=240;//fixa el màxim de brillantor
int brillantor_min=40;//fixa el mínim de brillantor
int targeta;//variable amb la que asociarem un códi de targeta a un número.
char st[20];//variable sistema


// Defineix el pins mòdul DFPlayer Mini (RX del mòdul a pin 4 Arduino, TX del mòdul a pin 5 Arduino)
SoftwareSerial mySoftwareSerial(4, 5); // RX, TX he canviat a 4 i 5 per poder assignar el 6 al pin senyal Neopixel
DFRobotDFPlayerMini myDFPlayer;
String strID = "";
String strIDtemp="";//variable creada para poder deixar la tarja a sobre del lector de rfid


unsigned long Temps_ara = 0;//variable utilizada per captar el valor de millis() quant ens interessi
const int      t_aturat      =  1000; //variable utilizada per a fixar un "delay" emprant millis().


void setup() 
{
 //Comunicació serial amb el mòdul MP3
  mySoftwareSerial.begin(9600);
  // Inicia  serial
  Serial.begin(9600);
  pixels.begin();
  pixels.setBrightness(BRILLANTOR); 
  // Inicia  SPI bus
  SPI.begin();
  // Inicia mfrc522(lector de targes)
 mfrc522.PCD_Init(); 
  
    // Missatges inicials en  monitor sèrie
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini"));
  Serial.println(F("Inicializant mòdul DFPlayer... (3~5 segons)"));
  if (!myDFPlayer.begin(mySoftwareSerial))//si no s'inicialitza
   {
  Serial.println(F("No inicializat:"));
  Serial.println(F("1.Comprova les connexions del DFPlayer Mini"));
  Serial.println(F("2.Insereix la targeta SD"));
  while (true);
  }
  Serial.println();
  Serial.println(F("Mòdul DFPlayer Mini inicializat!"));
  myDFPlayer.setTimeOut(500); //Timeout serial 500ms
  myDFPlayer.volume(20); // //Fixa un valor de la variable volume (volum altaveus (0~30)).
  myDFPlayer.EQ(0); //Equalizació normal
  
  Serial.println("Acosta la targeta al lector...");
  Serial.println();
}


void loop() 
{
  // En espera de targeta
  if ( ! mfrc522.PICC_IsNewCardPresent()|| !mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);//analitza el tipus de targeta
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("La teva targeta no és del tipus MIFARE Classic."));
    return;
    //si no és una Mifare classic torna a començar el loop
  }
  String 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("*** LA TEVA ID ÉS: ");
    Serial.println(strID);
    Serial.print("");
    
   if(targeta==1){
  if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
  Serial.println(targeta);
  pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
  llamp();//la funció duu inclòs el so 1 llamp
  strIDtemp=strID;//donam a la variable temporal el valor de la darrera tarja llegida, así s'evita que se reinicie la funció de la tarja
  } return true; 
  }
   if(targeta==2){//so 4 
   if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   arc_sant_marti ();
  strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true; 
   }
   if(targeta==3){// blanc
    if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   myDFPlayer.play(5);
   setAll(blanc);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==4){//so  
   if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(6);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(purple);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==5){//so 7
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(7);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(taronja_claret);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==6){//so 8
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(8);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(yellow);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==7){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(9);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(green);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==8){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(10);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(blue);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==9){
   if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(11);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(violeta_fort);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==10){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(12);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(verd_blavos);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==11){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(13);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(yellow);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==12){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(14);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(violeta_fort);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==13){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   Serial.println(targeta);
   myDFPlayer.play(15);
   pixels.setBrightness(brillantor);//fixam la brillantor dels neopixels
   setAll(taronja_claret);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
   if(targeta==14){
      if(strID!=strIDtemp){//si la tarja llegida és diferent a la anterior o es la primera que llegeix, posa en marxa la seva funció corresponent
   myDFPlayer.pause();  //pause the mp3
   setAll(blank);
   strIDtemp=strID;//damos a la variable temporal el valor de la última tarjeta leida, así se evita que se reinicie el sonido si se deja la tarjeta sobre el lector
  } return true;
   }
    if(targeta==201){
   // Serial.println("Targeta  - Accés alliberat!!");
    Serial.println("v_10");
    myDFPlayer.volume(10);
    strIDtemp=strID;
   }
   if(targeta==202){
   Serial.println("v_20");
   myDFPlayer.volume(20);
   strIDtemp=strID;
   }
   if(targeta==203){
   Serial.println("v_30");
   myDFPlayer.volume(30);
   strIDtemp=strID;
   }
  if(targeta==204){
    Serial.println(brillantor);
    brillantor=brillantor+40;
    if (brillantor<=brillantor_max){
    brillantor=brillantor_max;}
    Serial.println(brillantor);
   strIDtemp=strID;
   }
    if(targeta==205){
    Serial.println(brillantor);
    brillantor=brillantor-40;
    if (brillantor<=brillantor_min){
    brillantor=brillantor_min; }
    Serial.println(brillantor);
  strIDtemp=strID;
   }


 //delay(1000);
 Temps_ara = millis();
 while(millis() < Temps_ara+t_aturat){
  }
}}
bool validateCard(String usercard) {
  if(usercard.indexOf("A7:19:2C:63") >= 0) { 
  targeta=1;
  return true;
  }
  else if(usercard.indexOf("27:C0:27:63")>= 0) {
  targeta=2;
  return true;
  }
  else if(usercard.indexOf("07:02:29:63") >= 0) {
  targeta=3;
  return true;
  }
  else if(usercard.indexOf("57:D1:27:63") >= 0) {
  targeta=4;
  return true;
  }
  else if(usercard.indexOf("97:55:2F:63") >= 0) {
  targeta=5;
  return true;
  }
  else if(usercard.indexOf("AA:D0:22:B4") >= 0) {
  targeta=6;
  return true;
  }
  else if(usercard.indexOf("1A:1B:E6:AE") >= 0) {
  targeta=7;
  return true;
  }
  else if(usercard.indexOf("5B:55:5F:10") >= 0) {
  targeta=8;
  return true;
  }
  else if(usercard.indexOf("3A:8F:68:B3") >= 0) {
  targeta=9;
  return true;
  }
  else if(usercard.indexOf("B5:8F:00:28") >= 0) {
  targeta=10;
  return true;
  }
  /*else if(usercard.indexOf("B5:B4:57:28") >= 0) {
  targeta=11;
  return true;
  }
  else if(usercard.indexOf("B3:74:6C:3E") >= 0) {
  targeta=12;
  return true;
  }
  else if(usercard.indexOf("95:F6:62:28") >= 0) {
  targeta=13;
  return true;
  }*/
  else if(usercard.indexOf("F3:38:D7:3E") >= 0) {
  targeta=14;
  return true;
  }
  if(usercard.indexOf("B3:74:6C:3E") >= 0) {
  targeta=201;
  return true;
  }
  if(usercard.indexOf("E3:B8:D9:3E") >= 0) {
  targeta=202;
  return true;
  }
  if(usercard.indexOf("E3:B8:D1:3E") >= 0) {
  targeta=203;
  return true;
  }
  //////////
  if(usercard.indexOf("95:F6:62:28") >= 0) {
  targeta=204;
  return true;
  }
  if(usercard.indexOf("B5:B4:57:28") >= 0) {
  targeta=205;
  return true;
  }
  //////////
  }
//funció per donar color a la tira en funció dels colors definits
void setAll(uint32_t color) {
  for(int i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i, color);
    pixels.show();
  Temps_ara = millis();
 while(millis() < Temps_ara+10){
  }
  }
}


//funció llamp. Empre 001_tro, 002_tro i 003_tro
void llamp(){
  repeticio=0;
for(int x=0; x<num_llamps;x++){
  repeticio++;
  for (int i=1; i<NUMPIXELS;i++){
 pixels.setPixelColor(i, pixels.Color(0, 0, 0));
 pixels.show();//encendemos el led
  } 
for (int i=1; i<NUMPIXELS+1;i++){
//  pixels.setBrightness(fadeControl);//set the pixel brightness
  pixels.setPixelColor(i-1, pixels.Color(0, 0, 0));  
  pixels.setPixelColor(i, pixels.Color(255, 255, 255));
  pixels.setPixelColor(i+1, pixels.Color(255, 255, 255));
  pixels.setPixelColor(i+2, pixels.Color(255, 255, 255));
  pixels.setPixelColor(i+3, pixels.Color(255, 255, 255));
  pixels.show();//encendemos el led
 Temps_ara = millis();
 while(millis() < Temps_ara+t_llamp){
  }
    }
   for (int i=1; i<NUMPIXELS;i++){
  pixels.setPixelColor(i, pixels.Color(255, 255, 255));
  pixels.show();//encendemos el led
     }
   myDFPlayer.play(repeticio);
 Temps_ara = millis();
 while(millis() < Temps_ara+150){
  }
    for (int i=1; i<NUMPIXELS;i++){
   pixels.setPixelColor(i, pixels.Color(0, 0, 0));
   pixels.show();
    }
 Temps_ara = millis();
 while(millis() < Temps_ara+11000){
  }
    }
    for (int i=1; i<NUMPIXELS;i++){
   pixels.setPixelColor(i, pixels.Color(193, 0, 0));
   pixels.show();
   Temps_ara = millis();
 while(millis() < Temps_ara+20){
  }
    }  
}
//fi funció llamp


//funció arc de Sant Martí
void arc_sant_marti (){
myDFPlayer.play(4);//s'ha de posar el so corresponent a l'arc de sant martí
//primer apaga la tira
  for (int i=1; i<NUMPIXELS;i++){
  pixels.setPixelColor(i, pixels.Color(0, 0, 0));
  pixels.show();
  }  
// omple de color la tira per trams   
  for (int i=0; i<9;i++){//lila
  pixels.setPixelColor(i, pixels.Color(255, 0, 0));
  pixels.show();
 Temps_ara = millis();
 while(millis() < Temps_ara+t_on){
  }
  } 
  for (int i=9; i<19;i++){//vermell
  pixels.setPixelColor(i, pixels.Color(255, 45, 0));
  pixels.show();
   Temps_ara = millis();
 while(millis() < Temps_ara+t_on){
  }
  } 
  for (int i=19; i<29;i++){//taronja
  pixels.setPixelColor(i, pixels.Color(255, 117, 0));
  pixels.show();
 Temps_ara = millis();
 while(millis() < Temps_ara+t_on){
  }
  }
  for (int i=29; i<39;i++){//groc
  pixels.setPixelColor(i, pixels.Color(0,255, 0));
  pixels.show();
  Temps_ara = millis();
 while(millis() < Temps_ara+t_on){
  }
  }
  for (int i=39; i<49;i++){//verd
  pixels.setPixelColor(i, pixels.Color(0,0, 255));
  pixels.show();
 Temps_ara = millis();
 while(millis() < Temps_ara+t_on){
  }
  }
  for (int i=49; i<60;i++){//blau
  pixels.setPixelColor(i, pixels.Color(214, 0, 193));
  pixels.show();
 Temps_ara = millis();
 while(millis() < Temps_ara+t_on){
  }
   }
   } 
 //fi funció arc de sant marti