« Art Sciences 2024/2025 E2 » : différence entre les versions
(codes) |
|||
Ligne 41 : | Ligne 41 : | ||
=== Jour 2 : Mercredi 22 janvier === | === Jour 2 : Mercredi 22 janvier === | ||
==== <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| | [[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 === | ||
==== | ==== <u>''Programmation du lecteur mp3 :''</u> ==== | ||
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 | [[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); | |||
} | |||
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); | |||
} | |||
</syntaxhighlight> | |||
==== ''<u>Finir impression :</u>'' ==== | |||
Mettre la photo du casque | |||
=== Jour 4 : Vendredi 24 janvier === | === Jour 4 : Vendredi 24 janvier === | ||
code | 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; // | unsigned long lastStopTime = 0; //variable pour suivre le temps d'arrêt | ||
unsigned long stopDelay = 2000; | unsigned long stopDelay = 2000; | ||
int lastTrack = 0; // | 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) { // | if (val < 1023) { //le capteur détecte un signal | ||
digitalWrite(ledPin, HIGH); | digitalWrite(ledPin, HIGH); | ||
if (!isPlaying) { // | if (!isPlaying) { //si la musique ne joue pas encore | ||
playRandomTrack(); // | playRandomTrack(); //joue un fichier aléatoire différent de l'ancien | ||
isPlaying = true; | isPlaying = true; | ||
lastStopTime = millis(); // | lastStopTime = millis(); //réinitialise le temps d'arrêt | ||
} | } | ||
else { | else { | ||
resume(); // | resume(); //reprend la musique si elle est déjà en train de jouer | ||
} | } | ||
} else { // | } 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 | ||
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 | ||
if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) { | if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) { | ||
lastStopTime = millis(); // | 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 | ||
do { | do { | ||
trackNumber = random(1, 4); // | trackNumber = random(1, 4); //génère un nombre entre 1 et 3 | ||
} while (trackNumber == lastTrack); // | } 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; | lastTrack = trackNumber; | ||
// | //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); // | mp3Serial.write(trackNumber); //envoie le numéro du fichier | ||
mp3Serial.write(0xEF); | mp3Serial.write(0xEF); | ||
} | } | ||
Ligne 205 : | Ligne 323 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == 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.
Suivi jour par jour
Jour 1 : Mardi 21 janvier
Composants utilisés :
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.
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.
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
#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.
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.
#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)