« Art Sciences 2024/2025 E2 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(10 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 4 : Ligne 4 :
''Wisky'' interroge la mémoire et l’enfance, la façon dont le langage détermine notre éducation. Ici, l'intérêt est porté sur les injonctions que nous recevons étant enfant, celles qui nous contraignent et le souvenir que nous en gardons. Ces phrases perçues comme anodines ont un réel impact sur notre développement et sur la division des rôles sociaux selon le genre et la classe. Ce projet convoque ainsi une mémoire à la fois commune et fictive en une forme absurde.
''Wisky'' interroge la mémoire et l’enfance, la façon dont le langage détermine notre éducation. Ici, l'intérêt est porté sur les injonctions que nous recevons étant enfant, celles qui nous contraignent et le souvenir que nous en gardons. Ces phrases perçues comme anodines ont un réel impact sur notre développement et sur la division des rôles sociaux selon le genre et la classe. Ce projet convoque ainsi une mémoire à la fois commune et fictive en une forme absurde.


Wisky est un jouet, le chien en bois Snoopy de Fisher Price commercialisé dans les années 60. Nous l’avons retravaillé en une forme à performée, sa laisse fera office de casque et le.a spectateurice pourra la tirée tout en écoutant les mots du petit chien. En le promenant, Wisky prononcera aléatoirement des phrases culpabilisantes et des petites histoires sordides sur sa vie de jouet chien, et une fois immobile il se taira.[[Fichier:Wisky.png|vignette|                      '''Wisky'''|185x185px|centré]]
Wisky est un jouet, le chien en bois Snoopy de Fisher Price commercialisé dans les années 60. Nous l’avons retravaillé en une forme à performée, sa laisse fera office de casque et le.a spectateurice pourra la tirée tout en écoutant les mots du petit chien. En le promenant, Wisky prononcera aléatoirement des phrases culpabilisantes et des petites histoires sordides sur sa vie de jouet chien, et une fois immobile il se taira.[[Fichier:Wisky.png|vignette|                      '''Wisky'''|157x157px|centré]]
 
== Suivi jour par jour ==
== Suivi jour par jour ==


=== Jour 1 : Mardi 21 janvier ===
=== '''Jour 1 : Mardi 21 janvier''' ===


==== Choix des composants ====
==== ''<u>Composants utilisés :</u>'' ====
[[Fichier:Carte Arduino UNO.png|vignette|'''Carte Arduino'''|250x250px|gauche]]
[[Fichier:Carte Arduino UNO.png|vignette|'''Carte Arduino'''|250x250px|gauche]]
[[Fichier:Breadboard .png|vignette|250x250px|Breadboard]][[Fichier:Haut parleur.png|vignette|230x230px|Haut Parleur|gauche]]
[[Fichier:Breadboard .png|vignette|250x250px|Breadboard]][[Fichier:Haut parleur.png|vignette|230x230px|Haut Parleur|gauche]]
[[Fichier:Capteur à effet hall.png|vignette|211x211px|Capteur à effet hall |centré]]
[[Fichier:Capteur à effet hall.png|vignette|211x211px|Capteur à effet hall |centré]]
[[Fichier:Carte serial Player MP3 .png|vignette|234x234px|Lecteur MP3]]
[[Fichier:Carte serial Player MP3 .png|vignette|234x234px|Lecteur MP3]]
[[Fichier:Capteur Magnétique .png|vignette|Aimants |230x230px|centré]]








[[Fichier:Capteur Magnétique .png|vignette|Aimants |230x230px|centré]]




Ligne 31 : Ligne 27 :




==== Modélisation 3D du casque : ====
==== ''<u>Modélisation 3D du casque :</u>'' ====


Le projet de création d’un casque audio personnalisé pour l’expérience sonore a nécessité une modélisation minutieuse des différents éléments du casque, en particulier pour intégrer les haut-parleurs et gérer le passage des câbles. La conception 3D a été utilisée pour élaborer un modèle précis et fonctionnel qui puisse être imprimé en 3D.       
Le projet de création d’un casque audio personnalisé pour l’expérience sonore a nécessité une modélisation minutieuse des différents éléments du casque, en particulier pour intégrer les haut-parleurs et gérer le passage des câbles. La conception 3D a été utilisée pour élaborer un modèle précis et fonctionnel qui puisse être imprimé en 3D.       
Ligne 45 : Ligne 41 :
=== Jour 2 : Mercredi 22 janvier ===
=== Jour 2 : Mercredi 22 janvier ===


==== Programmer le capteur ====
==== <u>''Programmation du capteur :''</u> ====
code pour tester le capteur
Avant de commencer à programmer l'ensemble du système, nous avons décidé de diviser le projet en plusieurs sous-programmes. Nous avons tout d'abord commencé par la programmation du capteur. L'ajout d'une LED nous a permis d'améliorer la visualisation des événements et de savoir à quel moment le capteur envoie un signal.
[[Fichier:Installation pour programmer le capteur .png|centré|vignette|Installation pour programmer le capteur]]
 
[[Fichier:Installation pour programmer le capteur .png|vignette|Installation pour programmer le capteur|434x434px]]<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>


==== Impression 3D ====
//définition des pins pour le capteur et la LED
L'impression 3D a joué un rôle essentiel dans la fabrication du prototype du casque. Elle a permis de transformer la modélisation 3D en un objet tangible, facilitant ainsi la création rapide et économique du modèle.Le matériau utilisé pour l'impression étaie principalement le '''PLA''' (facile à imprimer) qui est adapté aux besoins du projet.
int sensorPin = A0;  //pin du capteur
int val;              //variable pour stocker la valeur lue par le capteur
int ledPin = 4;      //pin de la LED
 
void setup() {
  //initialisation des pins : capteur en entrée et LED en sortie
  pinMode(sensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);  //initialisation de la communication série pour le débogage
  digitalWrite(ledPin, LOW);  //éteindre la LED au démarrage
}
 
void loop() {
  //lecture de la valeur du capteur
  val = analogRead(sensorPin);
 
  //si le capteur détecte quelque chose (valeur inférieure à 1023), allumer la LED
  if (val < 1023) {
    digitalWrite(ledPin, HIGH);  //allumer la LED
  } else {
    digitalWrite(ledPin, LOW);  //éteindre la LED si la valeur est égale à 1023
  }
}
</syntaxhighlight>
 
==== <u>''Impression 3D :''</u> ====
L'impression 3D a joué un rôle essentiel dans la fabrication du prototype du casque. Elle a permis de transformer la modélisation 3D en un objet tangible, facilitant ainsi la création rapide et économique du modèle. Le matériau utilisé pour l'impression étaie principalement le '''PLA''' (facile à imprimer) qui est adapté aux besoins du projet.


Une fois le modèle 3D conçu, il a été préparé pour l'impression en ajustant les paramètres comme la résolution et le remplissage. Les différentes pièces du casque ont été imprimées séparément, puis assemblées pour tester l'intégration des haut-parleurs et du passage du câble.
Une fois le modèle 3D conçu, il a été préparé pour l'impression en ajustant les paramètres comme la résolution et le remplissage. Les différentes pièces du casque ont été imprimées séparément, puis assemblées pour tester l'intégration des haut-parleurs et du passage du câble.
Ligne 59 : Ligne 83 :
=== Jour 3 : Jeudi 23 janvier ===
=== Jour 3 : Jeudi 23 janvier ===


==== Programmer le player mp3 ====
==== <u>''Programmation du lecteur mp3 :''</u> ====
code pour tester le lecteur mp3
Dans cette étape, nous avons programmé le lecteur MP3, qui permet de lire des fichiers audio MP3 stockés sur une carte SD insérée dans le lecteur. Le capteur a également été intégré dans cette phase, afin de visualiser l'interaction entre les deux éléments : lorsque le capteur détecte un aimant, le lecteur MP3 se met en marche.
[[Fichier:Installation pour programmer le player mp3.png|centré|vignette|Installation pour programmer le player mp3]]


==== Finir impression ====
Nous avons consulté la datasheet du lecteur pour comprendre son fonctionnement et les commandes à utiliser pour l'intégrer correctement à notre projet. Ce lecteur fonctionne avec des commandes hexadécimales pour chaque tâche spécifique. Pour notre projet, nous avons utilisé des commandes permettant de sélectionner un fichier, de le lire, de l'arrêter et de régler le volume. Après avoir testé le fonctionnement avec des écouteurs, nous avons validé la lecture audio, puis soudé des haut-parleurs que nous avons installés dans les oreillettes du casque.
[[Fichier:Installation pour programmer le player mp3.png|vignette|Installation pour programmer le player mp3|340x340px]]<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>


==== Assemblage sur le chien ====
int sensorPin = A0;      //pin du capteur
[[Fichier:Chien.png|centré|vignette|Fisher price toy]]
int val;                  //variable pour la valeur lue par le capteur
bool isPlaying = false;    //variable pour vérifier si un fichier est en lecture
 
SoftwareSerial mp3Serial(5, 6); //communication série avec le lecteur MP3 (broches 5 et 6)
 
void setup() {
  pinMode(sensorPin, INPUT);  //initialisation du capteur en entrée
  Serial.begin(9600);        //initialisation de la communication série pour le débogage
 
  mp3Serial.begin(9600);      //initialisation de la communication avec le lecteur MP3
  delay(1000);                //attente pour s'assurer que le lecteur MP3 est prêt
  select();                  //sélection du fichier à lire
  delay(200);
  volume();                  //réglage du volume
}
 
void loop() {
  val = analogRead(sensorPin);  //lecture de la valeur du capteur
 
  if (val < 1023) {  //si le capteur détecte l'aimant
    if (!isPlaying) {  //si la lecture n'est pas déjà en cours
      play();          //lancer la lecture
      isPlaying = true; //marquer que la lecture est en cours
    } else {
      resume();        //reprendre la lecture
    }
 
    delay(1000);  //attendre un peu avant de vérifier à nouveau
 
  } else {  //si aucun signal n'est détecté par le capteur
    stopplay();  //arrêter la lecture du fichier MP3
    isPlaying = false;  //marquer que la lecture est arrêtée
  }
}
 
//commande pour sélectionner le fichier à lire
void select() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x09);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x02);
  mp3Serial.write(0xEF);
}
 
