Création Jukebox NFC

Portrait de Nicus

Bonjour à tous !

Comme j'en parle dans ma présentation  http://www.les-electroniciens.com/discussions/presentation-nicus

je souhaite concevoir un jukebox nfc pour ma fille qui adore écouter de la musique.

Comme je l'indiquais, j'avais au départ dans l'idée de copier ça : https://www.hoerbert.com/ .

Puis je suis tombé sur ce concept http://www.semageek.com/diy-fabriquer-un-jukebox-nfc-a-base-darduino/ .

Je veux donc lui faire un jukebox dans le même esprit, mais qui intègre sa propre batterie rechargeable via mini usb, avec sa petite enceinte ( une JBL micro II qui est tombée, le boitier est explosé mais j'entend bien la réutiliser...) et un bouton play/pause pour stopper un morceau, un potard pour le réglage volume. 

Il me faudra donc, et c'est dans les grandes lignes car je débute totalement (même si j'ai fait un peu d'électronique et quelques soudures au collège et lycée :-) ) :

- Une carte Arduino: ici la première question, une UNO suffit ou une Mega ? 

- Un shield NFC par exemple http://boutique.semageek.com/fr/247-nfc-shield-v2.html

- Un shield MP3  (ici la grande question : lequel ? )

-La question de l'alimentation de tout ça m'intrigue, faut-il ajouter un chargeur lithium pour une batterie ? http://laboutiquedumaker.com/index.php?id_product=110&controller=product 

Et si oui est-ce que l'alimentation suffit pour coupler le montage Arduino et l'enceinte ci-dessous ?

Une enceinte JBL micro II sans le boitier, où on retrouve un bouton On/Off, un potard volume, un port mini usb pour recharger une batterie interne et un jack 3.5mm. Voici une image : http://628ff0a787341fd29329-2dda4e8a77e4831483f649f7f65bbb17.r11.cf2.rac...

Vais-je utiliser seulement le speaker ou à votre avis puis-je utiliser tous les composants de cette enceinte tels quels, couplés avec le montage arduino ?

Dans le principe de fonctionnement, je vois la chose de la manière suivante:

1/ Un bouton On/Off permet d'allumer la bête.

2/ Ma fille insère un "jeton", le shield nfc capte et renvoie la chanson à lire, ladite chanson stockée sur une carte SD est alors jouée.

3/ Elle peut mettre sur pause, puis relancer, ou mettre un autre jeton qui lance directement un nouveau titre.

 

Quand il n'y a plus de batterie je veux pouvoir la recharger via mini usb sur pc ou secteur. 

Comme vous le voyez/lisez, j'ai besoin de votre aide pour me dire si c'est réalisable, compliqué, si je vais galérer mais qu'à force d'apprentissage et d'obstination et de tests je peux aboutir.

 

Vous en pensez quoi ? 

Merci d'avance pour vos retours !

 

Nicus

Portrait de Alex

Salut Nicus,

Ton projet est excellent!

Ton raisonnement est très bon dans l'ensemble mais tu oublies une partie très importante: la conversion numérique vers analogique.

Je m'explique... un Arduino ne peut générer un signal purement analogique pour ton enceinte. Les sorties PWM sont absolument inexploitables dans le domaine de l'audio.

Alors soit tu réalises toi même la conversion (avec des résistances et un AOP), mais c'est quelque chose d'assez subtile si tu débutes.

Je te rassure, ta fille va pouvoir s'amuser avec le jukebox de papa: Mini MP3 Player

C'est une Mini lecteur mp3 que tu peux câbler seul mais dans ton cas je te recommande de le câbler comme ceci avec un Arduino Uno.

Voici un lien qui va beaucoup t'aider: DFPlayer

Portrait de Alex

Pour la charge lithium, tu peux te baser sur mon chargeur solaire, mais au lieu de charger depuis le panneau tu charges depuis le port USB mini:

Portrait de Nicus

Salut les électroniciens,

J'ai avancé sur mon projet décrit en haut de ce topic.

Beaucoup de lectures, beaucoup de tests... j'ai un breakboard NFC PN532 et un DFPlayer mini.

J'ai testé des sketchs pour les deux et ca fontionne.... mais séparément.

Je ne comprend pas mais je n'arrive pas à lier les deux. Et je ne sais pas si ce sont les branchements ou le code. J'ai branché le mini player comme indiqué ci dessus, et la board nfc  j'ai SCK ->13, MISO->12, MOSI ->11 et SCL ->10.

Et là rien ne fonctionne complètement. Je récupere bien le contenu de mon tag mais quand je l'envoie en parametre à ma methode mp3_play (track); ça déconne. Un probleme de conversion ?

Je mets le lien vers le topic sur le forum arduino. http://forum.arduino.cc/index.php?topic=375960.0

Si un électronicien peut m'aiguiller ou me faire des remarques je suis preneur, je galère un peu dans mon apprentissage arduino, même si j'y prend beaucoup de plaisir !!!

Merci d'avance !

Nicus

Portrait de Alex

Peux-tu poster ton schéma de câblage et le code stp?

Portrait de Nicus

Salut, 

En faisant mon schéma de câblage je me rend compte que j'ai quelque chose de bancal.

Quoi je ne vois pas mais j'ai cette intuition. Attention ça pique les yeux.

On voit que je maîtrise paint mais pas Fritzing... Je m'y mettrai prochainement. 

montage.png

Quant au code le voici:

<code>

#include <SPI.h>
#include "PN532_SPI.h"
#include "PN532.h"
#include "NfcAdapter.h"
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
PN532_SPI interface(SPI, 10); // create a PN532 SPI interface with the SPI CS terminal located at digital pin 10
NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter object
 
void setup(void) {
    Serial.begin(115200); // begin serial communication
    Serial.println("NDEF Reader");
    nfc.begin(); // begin NFC communication

    mp3_set_serial (Serial);
    mp3_set_volume (30);
}



void loop(void) {
  Serial.println("\nScan your NFC tag on the NFC Shield\n");  // Command so that you an others will know what to do 

   if (nfc.tagPresent())
  {
    NfcTag tag = nfc.read();
    Serial.println(tag.getTagType());
    Serial.print("UID: ");Serial.println(tag.getUidString()); // Retrieves the Unique Identification from your tag

    if (tag.hasNdefMessage()) // If your tag has a message
    {

      NdefMessage message = tag.getNdefMessage();
      Serial.print("\nThis Message in this Tag is ");
      Serial.print(message.getRecordCount());

      Serial.print(" NFC Tag Record");
      if (message.getRecordCount() != 1) { 
        Serial.print("s");
      }
      Serial.println(".");

      // If you have more than 1 Message then it wil cycle through them
// Don't need this and loop because on my case 1 tag 1 message but for the moment i deal with this...
      int recordCount = message.getRecordCount();
      for (int i = 0; i < recordCount; i++)
      {
        Serial.print("\nNDEF Record ");
        //Serial.println(i+1);
        NdefRecord record = message.getRecord(i);

        int payloadLength = record.getPayloadLength();
        byte payload[payloadLength];
        record.getPayload(payload);


        String payloadAsString = ""; // Processes the message as a string vs as a HEX value
        int track = 0;
        for (int c = 0; c < payloadLength; c++) {
          payloadAsString += (char)payload[c];
          //Receive "en1" with my tag 1, Encoding problem ????
          payloadAsString.replace("en", "");
          track = payloadAsString.toInt();
        }
        Serial.print("  Information (as String): ");
        Serial.println(payloadAsString);
        Serial.println(" - Play track n° :");  
        
        mp3_play (track);
        //To Do : Play/Pause button and function
        //To Do : Volume button and function
        String uid = record.getId();
        if (uid != "") {
          Serial.print("  ID: ");Serial.println(uid); // Prints the Unique Identification of the NFC Tag
        }
      }
    }
  }
  delay(1000);
}

</code>

J'ai posté mon problème sur le forum Arduino à cette url:

http://forum.arduino.cc/index.php?topic=375960.0

Merci d'avance pour les infos ou pistes que vous auriez. Dites moi si je suis à la masse, ce dont j'ai l'impression !!!

Je me demande si je ne vais pas profiter d'arduino pour me mettre au python aussi.

Nicus

Portrait de Alex

Rien ne me choque, je ne trouve pas que tu es à la masse du tout.

C'est quoi exactement le problème?