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

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
(codes)
Ligne 41 : Ligne 41 :
=== Jour 2 : Mercredi 22 janvier ===
=== Jour 2 : Mercredi 22 janvier ===


==== <u>''Programmer le capteur''</u> ====
==== <u>''Programmation du capteur :''</u> ====
Avant de commencer la programmation du système entier, nous avons diviser cette partie en plusieurs sous programme. Tout d'abord nous avons commencer par la programmation du capteur. L'ajout de la LED, nous permet de mieux voir ce qui passe et savoir quand le capteur envoie un signal
Avant de commencer la programmation du système entier, nous avons diviser cette partie en plusieurs sous programme. Tout d'abord nous avons commencer par la programmation du capteur. L'ajout de la LED, nous permet de mieux voir ce qui passe et savoir quand le capteur envoie un signal


[[Fichier:Installation pour programmer le capteur .png|vignette|Installation pour programmer le capteur|centré]]
[[Fichier:Installation pour programmer le capteur .png|vignette|Installation pour programmer le capteur|434x434px]]<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>


==== Impression 3D ====
//définir les pins du capteur et de 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;
int val;
int ledPin = 4;
 
void setup() {
//définir le capteur comme entrée et la LED comme sortie
  pinMode(A0, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  digitalWrite(ledPin, LOW);
}
 
//allumer la LED quand le capteur émet un signal
void loop() {
  val = analogRead(sensorPin);
  if(val<1023){
    digitalWrite(ledPin, HIGH);
  }
  else {
    digitalWrite(ledPin, LOW);
  }
}
</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 56 : Ligne 82 :
=== 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 partie, nous sommes passé à la programmation du lecteur mp3, qui va permettre de lire des fichiers de type mp3 enregistrés dans la carte SD qui se met directement sur le lecteur, en interaction avec le capteur. Pour cela, nous nous sommes dirigées vers la datasheet de ce lecteur pour comprendre son fonctionnement et comment le programmer. En effet, il existe des commandes en hexadécimal pour chaque tâche spécifique du lecteur. Pour notre projet, nous nous sommes intéressées aux commandes pour sélectionner un fichier, le lire, l'arrêter et fixer le volume. Pour vérifier, son bon fonctionnement nous avons tester au premier lieu avec des écouteurs, en voyant que cela fonctionne, nous avons souder des haut-parleurs pour les mettre par la suite dans les oreillettes de notre casque.
[[Fichier:Installation pour programmer le player mp3.png|centré|vignette|Installation pour programmer le player mp3]]
[[Fichier:Installation pour programmer le player mp3.png|vignette|Installation pour programmer le player mp3|340x340px]]<syntaxhighlight lang="c++">
#include <SoftwareSerial.h>
int sensorPin = A0;
int val;
bool isPlaying = false;
 
SoftwareSerial mp3Serial(5, 6);
 
void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
 
  mp3Serial.begin(9600);
  delay(1000);
  select();
  delay(200);
  volume();
}
 
void loop() {
  val = analogRead(sensorPin);
  if(val < 1023) {                  //si le capteur détecte l'aimant
  //le son va se déclencher ou se continuer
    if (!isPlaying) {             
      play();
      isPlaying = true;
    } else {
      resume();
    }
 
  delay(1000);
 
  //Sinon le son s'arrêtera
  } else {
    stopplay();
    isPlaying = false;
  }
}
 
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);
}


==== Finir impression ====
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);
}


==== Assemblage sur le chien ====
void resume() {
[[Fichier:Chien.png|centré|vignette|Fisher price toy]]
  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);
}
</syntaxhighlight>
 
==== ''<u>Finir impression :</u>'' ====
Mettre la photo du casque


=== Jour 4 : Vendredi 24 janvier ===
=== Jour 4 : Vendredi 24 janvier ===
code final<syntaxhighlight lang="cpp">
nous avons finalisé et ajouté des fonctions dans notre programme afin de mieux répondre au cahier des charges. Pour résumer ce que fait le code, dès que le capteur détecte la présence de l'aimant, un son est joué tant que le capteur émet des signaux dans une durée définie, nous avons estimé 2 secondes. une fois les 2 secondes écoulées, le son s'arrête et dès que le capteur re détécte un aimant un autre son est joué différent du précédent.<syntaxhighlight lang="cpp">
#include <SoftwareSerial.h>
#include <SoftwareSerial.h>


Ligne 74 : Ligne 192 :
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 96 : Ligne 214 :
   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 118 : Ligne 236 :
   }
   }


   // 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 184 : Ligne 302 :
   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 199 : Ligne 317 :
   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 205 : Ligne 323 :
</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 du 29 janvier 2025 à 20:37

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 la programmation du système entier, nous avons diviser cette partie en plusieurs sous programme. Tout d'abord nous avons commencer par la programmation du capteur. L'ajout de la LED, nous permet de mieux voir ce qui passe et savoir quand le capteur envoie un signal

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

//définir les pins du capteur et de la LED
int sensorPin = A0;
int val;
int ledPin = 4;

void setup() {
//définir le capteur comme entrée et la LED comme sortie
  pinMode(A0, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  digitalWrite(ledPin, LOW);
}

//allumer la LED quand le capteur émet un signal
void loop() {
  val = analogRead(sensorPin);
  if(val<1023){
    digitalWrite(ledPin, HIGH);
  }
  else {
    digitalWrite(ledPin, LOW);
  }
}

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 partie, nous sommes passé à la programmation du lecteur mp3, qui va permettre de lire des fichiers de type mp3 enregistrés dans la carte SD qui se met directement sur le lecteur, en interaction avec le capteur. Pour cela, nous nous sommes dirigées vers la datasheet de ce lecteur pour comprendre son fonctionnement et comment le programmer. En effet, il existe des commandes en hexadécimal pour chaque tâche spécifique du lecteur. Pour notre projet, nous nous sommes intéressées aux commandes pour sélectionner un fichier, le lire, l'arrêter et fixer le volume. Pour vérifier, son bon fonctionnement nous avons tester au premier lieu avec des écouteurs, en voyant que cela fonctionne, nous avons souder des haut-parleurs pour les mettre par la suite dans les oreillettes de notre casque.

Installation pour programmer le player mp3
#include <SoftwareSerial.h>
int sensorPin = A0;
int val;
bool isPlaying = false;

SoftwareSerial mp3Serial(5, 6);

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

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

void loop() {
  val = analogRead(sensorPin);
  if(val < 1023) {                  //si le capteur détecte l'aimant
  //le son va se déclencher ou se continuer
    if (!isPlaying) {               
      play();
      isPlaying = true;
    } else {
      resume();
    }
  
  delay(1000);
  
  //Sinon le son s'arrêtera
  } else {
    stopplay();
    isPlaying = false;
  }
}

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);
}

Finir impression :

Mettre la photo du casque

Jour 4 : Vendredi 24 janvier

nous avons finalisé et ajouté des fonctions dans notre programme afin de mieux répondre au cahier des charges. Pour résumer ce que fait le code, dès que le capteur détecte la présence de l'aimant, un son est joué tant que le capteur émet des signaux dans une durée définie, nous avons estimé 2 secondes. une fois les 2 secondes écoulées, le son s'arrête et dès que le capteur re détécte un aimant un autre son est joué différent du précédent.

#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