//commande pour régler le volume
void volume() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x06);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x64);  // Volume à 100
  mp3Serial.write(0xEF);
}
 
//commande pour démarrer la lecture du fichier
void play() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x03);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x01);
  mp3Serial.write(0xEF);
}
 
//commande pour reprendre la lecture
void resume() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x0D);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0xEF);
}
 
//commande pour arrêter la lecture
void stopplay() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x16);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0xEF);
}
</syntaxhighlight>
 
==== ''<u>Finir impression :</u>'' ====
[[Fichier:Le casque imprimer .png|centré|vignette|[[Fichier:Ensemble de casque .png|centré|vignette|Ensemble de casque]]Casque en plastique ]]


=== Jour 4 : Vendredi 24 janvier ===
=== Jour 4 : Vendredi 24 janvier ===
code final<syntaxhighlight lang="cpp">
Nous avons finalisé et ajouté des fonctions à notre programme pour mieux répondre aux exigences du cahier des charges. En résumé, dès que le capteur détecte la présence de l'aimant, un son est joué pendant que le capteur continue d’émettre des signaux. Cette lecture dure pendant un laps de temps défini, que nous avons estimé à 2 secondes. Une fois ces 2 secondes écoulées, le son s'arrête. Dès que le capteur détecte à nouveau un aimant, un autre son, différent du précédent, est joué.<syntaxhighlight lang="cpp">
#include <SoftwareSerial.h>
#include <SoftwareSerial.h>


