Je souhaite un code Arduino Mini PRo pour commander 3 pistes audio selon 3 voltages différents

Bonjour, ceci est mon premier poste sur ce forum. Je suis débutant dans le domaine .
J'ai un projet en cour et je souhaite utiliser un Arduino pour contrôler des pistes audio.
Voici un résumé de mon problème.
Je possède dfplayer mini, Arduino Pro Micro Atmega32U4 , J'ai 2 fils venant d'une carte électronique qui contrôle un moteur électrique (voiture téléguidé), la carte électronique inverse la polarité du voltage pour permettre au moteur de fonctionner en marche avant ou arrière. Je souhaite un code arduino pour commander 3 pistes audio selon 3 voltages différents. -3,7 Volts moteur marche arrière; 0 Volts moteur a l'arrêt; 3.7 Volts marche avant moteur.

J'ai fait quelque recherche sur internet et j'ai testé des choses avec ChatGPT. Mais pas de miracle ^^.
Merci par avance pour vos conseils et vos idées ! :slight_smile:

Bonjour,
Pour maximiser le nombre et la qualité des réponses, il faudrait suivre le post sur les bonnes pratiques épingler en tête de la liste des posts

Je ne suis pas spécialiste, mais le soucis étant de détecter le -3,7V, sachant que l'Arduino(en 5V) peut détecter un signal numérique 0V ou 5V ou un signa analogique entre 0 et 5V.
Il faudra donc surement ajouté des composants, peut être un transistor, pour convertir ta tension négative en tension positive.

Si cela est possible, du coté de la programmation, deux broches digital avec l'instrcution digitalRead permettra de savoir dans quel état tu es.

Pour la commande des pistes audio, je ne vois pas comment on peut aider, car tu ne d'écris pas l'appareil par lequel sont pilotés ses pistes audio et les moyens de les piloter.