Ligne 77 : Ligne 199 :
bool isPlaying = false;
bool isPlaying = false;


unsigned long lastStopTime = 0; // Variable pour suivre le temps d'arrêt
unsigned long lastStopTime = 0; //variable pour suivre le temps d'arrêt
unsigned long stopDelay = 2000;
unsigned long stopDelay = 2000;


int lastTrack = 0; // Pour mémoriser le dernier fichier joué
int lastTrack = 0; //pour mémoriser le dernier fichier joué


SoftwareSerial mp3Serial(5, 6);
SoftwareSerial mp3Serial(5, 6);
Ligne 99 : Ligne 221 :
   val = analogRead(sensorPin);
   val = analogRead(sensorPin);


   if (val < 1023) {  // Le capteur détecte un signal
   if (val < 1023) {  //le capteur détecte un signal
     digitalWrite(ledPin, HIGH);
     digitalWrite(ledPin, HIGH);


     if (!isPlaying) {  // Si la musique ne joue pas encore
     if (!isPlaying) {  //si la musique ne joue pas encore
       playRandomTrack();  // Joue un fichier aléatoire différent de l'ancien
       playRandomTrack();  //joue un fichier aléatoire différent de l'ancien
       isPlaying = true;
       isPlaying = true;
       lastStopTime = millis();  // Réinitialise le temps d'arrêt
       lastStopTime = millis();  //réinitialise le temps d'arrêt
     }
     }
     else {
     else {
       resume();  // Reprend la musique si elle est déjà en train de jouer
       resume();  //reprend la musique si elle est déjà en train de jouer
     }
     }
      
      
   } else {  // Le capteur ne détecte pas de signal
   } else {  //le capteur ne détecte pas de signal
     digitalWrite(ledPin, LOW);
     digitalWrite(ledPin, LOW);


     // Vérifie si 2 secondes sont écoulées sans signal du capteur
     //vérifie si 2 secondes sont écoulées sans signal du capteur
     if (isPlaying && (millis() - lastStopTime >= stopDelay)) {
     if (isPlaying && (millis() - lastStopTime >= stopDelay)) {
       stopplay();
       stopplay();
Ligne 121 : Ligne 243 :
   }
   }


   // Si pendant ces 2 secondes, un signal est détecté, on garde la musique en cours
   //si pendant ces 2 secondes, un signal est détecté, on garde la musique en cours
   if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) {
   if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) {
     lastStopTime = millis();  // Réinitialise le temps d'attente d'arrêt pour les 2 secondes
     lastStopTime = millis();  //réinitialise le temps d'attente d'arrêt pour les 2 secondes
   }
   }


Ligne 187 : Ligne 309 :
   int trackNumber;
   int trackNumber;


   // Choisir un fichier aléatoire différent du précédent
   //choisir un fichier aléatoire différent du précédent
   do {
   do {
     trackNumber = random(1, 4);  // Génère un nombre entre 1 et 3
     trackNumber = random(1, 4);  //génère un nombre entre 1 et 3
   } while (trackNumber == lastTrack);  // Tant que c'est le même que le dernier, on regénère
   } while (trackNumber == lastTrack);  //tant que c'est le même que le dernier, on regénère


   // Mémorise le dernier fichier joué
   //mémorise le dernier fichier joué
   lastTrack = trackNumber;
   lastTrack = trackNumber;


   // Joue le fichier choisi
   //joue le fichier choisi
   mp3Serial.write(0x7E);
   mp3Serial.write(0x7E);
   mp3Serial.write(0xFF);
   mp3Serial.write(0xFF);
Ligne 202 : Ligne 324 :
   mp3Serial.write((uint8_t)0x00);
   mp3Serial.write((uint8_t)0x00);
   mp3Serial.write((uint8_t)0x00);
   mp3Serial.write((uint8_t)0x00);
   mp3Serial.write(trackNumber);  // Envoie le numéro du fichier
   mp3Serial.write(trackNumber);  //envoie le numéro du fichier
   mp3Serial.write(0xEF);
   mp3Serial.write(0xEF);
}
}
Ligne 208 : Ligne 330 :
</syntaxhighlight>
</syntaxhighlight>


== Résultat ==
== Conclusion ==
le résultat
 
ce qui reste à faire (assemblage sur le chien)[[Fichier:Chien.png|centré|vignette|Fisher Price Toy]]

Version actuelle datée du 30 janvier 2025 à 20:01

Projet : WISKY

Présentation du projet

Wisky interroge la mémoire et l’enfance, la façon dont le langage détermine notre éducation. Ici, l'intérêt est porté sur les injonctions que nous recevons étant enfant, celles qui nous contraignent et le souvenir que nous en gardons. Ces phrases perçues comme anodines ont un réel impact sur notre développement et sur la division des rôles sociaux selon le genre et la classe. Ce projet convoque ainsi une mémoire à la fois commune et fictive en une forme absurde.

Wisky est un jouet, le chien en bois Snoopy de Fisher Price commercialisé dans les années 60. Nous l’avons retravaillé en une forme à performée, sa laisse fera office de casque et le.a spectateurice pourra la tirée tout en écoutant les mots du petit chien. En le promenant, Wisky prononcera aléatoirement des phrases culpabilisantes et des petites histoires sordides sur sa vie de jouet chien, et une fois immobile il se taira.

Wisky

Suivi jour par jour

Jour 1 : Mardi 21 janvier

Composants utilisés :

Carte Arduino
Breadboard
Haut Parleur
Capteur à effet hall
Lecteur MP3



Aimants





Modélisation 3D du casque :

Le projet de création d’un casque audio personnalisé pour l’expérience sonore a nécessité une modélisation minutieuse des différents éléments du casque, en particulier pour intégrer les haut-parleurs et gérer le passage des câbles. La conception 3D a été utilisée pour élaborer un modèle précis et fonctionnel qui puisse être imprimé en 3D.

Modèle 3D de casque

Un modèle a été conçu avec les éléments suivants :

  • Haut-parleurs intégrés : Des emplacements ont été prévus pour loger des haut-parleurs de petite taille, permettant une transmission claire du son. Leur placement a été étudié pour assurer une bonne qualité acoustique, tout en minimisant l’encombrement à l’intérieur du casque.
  • Passage du câble : Le câble devant relier le casque au dispositif externe (le chien) a été intégré à l’intérieur de la structure du casque. Pour ce faire, un système de conduits a été conçu, permettant de faire passer le câble de manière sécurisée et discrète, tout en évitant les risques d’accrochage ou de dégradation.
Boite de casque
Vue decoupe.png

Jour 2 : Mercredi 22 janvier

Programmation du capteur :

Avant de commencer à programmer l'ensemble du système, nous avons décidé de diviser le projet en plusieurs sous-programmes. Nous avons tout d'abord commencé par la programmation du capteur. L'ajout d'une LED nous a permis d'améliorer la visualisation des événements et de savoir à quel moment le capteur envoie un signal.

Installation pour programmer le capteur
#include <SoftwareSerial.h>

//définition des pins pour le capteur et la LED
int sensorPin = A0;  //pin du capteur
int val;              //variable pour stocker la valeur lue par le capteur
int ledPin = 4;       //pin de la LED

void setup() {
  //initialisation des pins : capteur en entrée et LED en sortie
  pinMode(sensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);   //initialisation de la communication série pour le débogage
  digitalWrite(ledPin, LOW);  //éteindre la LED au démarrage
}

void loop() {
  //lecture de la valeur du capteur
  val = analogRead(sensorPin);
  
  //si le capteur détecte quelque chose (valeur inférieure à 1023), allumer la LED
  if (val < 1023) {
    digitalWrite(ledPin, HIGH);  //allumer la LED
  } else {
    digitalWrite(ledPin, LOW);   //éteindre la LED si la valeur est égale à 1023
  }
}

Impression 3D :

L'impression 3D a joué un rôle essentiel dans la fabrication du prototype du casque. Elle a permis de transformer la modélisation 3D en un objet tangible, facilitant ainsi la création rapide et économique du modèle. Le matériau utilisé pour l'impression étaie principalement le PLA (facile à imprimer) qui est adapté aux besoins du projet.

Une fois le modèle 3D conçu, il a été préparé pour l'impression en ajustant les paramètres comme la résolution et le remplissage. Les différentes pièces du casque ont été imprimées séparément, puis assemblées pour tester l'intégration des haut-parleurs et du passage du câble.

L'impression 3D a permis de réaliser un prototype fonctionnel en peu de temps, facilitant ainsi les tests et les ajustements nécessaires avant la fabrication finale. Cette méthode a aussi réduit les coûts de production tout en offrant une grande flexibilité dans la conception du casque.

Imprimante 1.png
Préparation d'imprimer

Jour 3 : Jeudi 23 janvier

Programmation du lecteur mp3 :

Dans cette étape, nous avons programmé le lecteur MP3, qui permet de lire des fichiers audio MP3 stockés sur une carte SD insérée dans le lecteur. Le capteur a également été intégré dans cette phase, afin de visualiser l'interaction entre les deux éléments : lorsque le capteur détecte un aimant, le lecteur MP3 se met en marche.

Nous avons consulté la datasheet du lecteur pour comprendre son fonctionnement et les commandes à utiliser pour l'intégrer correctement à notre projet. Ce lecteur fonctionne avec des commandes hexadécimales pour chaque tâche spécifique. Pour notre projet, nous avons utilisé des commandes permettant de sélectionner un fichier, de le lire, de l'arrêter et de régler le volume. Après avoir testé le fonctionnement avec des écouteurs, nous avons validé la lecture audio, puis soudé des haut-parleurs que nous avons installés dans les oreillettes du casque.

Installation pour programmer le player mp3
#include <SoftwareSerial.h>

int sensorPin = A0;       //pin du capteur
int val;                   //variable pour la valeur lue par le capteur
bool isPlaying = false;    //variable pour vérifier si un fichier est en lecture

SoftwareSerial mp3Serial(5, 6); //communication série avec le lecteur MP3 (broches 5 et 6)

void setup() {
  pinMode(sensorPin, INPUT);  //initialisation du capteur en entrée
  Serial.begin(9600);         //initialisation de la communication série pour le débogage

  mp3Serial.begin(9600);      //initialisation de la communication avec le lecteur MP3
  delay(1000);                //attente pour s'assurer que le lecteur MP3 est prêt
  select();                   //sélection du fichier à lire
  delay(200);
  volume();                   //réglage du volume
}

void loop() {
  val = analogRead(sensorPin);  //lecture de la valeur du capteur
  
  if (val < 1023) {  //si le capteur détecte l'aimant
    if (!isPlaying) {  //si la lecture n'est pas déjà en cours
      play();           //lancer la lecture
      isPlaying = true; //marquer que la lecture est en cours
    } else {
      resume();         //reprendre la lecture
    }
  
    delay(1000);  //attendre un peu avant de vérifier à nouveau
  
  } else {  //si aucun signal n'est détecté par le capteur
    stopplay();  //arrêter la lecture du fichier MP3
    isPlaying = false;  //marquer que la lecture est arrêtée
  }
}

//commande pour sélectionner le fichier à lire
void select() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x09);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x02);
  mp3Serial.write(0xEF);
}

//commande pour régler le volume
void volume() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x06);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x64);  // Volume à 100
  mp3Serial.write(0xEF);
}

//commande pour démarrer la lecture du fichier
void play() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x03);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x01);
  mp3Serial.write(0xEF);
}

//commande pour reprendre la lecture
void resume() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x0D);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0xEF);
}

//commande pour arrêter la lecture
void stopplay() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x16);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0xEF);
}

Finir impression :

Ensemble de casque
Casque en plastique

Jour 4 : Vendredi 24 janvier

Nous avons finalisé et ajouté des fonctions à notre programme pour mieux répondre aux exigences du cahier des charges. En résumé, dès que le capteur détecte la présence de l'aimant, un son est joué pendant que le capteur continue d’émettre des signaux. Cette lecture dure pendant un laps de temps défini, que nous avons estimé à 2 secondes. Une fois ces 2 secondes écoulées, le son s'arrête. Dès que le capteur détecte à nouveau un aimant, un autre son, différent du précédent, est joué.

#include <SoftwareSerial.h>

int sensorPin = A0;
int val;
int ledPin = 4;
bool isPlaying = false;

unsigned long lastStopTime = 0; //variable pour suivre le temps d'arrêt
unsigned long stopDelay = 2000;

int lastTrack = 0; //pour mémoriser le dernier fichier joué

SoftwareSerial mp3Serial(5, 6);

void setup() {
  pinMode(sensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);

  mp3Serial.begin(9600);
  delay(1000);
  select();
  delay(200);
  volume();
}

void loop() {
  val = analogRead(sensorPin);

  if (val < 1023) {  //le capteur détecte un signal
    digitalWrite(ledPin, HIGH);

    if (!isPlaying) {  //si la musique ne joue pas encore
      playRandomTrack();  //joue un fichier aléatoire différent de l'ancien
      isPlaying = true;
      lastStopTime = millis();  //réinitialise le temps d'arrêt
    }
    else {
      resume();  //reprend la musique si elle est déjà en train de jouer
    }
    
  } else {  //le capteur ne détecte pas de signal
    digitalWrite(ledPin, LOW);

    //vérifie si 2 secondes sont écoulées sans signal du capteur
    if (isPlaying && (millis() - lastStopTime >= stopDelay)) {
      stopplay();
      isPlaying = false;
    }
  }

  //si pendant ces 2 secondes, un signal est détecté, on garde la musique en cours
  if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) {
    lastStopTime = millis();  //réinitialise le temps d'attente d'arrêt pour les 2 secondes
  }

  delay(100);
}

void select() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x09);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x02);
  mp3Serial.write(0xEF);
}

void volume() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x06);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x64);
  mp3Serial.write(0xEF);
}

void play() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x03);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0x01);
  mp3Serial.write(0xEF);
}

void resume() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x0D);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0xEF);
}

void stopplay() {
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x16);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(0xEF);
}

void playRandomTrack() {
  int trackNumber;

  //choisir un fichier aléatoire différent du précédent
  do {
    trackNumber = random(1, 4);  //génère un nombre entre 1 et 3
  } while (trackNumber == lastTrack);  //tant que c'est le même que le dernier, on regénère

  //mémorise le dernier fichier joué
  lastTrack = trackNumber;

  //joue le fichier choisi
  mp3Serial.write(0x7E);
  mp3Serial.write(0xFF);
  mp3Serial.write(0x06);
  mp3Serial.write(0x03);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write((uint8_t)0x00);
  mp3Serial.write(trackNumber);  //envoie le numéro du fichier
  mp3Serial.write(0xEF);
}

Conclusion

le résultat

ce qui reste à faire (assemblage sur le chien)

Fisher Price Toy