votre arduino ne pourra pas mesurer une tension négative, donc il faudra un montage avec un composant qui ramène la tension dans une plage lisible par votre arduino (circuit sommateur avec amplificateur opérationnel par exemple ou un pont diviseur avec une référence positive pour créer un offset - cf Voltage divider to scale negative ranges to positive ranges - #9 by jremington)

Je pense qu'il veut dire demander au dfplayer mini de jouer le fichier 0 si -3.7V, jouer le fichier 1 si 0V, et jouer le fichier 2 si +5V ce qui n'est pas compliqué une fois que l'on a pu lire la tension

(comme il ne faut pas relancer le son si la tension n'a pas varie, il faudra gérer des états ➜ cf mon tuto éventuellement)

Ok merci a vous 2 pour vos réponses.
Si dans un premier temps, je fais une croix pour la lecture d'une piste pour une tension négative...
ChatGPT m'a sortie ceci comme code :

#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>

SoftwareSerial mySerial(10, 9); // RX, TX
DFPlayerMini_Fast myDFPlayer;

void setup()
{
  mySerial.begin(9600);
  Serial.begin(115200);
  while (!Serial)
    ;
  Serial.println();
  Serial.println(F("DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySerial))
  { //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true)
      ;
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(30); //Set volume value. From 0 to 30
  myDFPlayer.play(1);    //Play the first mp3
}

void loop()
{
  int voltage = analogRead(A0);
  Serial.print("Voltage: ");
  Serial.println(voltage);

  if (voltage < 100)
  {
    myDFPlayer.play(1); //Play the first mp3
  }
  else if (voltage > 900)
  {
    myDFPlayer.play(2); //Play the second mp3
  }
  else
  {
    myDFPlayer.play(3); //Play the third mp3
  }
}

si vous voulez poster ici, lisez les règles indiquées par @terwal ➜ éditez votre post pour ajouter les balises de code.

J'ai corrigé mon erreur :slight_smile: !

Voici des photos de mon montage. Je récupère des infos sur les 2 bornes (alimentation moteur) de la carte de la voiture.



Ton code n'est pas indenté, ce qui le rend plus difficile à dire et nous complique la vie :slight_smile:
Tu peux utiliser le raccourcis clavier Ctr + T pour cela.

Tu ne dis pas ce que tu as demandé à chatGpt et donc à quoi tu t'attends.
As tu essayé le code ?
Le code à priori initialise le DFPlayer et joue la première piste à volume de 30, si la liaison série à réussit à être établi.

Voici le nouveau code ! :slight_smile: avec CTRl+T

#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>

SoftwareSerial mySerial(10, 9);  // RX, TX
DFPlayerMini_Fast myDFPlayer;

void setup() {
  mySerial.begin(9600);
  Serial.begin(115200);
  while (!Serial)
    ;
  Serial.println();
  Serial.println(F("DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true)
      ;
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(30);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);     //Play the first mp3
}

void loop() {
  int voltage = analogRead(A0);
  Serial.print("Voltage: ");
  Serial.println(voltage);

  if (voltage < 100) {
    myDFPlayer.play(1);  //Play the first mp3
  } else if (voltage > 900) {
    myDFPlayer.play(2);  //Play the second mp3
  } else {
    myDFPlayer.play(3);  //Play the third mp3
  }
}

J'ai demandé ceci à ChatGPT => Je posséde dfplayer mini, arduino Pro Micro Atmega32U4 , J'ai 2 fils venant d'une carte electronique qui controle un moteur electrique, la carte electronique inverse la polarité du voltage pour permettre au moteur de fonctionner en marche avant ou arrière. Je souhaite un code arduino pour commander 3 pistes audio selon 3 voltages différents. -3,7 Volts moteur marche arrière; 0 Volts moteur a l'arrét; 3.7 Volts marche avant moteur.

Oui j'ai testé le code = Mais ça fonctionne pas aucune réaction :frowning:

Info supplémentaire :slight_smile:
Les noms de mes pistes audio sont
001.mp3
002.mp3
003.mp3
Elles sont toutes les 3 à la racine de la carte mémoire

Le code fait des affichages sur le moniteur série, peut tu nous copier ce qu'il contient ?

Si il y a aucune réaction, à priori c'est que ton module DFPLayer n'établi pas de connexion série.
As tu correctement branché ton DFPlayer sur ton Arduino ?

Je pense que de partir sur du code produit par chatGpt lorsque l'on commence est une très mauvaise idée.
D'une part, parce que les questions posés ne sont pas forcément les plus appropriés.
D'autre part, tu n'es pas en mesure de comprendre et d'évaluer ce qu'il t'a retourné.

Dans ton cas, le code se contente, d'initialiser le module en supposant qu'il soit correctement branché et de jouer la première piste.

Pour moi l'idéal est de tester les codes d'exemple des librairies correspondant au module/cas utilisé.
Voir de regarder quelque projet ou tutoriel, pour savoir quels peuvent être ces librairies pour ton cas.

Merci pour tes conseils :). Oui je sais c'est pas bien mais bon quand tu n'as aucune expérience et bien il faut bien commencer quelque part ^^ .
Pour le branchement

DFPlayer mini / Arduino Mini
RX, TX => 10, 9
GND => GND
VCC => VCC

Mes 2 fils de la radio de la voiture rc
sur les borne A0 et A1 de l'arduino

Pour la borne A1 de ce que j'ai compris dans le code elle n'est pas utilisé

Clairement pas par chatGPT…
Vaut mieux faire un petit tuto C++ et sinon pour bien débuter avec l’arduino, un bon point de départ c’est de lire les tutos d’eskimon

Oui, c'est pour ça que j'ai donné un axe, exemple et tutoriel :laughing:
Bien sûre en plus de ce que préconise @J-M-L

Cette façon de brancher, ne me semble pas correcte.
Quel est la différence de potentielle entre tes deux fils, 3,7V ou 0 ou -3,7V
Du coup si tu le branche tel quel tu suppose que par exemple sur A0, tu va avoir 3,7V, 0V, ou -3,7V
hors tu mesure la différence de potentiel entre A0 et le GND de ta carte Arduino.
Par contre rien ne te garantit que si on prend un de tes fils de ta RC et le GND de ton Arduino, tu aura les tensions que tu as mesurer au borne de tes fils.
De plus envoyer une tension négative sur une broche qui accepte uniquement des tensions positives, ce n'est pas forcément une bonne idée.
Bon, je ne suis pas sûre d'être claire, je suis sûre qu'un spécialiste sera mieux faire.

Oui effectivement, mais encore une fois qu'as tu sur le moniteur série ?

On ne sait même pas de quel GND on parle et du niveau de pollution du signal si c’est l’alimentation moteur…

Je comprends ce que tu veux dire. Et tu as répondu a une question que je me posais. Donc il faut que je prenne un GND quelque part sur la rc ?
Sur les port série de l'arduino rien pour le moment

Tu penses que la radio pourrait faire des interférence avec l'arduino ?

Dans les voitures télécommandées, il n'y a pas d'alimentation négative.
Le potentiel sur les 2 fils du moteur vient des sorties d'un pont en H. Donc le moteur est flottant par rapport à la masse du circuit.
Tu dois pouvoir le confirmer en mesurant la tension sur chacun des fils du moteur par rapport à la masse du circuit lorsque le moteur tourne dans un sens puis dans l'autre.
Dans ce cas là, si tu entres les 2 fils du moteur sur des entrées de l'arduino, tu pourrais déterminer le sens de rotation.
Il faut d'abord s'assurer que la batterie qui alimente la voiture ne délivre jamais plus de 5V.
Il faudra faire une petite adaptation car la tension aux bornes du moteur doit être hachée donc un petit filtrage et une protection contre les surtensions que le moteur peut créer au freinage est à mon sens indispensable.

Ah dac ! Donc pour répondre a ta question la batterie de la rc fait 3,7 Volt.
J'ai mesuré sur chaque fils ceci
1er fil via la masse de la rc => marche avant = +3,8 V en marche arrière 0.28 V ( résidu du moteur je pense )
le second fils via la masse de la rc => 0,28V marche avant et en marche arrière = +3,8 Volt

Je précise que c'est une voiture rc bas de gamme c'est juste marche arrêt :slight_smile:

Si les 2 fils sont les bornes du moteur la polarisation s’inverse au changement de sens, donc si ce sont ces 2 fils qui sont rapatriés vers l’arduino, ce n’est pas génial

Si je prends les 2 fils sur le voltmétre cela me fait une tension négatif mais pas dans le cas que j'ai expliqué juste au dessus :slight_smile: